URI:
       c_ppline.st - enscript - GNU Enscript
  HTML git clone git://thinkerwim.org/enscript.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       c_ppline.st (4211B)
       ---
            1 /*
            2  * C preprocessor line handling.  This is shared between C, C++, and
            3  * Objective-C highlighting rules.
            4  */
            5 
            6 require_state (c);
            7 
            8 state c_ppline extends CHighlight
            9 {
           10   /* Comments within a pre-processor line. */
           11   /\/\*/ {
           12     comment_face (true);
           13     language_print ($0);
           14     call (c_ppline_comment);
           15     comment_face (false);
           16   }
           17   /* Include line. */
           18   /(include)([ \t]+)/ {
           19     reference_face (true);
           20     language_print ($1);
           21     reference_face (false);
           22     language_print ($2);
           23     call (c_ppline_include);
           24     return;
           25   }
           26   /* Define line. */
           27   /(define)([ \t]+)/ {
           28     reference_face (true);
           29     language_print ($1);
           30     reference_face (false);
           31     language_print ($2);
           32     call (c_ppline_define);
           33     return;
           34   }
           35   /* Simple directives:
           36      (build-re '(undef if ifdef ifndef endif elif else line error pragma))
           37    */
           38   /\b(e(l(if|se)|ndif|rror)|if(|def|ndef)|line|pragma|undef)\b/ {
           39     reference_face (true);
           40     language_print ($0);
           41     reference_face (false);
           42     call (c_ppline_tokensequence);
           43     return;
           44   }
           45   /* An unknown pre-processor directive. */
           46   /[a-zA-Z_][^ \t\n]*/ {
           47     reference_face (true);
           48     language_print ($0);
           49     reference_face (false);
           50     call (c_ppline_tokensequence);
           51     return;
           52   }
           53   /\\\\\n/ {
           54     language_print ($0);
           55   }
           56   /\n/ {
           57     language_print ($0);
           58     return;
           59   }
           60 }
           61 
           62 state c_ppline_include extends CHighlight
           63 {
           64   /\"/ {
           65     string_face (true);
           66     language_print ($0);
           67     call (c_string);
           68     string_face (false);
           69     call (c_ppline_comments_strings_chars);
           70     return;
           71   }
           72   /<[^<>]+>/ {
           73     string_face (true);
           74     language_print ($0);
           75     string_face (false);
           76     call (c_ppline_comments_strings_chars);
           77     return;
           78   }
           79   /[a-zA-Z_][a-zA-Z_0-9]*/ {
           80     variable_name_face (true);
           81     print ($0);
           82     variable_name_face (false);
           83     call (c_ppline_comments_strings_chars);
           84     return;
           85   }
           86   /\\\\\n/ {
           87     language_print ($0);
           88   }
           89   /\n/ {
           90     language_print ($0);
           91     return;
           92   }
           93 }
           94 
           95 state c_ppline_define extends CHighlight
           96 {
           97   /([a-zA-Z_][a-zA-Z_0-9]*)(\([^\)]*\))?/ {
           98     if (strcmp ($2, "") != 0)
           99       {
          100         function_name_face (true);
          101         language_print ($1);
          102         function_name_face (false);
          103         language_print ($2);
          104       }
          105     else
          106       {
          107         variable_name_face (true);
          108         language_print ($1);
          109         variable_name_face (false);
          110       }
          111     call (c_ppline_comments_strings_chars);
          112     return;
          113   }
          114   /\\\\\n/ {
          115     language_print ($0);
          116   }
          117   /\n/ {
          118     language_print ($0);
          119     return;
          120   }
          121 }
          122 
          123 state c_ppline_comments_strings_chars extends CHighlight
          124 {
          125   /* Comments. */
          126   /\/\*/ {
          127     comment_face (true);
          128     language_print ($0);
          129     call (c_ppline_comment);
          130     comment_face (false);
          131   }
          132   /* String constants. */
          133   /\"/ {
          134     string_face (true);
          135     language_print ($0);
          136     call (c_string);
          137     string_face (false);
          138   }
          139   /* Character constants. */
          140   /'.'|'\\\\.'/ {
          141     string_face (true);
          142     language_print ($0);
          143     string_face (false);
          144   }
          145   /\\\\\n/ {
          146     language_print ($0);
          147   }
          148   /\n/ {
          149     language_print ($0);
          150     return;
          151   }
          152 }
          153 
          154 state c_ppline_tokensequence extends CHighlight
          155 {
          156   /* Comments. */
          157   /\/\*/ {
          158     comment_face (true);
          159     language_print ($0);
          160     call (c_ppline_comment);
          161     comment_face (false);
          162   }
          163   /* String constants. */
          164   /\"/ {
          165     string_face (true);
          166     language_print ($0);
          167     call (c_string);
          168     string_face (false);
          169   }
          170   /* Character constants. */
          171   /'.'|'\\\\.'/ {
          172     string_face (true);
          173     language_print ($0);
          174     string_face (false);
          175   }
          176   /* defined() operators. */
          177   /(defined)(\()([^\)]+)(\))/ {
          178     reference_face (true);
          179     language_print ($1);
          180     reference_face (false);
          181     language_print ($2);
          182 
          183     variable_name_face (true);
          184     language_print ($3);
          185     variable_name_face (false);
          186 
          187     language_print ($4);
          188   }
          189   /* Variable references. */
          190   /\b[a-zA-Z_][a-zA-Z_0-9]*\b/ {
          191     variable_name_face (true);
          192     language_print ($0);
          193     variable_name_face (false);
          194   }
          195   /\\\\\n/ {
          196     language_print ($0);
          197   }
          198   /\n/ {
          199     language_print ($0);
          200     return;
          201   }
          202 }
          203 
          204 /* Comments within pre-processor directives need escaped newlines. */
          205 state c_ppline_comment extends c_comment {
          206   /\\\\\n/ {
          207     language_print ($0);
          208   }
          209   /\n/ {
          210     language_print ($0);
          211     return;
          212   }
          213 }
          214 
          215 
          216 /*
          217 Local variables:
          218 mode: c
          219 End:
          220 */