more
This commit is contained in:
parent
ed70b1458f
commit
8c3c3ffe28
2
Makefile
2
Makefile
|
@ -38,7 +38,7 @@ all : $(TARGETS)
|
||||||
clean ::
|
clean ::
|
||||||
rm -rf doc foo foo2 out.pdf out2.pdf foo.pdf decomp.pdf *.cmt *.cmti \
|
rm -rf doc foo foo2 out.pdf out2.pdf foo.pdf decomp.pdf *.cmt *.cmti \
|
||||||
*.json test/*.pdf debug/*.pdf *.ps *.aux *.idx *.log *.out *.toc *.cut \
|
*.json test/*.pdf debug/*.pdf *.ps *.aux *.idx *.log *.out *.toc *.cut \
|
||||||
*.ttf
|
*.ttf *.ttx
|
||||||
|
|
||||||
DOC_FILES = $(foreach x,$(DOC),$(x).mli )
|
DOC_FILES = $(foreach x,$(DOC),$(x).mli )
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ type t =
|
||||||
subset : Pdfio.bytes;
|
subset : Pdfio.bytes;
|
||||||
tounicode : Pdfio.bytes option}
|
tounicode : Pdfio.bytes option}
|
||||||
|
|
||||||
let dbg = ref false (* text-based debug *)
|
let dbg = ref true (* text-based debug *)
|
||||||
|
|
||||||
let tounicode_preamble =
|
let tounicode_preamble =
|
||||||
"/CIDInit /ProcSet findresource begin\n\
|
"/CIDInit /ProcSet findresource begin\n\
|
||||||
|
@ -168,30 +168,30 @@ let read_loca_table indexToLocFormat numGlyphs b =
|
||||||
| 1 -> Array.init (numGlyphs + 1) (function _ -> read_ulong b)
|
| 1 -> Array.init (numGlyphs + 1) (function _ -> read_ulong b)
|
||||||
| _ -> raise (Pdf.PDFError "Unknown indexToLocFormat in read_loca_table")
|
| _ -> raise (Pdf.PDFError "Unknown indexToLocFormat in read_loca_table")
|
||||||
|
|
||||||
let write_loca_table subset cmap indexToLocFormat bs arr =
|
let write_loca_table subset cmap indexToLocFormat bs loca =
|
||||||
let locnums = null_hash () in
|
let locnums = null_hash () in
|
||||||
|
Hashtbl.add locnums 0 (); (* .notdef *)
|
||||||
iter
|
iter
|
||||||
(fun u ->
|
(fun u ->
|
||||||
let locnum = Hashtbl.find cmap u in
|
let locnum = Hashtbl.find cmap u in
|
||||||
Printf.printf "Unicode %i is at location number %i\n" u locnum;
|
Printf.printf "Unicode %i is at location number %i\n" u locnum;
|
||||||
Hashtbl.add locnums locnum ())
|
Hashtbl.add locnums locnum ())
|
||||||
subset;
|
subset;
|
||||||
let last = ref 0l in
|
let pos = ref 0l in
|
||||||
|
let len = ref 0l in
|
||||||
Array.iteri
|
Array.iteri
|
||||||
(fun i x ->
|
(fun i _ ->
|
||||||
|
let position =
|
||||||
|
match Hashtbl.find locnums i with
|
||||||
|
| () -> pos := i32add !pos !len; len := 0l; let r = !pos in len := i32sub loca.(i + 1) loca.(i); r
|
||||||
|
| exception Not_found -> !pos
|
||||||
|
in
|
||||||
|
Printf.printf "For location %i, writing offset %li in glyph table\n" i position;
|
||||||
match indexToLocFormat with
|
match indexToLocFormat with
|
||||||
| 0 ->
|
| 0 -> putval bs 16 (i32div position 2l)
|
||||||
begin match Hashtbl.find locnums i with
|
| 1 -> putval bs 32 position
|
||||||
| () -> putval bs 16 (i32div x 2l); last := i32div x 2l
|
|
||||||
| exception Not_found -> putval bs 16 !last
|
|
||||||
end
|
|
||||||
| 1 ->
|
|
||||||
begin match Hashtbl.find locnums i with
|
|
||||||
| () -> putval bs 32 x; last := x
|
|
||||||
| exception Not_found -> putval bs 32 !last
|
|
||||||
end
|
|
||||||
| _ -> raise (Pdf.PDFError "Unknown indexToLocFormat in write_loca_table"))
|
| _ -> raise (Pdf.PDFError "Unknown indexToLocFormat in write_loca_table"))
|
||||||
arr
|
loca
|
||||||
|
|
||||||
(* Write the notdef glyf, and any others in the subset *)
|
(* Write the notdef glyf, and any others in the subset *)
|
||||||
let write_glyf_table subset cmap bs mk_b glyfoffset loca =
|
let write_glyf_table subset cmap bs mk_b glyfoffset loca =
|
||||||
|
@ -208,6 +208,7 @@ let write_glyf_table subset cmap bs mk_b glyfoffset loca =
|
||||||
let byteranges = map (fun x -> (loca.(x), loca.(x + 1))) locnums in
|
let byteranges = map (fun x -> (loca.(x), loca.(x + 1))) locnums in
|
||||||
Printf.printf "Byte ranges: "; iter (fun (a, b) -> Printf.printf "(%li, %li) " a b) byteranges; Printf.printf "\n";
|
Printf.printf "Byte ranges: "; iter (fun (a, b) -> Printf.printf "(%li, %li) " a b) byteranges; Printf.printf "\n";
|
||||||
let write_bytes bs a l =
|
let write_bytes bs a l =
|
||||||
|
Printf.printf "glyf: write_bytes %li %li\n" a l;
|
||||||
let b = mk_b (i32toi (i32add glyfoffset a)) in
|
let b = mk_b (i32toi (i32add glyfoffset a)) in
|
||||||
for x = 1 to i32toi l do putval bs 8 (getval_32 b 8) done
|
for x = 1 to i32toi l do putval bs 8 (getval_32 b 8) done
|
||||||
in
|
in
|
||||||
|
@ -354,7 +355,6 @@ let remove_unneeded_tables major minor tables indexToLocFormat subset encoding c
|
||||||
Exit -> (!off, !len)
|
Exit -> (!off, !len)
|
||||||
end
|
end
|
||||||
in
|
in
|
||||||
let mk_b byte_offset = bitbytes_of_input (let i = input_of_bytes data in i.seek_in byte_offset; i) in
|
|
||||||
Array.iter
|
Array.iter
|
||||||
(fun (tag, _, _, _) ->
|
(fun (tag, _, _, _) ->
|
||||||
if !dbg then Printf.printf "Writing %s table\n" (string_of_tag tag);
|
if !dbg then Printf.printf "Writing %s table\n" (string_of_tag tag);
|
||||||
|
|
Loading…
Reference in New Issue