Sujet : Re: The joy of Typography
De : ldo (at) *nospam* nz.invalid (Lawrence D'Oliveiro)
Groupes : alt.folklore.computers comp.os.linux.miscDate : 18. Oct 2024, 22:15:29
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <veuj5h$3fkh5$3@dont-email.me>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
User-Agent : Pan/0.160 (Toresk; )
On Fri, 18 Oct 2024 18:44:26 GMT, Charlie Gibbs wrote:
I wrote some routines to generate my columnar reports in PDF.
On the whole it worked fairly well, but I never found a way to
right-justify a field. Then it became a pain in the ass.
You mean “right-align”, not “right-justify”. Here’s a routine that
does alignment of text within a given line width, based on the current
point, using the current font settings. It can do left-align,
right-align, centre-align and anything in-between.
def align_text(g, text_lines, line_width, align) :
"renders the sequence of text_lines horizontally-aligned within line_width according" \
" to align: 0 for left-aligned, 0.5 for centred, 1.0 for right-aligned; in-between" \
" values also allowed. Returns the bounds of the rendered text."
font_extents = g.font_extents
bounds = Rect.empty
for line in text_lines :
save_pos = g.current_point
extents = g.text_extents(line)
if align != 0 :
text_width = extents.width
g.rel_move_to(((line_width - text_width) * align, 0))
#end if
bounds |= Rect(extents.x_bearing, extents.y_bearing, extents.width, extents.height) + g.current_point
g.show_text(line)
g.move_to(save_pos + Vector(0, font_extents.height))
#end for
return \
bounds
#end align_text
That comes from the “text_align_justify” example in this repo
<
https://gitlab.com/ldo/qahirah_examples>.