summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-11-01 18:26:38 (GMT)
committerclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-11-01 18:26:38 (GMT)
commit57c3213abbee91ee86fb8eab713cbeef2f470bc3 (patch)
treede87f3953853d2f77d95d3d6d02f20790acc6432
parent2104ddafd9ea2866bfadb03f0c0286ca30696500 (diff)
Clifford Wolf:
Added syntax error highlighting git-svn-id: http://svn.clifford.at/openscad/trunk@127 b57f626f-c46c-0410-a088-ec61d464b74c
-rw-r--r--highlighter.cc43
-rw-r--r--mainwin.cc8
-rw-r--r--openscad.h11
-rw-r--r--openscad.pro2
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);
+ }
+}
+
diff --git a/mainwin.cc b/mainwin.cc
index 19f558a..d63990e 100644
--- a/mainwin.cc
+++ b/mainwin.cc
@@ -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;
diff --git a/openscad.h b/openscad.h
index 65311b7..2b2fd77 100644
--- a/openscad.h
+++ b/openscad.h
@@ -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
contact: Jan Huwald // Impressum