nigig-org/crates/apps/pdf/pdf-graphics/tests/scratch_gwg.rs
andodeki 7daf48e14c
Some checks failed
nigig-site / Owned paths and honest test contracts (push) Has been cancelled
nigig-site / Cargo check-all-targets (push) Has been cancelled
nigig-site / Cargo clippy-site-owned (push) Has been cancelled
nigig-site / Cargo contained-media-export-fixtures (push) Has been cancelled
nigig-site / Cargo containment-storage-crypto (push) Has been cancelled
nigig-site / Cargo core-clippy (push) Has been cancelled
nigig-site / Cargo core-contracts (push) Has been cancelled
nigig-site / Cargo integration-non-live (push) Has been cancelled
nigig-site / Cargo production-dependency-containment (push) Has been cancelled
nigig-site / Cargo site02-crypto (push) Has been cancelled
nigig-site / Cargo site02-repository (push) Has been cancelled
nigig-site / Cargo site02-store (push) Has been cancelled
nigig-site / Cargo unit (push) Has been cancelled
nigig-site / SITE-02 native provider/filesystem (macos-latest) (push) Has been cancelled
nigig-site / SITE-02 native provider/filesystem (ubuntu-latest) (push) Has been cancelled
nigig-site / SITE-02 native provider/filesystem (windows-latest) (push) Has been cancelled
nigig-site / SITE-02 desktop runtime and normal shutdown (push) Has been cancelled
nigig-site / SITE-02 migration, recovery, and fault corpus (push) Has been cancelled
nigig-site / Media limits (explicitly skipped until enabled) (push) Has been cancelled
nigig-site / Real server interoperability (explicitly skipped until enabled) (push) Has been cancelled
nigig-site / Security and supply-chain baseline (push) Has been cancelled
PDF engine / engine (push) Has been cancelled
PDF engine / makepad-integration (push) Has been cancelled
PDF engine / fuzz (push) Has been cancelled
repo hygiene / hygiene (push) Has been cancelled
nigig-site / Release capability gate (push) Has been cancelled
fix(site-core): seed loopback cursor from base so resumed pushes advance correctly
2026-09-28 03:14:28 +03:00

73 lines
3.4 KiB
Rust

// Scratch: decoded-space run dump. Deleted after run.
use std::collections::HashMap;
use nigig_pdf_cos::PdfObj;
use nigig_pdf_graphics::content::parse_content_stream;
use nigig_pdf_graphics::recording::{RecordingDevice, RenderCommand};
use nigig_pdf_graphics::transparency::resolve_page_ext_gstates;
use nigig_pdf_graphics::font::build_font_from_dict;
use nigig_pdf_graphics::colorspace::resolve_page_color_spaces;
#[test]
fn probe() {
let path = "/Users/aok/Projects/rustdev/CratesCode/dart-pdf/test_corpora/ghent/2-SPOT/GWG030_Gray_K_black_OP_X1.pdf";
let bytes = std::fs::read(path).expect("fixture");
let mut doc = nigig_pdf_document::PdfDocument::parse(&bytes).expect("parses");
let page = doc.page(0).expect("page");
let content = page.content_data.clone();
let page_ref = doc.page_object_ref(0).expect("ref");
let page_obj = doc.resolve_ref(page_ref).expect("obj");
let resources = doc.resolve(page_obj.as_dict().expect("d").get("Resources").expect("res")).expect("res2");
let res = resources.as_dict().expect("dict").clone();
let mut device = RecordingDevice::new();
if let Some(fonts) = res.get("Font") {
if let Ok(fdict) = doc.resolve(fonts) {
if let Some(fdict) = fdict.as_dict() {
for (name, fobj) in fdict.map.iter() {
if let Ok(f) = doc.resolve(fobj) {
if let Some(fd) = f.as_dict() {
let mut r = |o: &PdfObj| doc.resolve(o);
if let Ok(info) = build_font_from_dict(fd, &mut r) {
device.font_widths.insert(name.clone(), info.widths);
}
}
}
}
}
}
}
let mut n_space_ok = 0; let mut n_space_err = 0;
let map: HashMap<String, PdfObj> = page.color_spaces.clone();
for (name, space) in resolve_page_color_spaces(&map) {
match space {
Ok(s) => { n_space_ok += 1; device.register_color_space(&name, s); }
Err(e) => { n_space_err += 1; eprintln!("space {name} ERR {e:?}"); }
}
}
eprintln!("spaces ok={n_space_ok} err={n_space_err}");
let (states, errs) = resolve_page_ext_gstates(&page.ext_gstates);
eprintln!("gstates={} errs={}", states.len(), errs.len());
for (name, state) in states {
device.register_ext_gstate(&name, state);
}
let ops = parse_content_stream(&content).expect("ops");
nigig_pdf_graphics::content::interpret_ops(&ops, &mut device).expect("interpret");
eprintln!("color_errors={}", device.color_errors().len());
for e in device.color_errors().iter().take(4) { eprintln!(" cerr {e:?}"); }
let mut fill_op = false; let mut saved = vec![]; let mut color = [0.0,0.0,0.0,1.0];
let mut n_text = 0; let mut n_flag = 0;
for c in &device.commands {
match c {
RenderCommand::Save => saved.push(fill_op),
RenderCommand::Restore => { fill_op = saved.pop().unwrap_or(false); }
RenderCommand::SetOverprint { fill, .. } => fill_op = *fill,
RenderCommand::SetFillColor(col) => color = *col,
RenderCommand::ShowTextWithMetrics { decoded, .. } => {
n_text += 1;
if fill_op { n_flag += 1; if n_flag <= 8 { eprintln!("flag text {decoded:?} color={color:?}"); } }
}
_ => {}
}
}
eprintln!("texts={n_text} flag={n_flag}");
panic!("show");
}