]> git.saurik.com Git - cycript.git/commitdiff
Optionally return comments from lexer to highlight.
authorJay Freeman (saurik) <saurik@saurik.com>
Fri, 14 Sep 2012 03:56:09 +0000 (20:56 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Fri, 14 Sep 2012 03:56:09 +0000 (20:56 -0700)
Cycript.l.in
Highlight.cpp
Parser.cpp
Parser.hpp

index 37707a6df06c71628ecc5e69b44d6001d41cf778..58ed9fd7573d50e0310ad33d7c2ff08e6bded105 100644 (file)
@@ -83,6 +83,12 @@ typedef cy::parser::token tk;
     yylloc->columns(yyleng); \
 }
 
+#define M { \
+    if (yyextra->commented_) { \
+        I(comment, Comment(Y), tk::Comment, hi::Comment); \
+    } \
+}
+
 int H(char c) {
     if (c >= '0' && c <= '9')
         return c - '0';
@@ -147,12 +153,12 @@ XMLName {XMLNameStart}{XMLNamePart}*
 
 <RegExp>\/{RegularExpressionBody}\/{RegularExpressionFlags} L C I(literal, RegEx(Y), tk::RegularExpressionLiteral, hi::Constant);
 
-\/\/[^\n]* L
+\/\/[^\n]* L M
 
        /* http://ostermiller.org/findcomment.html */
        /* XXX: unify these two rules using !? */
 \/\*!([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V() C I(comment, Comment(Y), tk::Comment, hi::Comment);
-\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V(N)
+\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V(N) M
 
 @begin E4X
 <RegExp>"<>"      L F(tk::LeftRight, hi::Structure);
index 750516775fa06f44b039373ef4f0cc996e6a6c25..2587d19b17fe969e515d0bf9117927a1005fba48 100644 (file)
@@ -56,6 +56,7 @@ struct CYColor {
 void CYLexerHighlight(const char *data, size_t size, std::ostream &output, bool ignore) {
     CYStream stream(data, data + size);
     CYDriver driver(stream);
+    driver.commented_ = true;
 
     size_t offset(0);
     cy::position current;
index f0ad37f51c5b0c110bbc0e2c0a0a9bc33532fc21..09aaf7a93d26815f087ad81a347b31a4ccf01655 100644 (file)
@@ -30,6 +30,7 @@ CYDriver::CYDriver(std::istream &data, const std::string &filename) :
     state_(CYClear),
     data_(data),
     strict_(false),
+    commented_(false),
     filename_(filename),
     program_(NULL),
     auto_(false),
index bff219b7e6bce06372ca4760f20f06fb955eb22b..d91530549a08b2729d0c9e4aa1f5f10763191bc4 100644 (file)
@@ -506,6 +506,7 @@ class CYDriver {
     std::istream &data_;
 
     bool strict_;
+    bool commented_;
 
     enum Condition {
         RegExpCondition,