Intermediate implementation of #498 - karaoke template syntax highlighting. Only !! blocks and $variables are highlighted right now, and no actual Lua specific highlighting is done.

Originally committed to SVN as r1470.
This commit is contained in:
Niels Martin Hansen 2007-08-06 14:29:43 +00:00
parent 53a95b3af2
commit 4e48317803
3 changed files with 54 additions and 12 deletions

View file

@ -228,14 +228,14 @@ DialogOptions::DialogOptions(wxWindow *parent)
// Second static box
wxControl *control;
wxString labels2[9] = { _("Normal"), _("Brackets"), _("Slashes and Parentheses"), _("Tags"), _("Parameters") ,
_("Error"), _("Error Background"), _("Line Break"), _("Modified Background") };
wxString options2[11] = { _T("Normal"), _T("Brackets"), _T("Slashes"), _T("Tags"), _T("Parameters") ,
_T("Error"), _T("Error Background"), _T("Line Break"), _T("Edit box need enter background"), _T("Edit Font Face"), _T("Edit Font Size") };
for (int i=0;i<9;i++) {
wxString labels2[10] = { _("Normal"), _("Brackets"), _("Slashes and Parentheses"), _("Tags"), _("Parameters") ,
_("Error"), _("Error Background"), _("Line Break"), _("Karaoke templates"), _("Modified Background") };
wxString options2[12] = { _T("Normal"), _T("Brackets"), _T("Slashes"), _T("Tags"), _T("Parameters") ,
_T("Error"), _T("Error Background"), _T("Line Break"), _T("Karaoke Template"), _T("Edit box need enter background"), _T("Edit Font Face"), _T("Edit Font Size") };
for (int i=0;i<10;i++) {
wxString caption = labels2[i]+_T(": ");
wxString option = options2[i];
if (i < 8) {
if (i < 9) {
caption = _("Syntax highlighter - ") + caption;
option = _T("Syntax highlight ") + option;
}
@ -251,11 +251,11 @@ DialogOptions::DialogOptions(wxWindow *parent)
browse = new BrowseButton(editPage,-1,_T(""),BROWSE_FONT);
control = new wxTextCtrl(editPage,-1);
browse->Bind((wxTextCtrl*)control);
Bind(control,options2[9]);
Bind(control,options2[10]);
editSizer5->Add(control,1,wxEXPAND | wxRIGHT,5);
control = new wxTextCtrl(editPage,-1,_T(""),wxDefaultPosition,wxSize(50,-1),0,NumValidator(NULL,false));;
browse->Bind((wxTextCtrl*)control,1);
Bind(control,options2[10]);
Bind(control,options2[11]);
editSizer5->Add(control,0,wxEXPAND | wxRIGHT,5);
editSizer5->Add(browse,0,wxEXPAND);

View file

@ -128,6 +128,7 @@ void OptionsManager::LoadDefaults(bool onlyDefaults) {
SetColour(_T("Syntax Highlight Error"),wxColour(200,0,0));
SetColour(_T("Syntax Highlight Error Background"),wxColour(255,200,200));
SetColour(_T("Syntax Highlight Line Break"),wxColour(160,160,160));
SetColour(_T("Syntax Highlight Karaoke Template"), wxColour(128,0,192));
SetColour(_T("Edit Box Need Enter Background"),wxColour(192,192,255));
#if defined(__WINDOWS__)
SetInt(_T("Edit Font Size"),9);

View file

@ -214,6 +214,13 @@ void SubsTextEditCtrl::SetStyles() {
StyleSetBold(6,true);
StyleSetForeground(6,Options.AsColour(_T("Syntax Highlight Line Break")));
// Karaoke template code block style
StyleSetFont(7,font);
StyleSetSize(7,size);
StyleSetBold(7,true);
//StyleSetItalic(7,true);
StyleSetForeground(7,Options.AsColour(_T("Syntax Highlight Karaoke Template")));
// Misspelling indicator
IndicatorSetStyle(0,wxSTC_INDIC_SQUIGGLE);
IndicatorSetForeground(0,wxColour(255,0,0));
@ -237,10 +244,10 @@ void SubsTextEditCtrl::UpdateStyle(int start, int _length) {
// Begin styling
StartStyling(0,255);
int ran = 0;
int depth = 0;
int curStyle = 0;
int curPos = 0;
int ran = 0; // length of current range
int depth = 0; // brace nesting depth
int curStyle = 0; // style to apply to current range
int curPos = 0; // start of current range?
wxChar curChar = 0;
wxChar prevChar = 0;
wxChar nextChar = 0;
@ -284,6 +291,40 @@ void SubsTextEditCtrl::UpdateStyle(int start, int _length) {
numMode = false;
}
// Karaoke template block
else if (curChar == _T('!')) {
// Apply previous style
SetUnicodeStyling(curPos,ran,curStyle);
curPos += ran;
ran = -1; // such that ran++ later on resets it to 0 !
// Eat entire template block
int endPos = i+1;
while (endPos < end && text[endPos] != _T('!'))
endPos++;
SetUnicodeStyling(curPos,endPos-curPos+1,7);
curPos = endPos+1;
i = endPos+0;
}
// Karaoke template variable
else if (curChar == _T('$')) {
// Apply previous style
SetUnicodeStyling(curPos,ran,curStyle);
curPos += ran;
ran = -1; // such that ran++ later on resets it to 0 !
// Eat entire variable
int endPos = i+1;
while (endPos < end) {
wxChar ch = text[endPos];
if ((ch >= _T('A') && ch <= _T('Z')) || (ch >= _T('a') && ch <= _T('z')) || ch == _T('_'))
endPos++;
else
break;
}
SetUnicodeStyling(curPos,endPos-curPos,7);
curPos = endPos;
i = curPos-1;
}
// Outside
else if (depth == 0) {
// Reset number mode