summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/editor.cc2
-rw-r--r--src/editor.h16
-rw-r--r--src/highlighter.cc94
-rw-r--r--src/highlighter.h29
-rw-r--r--src/mainwin.cc50
5 files changed, 118 insertions, 73 deletions
diff --git a/src/editor.cc b/src/editor.cc
index 92aeefe..08bf005 100644
--- a/src/editor.cc
+++ b/src/editor.cc
@@ -1,7 +1,6 @@
#include "editor.h"
#include "Preferences.h"
-#ifndef _QCODE_EDIT_
void Editor::indentSelection()
{
QTextCursor cursor = textCursor();
@@ -109,4 +108,3 @@ void Editor::wheelEvent ( QWheelEvent * event )
}
}
-#endif
diff --git a/src/editor.h b/src/editor.h
index bb338b0..09484f5 100644
--- a/src/editor.h
+++ b/src/editor.h
@@ -3,26 +3,11 @@
#include <QWidget>
#include <QWheelEvent>
-#ifdef _QCODE_EDIT_
-#include <qeditor.h>
-class Editor : public QEditor
-#else
#include <QTextEdit>
class Editor : public QTextEdit
-#endif
{
Q_OBJECT
public:
-#ifdef _QCODE_EDIT_
- Editor(QWidget *parent) : QEditor(parent) {}
- QString toPlainText() const { return text(); }
- void setPlainText(const QString& text) { setText(text); }
-public slots:
- //void zoomIn() { zoom(1); }
- void zoomIn(int n = 1) { zoom(n); }
- //void zoomOut() { zoom(-1); }
- void zoomOut(int n = 1) { zoom(-n); }
-#else
Editor(QWidget *parent) : QTextEdit(parent) { setAcceptRichText(false); }
public slots:
void zoomIn();
@@ -36,5 +21,4 @@ public slots:
void uncommentSelection();
private:
void wheelEvent ( QWheelEvent * event );
-#endif
};
diff --git a/src/highlighter.cc b/src/highlighter.cc
index 64ea980..6e51ecc 100644
--- a/src/highlighter.cc
+++ b/src/highlighter.cc
@@ -24,20 +24,103 @@
*
*/
+// Syntax Highlight code by Chris Olah
+
#include "highlighter.h"
#include "parsersettings.h" // extern int parser_error_pos;
-#ifdef _QCODE_EDIT_
-Highlighter::Highlighter(QDocument *parent)
-#else
-Highlighter::Highlighter(QTextDocument *parent)
-#endif
+Highlighter::Highlighter(QTextDocument *parent, mode_e mode)
: QSyntaxHighlighter(parent)
{
+ this->mode = mode;
+ operators << "!" << "&&" << "||" << "+" << "-" << "*" << "/" << "%" << "!" << "#" << ";";
+ KeyWords << "for" << "intersection_for" << "if" << "assign"
+ << "module" << "function"
+ << "$children" << "child" << "$fn" << "$fa" << "$fb" // Lump special variables in here
+ << "union" << "intersection" << "difference" << "render"; //Lump CSG in here
+ Primitives3D << "cube" << "cylinder" << "sphere" << "polyhedron";
+ Primitives2D << "square" << "polygon" << "circle";
+ Transforms << "scale" << "translate" << "rotate" << "multmatrix" << "color"
+ << "linear_extrude" << "rotate_extrude"; // Lump extrudes in here.
+ Imports << "include" << "use" << "import_stl";
+
+ //this->OperatorStyle.setForeground
+ KeyWordStyle.setForeground(Qt::darkGreen);
+ TransformStyle.setForeground(Qt::darkGreen);
+ PrimitiveStyle3D.setForeground(Qt::darkBlue);
+ PrimitiveStyle2D.setForeground(Qt::blue);
+ ImportStyle.setForeground(Qt::darkYellow);
+ QuoteStyle.setForeground(Qt::darkMagenta);
+ CommentStyle.setForeground(Qt::darkCyan);
+ ErrorStyle.setForeground(Qt::red);
}
void Highlighter::highlightBlock(const QString &text)
{
+ if ( mode == NORMAL_MODE) {
+ state_e state = (state_e) previousBlockState();
+ //Key words and Primitives
+ QStringList::iterator it;
+
+ for (it = KeyWords.begin(); it != KeyWords.end(); ++it){
+ for (int i = 0; i < text.count(*it); ++i){
+ setFormat(text.indexOf(*it),it->size(),KeyWordStyle);
+ }
+ }
+ for (it = Primitives3D.begin(); it != Primitives3D.end(); ++it){
+ for (int i = 0; i < text.count(*it); ++i){
+ setFormat(text.indexOf(*it),it->size(),PrimitiveStyle3D);
+ }
+ }
+ for (it = Primitives2D.begin(); it != Primitives2D.end(); ++it){
+ for (int i = 0; i < text.count(*it); ++i){
+ setFormat(text.indexOf(*it),it->size(),PrimitiveStyle2D);
+ }
+ }
+ for (it = Transforms.begin(); it != Transforms.end(); ++it){
+ for (int i = 0; i < text.count(*it); ++i){
+ setFormat(text.indexOf(*it),it->size(),TransformStyle);
+ }
+ }
+ for (it = Imports.begin(); it != Imports.end(); ++it){
+ for (int i = 0; i < text.count(*it); ++i){
+ setFormat(text.indexOf(*it),it->size(),ImportStyle);
+ }
+ }
+
+ // Quoting and Comments.
+ for (int n = 0; n < text.size(); ++n){
+ if (state == NORMAL){
+ if (text[n] == '"'){
+ state = QUOTE;
+ setFormat(n,1,QuoteStyle);
+ } else if (text[n] == '/'){
+ if (text[n+1] == '/'){
+ setFormat(n,text.size(),CommentStyle);
+ break;
+ } else if (text[n+1] == '*'){
+ setFormat(n++,2,CommentStyle);
+ state = COMMENT;
+ }
+ }
+ } else if (state == QUOTE){
+ setFormat(n,1,QuoteStyle);
+ if (text[n] == '"' && text[n-1] != '\\')
+ state = NORMAL;
+ } else if (state == COMMENT){
+ setFormat(n,1,CommentStyle);
+ if (text[n] == '*' && text[n+1] == '/'){
+ setFormat(++n,1,CommentStyle);
+ state = NORMAL;
+ }
+ }
+ }
+
+ } // not ErrorMode (syntax highlighting)
+
+
+ // Errors
+ else if (mode == ERROR_MODE) {
int n = previousBlockState();
if (n < 0)
n = 0;
@@ -53,5 +136,6 @@ void Highlighter::highlightBlock(const QString &text)
setFormat(parser_error_pos - n, 1, style);
#endif
}
+ } // if errormode
}
diff --git a/src/highlighter.h b/src/highlighter.h
index 1bd54d2..a6e2dc3 100644
--- a/src/highlighter.h
+++ b/src/highlighter.h
@@ -3,18 +3,29 @@
#include <QSyntaxHighlighter>
-#ifdef _QCODE_EDIT_
-#include "qdocument.h"
-#endif
-
class Highlighter : public QSyntaxHighlighter
{
public:
-#ifdef _QCODE_EDIT_
- Highlighter(QDocument *parent);
-#else
- Highlighter(QTextDocument *parent);
-#endif
+ enum state_e {NORMAL=-1,QUOTE,COMMENT};
+ enum mode_e {NORMAL_MODE, ERROR_MODE};
+ mode_e mode;
+
+ QStringList operators;
+ QStringList KeyWords;
+ QStringList Primitives3D;
+ QStringList Primitives2D;
+ QStringList Transforms;
+ QStringList Imports;
+ QTextCharFormat ErrorStyle;
+ QTextCharFormat OperatorStyle;
+ QTextCharFormat CommentStyle;
+ QTextCharFormat QuoteStyle;
+ QTextCharFormat KeyWordStyle;
+ QTextCharFormat PrimitiveStyle3D;
+ QTextCharFormat PrimitiveStyle2D;
+ QTextCharFormat TransformStyle;
+ QTextCharFormat ImportStyle;
+ Highlighter(QTextDocument *parent, mode_e mode);
void highlightBlock(const QString &text);
};
diff --git a/src/mainwin.cc b/src/mainwin.cc
index dde6761..af4a532 100644
--- a/src/mainwin.cc
+++ b/src/mainwin.cc
@@ -70,11 +70,6 @@
#include <QSettings>
#include <QProgressDialog>
#include <QMutexLocker>
-#ifdef _QCODE_EDIT_
-#include "qdocument.h"
-#include "qformatscheme.h"
-#include "qlanguagefactory.h"
-#endif
#include <fstream>
@@ -185,16 +180,8 @@ MainWindow::MainWindow(const QString &filename)
fps = 0;
fsteps = 1;
- highlighter = NULL;
-#ifdef _QCODE_EDIT_
- QFormatScheme *formats = new QFormatScheme("qxs/openscad.qxf");
- QDocument::setDefaultFormatScheme(formats);
- QLanguageFactory *languages = new QLanguageFactory(formats,this);
- languages->addDefinitionPath("qxs");
- languages->setLanguage(editor, "openscad");
-#else
+ highlighter = new Highlighter(editor->document(), Highlighter::NORMAL_MODE);
editor->setTabStopWidth(30);
-#endif
editor->setLineWrapping(true); // Not designable
this->glview->statusLabel = new QLabel(this);
@@ -348,13 +335,8 @@ MainWindow::MainWindow(const QString &filename)
updateRecentFileActions();
connect(editor->document(), SIGNAL(contentsChanged()), this, SLOT(animateUpdateDocChanged()));
-#ifdef _QCODE_EDIT_
- connect(editor, SIGNAL(contentModified(bool)), this, SLOT(setWindowModified(bool)));
- connect(editor, SIGNAL(contentModified(bool)), fileActionSave, SLOT(setEnabled(bool)));
-#else
connect(editor->document(), SIGNAL(modificationChanged(bool)), this, SLOT(setWindowModified(bool)));
connect(editor->document(), SIGNAL(modificationChanged(bool)), fileActionSave, SLOT(setEnabled(bool)));
-#endif
connect(this->glview, SIGNAL(doAnimateUpdate()), this, SLOT(animateUpdate()));
connect(Preferences::inst(), SIGNAL(requestRedraw()), this->glview, SLOT(updateGL()));
@@ -483,12 +465,7 @@ void
MainWindow::openFile(const QString &new_filename)
{
#ifdef ENABLE_MDI
-#ifdef _QCODE_EDIT_
- if (this->editor->document()->lines() > 1 ||
- !this->editor->document()->text(true, false).trimmed().isEmpty()) {
-#else
if (!editor->toPlainText().isEmpty()) {
-#endif
new MainWindow(new_filename);
clearCurrentOutput();
return;
@@ -957,11 +934,7 @@ void MainWindow::hideEditor()
void MainWindow::pasteViewportTranslation()
{
-#ifdef _QCODE_EDIT_
- QDocumentCursor cursor = editor->cursor();
-#else
QTextCursor cursor = editor->textCursor();
-#endif
QString txt;
txt.sprintf("[ %.2f, %.2f, %.2f ]", -this->glview->object_trans_x, -this->glview->object_trans_y, -this->glview->object_trans_z);
cursor.insertText(txt);
@@ -969,11 +942,7 @@ void MainWindow::pasteViewportTranslation()
void MainWindow::pasteViewportRotation()
{
-#ifdef _QCODE_EDIT_
- QDocumentCursor cursor = editor->cursor();
-#else
QTextCursor cursor = editor->textCursor();
-#endif
QString txt;
txt.sprintf("[ %.2f, %.2f, %.2f ]",
fmodf(360 - this->glview->object_rot_x + 90, 360), fmodf(360 - this->glview->object_rot_y, 360), fmodf(360 - this->glview->object_rot_z, 360));
@@ -1067,23 +1036,22 @@ bool MainWindow::compileTopLevelDocument(bool reload)
QFileInfo(this->fileName).absolutePath().toLocal8Bit(),
false);
- // Error highlighting
- delete this->highlighter;
- this->highlighter = NULL;
+ // Syntax & Error highlighting
if (!this->root_module) {
- this->highlighter = new Highlighter(editor->document());
+ if (highlighter->mode==Highlighter::NORMAL_MODE) {
+ delete this->highlighter;
+ highlighter = new Highlighter(editor->document(), Highlighter::ERROR_MODE);
+ }
if (!animate_panel->isVisible()) {
-#ifdef _QCODE_EDIT_
- QDocumentCursor cursor = editor->cursor();
- cursor.setPosition(parser_error_pos);
-#else
QTextCursor cursor = editor->textCursor();
cursor.setPosition(parser_error_pos);
editor->setTextCursor(cursor);
-#endif
}
+ } else if (highlighter->mode==Highlighter::ERROR_MODE) {
+ delete this->highlighter;
+ this->highlighter = new Highlighter(editor->document(), Highlighter::NORMAL_MODE);
}
}
contact: Jan Huwald // Impressum