wxArrayString ColoursAndFontsManager::GetAllLexersNames() const { wxArrayString names; for(size_t i = 0; i < m_allLexers.size(); ++i) { LexerConf::Ptr_t lexer = m_allLexers.at(i); if(names.Index(lexer->GetName()) == wxNOT_FOUND) { names.Add(lexer->GetName()); } } names.Sort(); return names; }
void ColoursAndFontsManager::SetActiveTheme(const wxString& lexerName, const wxString& themeName) { wxArrayString themes = GetAvailableThemesForLexer(lexerName); for(size_t i = 0; i < themes.GetCount(); ++i) { LexerConf::Ptr_t lexer = GetLexer(lexerName, themes.Item(i)); if(lexer && lexer->GetName() == lexerName) { lexer->SetIsActive(lexer->GetThemeName() == themeName); } } }
void SyntaxHighlightDlg::OnNewTheme(wxCommandEvent& event) { // Create new theme CHECK_PTR_RET(m_lexer); NewThemeDialog dlg(this, m_lexer); if(dlg.ShowModal() == wxID_OK) { // Create new XML and load it LexerConf::Ptr_t newLexer = ColoursAndFontsManager::Get().CopyTheme(dlg.GetLexerName(), dlg.GetThemeName(), dlg.GetBaseTheme()); if(newLexer) { LoadLexer(newLexer->GetName()); } } }
void NewThemeDialog::DoInitialize(LexerConf::Ptr_t lexer) { m_choiceBaseTheme->Clear(); m_choiceLanguage->Clear(); // Populate the fields wxArrayString allLexers = ColoursAndFontsManager::Get().GetAllLexersNames(); // int sel = allLexers.Index(lexer->GetName()); m_choiceLanguage->Append(allLexers); m_choiceLanguage->SetStringSelection(lexer->GetName()); m_choiceBaseTheme->Append(ColoursAndFontsManager::Get().GetAvailableThemesForLexer(lexer->GetName())); if(!m_choiceBaseTheme->IsEmpty()) { m_choiceBaseTheme->SetSelection(0); } }
void ColoursAndFontsManager::Save(LexerConf::Ptr_t lexer) { wxXmlDocument doc; doc.SetRoot(lexer->ToXml()); wxString filename; wxString themeName = lexer->GetThemeName().Lower(); themeName.Replace(" ", "_"); themeName.Replace("::", "_"); themeName.Replace("(", "_"); themeName.Replace(")", "_"); themeName.Replace(":", "_"); themeName.Replace(",", "_"); themeName.Replace(".", "_"); themeName.Replace(";", "_"); filename << "lexer_" << lexer->GetName().Lower() << "_" << themeName << ".xml"; wxFileName xmlFile(clStandardPaths::Get().GetUserDataDir(), filename); xmlFile.AppendDir("lexers"); ::SaveXmlToFile(&doc, xmlFile.GetFullPath()); }
void ColoursAndFontsManager::UpdateLexerColours(LexerConf::Ptr_t lexer, bool force) { StyleProperty& defaultProp = lexer->GetProperty(0); // Default if(force || m_lexersVersion < 1) { // adjust line numbers if(lexer->IsDark()) { StyleProperty& lineNumbers = lexer->GetProperty(LINE_NUMBERS_ATTR_ID); // Line numbers if(!defaultProp.IsNull()) { if(lexer->GetName() == "c++") { defaultProp.SetFgColour( wxColour(defaultProp.GetBgColour()).ChangeLightness(120).GetAsString(wxC2S_HTML_SYNTAX)); } if(!lineNumbers.IsNull()) { lineNumbers.SetFgColour( wxColour(defaultProp.GetBgColour()).ChangeLightness(120).GetAsString(wxC2S_HTML_SYNTAX)); lineNumbers.SetBgColour(defaultProp.GetBgColour()); } } } else { lexer->SetLineNumbersFgColour(wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT)); StyleProperty& lineNumbers = lexer->GetProperty(LINE_NUMBERS_ATTR_ID); // Line numbers if(!lineNumbers.IsNull()) { lineNumbers.SetBgColour(defaultProp.GetBgColour()); } // don't adjust PHP and HTML default colours, since they also affects the various operators // foreground colours if(lexer->GetName() != "php" && lexer->GetName() != "html" && lexer->GetName() != "text" && lexer->GetName() != "cmake" && lexer->GetName() != "xml") { lexer->SetDefaultFgColour(wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT)); } } } //===================================================================== // Second upgrade stage: adjust whitespace colour and fold margin //===================================================================== if(force || m_lexersVersion < 2) { // adjust line numbers StyleProperty& fold = lexer->GetProperty(FOLD_MARGIN_ATTR_ID); // fold margin StyleProperty& whitespace = lexer->GetProperty(WHITE_SPACE_ATTR_ID); // whitespace if(lexer->IsDark()) { wxColour newCol = wxColour(defaultProp.GetBgColour()).ChangeLightness(110); fold.SetFgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); fold.SetBgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); whitespace.SetFgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); } else { wxColour newCol = wxColour(defaultProp.GetBgColour()).ChangeLightness(95); fold.SetFgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); fold.SetBgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); whitespace.SetFgColour(newCol.GetAsString(wxC2S_HTML_SYNTAX)); } } //===================================================================== // Third upgrade stage: adjust whitespace colour and fold margin //===================================================================== if(force || m_lexersVersion < 3) { // remove the *.js;*.javascript from the C++ lexer if(lexer->GetName() == "c++") { lexer->SetFileSpec("*.cxx;*.hpp;*.cc;*.h;*.c;*.cpp;*.l;*.y;*.c++;*.hh;*.ipp;*.hxx;*.h++"); } } // Upgrade CSS colours if((force || m_lexersVersion < 4) && lexer->GetName().Lower() == "css") { // adjust line numbers bool isDark = lexer->IsDark(); StyleProperty& var = lexer->GetProperty(wxSTC_CSS_VARIABLE); StyleProperty& identifier = lexer->GetProperty(wxSTC_CSS_IDENTIFIER); StyleProperty& identifier2 = lexer->GetProperty(wxSTC_CSS_IDENTIFIER2); StyleProperty& identifier3 = lexer->GetProperty(wxSTC_CSS_IDENTIFIER3); StyleProperty& oper = lexer->GetProperty(wxSTC_CSS_OPERATOR); if(!var.IsNull()) { if(!identifier.IsNull()) { identifier.SetFgColour(var.GetFgColour()); } if(!identifier2.IsNull()) { identifier2.SetFgColour(var.GetFgColour()); } if(!identifier3.IsNull()) { identifier3.SetFgColour(var.GetFgColour()); } if(!oper.IsNull()) { oper.SetFgColour(isDark ? "WHITE" : "BLACK"); } } } if(force || m_lexersVersion < 5) { // Indentation guides (style #37) StyleProperty& indentGuides = lexer->GetProperty(37); indentGuides.SetFgColour(defaultProp.GetBgColour()); indentGuides.SetBgColour(defaultProp.GetBgColour()); } }