From c01b1118f0efd2132817b72175b8b874706a97a8 Mon Sep 17 00:00:00 2001 From: lsv Date: Sat, 4 Jan 2025 22:52:38 +0500 Subject: [PATCH] Added rule "subroutine_reference" for PCRE editor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Подсветка синтаксиса добавлена для этого правила PCRE. --- ctl/ctlStyledText.cpp | 10 +++++++--- include/ctl/ctlStyledText.h | 31 +++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/ctl/ctlStyledText.cpp b/ctl/ctlStyledText.cpp index 27bb138..56e4d54 100644 --- a/ctl/ctlStyledText.cpp +++ b/ctl/ctlStyledText.cpp @@ -41,6 +41,7 @@ ctlStyledText::ctlStyledText(wxWindow* parent, wxWindowID id, const wxPoint& pos Create(parent, id, pos, size, style); m_regparser.SetStyleControl(this); setDecorate(); + //RegExpParser::TEST(); } void ctlStyledText::OnPositionStc(wxStyledTextEvent& event) { @@ -140,13 +141,14 @@ void RegExpParser::SetStyleControl(wxStyledTextCtrl* ctrl) { for (int i = 0; i < sizeof(stylemap) / sizeof(stylemap[0]); i++) stylemap[i] = -1; wxColour bgdef = ctrl->GetBackgroundColour(); wxColour fgdef = ctrl->GetForegroundColour(); - tablestyle.push_back(styletextdef{ fgdef,wxColour("#ddd0fe") }); // 00 verb - tablestyle.push_back(styletextdef{ fgdef,wxColour("#fed1ff") }); // 1 capture (reed) + tablestyle.push_back(styletextdef{ fgdef,wxColour("#ddd0fe") }); // 0 verb + tablestyle.push_back(styletextdef{ fgdef,wxColour("#fed1ff") }); // 1 conditional_pattern tablestyle.push_back(styletextdef{ fgdef,wxColour("#e3e3e3") }); // 2 backslash tablestyle.push_back(styletextdef{ fgdef,wxColour("#d3a776") }); // 3 class char tablestyle.push_back(styletextdef{ fgdef,wxColour("#99beff") }); // 4 quantifier tablestyle.push_back(styletextdef{ wxColour("#989898"),bgdef }); // 5 comment - tablestyle.push_back(styletextdef{ fgdef,wxColour("#bae634") }); // 6 captute (green) + tablestyle.push_back(styletextdef{ fgdef,wxColour("#bae634") }); // 6 capture (green) + tablestyle.push_back(styletextdef{ fgdef,wxColour("#f5f45b") }); // 7 subroutine_reference tablestyle.push_back(styletextdef{ fgdef,wxColour("#ed5c65") }); // last color. error bg stylemap[0] = tablestyle.size() - 1; // error bg @@ -169,6 +171,8 @@ void RegExpParser::SetStyleControl(wxStyledTextCtrl* ctrl) { stylemap[defrule::capture] = 6; stylemap[defrule::capture_1] = 6; stylemap[defrule::conditional_pattern] = 1; + stylemap[defrule::subroutine_reference] = 7; + //wxLogNull logNo; int count = 0; int userstyle = wxSTC_STYLE_LASTPREDEFINED + 1; diff --git a/include/ctl/ctlStyledText.h b/include/ctl/ctlStyledText.h index e4ebe2a..d14acb5 100644 --- a/include/ctl/ctlStyledText.h +++ b/include/ctl/ctlStyledText.h @@ -73,6 +73,7 @@ public: character_class_atom, character_class, conditional_pattern, + subroutine_reference, call_out, other, @@ -119,7 +120,9 @@ public: const char* const t7[] = { ".","\\V", "\\p{^ssa&}","\\psd" }; const char* const t8[] = { "[[:^digit:]]", "[[:digit:]]" }; const char* const t9[] = { "(?(sd)ffff)","(?(-23)cond_expr|no_expr_cond)" }; + const char* const t10[] = { "(?1)"}; + test_2(RegExpParser::defrule::pcre, t10, sizeof(t10) / sizeof(t10[0])); test_2(RegExpParser::defrule::pcre, t5, sizeof(t5) / sizeof(t5[0])); test_2(RegExpParser::defrule::conditional_pattern, t9, sizeof(t9) / sizeof(t9[0])); test_2(RegExpParser::defrule::character_class, t8, sizeof(t8) / sizeof(t8[0])); @@ -336,6 +339,7 @@ const RegExpParser::ERule rules[] = { USE_RULE(RegExpParser::rule_type::alternative, RegExpParser::defrule::atomic_group), USE_RULE(RegExpParser::rule_type::alternative, RegExpParser::defrule::lookaround), USE_RULE(RegExpParser::rule_type::alternative, RegExpParser::defrule::backreference), + USE_RULE(RegExpParser::rule_type::alternative, RegExpParser::defrule::subroutine_reference), USE_RULE(RegExpParser::rule_type::alternative, RegExpParser::defrule::conditional_pattern), USE_RULE(RegExpParser::rule_type::alternative, RegExpParser::defrule::comment), USE_RULE(RegExpParser::rule_type::alternative, RegExpParser::defrule::capture), @@ -562,6 +566,33 @@ const RegExpParser::ERule rules[] = { USE_RULE(RegExpParser::rule_type::zero_one, RegExpParser::defrule::digits), TEXTSIM(")"), ZERO, + START_R_STYLE(RegExpParser::defrule::subroutine_reference, RegExpParser::rule_type::styled_ALL), + TEXTSIM("(?"), + START_A_R(RegExpParser::rule_type::none), + TEXTSIM("R"), + TEXT_TYPE(RegExpParser::rule_type::alternative | RegExpParser::rule_type::char_any | RegExpParser::rule_type::zero_one, "+-"), + USE_RULE(RegExpParser::rule_type::none, RegExpParser::defrule::digits), + TEXT_TYPE(RegExpParser::rule_type::alternative | RegExpParser::rule_type::text, "&"), + USE_RULE(RegExpParser::rule_type::none, RegExpParser::defrule::name), + TEXT_TYPE(RegExpParser::rule_type::alternative | RegExpParser::rule_type::text, "P>"), + USE_RULE(RegExpParser::rule_type::none, RegExpParser::defrule::name), + ZERO, + TEXTSIM(")"), + TEXT_TYPE(RegExpParser::rule_type::alternative | RegExpParser::rule_type::text, "\\g<"), + USE_RULE(RegExpParser::rule_type::none, RegExpParser::defrule::name), + TEXTSIM(">"), + TEXT_TYPE(RegExpParser::rule_type::alternative | RegExpParser::rule_type::text, "\\g\'"), + USE_RULE(RegExpParser::rule_type::none, RegExpParser::defrule::name), + TEXTSIM("\'"), + TEXT_TYPE(RegExpParser::rule_type::alternative | RegExpParser::rule_type::text, "\\g<"), + TEXT_TYPE(RegExpParser::rule_type::char_any | RegExpParser::rule_type::zero_one, "+-"), + USE_RULE(RegExpParser::rule_type::none, RegExpParser::defrule::digits), + TEXTSIM(">"), + TEXT_TYPE(RegExpParser::rule_type::alternative | RegExpParser::rule_type::text, "\\g\'"), + TEXT_TYPE(RegExpParser::rule_type::char_any | RegExpParser::rule_type::zero_one, "+-"), + USE_RULE(RegExpParser::rule_type::none, RegExpParser::defrule::digits), + TEXTSIM("\'"), + ZERO, START_R(RegExpParser::defrule::conditional_pattern), TEXTSIM("(?"), START_A_R(RegExpParser::rule_type::none),