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}