X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/halibut/blobdiff_plain/d5bc1c48d6a59db9480a3c8ce43fd8ca8a3b6a21..0dfaac7284d7f1a54e957bba4a881d93328c1630:/bk_paper.c diff --git a/bk_paper.c b/bk_paper.c index c17dfc8..531600c 100644 --- a/bk_paper.c +++ b/bk_paper.c @@ -49,13 +49,10 @@ * * - title pages * - * - ability to import other Type 1 fonts + * - ability to use Type 1 fonts without AFM files * * we need to parse the font to extract its metrics - * * then we pass the font bodily to both PS and PDF so it can - * be included in the output file * * - character substitution for better typography? - * * fi, fl, ffi, ffl ligatures * * use real ellipsis rather than ... * * a hyphen in a word by itself might prefer to be an en-dash * * (Americans might even want a convenient way to use an @@ -1106,6 +1103,7 @@ static para_data *make_para_data(int ptype, int paux, int indent, int rmargin, pdata->rect_type = RECT_NONE; pdata->contents_entry = NULL; pdata->justification = JUST; + pdata->extraflags = 0; /* * Choose fonts for this paragraph. @@ -1458,6 +1456,14 @@ static int utoglyph(font_info const *fi, wchar_t u) { return (u < 0 || u > 0xFFFF ? NOGLYPH : fi->bmp[u]); } +void listfonts(void) { + font_info const *fi; + + init_std_fonts(); + for (fi = all_fonts; fi; fi = fi->next) + printf("%s\n", fi->name); +} + static font_data *make_std_font(font_list *fontlist, char const *name) { font_info const *fi; @@ -1490,7 +1496,7 @@ static font_data *make_std_font(font_list *fontlist, char const *name) fe->free_pos = 0xA1; /* only the top half is free */ f->latest_subfont = fe; - for (i = 0x21; i <= 0x7E; i++) { + for (i = 0x20; i <= 0x7E; i++) { glyph g = utoglyph(fi, i); if (g != NOGLYPH) encode_glyph_at(g, i, fe, i); @@ -2209,6 +2215,7 @@ static int render_text(page_data *page, para_data *pdata, line_data *ldata, FONT_CODE); if (style == word_Code || style == word_WeakCode) flags |= RS_NOLIG; + flags |= pdata->extraflags; if (type == word_Normal) { str = text->text; @@ -2482,6 +2489,7 @@ static para_data *code_paragraph(int indent, word *words, paper_conf *conf) pdata->rect_type = RECT_NONE; pdata->contents_entry = NULL; pdata->justification = LEFT; + pdata->extraflags = RS_NOLIG; for (; words; words = words->next) { wchar_t *t, *e, *start; @@ -2612,6 +2620,7 @@ static para_data *rule_paragraph(int indent, paper_conf *conf) pdata->rect_type = RECT_RULE; pdata->contents_entry = NULL; pdata->justification = LEFT; + pdata->extraflags = 0; standard_line_spacing(pdata, conf);