q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=266fd9bb368bf80b80809b364543d788efc334dd
commit 266fd9bb368bf80b80809b364543d788efc334dd Author: Daniel Kolesa <[email protected]> Date: Fri Sep 13 16:56:43 2019 +0200 eolian: support complex monospace syntax $[...] This is to allow monospace bits with periods, commas and other non-alphabetical characters. Newlines are not supported (they end the block) and escapes are supported (for ]). Fixes T8213. --- src/bin/eolian/docs.c | 50 ++++++++++++++++++++++++++++++++++++---- src/lib/eolian/eolian_database.c | 26 +++++++++++++++++++-- 2 files changed, 70 insertions(+), 6 deletions(-) diff --git a/src/bin/eolian/docs.c b/src/bin/eolian/docs.c index 0e0d359109..e9af2e867f 100644 --- a/src/bin/eolian/docs.c +++ b/src/bin/eolian/docs.c @@ -126,7 +126,6 @@ _append_section(const Eolian_State *state, const char *desc, int ind, int curl, Eina_Bool try_note = EINA_TRUE; while (*desc) { - eina_strbuf_reset(wbuf); while (*desc && isspace(*desc) && (*desc != '\n')) eina_strbuf_append_char(wbuf, *desc++); if (try_note) @@ -155,6 +154,8 @@ _append_section(const Eolian_State *state, const char *desc, int ind, int curl, #undef CHECK_NOTE try_note = EINA_FALSE; } + int limit = DOC_LIMIT(ind); + int wlen; if (*desc == '\\') { desc++; @@ -180,7 +181,47 @@ _append_section(const Eolian_State *state, const char *desc, int ind, int curl, } else if (*desc == '$') { - desc++; + if (*++desc == '[') + { + ++desc; + eina_strbuf_append(wbuf, "<tt>"); + wlen = eina_strbuf_length_get(wbuf); + while ((*desc != '\0') && (*desc != ']') && (*desc != '\n')) + { + if (*desc == ' ') + { + eina_strbuf_append_char(wbuf, ' '); + wlen = eina_strbuf_length_get(wbuf); + if ((int)(curl + wlen) > limit) + { + curl = 3; + eina_strbuf_append_char(buf, '\n'); + curl += _indent_line(buf, ind); + eina_strbuf_append(buf, " * "); + if (*eina_strbuf_string_get(wbuf) == ' ') + eina_strbuf_remove(wbuf, 0, 1); + } + curl += eina_strbuf_length_get(wbuf); + eina_strbuf_append(buf, eina_strbuf_string_get(wbuf)); + eina_strbuf_reset(wbuf); + ++desc; + continue; + } + /* skip escape */ + if (*desc == '\\') + { + ++desc; + if ((*desc == '\0') || (*desc == '\n')) + break; + } + eina_strbuf_append_char(wbuf, *desc++); + } + if (*desc == ']') + ++desc; + eina_strbuf_append(wbuf, "</tt>"); + curl += 5; + goto split; + } if (isalpha(*desc)) eina_strbuf_append(wbuf, "@c "); else @@ -188,8 +229,8 @@ _append_section(const Eolian_State *state, const char *desc, int ind, int curl, } while (*desc && !isspace(*desc)) eina_strbuf_append_char(wbuf, *desc++); - int limit = DOC_LIMIT(ind); - int wlen = eina_strbuf_length_get(wbuf); +split: + wlen = eina_strbuf_length_get(wbuf); if ((int)(curl + wlen) > limit) { curl = 3; @@ -201,6 +242,7 @@ _append_section(const Eolian_State *state, const char *desc, int ind, int curl, } curl += eina_strbuf_length_get(wbuf); eina_strbuf_append(buf, eina_strbuf_string_get(wbuf)); + eina_strbuf_reset(wbuf); if (*desc == '\n') { desc++; diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c index 5553616903..9aa6b8f87b 100644 --- a/src/lib/eolian/eolian_database.c +++ b/src/lib/eolian/eolian_database.c @@ -314,7 +314,6 @@ eolian_documentation_tokenize(const char *doc, Eolian_Doc_Token *ret) #undef CMP_MARK_NOTE mloop: - /* monospace markup ($foo) */ if ((doc[0] == '$') && ((doc[1] == '_') || isalpha(doc[1]))) { @@ -326,6 +325,28 @@ mloop: return ret->text_end; } + /* complex monospace markup ($[...]) */ + if ((doc[0] == '$') && (doc[1] == '[')) + { + doc += 2; + ret->text = doc; + ret->text_end = ret->text; + while ((ret->text_end[0] != '\0') && (ret->text_end[0] != ']') && + (ret->text_end[0] != '\n')) + { + /* escape: skip backslash */ + if ((ret->text_end[0] == '\\') && (ret->text_end[1] != '\0') && + (ret->text_end[1] != '\n')) + ++ret->text_end; + ++ret->text_end; + } + ret->type = EOLIAN_DOC_TOKEN_MARKUP_MONOSPACE; + /* return past the ending bracket as that's markup syntax */ + if (ret->text_end[0] == ']') + return ret->text_end + 1; + return ret->text_end; + } + /* references */ Eolian_Doc_Token_Type rtp = _get_ref_token(doc, &ret->text_end); if (rtp != EOLIAN_DOC_TOKEN_UNKNOWN) @@ -349,7 +370,8 @@ mloop: continue; } /* monospace markup */ - if ((schr[0] == '$') && ((schr[1] == '_') || isalpha(schr[1]))) + if ((schr[0] == '$') && ( + (schr[1] == '_') || (schr[1] == '[') || isalpha(schr[1]))) { pschr = schr; break; --
