1 /* 2 * Header file for HTMLDOC, a HTML document processing program. 3 * 4 * Copyright 2011-2020 by Michael R Sweet. 5 * Copyright 1997-2010 by Easy Software Products. All rights reserved. 6 * 7 * This program is free software. Distribution and use rights are outlined in 8 * the file "COPYING". 9 */ 10 11 /* 12 * Include necessary headers. 13 */ 14 15 #include <stdio.h> 16 #include <stdlib.h> 17 #include <errno.h> 18 19 #include "html.h" 20 #include "image.h" 21 #include "debug.h" 22 #include "progress.h" 23 24 #ifdef HAVE_LIBFLTK 25 # include "gui.h" 26 #endif /* HAVE_LIBFLTK */ 27 28 #ifdef WIN32 /* Include all 8 million Windows header files... */ 29 # include <windows.h> 30 #endif /* WIN32 */ 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif /* __cplusplus */ 35 36 37 /* 38 * Macro to get rid of "unreferenced variable xyz" warnings... 39 */ 40 41 #define REF(x) (void)x; 42 43 44 /* 45 * Output type... 46 */ 47 48 enum 49 { 50 OUTPUT_BOOK, 51 OUTPUT_CONTINUOUS, 52 OUTPUT_WEBPAGES 53 }; 54 55 56 /* 57 * PDF constants... 58 */ 59 60 enum /* PDF page mode */ 61 { 62 PDF_DOCUMENT, 63 PDF_OUTLINE, 64 PDF_FULLSCREEN 65 }; 66 67 enum /* PDF page layout */ 68 { 69 PDF_SINGLE, 70 PDF_ONE_COLUMN, 71 PDF_TWO_COLUMN_LEFT, 72 PDF_TWO_COLUMN_RIGHT 73 }; 74 75 enum /* PDF first page */ 76 { 77 PDF_PAGE_1, 78 PDF_TOC, 79 PDF_CHAPTER_1 80 }; 81 82 enum /* PDF transition effect */ 83 { 84 PDF_NONE, 85 PDF_BOX_INWARD, 86 PDF_BOX_OUTWARD, 87 PDF_DISSOLVE, 88 PDF_GLITTER_DOWN, 89 PDF_GLITTER_DOWN_RIGHT, 90 PDF_GLITTER_RIGHT, 91 PDF_HORIZONTAL_BLINDS, 92 PDF_HORIZONTAL_SWEEP_INWARD, 93 PDF_HORIZONTAL_SWEEP_OUTWARD, 94 PDF_VERTICAL_BLINDS, 95 PDF_VERTICAL_SWEEP_INWARD, 96 PDF_VERTICAL_SWEEP_OUTWARD, 97 PDF_WIPE_DOWN, 98 PDF_WIPE_LEFT, 99 PDF_WIPE_RIGHT, 100 PDF_WIPE_UP 101 }; 102 103 enum /* PDF document permissions */ 104 { 105 PDF_PERM_PRINT = 4, 106 PDF_PERM_MODIFY = 8, 107 PDF_PERM_COPY = 16, 108 PDF_PERM_ANNOTATE = 32 109 }; 110 111 112 /* 113 * Globals... 114 */ 115 116 #ifdef _HTMLDOC_CXX_ 117 # define VAR 118 # define VALUE(x) =x 119 # define NULL3 ={0,0,0} 120 #else 121 # define VAR extern 122 # define VALUE(x) 123 # define NULL3 124 #endif /* _HTML_DOC_CXX_ */ 125 126 VAR int Verbosity VALUE(0); /* Verbosity */ 127 VAR int OverflowErrors VALUE(0); /* Show errors on overflow */ 128 VAR int StrictHTML VALUE(0); /* Do strict HTML checking */ 129 VAR int CGIMode VALUE(0); /* Running as CGI? */ 130 VAR int Errors VALUE(0); /* Number of errors */ 131 VAR int Compression VALUE(1); /* Non-zero means compress PDFs */ 132 VAR int TitlePage VALUE(1), /* Need a title page */ 133 TocLevels VALUE(3), /* Number of table-of-contents levels */ 134 TocLinks VALUE(1), /* Generate links */ 135 TocNumbers VALUE(0), /* Generate heading numbers */ 136 TocDocCount VALUE(0); /* Number of chapters */ 137 VAR int OutputType VALUE(OUTPUT_BOOK); 138 /* Output a "book", etc. */ 139 VAR char OutputPath[1024] VALUE(""); /* Output directory/name */ 140 VAR int OutputFiles VALUE(0), /* Generate multiple files? */ 141 OutputColor VALUE(1); /* Output color images */ 142 VAR int OutputJPEG VALUE(0); /* JPEG compress images? */ 143 VAR int PDFVersion VALUE(13); /* Version of PDF to support */ 144 VAR int PDFPageMode VALUE(PDF_OUTLINE), 145 /* PageMode attribute */ 146 PDFPageLayout VALUE(PDF_SINGLE), 147 /* PageLayout attribute */ 148 PDFFirstPage VALUE(PDF_CHAPTER_1), 149 /* First page */ 150 PDFEffect VALUE(PDF_NONE);/* Page transition effect */ 151 VAR double PDFEffectDuration VALUE(1.0), /* Page effect duration */ 152 PDFPageDuration VALUE(10.0); /* Page duration */ 153 VAR int Encryption VALUE(0), /* Encrypt the PDF file? */ 154 Permissions VALUE(-4); /* File permissions? */ 155 VAR char OwnerPassword[33] VALUE(""), /* Owner password */ 156 UserPassword[33] VALUE(""); /* User password */ 157 VAR int EmbedFonts VALUE(1); /* Embed fonts? */ 158 VAR int PSLevel VALUE(2), /* Language level (0 for PDF) */ 159 PSCommands VALUE(0), /* Output PostScript commands? */ 160 XRXComments VALUE(0); /* Output Xerox comments? */ 161 VAR int PageWidth VALUE(595), /* Page width in points */ 162 PageLength VALUE(792), /* Page length in points */ 163 PageLeft VALUE(72), /* Left margin */ 164 PageRight VALUE(36), /* Right margin */ 165 PageTop VALUE(36), /* Top margin */ 166 PageBottom VALUE(36), /* Bottom margin */ 167 PagePrintWidth, /* Printable width */ 168 PagePrintLength, /* Printable length */ 169 PageDuplex VALUE(0), /* Adjust margins/pages for duplexing? */ 170 Landscape VALUE(0), /* Landscape orientation? */ 171 NumberUp VALUE(1); /* Number-up pages */ 172 173 VAR typeface_t HeadFootType VALUE(TYPE_HELVETICA); 174 /* Typeface for header & footer */ 175 VAR style_t HeadFootStyle VALUE(STYLE_NORMAL); 176 /* Type style */ 177 VAR double HeadFootSize VALUE(11.0f); /* Size of header & footer */ 178 179 VAR char *Header[3] NULL3, /* Header for regular pages */ 180 *Header1[3] NULL3, /* Header for first pages */ 181 *TocHeader[3] NULL3, /* Header for TOC pages */ 182 *Footer[3] NULL3, /* Regular page footer */ 183 *TocFooter[3] NULL3, /* Footer for TOC pages */ 184 TocTitle[1024] VALUE("Table of Contents"); 185 /* TOC title string */ 186 187 VAR char TitleImage[1024] VALUE(""), /* Title page image */ 188 Letterhead[1024] VALUE(""), /* Letterhead image */ 189 LogoImage[1024] VALUE(""), /* Logo image */ 190 BodyColor[255] VALUE(""), /* Body color */ 191 BodyImage[1024] VALUE(""), /* Body image */ 192 LinkColor[255] VALUE(""); /* Link color */ 193 194 VAR char HFImage[MAX_HF_IMAGES][1024] /* Header/footer images */ 195 # ifdef _HTMLDOC_CXX_ 196 = { "" } 197 # endif /* _HTMLDOC_CXX_ */ 198 ; 199 200 VAR int LinkStyle VALUE(1); /* 1 = underline, 0 = plain */ 201 VAR int Links VALUE(1); /* 1 = generate links, 0 = no links */ 202 VAR char Path[2048] VALUE(""), /* Search path */ 203 Proxy[1024] VALUE(""); /* Proxy URL */ 204 205 VAR const char *PDFModes[3] /* Mode strings */ 206 # ifdef _HTMLDOC_CXX_ 207 = { "document", "outline", "fullscreen" } 208 # endif /* _HTMLDOC_CXX_ */ 209 ; 210 VAR const char *PDFLayouts[4] /* Layout strings */ 211 # ifdef _HTMLDOC_CXX_ 212 = { "single", "one", "twoleft", "tworight" } 213 # endif /* _HTMLDOC_CXX_ */ 214 ; 215 VAR const char *PDFPages[3] /* First page strings */ 216 # ifdef _HTMLDOC_CXX_ 217 = { "p1", "toc", "c1" } 218 # endif /* _HTMLDOC_CXX_ */ 219 ; 220 VAR const char *PDFEffects[17] /* Effect strings */ 221 # ifdef _HTMLDOC_CXX_ 222 = { "none", "bi", "bo", "d", "gd", "gdr", "gr", "hb", "hsi", "hso", 223 "vb", "vsi", "vso", "wd", "wl", "wr", "wu" } 224 # endif /* _HTMLDOC_CXX_ */ 225 ; 226 227 #ifdef HAVE_LIBFLTK 228 VAR GUI *BookGUI VALUE(NULL); /* GUI for book files */ 229 # ifdef WIN32 /* Editor for HTML files */ 230 VAR char HTMLEditor[1024] VALUE("notepad.exe \"%s\""); 231 # elif defined(__APPLE__) 232 VAR char HTMLEditor[1024] VALUE("bbedit %s"); 233 # elif defined(__linux) 234 VAR char HTMLEditor[1024] VALUE("gedit %s"); 235 # else 236 VAR char HTMLEditor[1024] VALUE("nedit %s"); 237 # endif /* WIN32 */ 238 VAR int Tooltips VALUE(0); /* Show tooltips? */ 239 #endif /* HAVE_LIBFLTK */ 240 241 242 /* 243 * Prototypes... 244 */ 245 246 extern int pspdf_export(tree_t *document, tree_t *toc); 247 248 extern int epub_export(tree_t *document, tree_t *toc); 249 250 extern int html_export(tree_t *document, tree_t *toc); 251 252 extern int htmlsep_export(tree_t *document, tree_t *toc); 253 254 extern tree_t *toc_build(tree_t *tree); 255 256 extern void get_color(const uchar *c, float *rgb, int defblack = 1); 257 extern const char *get_fmt(char **formats); 258 extern void get_format(const char *fmt, char **formats); 259 extern int get_measurement(const char *s, float mul = 1.0f); 260 extern void set_page_size(const char *size); 261 262 extern void prefs_load(void); 263 extern void prefs_save(void); 264 extern void prefs_set_paths(void); 265 266 extern char *format_number(int n, char f); 267 268 #ifdef __cplusplus 269 } 270 #endif /* __cplusplus */ 271