diff --git a/aegisub/dialog_options.cpp b/aegisub/dialog_options.cpp index 96ba2542e..4b71ac32c 100644 --- a/aegisub/dialog_options.cpp +++ b/aegisub/dialog_options.cpp @@ -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); diff --git a/aegisub/options.cpp b/aegisub/options.cpp index 8ea84563c..96e12ca69 100644 --- a/aegisub/options.cpp +++ b/aegisub/options.cpp @@ -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); diff --git a/aegisub/subs_edit_ctrl.cpp b/aegisub/subs_edit_ctrl.cpp index c3c076a2b..a0fe89929 100644 --- a/aegisub/subs_edit_ctrl.cpp +++ b/aegisub/subs_edit_ctrl.cpp @@ -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