Back to index

texmacs  1.0.7.15
page_type.cpp
Go to the documentation of this file.
00001 
00002 /******************************************************************************
00003 * MODULE     : page_type.cpp
00004 * DESCRIPTION: Data base for page sizes and default settings
00005 * COPYRIGHT  : (C) 1999  Joris van der Hoeven
00006 *******************************************************************************
00007 * This software falls under the GNU general public license version 3 or later.
00008 * It comes WITHOUT ANY WARRANTY WHATSOEVER. For details, see the file LICENSE
00009 * in the root directory or <http://www.gnu.org/licenses/gpl-3.0.html>.
00010 ******************************************************************************/
00011 
00012 #include "vars.hpp"
00013 #include "hashmap.hpp"
00014 
00015 static bool page_data_base_initizalized= false;
00016 static hashmap<string,string> page_data_base ("");
00017 
00018 static void
00019 INIT (string type, string width, string height, string standard_format,
00020       string por_parw, string por_hmargin, string por_vmargin,
00021       string lan_parw, string lan_hmargin, string lan_vmargin)
00022 {
00023   page_data_base (type * "-P-standard")= standard_format;
00024   page_data_base (type * "-P-" * PAGE_WIDTH) = width;
00025   page_data_base (type * "-P-" * PAGE_HEIGHT)= height;
00026   page_data_base (type * "-P-" * PAR_WIDTH)= por_parw;
00027   page_data_base (type * "-P-" * PAGE_ODD)= por_hmargin;
00028   page_data_base (type * "-P-" * PAGE_EVEN)= por_hmargin;
00029   page_data_base (type * "-P-" * PAGE_RIGHT)= por_hmargin;
00030   page_data_base (type * "-P-" * PAGE_TOP)= por_vmargin;
00031   page_data_base (type * "-P-" * PAGE_BOT)= por_vmargin;
00032 
00033   page_data_base (type * "-L-standard")= standard_format;
00034   page_data_base (type * "-L-" * PAGE_WIDTH) = height;
00035   page_data_base (type * "-L-" * PAGE_HEIGHT)= width;
00036   page_data_base (type * "-L-" * PAR_WIDTH)= lan_parw;
00037   page_data_base (type * "-L-" * PAGE_ODD)= lan_hmargin;
00038   page_data_base (type * "-L-" * PAGE_EVEN)= lan_hmargin;
00039   page_data_base (type * "-L-" * PAGE_RIGHT)= lan_hmargin;
00040   page_data_base (type * "-L-" * PAGE_TOP)= lan_vmargin;
00041   page_data_base (type * "-L-" * PAGE_BOT)= lan_vmargin;
00042 }
00043 
00044 /* this list should contain at least all the paper sizes known to
00045    the libpaperg library
00046 */
00047 static void
00048 INIT_ALL () {
00049   INIT ("10x14", "254mm", "356mm", "yes",
00050         "180mm", "37mm", "37mm",
00051         "285mm", "37mm", "37mm");
00052   INIT ("11x17", "279mm", "432mm", "yes",
00053         "190mm", "40mm", "40mm",
00054         "300mm", "40mm", "40mm");
00055   INIT ("a0", "840mm", "1188mm", "yes",
00056         "600mm", "120mm", "120mm",
00057         "948mm", "120mm", "120mm");
00058   INIT ("a1", "594mm", "840mm", "yes",
00059         "414mm", "90mm", "90mm",
00060         "660mm", "90mm", "90mm");
00061   INIT ("a2", "420mm", "594mm", "yes",
00062         "300mm",  "60mm",  "60mm",
00063         "474mm",  "60mm",  "60mm");
00064   INIT ("a3", "297mm", "420mm", "yes",
00065         "207mm",  "45mm",  "45mm",
00066         "330mm",  "45mm",  "45mm");
00067   INIT ("a4", "210mm", "297mm", "yes",
00068         "150mm",  "30mm",  "30mm",
00069         "237mm",  "30mm",  "30mm");
00070   INIT ("a5", "148mm", "210mm", "yes",
00071         "108mm",  "20mm",  "20mm",
00072         "170mm",  "20mm",  "20mm");
00073   INIT ("a6", "105mm", "149mm", "yes",
00074         "75mm", "15mm", "15mm",
00075         "118mm", "15mm", "15mm");
00076   INIT ("a7", "74mm",  "105mm", "yes",
00077         "54mm", "10mm", "10mm",
00078         "85mm", "10mm", "10mm");
00079   INIT ("a8", "52mm", "74mm", "yes",
00080         "38mm", "8mm", "8mm",
00081         "59mm", "8mm", "8mm");
00082   INIT ("a9", "37mm", "52mm", "yes",
00083         "27mm", "5mm", "5mm",
00084         "42mm", "5mm", "5mm");
00085   INIT ("a10", "26mm", "37mm", "yes",
00086         "19mm", "4mm", "4mm",
00087         "30mm", "4mm", "4mm");
00088   INIT ("archA", "229mm", "305mm", "yes",
00089         "170mm",  "30mm",  "30mm",
00090         "260mm",  "30mm",  "30mm");
00091   INIT ("archB", "305mm", "457mm", "yes",
00092         "210mm",  "45mm",  "45mm",
00093         "340mm",  "45mm",  "45mm");
00094   INIT ("archC",  "457mm", "610mm", "yes",
00095         "340mm", "60mm", "60mm",
00096         "520mm", "60mm", "60mm");
00097   INIT ("archD", "610mm", "914mm", "yes",
00098         "420mm", "90mm", "90mm",
00099         "680mm", "90mm", "90mm");
00100   INIT ("archE", "914mm", "1219mm", "yes",
00101         "680mm", "120mm", "120mm",
00102         "1040mm", "120mm", "120mm");
00103   INIT ("b0", "1000mm", "1414mm", "yes",
00104         "720mm", "140mm", "140mm",
00105         "1130mm", "140mm", "140mm");
00106   INIT ("b1", "707mm", "1000mm", "yes",
00107         "505mm", "100mm", "100mm",
00108         "800mm", "100mm", "100mm");
00109   INIT ("b2", "500mm", "707mm", "yes",
00110         "360mm", "70mm", "70mm",
00111         "565mm", "70mm", "70mm");
00112   INIT ("b3", "352mm", "500mm", "yes",
00113         "252mm",  "50mm",  "50mm",
00114         "400mm",  "50mm",  "50mm");
00115   INIT ("b4", "250mm", "352mm", "yes",
00116         "180mm",  "35mm",  "35mm",
00117         "282mm",  "35mm",  "35mm");
00118   INIT ("b5", "176mm", "250mm", "yes",
00119         "126mm",  "25mm",  "25mm",
00120         "200mm",  "25mm",  "25mm");
00121   INIT ("b6", "125mm", "176mm", "yes",
00122         "95mm",   "15mm",  "15mm",
00123         "146mm",  "15mm",  "15mm");
00124   INIT ("c5", "162mm",  "232mm", "yes",
00125         "115mm",  "25mm",  "25mm",
00126         "185mm",  "25mm",  "25mm");
00127   INIT ("Comm10", "105mm", "241mm", "yes",
00128         "75mm", "15mm", "15mm",
00129         "118mm", "15mm", "15mm");
00130   INIT ("csheet", "432mm", "559mm", "yes",
00131         "330mm", "60mm", "60mm",
00132         "510mm", "60mm", "60mm");
00133   INIT ("DL", "110mm", "220mm", "yes",
00134         "75mm", "15mm", "15mm",
00135         "118mm", "15mm", "15mm");
00136   INIT ("dsheet", "559mm", "864mm", "yes",
00137         "384mm", "90mm", "90mm",
00138         "620mm", "90mm", "90mm");
00139   INIT ("esheet", "864mm", "1118mm", "yes",
00140         "620mm", "120mm", "120mm",
00141         "970mm", "120mm", "120mm");
00142   INIT ("executive", "7.25in", "10.5in", "yes",
00143         "5.25in", "1in",   "1in",
00144         "8.5in",  "1in",   "1in");
00145   INIT ("flsa", "216mm", "330mm", "yes",
00146         "150mm",  "30mm",  "30mm",
00147         "237mm",  "30mm",  "30mm");
00148   INIT ("flse", "216mm", "330mm", "yes",
00149         "150mm",  "30mm",  "30mm",
00150         "237mm",  "30mm",  "30mm");
00151   INIT ("folio", "216mm", "330mm", "yes",
00152         "150mm",  "30mm",  "30mm",
00153         "237mm",  "30mm",  "30mm");
00154   INIT ("halfexecutive", "133mm", "184mm", "yes",
00155         "95mm",   "15mm",  "15mm",
00156         "146mm",  "15mm",  "15mm");
00157   INIT ("halfletter", "140mm", "216mm", "yes",
00158         "100mm",   "15mm",  "15mm",
00159         "155mm",  "15mm",  "15mm");
00160   INIT ("ledger", "432mm", "279mm", "yes",
00161         "330mm", "60mm", "60mm",
00162         "510mm", "60mm", "60mm");
00163   INIT ("legal", "8.5in", "14in", "yes",
00164         "6.5in",  "1in",   "1in",
00165         "12in",   "1in",   "1in");
00166   INIT ("letter", "8.5in", "11in", "yes",
00167         "6.5in",  "1in",   "1in",
00168         "9in",    "1in",   "1in");
00169   INIT ("lecture note", "15.5cm", "23.5cm", "no",
00170         "121mm",  "17mm",  "17mm",
00171         "201mm",  "17mm",  "17mm");
00172   INIT ("Monarch", "98mm",  "190mm", "yes",
00173         "75mm", "15mm", "15mm",
00174         "118mm", "15mm", "15mm");
00175   INIT ("note",  "216mm", "279mm", "yes",
00176         "150mm",  "30mm",  "30mm",
00177         "237mm",  "30mm",  "30mm");
00178   INIT ("quarto", "215mm", "275mm", "yes",
00179         "150mm",  "30mm",  "30mm",
00180         "237mm",  "30mm",  "30mm");
00181   INIT ("statement", "140mm", "216mm", "yes",
00182         "108mm",  "20mm",  "20mm",
00183         "170mm",  "20mm",  "20mm");
00184   INIT ("tabloid", "279mm", "432mm", "yes",
00185         "200mm",  "45mm",  "45mm",
00186         "315mm",  "45mm",  "45mm");
00187   page_data_base_initizalized= true;
00188 }
00189 
00190 string
00191 page_get_feature (string type, string feature, bool landscape) {
00192   if (!page_data_base_initizalized) INIT_ALL ();
00193   string s= type * (landscape? string ("-L-"): string ("-P-")) * feature;
00194   if (page_data_base->contains (s)) return page_data_base [s];
00195   if (type == "a4") return "3cm";
00196   return page_get_feature ("a4", feature, landscape);
00197 }