Tidy up cpdftypeset to beign fontpacks

This commit is contained in:
John Whitington
2023-07-10 14:36:34 +01:00
parent 6cbfc84150
commit 62877d1ac9
3 changed files with 17 additions and 27 deletions

View File

@ -111,9 +111,9 @@ let typeset_table_of_contents ~font ~fontsize ~title ~bookmark pdf =
let text = shorten_text widths (textgap -. fontsize *. 3.) text in
let space = textgap -. Cpdftype.width_of_string widths text in
[Cpdftype.BeginDest mark.Pdfmarks.target;
Cpdftype.HGlue {Cpdftype.glen = indent; Cpdftype.gstretch = 0.};
Cpdftype.HGlue indent;
Cpdftype.Text text;
Cpdftype.HGlue {Cpdftype.glen = space; Cpdftype.gstretch = 0.};
Cpdftype.HGlue space;
Cpdftype.Text label;
Cpdftype.EndDest;
Cpdftype.NewLine])
@ -121,7 +121,7 @@ let typeset_table_of_contents ~font ~fontsize ~title ~bookmark pdf =
in
let toc_pages =
let title =
let glue = Cpdftype.VGlue {glen = fontsize *. 2.; gstretch = 0.} in
let glue = Cpdftype.VGlue (fontsize *. 2.) in
if title = "" then [] else
flatten
(map

View File

@ -6,16 +6,11 @@
be continued... *)
open Pdfutil
(* Glue *)
type glue =
{glen : float;
gstretch : float}
(* Main type *)
type element =
Text of char list (* charcodes 0..255 *)
| HGlue of glue
| VGlue of glue
| HGlue of float
| VGlue of float
| NewLine
| NewPage
| Font of (Pdftext.font * float)
@ -25,7 +20,7 @@ type element =
let to_string_elt = function
| Text t -> implode t
| HGlue {glen} -> "HGLUE" ^ string_of_float glen
| HGlue len -> "HGLUE" ^ string_of_float len
| VGlue _ -> "VGLUE"
| NewLine -> "NewLine"
| NewPage -> "NewPage"
@ -126,8 +121,8 @@ let layout lmargin rmargin papersize i =
if needs_newline then layout_element NewLine;
if remaining_text <> [] then layout_element (Text remaining_text)
end
| HGlue {glen} as glue ->
s.xpos <- s.xpos +. glen;
| HGlue len as glue ->
s.xpos <- s.xpos +. len;
o := glue :: !o;
if s.xpos >= xpos_max then layout_element NewLine
| NewLine ->
@ -147,8 +142,8 @@ let paginate tmargin bmargin papersize i =
s.ypos <- tmargin;
let max_ypos = height -. bmargin in
let rec process = function
| VGlue {glen} as glue ->
s.ypos <- s.ypos +. glen;
| VGlue len as glue ->
s.ypos <- s.ypos +. len;
o := glue :: !o;
if s.ypos > max_ypos then process NewPage
| NewLine ->
@ -242,13 +237,13 @@ let typeset lmargin rmargin tmargin bmargin papersize pdf i =
s.fontsize <- fontsize;
thispagefontnums := objnum :: !thispagefontnums;
ops := Pdfops.Op_Tf (name, fontsize)::!ops
| HGlue {glen} ->
s.xpos <- s.xpos +. glen
| VGlue {glen} ->
s.ypos <- s.ypos +. glen
| HGlue len ->
s.xpos <- s.xpos +. len
| VGlue len ->
s.ypos <- s.ypos +. len
| NewLine ->
s.xpos <- lmargin;
typeset_element (VGlue {glen = s.fontsize *. 1.3; gstretch = 0.})
typeset_element (VGlue (s.fontsize *. 1.3))
| NewPage ->
write_page ();
thispagefontnums := [];

View File

@ -1,13 +1,8 @@
(** Experimental typesetter for cpdf *)
type glue =
{glen : float;
gstretch : float}
type element =
Text of char list
| HGlue of glue
| VGlue of glue
| HGlue of float
| VGlue of float
| NewLine
| NewPage
| Font of (Pdftext.font * float)