summaryrefslogtreecommitdiff
path: root/pdf/pdf_debug.c
diff options
context:
space:
mode:
Diffstat (limited to 'pdf/pdf_debug.c')
-rw-r--r--pdf/pdf_debug.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/pdf/pdf_debug.c b/pdf/pdf_debug.c
new file mode 100644
index 00000000..9d7f1f56
--- /dev/null
+++ b/pdf/pdf_debug.c
@@ -0,0 +1,91 @@
+#include "fitz.h"
+#include "mupdf.h"
+
+/*
+ * Enable logging by setting environment variable MULOG to:
+ * (a)ll or a combination of
+ * (x)ref (r)src (f)ont (i)mage (s)hade (p)age
+ *
+ * eg. MULOG=fis ./x11pdf mytestfile.pdf
+ */
+
+enum
+{
+ PDF_LXREF = 1,
+ PDF_LRSRC = 2,
+ PDF_LFONT = 4,
+ PDF_LIMAGE = 8,
+ PDF_LSHADE = 16,
+ PDF_LPAGE = 32
+};
+
+static inline void pdflog(int tag, char *name, char *fmt, va_list ap)
+{
+ static int flags = 128;
+ static int level = 0;
+ static int push = 1;
+ int i;
+
+ if (flags == 128)
+ {
+ char *s = getenv("MULOG");
+ flags = 0;
+ if (s)
+ {
+ if (strstr(s, "a"))
+ flags |= 0xffff;
+ if (strstr(s, "x"))
+ flags |= PDF_LXREF;
+ if (strstr(s, "r"))
+ flags |= PDF_LRSRC;
+ if (strstr(s, "f"))
+ flags |= PDF_LFONT;
+ if (strstr(s, "i"))
+ flags |= PDF_LIMAGE;
+ if (strstr(s, "s"))
+ flags |= PDF_LSHADE;
+ if (strstr(s, "p"))
+ flags |= PDF_LPAGE;
+ }
+ }
+
+ if (!(flags & tag))
+ return;
+
+ if (strchr(fmt, '}'))
+ level --;
+
+ if (push)
+ {
+ printf("%s: ", name);
+ for (i = 0; i < level; i++)
+ printf("\t");
+ }
+
+ vprintf(fmt, ap);
+
+ if (strchr(fmt, '{'))
+ level ++;
+
+ push = !!strchr(fmt, '\n');
+
+ fflush(stdout);
+}
+
+void pdf_logxref(char *fmt, ...)
+{va_list ap;va_start(ap,fmt);pdflog(PDF_LXREF,"xref",fmt,ap);va_end(ap);}
+
+void pdf_logrsrc(char *fmt, ...)
+{va_list ap;va_start(ap,fmt);pdflog(PDF_LRSRC,"rsrc",fmt,ap);va_end(ap);}
+
+void pdf_logfont(char *fmt, ...)
+{va_list ap;va_start(ap,fmt);pdflog(PDF_LFONT,"font",fmt,ap);va_end(ap);}
+
+void pdf_logimage(char *fmt, ...)
+{va_list ap;va_start(ap,fmt);pdflog(PDF_LIMAGE,"imag",fmt,ap);va_end(ap);}
+
+void pdf_logshade(char *fmt, ...)
+{va_list ap;va_start(ap,fmt);pdflog(PDF_LSHADE,"shad",fmt,ap);va_end(ap);}
+
+void pdf_logpage(char *fmt, ...)
+{va_list ap;va_start(ap,fmt);pdflog(PDF_LPAGE,"page",fmt,ap);va_end(ap);}