*/
static const char escape_strings[] =
/* most common escaped stuff */
- "<\0\x3c\0"
- ">\0\x3e\0"
- "&\0\x26\0"
- " \0\x20\0" /* NOTE: this here to avoid escaping to   */
- " \0\x20\0" /* NOTE: we allow nsbp's to break as we map early - maybe map to ascii 0x01 and then make the rendering code think 0x01 -> 0x20 */
- ""\0\x22\0"
+ " \0" "\x20\0" /* NOTE: this here to avoid escaping to   */
+ " \0" "\x20\0" /* NOTE: we allow nsbp's to break as we map early - maybe map to ascii 0x01 and then make the rendering code think 0x01 -> 0x20 */
+ ""\0" "\x22\0"
+ "&\0" "\x26\0"
+ "<\0" "\x3c\0"
+ ">\0" "\x3e\0"
/* all the rest */
- "©\0\xc2\xa9\0"
- "®\0\xc2\xae\0"
- "…\0\xe2\x80\xa6\0"
- "Ñ\0\xc3\x91\0"
- "ñ\0\xc3\xb1\0"
- "Ç\0\xc3\x87\0"
- "ç\0\xc3\xa7\0"
- "ß\0\xc3\x9f\0"
- "Þ\0\xc3\x9e\0"
- "þ\0\xc3\xbe\0"
- "Ð\0\xc3\x90\0"
- "ð\0\xc3\xb0\0"
- "´\0\xc2\xb4\0"
- "¸\0\xc2\xb8\0"
- "°\0\xc2\xb0\0"
- "¨\0\xc2\xa8\0"
- "¢\0\xc2\xa2\0"
- "£\0\xc2\xa3\0"
- "¤\0\xc2\xa4\0"
- "¥\0\xc2\xa5\0"
- "€\0\xe2\x82\xac\0"
- "§\0\xc2\xa7\0"
- "¶\0\xc2\xb6\0"
- "«\0\xc2\xab\0"
- "»\0\xc2\xbb\0"
- "¡\0\xc2\xa1\0"
- "¿\0\xc2\xbf\0"
- "¦\0\xc2\xa6\0"
- "ª\0\xc2\xaa\0"
- "º\0\xc2\xba\0"
- "µ\0\xc2\xb5\0"
- "¯\0\xc2\xaf\0"
- "⊕\0\xe2\x8a\x95\0"
- "∫\0\xe2\x88\xab\0"
- "∑\0\xe2\x88\x91\0"
- "∏\0\xe2\x88\x8f\0"
- "⊥\0\xe2\x8a\xa5\0"
- "∨\0\xe2\x88\xa8\0"
- "∧\0\xe2\x88\xa7\0"
- "≡\0\xe2\x89\xa1\0"
- "≠\0\xe2\x89\xa0\0"
- "∀\0\xe2\x88\x80\0"
- "∃\0\xe2\x88\x83\0"
- "∇\0\xe2\x88\x87\0"
- "←\0\xe2\x86\x90\0"
- "→\0\xe2\x86\x92\0"
- "↑\0\xe2\x86\x91\0"
- "↓\0\xe2\x86\x93\0"
- "↔\0\xe2\x86\x94\0"
- "⇐\0\xe2\x87\x90\0"
- "⇒\0\xe2\x87\x92\0"
- "±\0\xc2\xb1\0"
- "·\0\xc2\xb7\0"
- "×\0\xc3\x97\0"
- "÷\0\xc3\xb7\0"
- "¹\0\xc2\xb9\0"
- "²\0\xc2\xb2\0"
- "³\0\xc2\xb3\0"
- "¼\0\xc2\xbc\0"
- "½\0\xc2\xbd\0"
- "¾\0\xc2\xbe\0"
- "¬\0\xc2\xac\0"
- "Á\0\xc3\x81\0"
- "É\0\xc3\x89\0"
- "Í\0\xc3\x8d\0"
- "Ó\0\xc3\x93\0"
- "Ú\0\xc3\x9a\0"
- "Ý\0\xc3\x9d\0"
- "á\0\xc3\xa1\0"
- "é\0\xc3\xa9\0"
- "í\0\xc3\xad\0"
- "ó\0\xc3\xb3\0"
- "ú\0\xc3\xba\0"
- "ý\0\xc3\xbd\0"
- "Â\0\xc3\x82\0"
- "Ê\0\xc3\x8a\0"
- "Î\0\xc3\x8e\0"
- "Ô\0\xc3\x94\0"
- "Û\0\xc3\x9b\0"
- "â\0\xc3\xa2\0"
- "ê\0\xc3\xaa\0"
- "î\0\xc3\xae\0"
- "ô\0\xc3\xb4\0"
- "û\0\xc3\xbb\0"
- "À\0\xc3\x80\0"
- "È\0\xc3\x88\0"
- "Ì\0\xc3\x8c\0"
- "Ò\0\xc3\x92\0"
- "Ù\0\xc3\x99\0"
- "à\0\xc3\xa0\0"
- "è\0\xc3\xa8\0"
- "ì\0\xc3\xac\0"
- "ò\0\xc3\xb2\0"
- "ù\0\xc3\xb9\0"
- "Ä\0\xc3\x84\0"
- "Ë\0\xc3\x8b\0"
- "Ï\0\xc3\x8f\0"
- "Ö\0\xc3\x96\0"
- "ä\0\xc3\xa4\0"
- "ë\0\xc3\xab\0"
- "ï\0\xc3\xaf\0"
- "ö\0\xc3\xb6\0"
- "ü\0\xc3\xbc\0"
- "ÿ\0\xc3\xbf\0"
- "Ã\0\xc3\x83\0"
- "ã\0\xc3\xa3\0"
- "Õ\0\xc3\x95\0"
- "õ\0\xc3\xb5\0"
- "å\0\xc3\xa5\0"
- "Å\0\xc3\x85\0"
- "Ø\0\xc3\x98\0"
- "ø\0\xc3\xb8\0"
- "Æ\0\xc3\x86\0"
- "æ\0\xc3\xa6\0"
- "Ñ\0\xc3\x91\0"
- "ñ\0\xc3\xb1\0"
- "Ç\0\xc3\x87\0"
- "ç\0\xc3\xa7\0"
- "ß\0\xc3\x9f\0"
- "Þ\0\xc3\x9e\0"
- "þ\0\xc3\xbe\0"
- "Ð\0\xc3\x90\0"
- "ð\0\xc3\xb0\0"
- "α\0\xce\xb1\0"
- "β\0\xce\xb2\0"
- "γ\0\xce\xb3\0"
- "δ\0\xce\xb4\0"
- "ε\0\xce\xb5\0"
- "ζ\0\xce\xb6\0"
- "η\0\xce\xb7\0"
- "θ\0\xce\xb8\0"
- "ι\0\xce\xb9\0"
- "κ\0\xce\xba\0"
- "λ\0\xce\xbb\0"
- "μ\0\xce\xbc\0"
- "ν\0\xce\xbd\0"
- "ο\0\xce\xbf\0"
- "ξ\0\xce\xbe\0"
- "π\0\xcf\x80\0"
- "ρ\0\xcf\x81\0"
- "σ\0\xcf\x83\0"
- "τ\0\xcf\x84\0"
- "υ\0\xcf\x85\0"
- "φ\0\xcf\x86\0"
- "χ\0\xcf\x87\0"
- "ψ\0\xcf\x88\0"
- "ω\0\xcf\x89\0"
- "Α\0\xce\x91\0"
- "Β\0\xce\x92\0"
- "Γ\0\xce\x93\0"
- "Δ\0\xce\x94\0"
- "Ε\0\xce\x95\0"
- "Ζ\0\xce\x96\0"
- "Η\0\xce\x97\0"
- "Θ\0\xce\x98\0"
- "Ι\0\xce\x99\0"
- "Κ\0\xce\x9a\0"
- "Λ\0\xce\x9b\0"
- "Μ\0\xce\x9c\0"
- "Ν\0\xce\x9d\0"
- "Ο\0\xce\x9f\0"
- "Ξ\0\xce\x9e\0"
- "Π\0\xce\xa0\0"
- "Ρ\0\xce\xa1\0"
- "Σ\0\xce\xa3\0"
- "Τ\0\xce\xa4\0"
- "Υ\0\xce\xa5\0"
- "Φ\0\xce\xa6\0"
- "Χ\0\xce\xa7\0"
- "Ψ\0\xce\xa8\0"
- "Ω\0\xce\xa9\0"
+ "¡\0" "\xc2\xa1\0"
+ "¢\0" "\xc2\xa2\0"
+ "£\0" "\xc2\xa3\0"
+ "¤\0" "\xc2\xa4\0"
+ "¥\0" "\xc2\xa5\0"
+ "¦\0" "\xc2\xa6\0"
+ "§\0" "\xc2\xa7\0"
+ "¨\0" "\xc2\xa8\0"
+ "©\0" "\xc2\xa9\0"
+ "ª\0" "\xc2\xaa\0"
+ "«\0" "\xc2\xab\0"
+ "¬\0" "\xc2\xac\0"
+ "®\0" "\xc2\xae\0"
+ "¯\0" "\xc2\xaf\0"
+ "°\0" "\xc2\xb0\0"
+ "±\0" "\xc2\xb1\0"
+ "²\0" "\xc2\xb2\0"
+ "³\0" "\xc2\xb3\0"
+ "´\0" "\xc2\xb4\0"
+ "µ\0" "\xc2\xb5\0"
+ "¶\0" "\xc2\xb6\0"
+ "·\0" "\xc2\xb7\0"
+ "¸\0" "\xc2\xb8\0"
+ "¹\0" "\xc2\xb9\0"
+ "º\0" "\xc2\xba\0"
+ "»\0" "\xc2\xbb\0"
+ "¼\0" "\xc2\xbc\0"
+ "½\0" "\xc2\xbd\0"
+ "¾\0" "\xc2\xbe\0"
+ "¿\0" "\xc2\xbf\0"
+ "à\0" "\xc3\x80\0"
+ "á\0" "\xc3\x81\0"
+ "â\0" "\xc3\x82\0"
+ "ã\0" "\xc3\x83\0"
+ "ä\0" "\xc3\x84\0"
+ "å\0" "\xc3\x85\0"
+ "æ\0" "\xc3\x86\0"
+ "ç\0" "\xc3\x87\0"
+ "ç\0" "\xc3\x87\0"
+ "è\0" "\xc3\x88\0"
+ "é\0" "\xc3\x89\0"
+ "ê\0" "\xc3\x8a\0"
+ "ë\0" "\xc3\x8b\0"
+ "ì\0" "\xc3\x8c\0"
+ "í\0" "\xc3\x8d\0"
+ "î\0" "\xc3\x8e\0"
+ "ï\0" "\xc3\x8f\0"
+ "ð\0" "\xc3\x90\0"
+ "ñ\0" "\xc3\x91\0"
+ "ñ\0" "\xc3\x91\0"
+ "ò\0" "\xc3\x92\0"
+ "ó\0" "\xc3\x93\0"
+ "ô\0" "\xc3\x94\0"
+ "õ\0" "\xc3\x95\0"
+ "ö\0" "\xc3\x96\0"
+ "×\0" "\xc3\x97\0"
+ "ø\0" "\xc3\x98\0"
+ "ù\0" "\xc3\x99\0"
+ "ú\0" "\xc3\x9a\0"
+ "û\0" "\xc3\x9b\0"
+ "ý\0" "\xc3\x9d\0"
+ "þ\0" "\xc3\x9e\0"
+ "ß\0" "\xc3\x9f\0"
+ "à\0" "\xc3\xa0\0"
+ "á\0" "\xc3\xa1\0"
+ "â\0" "\xc3\xa2\0"
+ "ã\0" "\xc3\xa3\0"
+ "ä\0" "\xc3\xa4\0"
+ "å\0" "\xc3\xa5\0"
+ "æ\0" "\xc3\xa6\0"
+ "ç\0" "\xc3\xa7\0"
+ "è\0" "\xc3\xa8\0"
+ "é\0" "\xc3\xa9\0"
+ "ê\0" "\xc3\xaa\0"
+ "ë\0" "\xc3\xab\0"
+ "ì\0" "\xc3\xac\0"
+ "í\0" "\xc3\xad\0"
+ "î\0" "\xc3\xae\0"
+ "ï\0" "\xc3\xaf\0"
+ "ð\0" "\xc3\xb0\0"
+ "ñ\0" "\xc3\xb1\0"
+ "ò\0" "\xc3\xb2\0"
+ "ó\0" "\xc3\xb3\0"
+ "ô\0" "\xc3\xb4\0"
+ "õ\0" "\xc3\xb5\0"
+ "ö\0" "\xc3\xb6\0"
+ "÷\0" "\xc3\xb7\0"
+ "ø\0" "\xc3\xb8\0"
+ "ù\0" "\xc3\xb9\0"
+ "ú\0" "\xc3\xba\0"
+ "û\0" "\xc3\xbb\0"
+ "ü\0" "\xc3\xbc\0"
+ "ý\0" "\xc3\xbd\0"
+ "þ\0" "\xc3\xbe\0"
+ "ÿ\0" "\xc3\xbf\0"
+ "α\0" "\xce\x91\0"
+ "β\0" "\xce\x92\0"
+ "γ\0" "\xce\x93\0"
+ "δ\0" "\xce\x94\0"
+ "ε\0" "\xce\x95\0"
+ "ζ\0" "\xce\x96\0"
+ "η\0" "\xce\x97\0"
+ "θ\0" "\xce\x98\0"
+ "ι\0" "\xce\x99\0"
+ "κ\0" "\xce\x9a\0"
+ "λ\0" "\xce\x9b\0"
+ "μ\0" "\xce\x9c\0"
+ "ν\0" "\xce\x9d\0"
+ "ξ\0" "\xce\x9e\0"
+ "ο\0" "\xce\x9f\0"
+ "π\0" "\xce\xa0\0"
+ "ρ\0" "\xce\xa1\0"
+ "σ\0" "\xce\xa3\0"
+ "τ\0" "\xce\xa4\0"
+ "υ\0" "\xce\xa5\0"
+ "φ\0" "\xce\xa6\0"
+ "χ\0" "\xce\xa7\0"
+ "ψ\0" "\xce\xa8\0"
+ "ω\0" "\xce\xa9\0"
+ "…\0" "\xe2\x80\xa6\0"
+ "€\0" "\xe2\x82\xac\0"
+ "←\0" "\xe2\x86\x90\0"
+ "↑\0" "\xe2\x86\x91\0"
+ "→\0" "\xe2\x86\x92\0"
+ "↓\0" "\xe2\x86\x93\0"
+ "↔\0" "\xe2\x86\x94\0"
+ "←\0" "\xe2\x87\x90\0"
+ "→\0" "\xe2\x87\x92\0"
+ "∀\0" "\xe2\x88\x80\0"
+ "∃\0" "\xe2\x88\x83\0"
+ "∇\0" "\xe2\x88\x87\0"
+ "∏\0" "\xe2\x88\x8f\0"
+ "∑\0" "\xe2\x88\x91\0"
+ "∧\0" "\xe2\x88\xa7\0"
+ "∨\0" "\xe2\x88\xa8\0"
+ "∫\0" "\xe2\x88\xab\0"
+ "≠\0" "\xe2\x89\xa0\0"
+ "≡\0" "\xe2\x89\xa1\0"
+ "⊕\0" "\xe2\x8a\x95\0"
+ "⊥\0" "\xe2\x8a\xa5\0"
;
match = 1;
while ((*mc) && (*sc))
{
+ if ((unsigned char)*sc < (unsigned char)*mc) return NULL;
if (*sc != *mc) match = 0;
mc++;
sc++;
return NULL;
}
-static inline void
-_append_escaped_char(Evas_Textblock_Cursor *cur, const char *s,
- const char *s_end)
+static inline const char *
+_escaped_char_get(const char *s, const char *s_end)
{
const char *map_itr, *map_end;
while (map_itr < map_end)
{
if (_is_eq_and_advance(s, s_end, &map_itr, map_end))
- {
- evas_textblock_cursor_text_append(cur, map_itr);
- return;
- }
-
+ return map_itr;
if (map_itr < map_itr)
_advance_after_end_of_string(&map_itr);
}
+ return NULL;
+}
+
+EAPI const char *
+evas_textblock_escape_string_get(const char *escape)
+{
+ /* & -> & */
+ return _escaped_char_get(escape, escape + strlen(escape));
+}
+
+EAPI const char *
+evas_textblock_string_escape_get(const char *string, int *len_ret)
+{
+ /* & -> & */
+ return _escaped_char_match(string, len_ret);
+}
+
+static inline void
+_append_escaped_char(Evas_Textblock_Cursor *cur, const char *s,
+ const char *s_end)
+{
+ const char *escape;
+
+ escape = _escaped_char_get(s, s_end);
+ if (escape)
+ evas_textblock_cursor_text_append(cur, escape);
}
static inline void
free(o->markup_text);
o->markup_text = NULL;
}
+ _nodes_adjacent_merge(cur->obj, n);
evas_object_change(cur->obj);
}
free(o->markup_text);
o->markup_text = NULL;
}
+ _nodes_adjacent_merge(cur->obj, n);
evas_object_change(cur->obj);
}
Evas_Object_Textblock_Node *n, *nc, *n2;
if (!cur) return;
+ if ((!format) || (format[0] == 0)) return;
o = (Evas_Object_Textblock *)(cur->obj->object_data);
nc = cur->node;
n = calloc(1, sizeof(Evas_Object_Textblock_Node));
Evas_Object_Textblock_Node *n, *nc, *n2;
if (!cur) return;
+ if ((!format) || (format[0] == 0)) return;
o = (Evas_Object_Textblock *)(cur->obj->object_data);
nc = cur->node;
n = calloc(1, sizeof(Evas_Object_Textblock_Node));