diff options
-rw-r--r-- | highlighter.cc | 43 | ||||
-rw-r--r-- | mainwin.cc | 8 | ||||
-rw-r--r-- | openscad.h | 11 | ||||
-rw-r--r-- | openscad.pro | 2 |
4 files changed, 63 insertions, 1 deletions
diff --git a/highlighter.cc b/highlighter.cc new file mode 100644 index 0000000..7543b4d --- /dev/null +++ b/highlighter.cc @@ -0,0 +1,43 @@ +/* + * OpenSCAD (www.openscad.at) + * Copyright (C) 2009 Clifford Wolf <clifford@clifford.at> + * + * This program 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 2 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "openscad.h" + +Highlighter::Highlighter(QTextDocument *parent) + : QSyntaxHighlighter(parent) +{ +} + +void Highlighter::highlightBlock(const QString &text) +{ + int n = previousBlockState(); + if (n < 0) + n = 0; + int k = n + text.size() + 1; + setCurrentBlockState(k); + if (parser_error_pos >= n && parser_error_pos < k) { + QTextCharFormat style; + style.setBackground(Qt::red); + setFormat(0, text.size(), style); + style.setForeground(Qt::white); + setFormat(parser_error_pos - n, 1, style); + } +} + @@ -80,6 +80,7 @@ MainWindow::MainWindow(const char *filename) s1 = new QSplitter(Qt::Horizontal, this); editor = new QTextEdit(s1); + highlighter = new Highlighter(editor->document()); QFont font; font.setStyleHint(QFont::TypeWriter); @@ -411,6 +412,9 @@ void MainWindow::compile(bool procevents) root_module = parse(editor->toPlainText().toAscii().data(), false); + delete highlighter; + highlighter = new Highlighter(editor->document()); + if (!root_module) { QTextCursor cursor = editor->textCursor(); cursor.setPosition(parser_error_pos); @@ -861,7 +865,11 @@ void MainWindow::actionDisplayCSGProducts() current_win = NULL; } +#ifdef ENABLE_CGAL void MainWindow::actionExportSTLorOFF(bool stl_mode) +#else +void MainWindow::actionExportSTLorOFF(bool) +#endif { current_win = this; @@ -31,6 +31,7 @@ #include <QVector> #include <QMainWindow> #include <QProgressDialog> +#include <QSyntaxHighlighter> #include <QSplitter> #include <QTextEdit> #include <QLineEdit> @@ -693,6 +694,15 @@ signals: void doAnimateUpdate(); }; +class MainWindow; + +class Highlighter : public QSyntaxHighlighter +{ +public: + Highlighter(QTextDocument *parent); + void highlightBlock(const QString &text); +}; + class MainWindow : public QMainWindow { Q_OBJECT @@ -701,6 +711,7 @@ public: QString filename; QSplitter *s1, *s2; QTextEdit *editor; + Highlighter *highlighter; GLView *screen; QTextEdit *console; diff --git a/openscad.pro b/openscad.pro index c7ea413..68f0c67 100644 --- a/openscad.pro +++ b/openscad.pro @@ -40,7 +40,7 @@ SOURCES += value.cc expr.cc func.cc module.cc context.cc SOURCES += csgterm.cc polyset.cc csgops.cc transform.cc SOURCES += primitives.cc surface.cc control.cc render.cc SOURCES += import.cc dxfdata.cc dxftess.cc dxfdim.cc -SOURCES += dxflinextrude.cc dxfrotextrude.cc +SOURCES += dxflinextrude.cc dxfrotextrude.cc highlighter.cc QMAKE_CXXFLAGS += -O0 # QMAKE_CXXFLAGS += -O3 -march=pentium |