URI: 
       describe_languages.st - enscript - GNU Enscript
  HTML git clone git://thinkerwim.org/enscript.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       describe_languages.st (2663B)
       ---
            1 /*
            2  * Describe all known highlight languages.
            3  */
            4 
            5 state describe_me
            6 {
            7   / \*$/ {
            8   }
            9 
           10   / \*\\\/.*/ {
           11     print ("\n");
           12     /* All done. */
           13     return;
           14   }
           15 
           16   / \* ?(.*)/ {
           17     print ($1);
           18   }
           19 }
           20 
           21 state describe_languages
           22 {
           23   /^\/\*\*.*$/ {
           24     call (describe_me);
           25   }
           26   /[^\\\/]+/ {
           27     /* NOP */
           28   }
           29   /./ {
           30     /* NOP */
           31   }
           32 }
           33 
           34 /*
           35  * Create a HTML report of all supported highlighting rules.
           36  */
           37 
           38 sub html_annotate_mailtos (str)
           39 {
           40   return regsuball (str, /[-_a-zA-Z0-9\\.]+@[-_a-zA-Z0-9\\.]+/,
           41                     "<a href=\"mailto:$0\">$0</a>");
           42 }
           43 
           44 sub html_quote (str)
           45 {
           46   str = regsuball (str, /\&/, "&amp;");
           47   str = regsuball (str, /</, "&lt;");
           48   str = regsuball (str, />/, "&gt;");
           49   str = regsuball (str, /\"/, "&quot;");
           50   return str;
           51 }
           52 
           53 sub describe_me_html_print_pending_name ()
           54 {
           55   if (!language_name_pending)
           56     return;
           57 
           58   print ("<p>\n<dl compact>\n<dt><b>Name:</b><dd>",
           59          html_quote (language_name), "\n");
           60 
           61   language_name_pending = 0;
           62 }
           63 
           64 state describe_me_html
           65 {
           66   / \*$/ {
           67   }
           68 
           69   / \*\\\/.*/ {
           70     /* Terminate this state. */
           71     describe_me_html_print_pending_name ();
           72     print ("</dl>\n");
           73     return;
           74   }
           75 
           76   / \* ?(.*)/ {
           77     row = $1;
           78     if (regmatch (row, /Name:(.*)/))
           79       {
           80         language_name = $1;
           81         language_name_pending = 1;
           82       }
           83     else if (regmatch (row, /Description:(.*)/))
           84       {
           85         /* This starts the new language. */
           86         title = $1;
           87         title = regsub (title, /^[ \t]+/, "");
           88         title = regsub (title, /[ \t\\.]+$/, "");
           89         print ("<p><li><b>", html_quote (title), "</b><p>\n");
           90       }
           91     else if (regmatch (row, /([a-zA-Z]+:)(.*)/))
           92       {
           93         describe_me_html_print_pending_name ();
           94         print ("<dt><b>", html_quote ($1), "</b><dd>",
           95                html_annotate_mailtos (html_quote ($2)));
           96       }
           97     else
           98       print (html_annotate_mailtos (html_quote (row)));
           99   }
          100 }
          101 
          102 current_input_file = 0;
          103 
          104 state describe_languages_html
          105 {
          106   BEGIN {
          107     if (current_input_file == 0)
          108       {
          109         title = "Enscript Highlighting Languages And File Formats";
          110         print ("<!DOCTYPE html PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n",
          111                "<html>\n<head>\n<title>", title, "</title>\n",
          112                "<LINK REV=\"made\" HREF=\"mailto:mtr@iki.fi\">\n",
          113                "</head>\n",
          114                "<body BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\" LINK=\"#1F00FF\"",
          115                "ALINK=\"#FF0000\" VLINK=\"#9900DD\">\n",
          116                "<h1>", title, "</h1>\n<hr>\n<ul>\n");
          117       }
          118     current_input_file++;
          119   }
          120 
          121   END {
          122     if (current_input_file == length (argv))
          123       print ("\n</ul>\n<hr><address>By ", version,
          124              "</address>\n</body>\n</html>\n");
          125   }
          126 
          127   /^\/\*\*.*$/ {
          128     call (describe_me_html);
          129   }
          130 
          131   /[^\\\/]+/ {
          132     /* NOP */
          133   }
          134 
          135   /./ {
          136     /* NOP */
          137   }
          138 }
          139 
          140 
          141 /*
          142 Local variables:
          143 mode: c
          144 End:
          145 */