ext/xhtml.c in redcarpet-1.11.4 vs ext/xhtml.c in redcarpet-1.12.0
- old
+ new
@@ -145,18 +145,28 @@
rndr_blockcode(struct buf *ob, struct buf *text, struct buf *lang, void *opaque)
{
if (ob->size) bufputc(ob, '\n');
if (lang && lang->size) {
- size_t i = 0;
+ size_t i, cls;
BUFPUTSL(ob, "<pre><code class=\"");
- for (i = 0; i < lang->size; ++i) {
- if (lang->data[i] == '.' && (i == 0 || isspace(lang->data[i - 1])))
- continue;
+ for (i = 0, cls = 0; i < lang->size; ++i, ++cls) {
+ while (i < lang->size && isspace(lang->data[i]))
+ i++;
- bufputc(ob, lang->data[i]);
+ if (i < lang->size) {
+ size_t org = i;
+ while (i < lang->size && !isspace(lang->data[i]))
+ i++;
+
+ if (lang->data[org] == '.')
+ org++;
+
+ if (cls) bufputc(ob, ' ');
+ attr_escape(ob, lang->data + org, i - org);
+ }
}
BUFPUTSL(ob, "\">");
} else
BUFPUTSL(ob, "<pre><code>");
@@ -192,17 +202,16 @@
if (lang && lang->size) {
size_t i = 0;
BUFPUTSL(ob, "<pre lang=\"");
- for (; i < lang->size; ++i)
- if (isspace(lang->data[i]))
- break;
+ while (i < lang->size && !isspace(lang->data[i]))
+ i++;
if (lang->data[0] == '.')
- bufput(ob, lang->data + 1, i - 1);
+ attr_escape(ob, lang->data + 1, i - 1);
else
- bufput(ob, lang->data, i);
+ attr_escape(ob, lang->data, i);
BUFPUTSL(ob, "\"><code>");
} else
BUFPUTSL(ob, "<pre><code>");