comments

Fri, 21 Jun 2013 12:27:45 +0200

author
Mike Becker <universe@uap-core.de>
date
Fri, 21 Jun 2013 12:27:45 +0200
changeset 8
417cd3b29f97
parent 7
02cf8ac736e6
child 9
6b1fba10c4cb

comments

src/c2html.c file | annotate | diff | comparison | revisions
test/header.html file | annotate | diff | comparison | revisions
     1.1 --- a/src/c2html.c	Fri Jun 21 11:42:18 2013 +0200
     1.2 +++ b/src/c2html.c	Fri Jun 21 12:27:45 2013 +0200
     1.3 @@ -159,67 +159,100 @@
     1.4    memset(word, 0, WORDBUF_SIZE);
     1.5    size_t wp = 0;
     1.6    int isstring = 0, iscomment = 0;
     1.7 +  static int iscommentml;
     1.8    int isescaping = 0;
     1.9 +  
    1.10 +  if (iscommentml) {
    1.11 +    iscomment = 1;
    1.12 +    memcpy(&(dest[dp]), "<span class=\"c2html-comment\">", 29);
    1.13 +    dp += 29;
    1.14 +  }
    1.15 +  // a fucking /* comment */
    1.16 +  /* again // / */
    1.17    for (char c = src[sp] ; c ; c=src[++sp]) {
    1.18 -    /* comments and strings */
    1.19 -    if (!isescaping && (c == '\'' || c == '\"')) {
    1.20 -      isstring ^= 1;
    1.21 -      if (isstring) {
    1.22 -        memcpy(&(dest[dp]), "<span class=\"c2html-string\">", 28);
    1.23 -        dp += 28;
    1.24 -        dp = writeescapedchar(dest, dp, c);
    1.25 -      } else {
    1.26 -        dp = writeescapedchar(dest, dp, c);
    1.27 +    /* comments */
    1.28 +    if (c == '/') {
    1.29 +      if (iscommentml && sp > 0 && src[sp-1] == '*') {
    1.30 +        iscomment = 0;
    1.31 +        iscommentml = 0;
    1.32 +        memcpy(&(dest[dp]), "/</span>", 8);
    1.33 +        dp += 8;
    1.34 +        continue;
    1.35 +      } else if (!iscomment && (src[sp+1] == '/' || src[sp+1] == '*')) {
    1.36 +        iscomment = 1;
    1.37 +        iscommentml = (src[sp+1] == '*');
    1.38 +        memcpy(&(dest[dp]), "<span class=\"c2html-comment\">", 29);
    1.39 +        dp += 29;
    1.40 +      }
    1.41 +    }
    1.42 +    
    1.43 +    if (iscomment) {
    1.44 +      if (c == '\n') {
    1.45          memcpy(&(dest[dp]), "</span>", 7);
    1.46          dp += 7;
    1.47        }
    1.48 +      dp = writeescapedchar(dest, dp, c);
    1.49      } else {
    1.50 -      if (iscomment || isstring) {
    1.51 -        dp = writeescapedchar(dest, dp, c);
    1.52 -      } else if (!isalnum(c) && c != '_' && c != '#') {
    1.53 -        /* interpret word int_t */
    1.54 -        if (wp > 0 && wp < WORDBUF_SIZE) {
    1.55 -          int closespan = 1;
    1.56 -          if (iskeyword(word)) {
    1.57 -            memcpy(&(dest[dp]), "<span class=\"c2html-keyword\">", 29);
    1.58 -            dp += 29;
    1.59 -          } else if (istype(word, wp)) {
    1.60 -            memcpy(&(dest[dp]), "<span class=\"c2html-type\">", 26);
    1.61 -            dp += 26;
    1.62 -          } else if (isdirective(word)) {
    1.63 -            memcpy(&(dest[dp]), "<span class=\"c2html-directive\">", 31);
    1.64 -            dp += 31;
    1.65 -          } else {
    1.66 -            closespan = 0;
    1.67 -          }
    1.68 -          for (int i = 0 ; i < wp ; i++) {
    1.69 -            dp = writeescapedchar(dest, dp, word[i]);
    1.70 -          }
    1.71 -          if (closespan) {
    1.72 -            memcpy(&(dest[dp]), "</span>", 7);
    1.73 -            dp += 7;
    1.74 -          }
    1.75 -          memset(word, 0, WORDBUF_SIZE);
    1.76 -          wp = 0;
    1.77 -        }
    1.78 -        dp = writeescapedchar(dest, dp, c);
    1.79 -      } else {
    1.80 -        /* read word */
    1.81 -        if (wp < WORDBUF_SIZE) {
    1.82 -          word[wp++] = c;
    1.83 -        } else if (wp == WORDBUF_SIZE) {
    1.84 -          for (int i = 0 ; i < WORDBUF_SIZE ; i++) {
    1.85 -            dp = writeescapedchar(dest, dp, word[i]);
    1.86 -          }
    1.87 -          wp++;
    1.88 +      /* strings */
    1.89 +      if (!isescaping && (c == '\'' || c == '\"')) {
    1.90 +        isstring ^= 1;
    1.91 +        if (isstring) {
    1.92 +          memcpy(&(dest[dp]), "<span class=\"c2html-string\">", 28);
    1.93 +          dp += 28;
    1.94            dp = writeescapedchar(dest, dp, c);
    1.95          } else {
    1.96            dp = writeescapedchar(dest, dp, c);
    1.97 +          memcpy(&(dest[dp]), "</span>", 7);
    1.98 +          dp += 7;
    1.99 +        }
   1.100 +      } else {
   1.101 +        if (isstring) {
   1.102 +          dp = writeescapedchar(dest, dp, c);
   1.103 +        } else if (!isalnum(c) && c != '_' && c != '#') {
   1.104 +          /* interpret word int_t */
   1.105 +          if (wp > 0 && wp < WORDBUF_SIZE) {
   1.106 +            int closespan = 1;
   1.107 +            if (iskeyword(word)) {
   1.108 +              memcpy(&(dest[dp]), "<span class=\"c2html-keyword\">", 29);
   1.109 +              dp += 29;
   1.110 +            } else if (istype(word, wp)) {
   1.111 +              memcpy(&(dest[dp]), "<span class=\"c2html-type\">", 26);
   1.112 +              dp += 26;
   1.113 +            } else if (isdirective(word)) {
   1.114 +              memcpy(&(dest[dp]), "<span class=\"c2html-directive\">", 31);
   1.115 +              dp += 31;
   1.116 +            } else {
   1.117 +              closespan = 0;
   1.118 +            }
   1.119 +            for (int i = 0 ; i < wp ; i++) {
   1.120 +              dp = writeescapedchar(dest, dp, word[i]);
   1.121 +            }
   1.122 +            if (closespan) {
   1.123 +              memcpy(&(dest[dp]), "</span>", 7);
   1.124 +              dp += 7;
   1.125 +            }
   1.126 +            memset(word, 0, WORDBUF_SIZE);
   1.127 +            wp = 0;
   1.128 +          }
   1.129 +          dp = writeescapedchar(dest, dp, c);
   1.130 +        } else {
   1.131 +          /* read word */
   1.132 +          if (wp < WORDBUF_SIZE) {
   1.133 +            word[wp++] = c;
   1.134 +          } else if (wp == WORDBUF_SIZE) {
   1.135 +            for (int i = 0 ; i < WORDBUF_SIZE ; i++) {
   1.136 +              dp = writeescapedchar(dest, dp, word[i]);
   1.137 +            }
   1.138 +            wp++;
   1.139 +            dp = writeescapedchar(dest, dp, c);
   1.140 +          } else {
   1.141 +            dp = writeescapedchar(dest, dp, c);
   1.142 +          }
   1.143          }
   1.144        }
   1.145 +
   1.146 +      isescaping = !isescaping & (c == '\\');
   1.147      }
   1.148 -    
   1.149 -    isescaping = !isescaping & (c == '\\');
   1.150    }
   1.151    dest[dp] = 0;
   1.152  }
     2.1 --- a/test/header.html	Fri Jun 21 11:42:18 2013 +0200
     2.2 +++ b/test/header.html	Fri Jun 21 12:27:45 2013 +0200
     2.3 @@ -19,6 +19,9 @@
     2.4        span.c2html-string {
     2.5          color: orange;
     2.6        }
     2.7 +      span.c2html-comment {
     2.8 +        color: grey;
     2.9 +      }
    2.10      </style>
    2.11    </head>
    2.12    <body>

mercurial