home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lynx2.8.1dev.10.tar.gz / lynx2.8.1dev.10.tar / lynx2-8 / src / DefaultStyle.c < prev    next >
C/C++ Source or Header  |  1998-03-25  |  10KB  |  402 lines

  1. /*    A real style sheet for the Character Grid browser
  2. **
  3. **    The dimensions are all in characters!
  4. */
  5.  
  6. #include <HTUtils.h>
  7. #include <tcp.h>
  8. #include <HTStyle.h>
  9. #include <HTFont.h>
  10.  
  11. #include <LYLeaks.h>
  12.  
  13. /*    Tab arrays:
  14. */
  15. PRIVATE CONST HTTabStop tabs_8[] = {
  16.     { 0, 8 }, {0, 16}, {0, 24}, {0, 32}, {0, 40},
  17.     { 0, 48 }, {0, 56}, {0, 64}, {0, 72}, {0, 80},
  18.     { 0, 88 }, {0, 96}, {0, 104}, {0, 112}, {0, 120},
  19.     { 0, 128 }, {0, 136}, {0, 144}, {0, 152}, {0, 160},
  20.     {0, 168}, {0, 176},
  21.     {0, 0 }        /* Terminate */
  22. };
  23.  
  24. #ifdef NOT_USED
  25. PRIVATE HTTabStop tabs_16[] = {
  26.     { 0, 16 }, {0, 32}, {0, 48}, {0, 64}, {0, 80},
  27.     {0, 96}, {0, 112},
  28.     {0, 0 }        /* Terminate */
  29. };
  30. #endif /* NOT_USED */
  31.  
  32. /* Template:
  33. **    link to next, name, tag,
  34. **    font, size, colour,         superscript, anchor id,
  35. **    indents: 1st, left, right, alignment    lineheight, descent,    tabs,
  36. **    word wrap, free format, space: before, after, flags.
  37. */
  38.  
  39. PRIVATE HTStyle HTStyleNormal = { 
  40.     0,  "Normal", "P",
  41.     HT_FONT, 1, HT_BLACK,        0, 0,
  42.     3, 3, 6, HT_LEFT,        1, 0,    tabs_8,
  43.     YES, YES, 1, 0,            0 };    
  44.  
  45. PRIVATE HTStyle HTStyleDivCenter = { 
  46.     &HTStyleNormal,  "DivCenter", "DCENTER",
  47.     HT_FONT, 1, HT_BLACK,        0, 0,
  48.     3, 3, 6, HT_CENTER,        1, 0,    tabs_8,
  49.     YES, YES, 1, 0,            0 };    
  50.  
  51. PRIVATE HTStyle HTStyleDivLeft = { 
  52.     &HTStyleDivCenter,  "DivLeft", "DLEFT",
  53.     HT_FONT, 1, HT_BLACK,        0, 0,
  54.     3, 3, 6, HT_LEFT,        1, 0,    tabs_8,
  55.     YES, YES, 1, 0,            0 };    
  56.  
  57. PRIVATE HTStyle HTStyleDivRight = { 
  58.     &HTStyleDivLeft,  "DivRight", "DRIGHT",
  59.     HT_FONT, 1, HT_BLACK,        0, 0,
  60.     3, 3, 6, HT_RIGHT,        1, 0,    tabs_8,
  61.     YES, YES, 1, 0,            0 };    
  62.  
  63. PRIVATE HTStyle HTStyleBanner = { 
  64.     &HTStyleDivRight,  "Banner", "BANNER",
  65.     HT_FONT, 1, HT_BLACK,        0, 0,
  66.     3, 3, 6, HT_LEFT,        1, 0,    tabs_8,
  67.     YES, YES, 1, 0,            0 };    
  68.  
  69. PRIVATE HTStyle HTStyleBlockquote = { 
  70.     &HTStyleBanner,  "Blockquote", "BLOCKQUOTE",
  71.     HT_FONT, 1, HT_BLACK,        0, 0,
  72.     5, 5, 7, HT_LEFT,        1, 0,    tabs_8,
  73.     YES, YES, 1, 0,            0 };    
  74.  
  75. PRIVATE HTStyle HTStyleBq = { /* HTML 3.0 BLOCKQUOTE - FM */
  76.     &HTStyleBlockquote,  "Bq", "BQ",
  77.     HT_FONT, 1, HT_BLACK,        0, 0,
  78.     5, 5, 7, HT_LEFT,        1, 0,    tabs_8,
  79.     YES, YES, 1, 0,            0 };    
  80.  
  81. PRIVATE HTStyle HTStyleFootnote = { /* HTML 3.0 FN - FM */
  82.     &HTStyleBq,  "Footnote", "FN",
  83.     HT_FONT, 1, HT_BLACK,        0, 0,
  84.     5, 5, 7, HT_LEFT,        1, 0,    tabs_8,
  85.     YES, YES, 1, 0,            0 };    
  86.  
  87. PRIVATE HTStyle HTStyleList = { 
  88.     &HTStyleFootnote,  "List", "UL",
  89.     HT_FONT, 1, HT_BLACK,        0, 0,
  90.     3, 7, 6, HT_LEFT,        1, 0,    0,
  91.     YES, YES, 0, 0,            0 };    
  92.  
  93. PRIVATE HTStyle HTStyleList1 = { 
  94.     &HTStyleList,  "List1", "UL",
  95.     HT_FONT, 1, HT_BLACK,        0, 0,
  96.     8, 12, 6, HT_LEFT,        1, 0,    0,
  97.     YES, YES, 0, 0,            0 };    
  98.  
  99. PRIVATE HTStyle HTStyleList2 = { 
  100.     &HTStyleList1,  "List2", "UL",
  101.     HT_FONT, 1, HT_BLACK,        0, 0,
  102.     13, 17, 6, HT_LEFT,        1, 0,    0,
  103.     YES, YES, 0, 0,            0 };    
  104.  
  105. PRIVATE HTStyle HTStyleList3 = { 
  106.     &HTStyleList2,  "List3", "UL",
  107.     HT_FONT, 1, HT_BLACK,        0, 0,
  108.     18, 22, 6, HT_LEFT,        1, 0,    0,
  109.     YES, YES, 0, 0,            0 };    
  110.  
  111. PRIVATE HTStyle HTStyleList4 = { 
  112.     &HTStyleList3,  "List4", "UL",
  113.     HT_FONT, 1, HT_BLACK,        0, 0,
  114.     23, 27, 6, HT_LEFT,        1, 0,    0,
  115.     YES, YES, 0, 0,            0 };    
  116.  
  117. PRIVATE HTStyle HTStyleList5 = { 
  118.     &HTStyleList4,  "List5", "UL",
  119.     HT_FONT, 1, HT_BLACK,        0, 0,
  120.     28, 32, 6, HT_LEFT,        1, 0,    0,
  121.     YES, YES, 0, 0,            0 };    
  122.  
  123. PRIVATE HTStyle HTStyleList6 = { 
  124.     &HTStyleList5,  "List6", "UL",
  125.     HT_FONT, 1, HT_BLACK,        0, 0,
  126.     33, 37, 6, HT_LEFT,        1, 0,    0,
  127.     YES, YES, 0, 0,            0 };    
  128.  
  129. PRIVATE HTStyle HTStyleMenu = {
  130.     &HTStyleList6,  "Menu", "MENU",
  131.     HT_FONT, 1, HT_BLACK,        0, 0,
  132.     3, 7, 6, HT_LEFT,        1, 0,    0,
  133.     YES, YES, 0, 0,            0
  134. };
  135.  
  136. PRIVATE HTStyle HTStyleMenu1 = {
  137.     &HTStyleMenu,  "Menu1", "MENU",
  138.     HT_FONT, 1, HT_BLACK,        0, 0,
  139.     8, 12, 6, HT_LEFT,        1, 0,    0,
  140.     YES, YES, 0, 0,            0
  141. };
  142.  
  143. PRIVATE HTStyle HTStyleMenu2= {
  144.     &HTStyleMenu1,  "Menu2", "MENU",
  145.     HT_FONT, 1, HT_BLACK,        0, 0,
  146.     13, 17, 6, HT_LEFT,        1, 0,    0,
  147.     YES, YES, 0, 0,            0
  148. };
  149.  
  150. PRIVATE HTStyle HTStyleMenu3= {
  151.     &HTStyleMenu2,  "Menu3", "MENU",
  152.     HT_FONT, 1, HT_BLACK,        0, 0,
  153.     18, 22, 6, HT_LEFT,        1, 0,    0,
  154.     YES, YES, 0, 0,            0
  155. };
  156.  
  157. PRIVATE HTStyle HTStyleMenu4= {
  158.     &HTStyleMenu3,  "Menu4", "MENU",
  159.     HT_FONT, 1, HT_BLACK,        0, 0,
  160.     23, 27, 6, HT_LEFT,        1, 0,    0,
  161.     YES, YES, 0, 0,            0
  162. };
  163.  
  164. PRIVATE HTStyle HTStyleMenu5= {
  165.     &HTStyleMenu4,  "Menu5", "MENU",
  166.     HT_FONT, 1, HT_BLACK,        0, 0,
  167.     28, 33, 6, HT_LEFT,        1, 0,    0,
  168.     YES, YES, 0, 0,            0
  169. };
  170.  
  171. PRIVATE HTStyle HTStyleMenu6= {
  172.     &HTStyleMenu5,  "Menu6", "MENU",
  173.     HT_FONT, 1, HT_BLACK,        0, 0,
  174.     33, 38, 6, HT_LEFT,        1, 0,    0,
  175.     YES, YES, 0, 0,            0
  176. };
  177.  
  178. PRIVATE HTStyle HTStyleGlossary = {
  179.     &HTStyleMenu6,  "Glossary", "DL",
  180.     HT_FONT, 1, HT_BLACK,        0, 0,
  181.     3, 10, 6, HT_LEFT,        1, 0,    0, 
  182.     YES, YES, 1, 1,            0
  183. };    
  184.  
  185. PRIVATE HTStyle HTStyleGlossary1 = {
  186.     &HTStyleGlossary,  "Glossary1", "DL",
  187.     HT_FONT, 1, HT_BLACK,        0, 0,
  188.     8, 16, 6, HT_LEFT,        1, 0,    0, 
  189.     YES, YES, 1, 1,            0
  190. };    
  191.  
  192. PRIVATE HTStyle HTStyleGlossary2 = {
  193.     &HTStyleGlossary1,  "Glossary2", "DL",
  194.     HT_FONT, 1, HT_BLACK,        0, 0,
  195.     14, 22, 6, HT_LEFT,        1, 0,    0, 
  196.     YES, YES, 1, 1,            0
  197. };    
  198.  
  199. PRIVATE HTStyle HTStyleGlossary3 = {
  200.     &HTStyleGlossary2,  "Glossary3", "DL",
  201.     HT_FONT, 1, HT_BLACK,        0, 0,
  202.     20, 28, 6, HT_LEFT,        1, 0,    0, 
  203.     YES, YES, 1, 1,            0
  204. };    
  205.  
  206. PRIVATE HTStyle HTStyleGlossary4 = {
  207.     &HTStyleGlossary3,  "Glossary4", "DL",
  208.     HT_FONT, 1, HT_BLACK,        0, 0,
  209.     26, 34, 6, HT_LEFT,        1, 0,    0, 
  210.     YES, YES, 1, 1,            0
  211. };    
  212.  
  213. PRIVATE HTStyle HTStyleGlossary5 = {
  214.     &HTStyleGlossary4,  "Glossary5", "DL",
  215.     HT_FONT, 1, HT_BLACK,        0, 0,
  216.     32, 40, 6, HT_LEFT,        1, 0,    0, 
  217.     YES, YES, 1, 1,            0
  218. };    
  219.  
  220. PRIVATE HTStyle HTStyleGlossary6 = {
  221.     &HTStyleGlossary5,  "Glossary6", "DL",
  222.     HT_FONT, 1, HT_BLACK,        0, 0,
  223.     38, 46, 6, HT_LEFT,        1, 0,    0, 
  224.     YES, YES, 1, 1,            0
  225. };    
  226.  
  227. PRIVATE HTStyle HTStyleGlossaryCompact = {
  228.     &HTStyleGlossary6,  "GlossaryCompact", "DLC",
  229.     HT_FONT, 1, HT_BLACK,        0, 0,
  230.     3, 10, 6, HT_LEFT,        1, 0,    0, 
  231.     YES, YES, 0, 0,            0
  232. };
  233.  
  234. PRIVATE HTStyle HTStyleGlossaryCompact1 = {
  235.     &HTStyleGlossaryCompact,  "GlossaryCompact1", "DLC",
  236.     HT_FONT, 1, HT_BLACK,        0, 0,
  237.     8, 15, 6, HT_LEFT,        1, 0,    0, 
  238.     YES, YES, 0, 0,            0
  239. };
  240.  
  241. PRIVATE HTStyle HTStyleGlossaryCompact2 = {
  242.     &HTStyleGlossaryCompact1,  "GlossaryCompact2", "DLC",
  243.     HT_FONT, 1, HT_BLACK,        0, 0,
  244.     13, 20, 6, HT_LEFT,        1, 0,    0, 
  245.     YES, YES, 0, 0,            0
  246. };
  247.  
  248. PRIVATE HTStyle HTStyleGlossaryCompact3 = {
  249.     &HTStyleGlossaryCompact2,  "GlossaryCompact3", "DLC",
  250.     HT_FONT, 1, HT_BLACK,        0, 0,
  251.     18, 25, 6, HT_LEFT,        1, 0,    0, 
  252.     YES, YES, 0, 0,            0
  253. };
  254.  
  255. PRIVATE HTStyle HTStyleGlossaryCompact4 = {
  256.     &HTStyleGlossaryCompact3,  "GlossaryCompact4", "DLC",
  257.     HT_FONT, 1, HT_BLACK,        0, 0,
  258.     23, 30, 6, HT_LEFT,        1, 0,    0, 
  259.     YES, YES, 0, 0,            0
  260. };
  261.  
  262. PRIVATE HTStyle HTStyleGlossaryCompact5 = {
  263.     &HTStyleGlossaryCompact4,  "GlossaryCompact5", "DLC",
  264.     HT_FONT, 1, HT_BLACK,        0, 0,
  265.     28, 35, 6, HT_LEFT,        1, 0,    0, 
  266.     YES, YES, 0, 0,            0
  267. };
  268.  
  269. PRIVATE HTStyle HTStyleGlossaryCompact6 = {
  270.     &HTStyleGlossaryCompact5,  "GlossaryCompact6", "DLC",
  271.     HT_FONT, 1, HT_BLACK,        0, 0,
  272.     33, 40, 6, HT_LEFT,        1, 0,    0, 
  273.     YES, YES, 0, 0,            0
  274. };
  275.  
  276. PRIVATE HTStyle HTStyleExample = {
  277.     &HTStyleGlossaryCompact6,  "Example", "XMP",
  278.     HT_FONT, 1, HT_BLACK,        0, 0,
  279.     0, 0, 0, HT_LEFT,        1, 0,    tabs_8,
  280.     NO, NO, 0, 0,            0
  281. };    
  282.  
  283. PRIVATE HTStyle HTStylePreformatted = {
  284.     &HTStyleExample,      "Preformatted", "PRE",
  285.     HT_FONT, 1, HT_BLACK,        0, 0,
  286.     0, 0, 0, HT_LEFT,        1, 0,    tabs_8,
  287.     NO, NO, 0, 0,            0
  288. };    
  289.  
  290. PRIVATE HTStyle HTStyleListing = {
  291.     &HTStylePreformatted,  "Listing", "LISTING",
  292.     HT_FONT, 1, HT_BLACK,        0, 0,
  293.     0, 0, 0, HT_LEFT,        1, 0,    tabs_8,
  294.     NO, NO, 0, 0,            0 };    
  295.  
  296. PRIVATE HTStyle HTStyleAddress = {
  297.     &HTStyleListing,  "Address", "ADDRESS",
  298.     HT_FONT, 1, HT_BLACK,        0, 0,
  299.     4, 4, 7, HT_LEFT,        1, 0,    tabs_8,
  300.     YES, YES, 2, 0,            0 };    
  301.  
  302. PRIVATE HTStyle HTStyleNote = { /* HTML 3.0 NOTE - FM */
  303.     &HTStyleAddress,  "Note", "NOTE",
  304.     HT_FONT, 1, HT_BLACK,        0, 0,
  305.     5, 5, 7, HT_LEFT,        1, 0,    tabs_8,
  306.     YES, YES, 1, 0,            0 };    
  307.  
  308. PRIVATE HTStyle HTStyleHeading1 = {
  309.     &HTStyleNote,  "Heading1", "H1",
  310.     HT_FONT+HT_BOLD, 1, HT_BLACK,    0, 0,
  311.     0, 0, 0, HT_CENTER,        1, 0,    0,
  312.     YES, YES, 1, 1,            0 };    
  313.  
  314. PRIVATE HTStyle HTStyleHeading2 = {
  315.     &HTStyleHeading1,  "Heading2", "H2",
  316.     HT_FONT+HT_BOLD, 1, HT_BLACK,    0, 0,
  317.     0, 0, 0, HT_LEFT,        1, 0,    0,
  318.     YES, YES, 1, 1,            0 };    
  319.  
  320. PRIVATE HTStyle HTStyleHeading3 = { 
  321.     &HTStyleHeading2,  "Heading3", "H3",
  322.     HT_FONT+HT_BOLD, 1, HT_BLACK,    0, 0,
  323.     2, 2, 0, HT_LEFT,        1, 0,    0, 
  324.     YES, YES, 1, 0,            0 };    
  325.  
  326. PRIVATE HTStyle HTStyleHeading4 = { 
  327.     &HTStyleHeading3,  "Heading4", "H4",
  328.     HT_FONT+HT_BOLD, 1, HT_BLACK,    0, 0,
  329.     4, 4, 0, HT_LEFT,        1, 0,    0,
  330.     YES, YES, 1, 0,            0 };    
  331.  
  332. PRIVATE HTStyle HTStyleHeading5 = { 
  333.     &HTStyleHeading4,  "Heading5", "H5",
  334.     HT_FONT+HT_BOLD, 1, HT_BLACK,    0, 0,
  335.     6, 6, 0, HT_LEFT,        1, 0,    0,
  336.     YES, YES, 1, 0,            0 };    
  337.  
  338. PRIVATE HTStyle HTStyleHeading6 = { 
  339.     &HTStyleHeading5,  "Heading6", "H6",
  340.     HT_FONT+HT_BOLD, 1, HT_BLACK,    0, 0,
  341.     8, 8, 0, HT_LEFT,        1, 0,    0,
  342.     YES, YES, 1, 0,            0 };    
  343.  
  344. PRIVATE HTStyle HTStyleHeadingCenter = { 
  345.     &HTStyleHeading6,  "HeadingCenter", "HCENTER",
  346.     HT_FONT+HT_BOLD, 1, HT_BLACK,    0, 0,
  347.     0, 0, 3, HT_CENTER,        1, 0,    tabs_8,
  348.     YES, YES, 1, 0,            0 };    
  349.  
  350. PRIVATE HTStyle HTStyleHeadingLeft = { 
  351.     &HTStyleHeadingCenter,  "HeadingLeft", "HLEFT",
  352.     HT_FONT+HT_BOLD, 1, HT_BLACK,    0, 0,
  353.     0, 0, 3, HT_LEFT,        1, 0,    tabs_8,
  354.     YES, YES, 1, 0,            0 };    
  355.  
  356. PRIVATE HTStyle HTStyleHeadingRight = { 
  357.     &HTStyleHeadingLeft,  "HeadingRight", "HRIGHT",
  358.     HT_FONT+HT_BOLD, 1, HT_BLACK,    0, 0,
  359.     0, 0, 3, HT_RIGHT,        1, 0,    tabs_8,
  360.     YES, YES, 1, 0,            0 };    
  361.  
  362. /* Style sheet points to the last in the list:
  363. */
  364. PRIVATE HTStyleSheet sheet = { "default.style",
  365.                 &HTStyleHeadingRight }; /* sheet */
  366.  
  367. PUBLIC HTStyleSheet * DefaultStyle NOARGS
  368. {
  369.     static HTStyleSheet *result;
  370.     HTStyle *p, *q;
  371.  
  372.     /*
  373.      * The first time we're called, allocate a copy of the 'sheet' linked
  374.      * list.  Thereafter, simply copy the data from 'sheet' into our copy
  375.      * (preserving the copy's linked-list pointers).  We do this to reset the
  376.      * parameters of a style that might be altered while processing a page.
  377.      */
  378.     if (result == 0) {    /* allocate & copy */
  379.         result = HTStyleSheetNew ();
  380.     *result = sheet;
  381.     result->styles = 0;
  382.     for (p = sheet.styles; p != 0; p = p->next) {
  383.         q = HTStyleNew ();
  384.         *q = *p;
  385.         q->next = result->styles;
  386.         result->styles = q;
  387.     }
  388.     } else {        /* recopy the data */
  389.         for (p = result->styles, q = sheet.styles;
  390.         p != 0 && q != 0;
  391.         p = p->next, q = q->next) {
  392.             HTStyle *r = p->next;
  393.         HTStyle temp;
  394.         temp = *p;
  395.         temp.next = q->next;
  396.         *p = *q;
  397.         p->next = r;
  398.     }
  399.     }
  400.     return result;
  401. }
  402.