qscilexerremarkup.cpp
No OneTemporary

File Metadata

Created
Thu, Jul 9, 6:22 AM

qscilexerremarkup.cpp

#include "qscilexerremarkup.h"
#include <qsciscintilla.h>
#include <QRegularExpression>
enum
{
Default = 0,
Hidden,
Bold,
Italic,
Del,
DocumentLink,
EscapeRemarkup,
Hightlight,
HyperLink,
Monospace,
Underline
};
QRegularExpression patternBold("\\*\\*(.+?)\\*\\*");
QRegularExpression patternItalic("(?<!:)//(.+?)//");
const char*
QsciLexerRemarkup::language() const
{
return "Remarkup";
}
QString
QsciLexerRemarkup::description(int style) const
{
switch(style){
case Default:
return "Default";
case Bold:
return "Bold";
case Italic:
return "Italic";
case Hidden:
return "Hidden";
}
return QString();
}
QColor
QsciLexerRemarkup::defaultColor(int style) const
{
switch(style){
case Default:
break;
case Bold:
return Qt::red;
}
return QsciLexer::defaultColor();
}
QFont
QsciLexerRemarkup::defaultFont(int style) const
{
// QFont f = QsciLexer::defaultFont();
// switch(style){
// case Default:
// break;
// case Bold:
// f.setBold(true);
// f.setCapitalization(QFont::AllUppercase);
// break;
// }
// return f;
return QsciLexer::defaultFont();
}
QColor
QsciLexerRemarkup::defaultPaper(int style) const
{
return QsciLexer::defaultPaper();
}
QsciStyle
QsciLexerRemarkup::getStyle(int style)
{
return QsciStyle(style, description(style), defaultColor(style),
defaultPaper(style), defaultFont(style));
}
QsciLexerRemarkup::QsciLexerRemarkup(QObject * parent)
:QsciLexerCustom(parent)
{
}
QsciLexerRemarkup::~QsciLexerRemarkup()
{}
void
QsciLexerRemarkup::styleText(int start, int end){
if (!editor()) return;
if (start == end) return;
QsciScintilla* e = editor();
//reset styles:
startStyling(start);
setStyling(end-start, Default);
char * chars = new char[end - start + 1];
e->SendScintilla(QsciScintilla::SCI_GETTEXTRANGE, start, end, chars);
QString source = QString::fromUtf8(chars);
delete [] chars;
runPhutilRemarkupBoldRule(source,start);
runPhutilRemarkupItalicRule(source,start);
}
void
QsciLexerRemarkup::runPhutilRemarkupBoldRule(const QString& source, int index){
int pos =0;
while(true) {
QRegularExpressionMatch result = patternBold.match(source, pos);
if (!result.hasMatch()){break;}
//hide:
startStyling(index + result.capturedStart(0));
setStyling(result.capturedLength(0), Hidden);
QString r = result.captured(1);
startStyling(index + result.capturedStart(1));
setStyling(result.capturedLength(1), Bold);
pos = result.capturedEnd(1) + 1;
}
}
void
QsciLexerRemarkup::runPhutilRemarkupItalicRule(const QString& source, int index){
int pos =0;
while(true) {
QRegularExpressionMatch result = patternItalic.match(source, pos);
if (!result.hasMatch()){break;}
//hide:
startStyling(index + result.capturedStart(0));
setStyling(result.capturedLength(0), Hidden);
startStyling(index + result.capturedStart(1));
setStyling(result.capturedLength(1), Italic);
pos = result.capturedEnd(1) + 1;
}
}
//"PhutilRemarkupBoldRule.php: **bold**
//PhutilRemarkupItalicRule.php: //italic//
/*
"PhutilRemarkupDelRule.php"
"PhutilRemarkupDocumentLinkRule.php"
"PhutilRemarkupEscapeRemarkupRule.php"
"PhutilRemarkupHighlightRule.php"
"PhutilRemarkupHyperlinkRule.php"
"PhutilRemarkupLinebreaksRule.php"
"PhutilRemarkupMonospaceRule.php"
"PhutilRemarkupRule.php"
"PhutilRemarkupUnderlineRule.php"
*/

Event Timeline