@@ -23,6 +23,12 @@ wxUniChar tag_char(wxUniChar c) {
2323 else return c;
2424}
2525
26+ // Is a character the "end" of the tag name?
27+ // don't mistake <tag> as <t>, only <t>, <t-stuff> and <t:stuff> are considered <t>
28+ bool is_tag_end_char (Char c) {
29+ return c == ' >' || c == ' -' || c == ' :' || c == ' ' ;
30+ }
31+
2632
2733String untag (const String& str) {
2834 bool in_tag = false ;
@@ -156,6 +162,14 @@ String fix_old_tags(const String& str) {
156162 return skip_all_tags (it, end, after_open, after_close);
157163}
158164
165+ [[nodiscard]] bool is_tag (String::const_iterator it, String::const_iterator end, const char * tag) {
166+ for (; *tag; ++it, ++tag) {
167+ if (it == end || *it != *tag) return false ;
168+ }
169+ if (it == end || !is_tag_end_char (*it)) return false ;
170+ return true ;
171+ }
172+
159173/*
160174// Does the string [it..end) contain the matching close tag for [tag..tag_end)?
161175bool is_close_tag(String::const_iterator it, String::const_iterator end, String::const_iterator tag, String::const_iterator tag_end) {
@@ -253,11 +267,6 @@ String::const_iterator find_close_tag(String::const_iterator tag, String::const_
253267 return String::npos;
254268}
255269
256- // don't mistake <tag> as <t>, only <t>, <t-stuff> and <t:stuff> are considered <t>
257- bool is_tag_end_char (Char c) {
258- return c == ' >' || c == ' -' || c == ' :' || c == ' ' ;
259- }
260-
261270bool is_tag (const String& str, size_t pos, const String& tag) {
262271 return is_substr (str, pos, tag) && pos+tag.size () < str.size () && is_tag_end_char (str[pos+tag.size ()]);
263272}
0 commit comments