code wiki / _hdl_build / _pdf_text_authored.nx
_pdf_text_authored.nx source
↩ module page · 24 lines · 1083 B
1// AUTHORED BY THE NISHI BUILDER (pdf-text template) -- extract (...) text from a PDF content stream
2import "nx_syscalls.nx"
3func pdf_text(s: *u8, sl: i64, out: *u8) -> i64 {
4 var op: i64=0; var i: i64=0
5 while i<sl {
6 if s[i]==0x28 as u8 {
7 i=i+1; var instr: i64=1
8 while instr==1 {
9 if i>=sl { instr=0 } else { if s[i]==0x5c as u8 { i=i+1; if i<sl { out[op]=s[i]; op=op+1; i=i+1 } } else { if s[i]==0x29 as u8 { instr=0; i=i+1 } else { out[op]=s[i]; op=op+1; i=i+1 } } }
10 }
11 } else { i=i+1 }
12 }
13 return op
14}
15func main() -> i64 {
16 let ls: *i64=sys_mmap(8) as *i64; let s: *u8=sys_read_file("/tmp/cstream" as *u8, ls)
17 let lt: *i64=sys_mmap(8) as *i64; let t: *u8=sys_read_file("/tmp/ctext" as *u8, lt)
18 if (s as i64)==0 { sys_exit(2) } if (t as i64)==0 { sys_exit(2) }
19 let out: *u8=sys_mmap(4096)
20 let n: i64=pdf_text(s, ls[0], out)
21 var ok: i64=1; if n!=lt[0] { ok=0 } var i: i64=0; while i<lt[0] { if out[i]!=t[i] { ok=0 } i=i+1 }
22 if ok==1 { sys_exit(0) } sys_exit(1)
23 return 1
24}