Added rule "subroutine_reference" for PCRE editor.

Подсветка синтаксиса добавлена для этого правила PCRE.
This commit is contained in:
lsv 2025-01-04 22:52:38 +05:00
parent 96dde8b019
commit c01b1118f0
2 changed files with 38 additions and 3 deletions

View file

@ -41,6 +41,7 @@ ctlStyledText::ctlStyledText(wxWindow* parent, wxWindowID id, const wxPoint& pos
Create(parent, id, pos, size, style); Create(parent, id, pos, size, style);
m_regparser.SetStyleControl(this); m_regparser.SetStyleControl(this);
setDecorate(); setDecorate();
//RegExpParser::TEST();
} }
void ctlStyledText::OnPositionStc(wxStyledTextEvent& event) { 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; for (int i = 0; i < sizeof(stylemap) / sizeof(stylemap[0]); i++) stylemap[i] = -1;
wxColour bgdef = ctrl->GetBackgroundColour(); wxColour bgdef = ctrl->GetBackgroundColour();
wxColour fgdef = ctrl->GetForegroundColour(); wxColour fgdef = ctrl->GetForegroundColour();
tablestyle.push_back(styletextdef{ fgdef,wxColour("#ddd0fe") }); // 00 verb tablestyle.push_back(styletextdef{ fgdef,wxColour("#ddd0fe") }); // 0 verb
tablestyle.push_back(styletextdef{ fgdef,wxColour("#fed1ff") }); // 1 capture (reed) 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("#e3e3e3") }); // 2 backslash
tablestyle.push_back(styletextdef{ fgdef,wxColour("#d3a776") }); // 3 class char tablestyle.push_back(styletextdef{ fgdef,wxColour("#d3a776") }); // 3 class char
tablestyle.push_back(styletextdef{ fgdef,wxColour("#99beff") }); // 4 quantifier tablestyle.push_back(styletextdef{ fgdef,wxColour("#99beff") }); // 4 quantifier
tablestyle.push_back(styletextdef{ wxColour("#989898"),bgdef }); // 5 comment 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 tablestyle.push_back(styletextdef{ fgdef,wxColour("#ed5c65") }); // last color. error bg
stylemap[0] = tablestyle.size() - 1; // 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] = 6;
stylemap[defrule::capture_1] = 6; stylemap[defrule::capture_1] = 6;
stylemap[defrule::conditional_pattern] = 1; stylemap[defrule::conditional_pattern] = 1;
stylemap[defrule::subroutine_reference] = 7;
//wxLogNull logNo; //wxLogNull logNo;
int count = 0; int count = 0;
int userstyle = wxSTC_STYLE_LASTPREDEFINED + 1; int userstyle = wxSTC_STYLE_LASTPREDEFINED + 1;

View file

@ -73,6 +73,7 @@ public:
character_class_atom, character_class_atom,
character_class, character_class,
conditional_pattern, conditional_pattern,
subroutine_reference,
call_out, call_out,
other, other,
@ -119,7 +120,9 @@ public:
const char* const t7[] = { ".","\\V", "\\p{^ssa&}","\\psd" }; const char* const t7[] = { ".","\\V", "\\p{^ssa&}","\\psd" };
const char* const t8[] = { "[[:^digit:]]", "[[:digit:]]" }; const char* const t8[] = { "[[:^digit:]]", "[[:digit:]]" };
const char* const t9[] = { "(?(sd)ffff)","(?(-23)cond_expr|no_expr_cond)" }; 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::pcre, t5, sizeof(t5) / sizeof(t5[0]));
test_2(RegExpParser::defrule::conditional_pattern, t9, sizeof(t9) / sizeof(t9[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])); 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::atomic_group),
USE_RULE(RegExpParser::rule_type::alternative, RegExpParser::defrule::lookaround), 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::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::conditional_pattern),
USE_RULE(RegExpParser::rule_type::alternative, RegExpParser::defrule::comment), USE_RULE(RegExpParser::rule_type::alternative, RegExpParser::defrule::comment),
USE_RULE(RegExpParser::rule_type::alternative, RegExpParser::defrule::capture), 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), USE_RULE(RegExpParser::rule_type::zero_one, RegExpParser::defrule::digits),
TEXTSIM(")"), TEXTSIM(")"),
ZERO, 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), START_R(RegExpParser::defrule::conditional_pattern),
TEXTSIM("(?"), TEXTSIM("(?"),
START_A_R(RegExpParser::rule_type::none), START_A_R(RegExpParser::rule_type::none),