X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/c15969fd0a6280c60d2f35876b5343004fed2b11..bd5734cc00d2257272e8f7702f9e9b6f64858907:/Highlight.cpp?ds=sidebyside diff --git a/Highlight.cpp b/Highlight.cpp index e5a476d..d668f78 100644 --- a/Highlight.cpp +++ b/Highlight.cpp @@ -1,30 +1,31 @@ /* Cycript - Optimizing JavaScript Compiler/Runtime - * Copyright (C) 2009-2013 Jay Freeman (saurik) + * Copyright (C) 2009-2015 Jay Freeman (saurik) */ -/* GNU General Public License, Version 3 {{{ */ +/* GNU Affero General Public License, Version 3 {{{ */ /* - * Cycript is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, - * or (at your option) any later version. - * - * Cycript is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Cycript. If not, see . + * GNU Affero General Public License for more details. + + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . **/ /* }}} */ +#include "Code.hpp" +#include "Driver.hpp" #include "Highlight.hpp" -#include "Cycript.tab.hh" -#include "Parser.hpp" +bool CYLexerHighlight(hi::Value &highlight, CYLocation &location, void *scanner); -static void Skip(const char *data, size_t size, std::ostream &output, size_t &offset, cy::position ¤t, cy::position target) { +static void Skip(const char *data, size_t size, std::ostream &output, size_t &offset, CYPosition ¤t, CYPosition target) { while (current.line != target.line || current.column != target.column) { _assert(offset != size); char next(data[offset++]); @@ -33,9 +34,9 @@ static void Skip(const char *data, size_t size, std::ostream &output, size_t &of _assert(current.line < target.line || current.line == target.line && current.column < target.column); if (next == '\n') - current.lines(); + current.Lines(); else - current.columns(); + current.Columns(); } } @@ -53,31 +54,32 @@ struct CYColor { } }; -void CYLexerHighlight(const char *data, size_t size, std::ostream &output, bool ignore) { +_visible void CYLexerHighlight(const char *data, size_t size, std::ostream &output, bool ignore) { + CYLocalPool pool; + CYStream stream(data, data + size); - CYDriver driver(stream); - driver.commented_ = true; + CYDriver driver(pool, stream); + driver.highlight_ = true; size_t offset(0); - cy::position current; - - CYLocalPool pool; + CYPosition current; - YYSTYPE value; - cy::location location; + hi::Value highlight; + CYLocation location; - while (cylex(&value, &location, driver.scanner_) != 0) { + while (CYLexerHighlight(highlight, location, driver.scanner_)) { CYColor color; - switch (value.highlight_) { + switch (highlight) { case hi::Comment: color = CYColor(true, 30); break; case hi::Constant: color = CYColor(false, 31); break; case hi::Control: color = CYColor(false, 33); break; - case hi::Escape: color = CYColor(true, 31); break; + case hi::Error: color = CYColor(true, 31); break; case hi::Identifier: color = CYColor(false, 0); break; case hi::Meta: color = CYColor(false, 32); break; case hi::Nothing: color = CYColor(false, 0); break; case hi::Operator: color = CYColor(false, 36); break; + case hi::Special: color = CYColor(false, 35); break; case hi::Structure: color = CYColor(true, 34); break; case hi::Type: color = CYColor(true, 34); break;