@@ -37,39 +37,43 @@
#if LOCAL_INTERFACE
#define POOL_CHUNK_SIZE 100
-#define KIND_ROOT 0x0000001
-#define KIND_HORIZONTAL_RULE 0x0000002
-#define KIND_HEADING 0x0000004
-#define KIND_ORDERED_LIST 0x0000008
-
-#define KIND_UNORDERED_LIST 0x0000010
-#define KIND_PARAGRAPH 0x0000020
-#define KIND_TABLE 0x0000040
-#define KIND_NO_WIKI_BLOCK 0x0000080
-
-#define KIND_PARA_BREAK 0x0000100
-#define KIND_END_WIKI_MARKER 0x0000200
-
-#define KIND_BOLD 0x0000400
-#define KIND_ITALIC 0x0000800
-#define KIND_SUPERSCRIPT 0x0001000
-#define KIND_SUBSCRIPT 0x0002000
-#define KIND_MONOSPACED 0x0004000
-#define KIND_BREAK 0x0008000
-
-#define KIND_TABLE_ROW 0x0010000
-
-#define KIND_MARKER
-
+//{{{ KIND
+#define KIND_ROOT 0x0000001
+#define KIND_HORIZONTAL_RULE 0x0000002
+#define KIND_HEADING 0x0000004
+#define KIND_ORDERED_LIST 0x0000008
+
+#define KIND_UNORDERED_LIST 0x0000010
+#define KIND_PARAGRAPH 0x0000020
+#define KIND_TABLE 0x0000040
+#define KIND_NO_WIKI_BLOCK 0x0000080
+
+#define KIND_PARA_BREAK 0x0000100
+#define KIND_END_WIKI_MARKER 0x0000200
+
+#define KIND_BOLD 0x0000400
+#define KIND_ITALIC 0x0000800
+#define KIND_SUPERSCRIPT 0x0001000
+#define KIND_SUBSCRIPT 0x0002000
+#define KIND_MONOSPACED 0x0004000
+#define KIND_BREAK 0x0008000
+
+#define KIND_TABLE_ROW 0x0010000
+//}}}
+//{{{ FLAG
+// keep first four bits free
+#define FLAG_CENTER 0x0000100
+//}}}
struct Node {//{{{
char *start;
char *end;
int kind;
int level;
+ int flags;
Node *parent;
Node *next;
Node *children;
@@ -112,10 +116,8 @@
};
-//}}}
-
//}}}
#endif
@@ -361,9 +363,9 @@
int count = p->iend - p->icursor - 6;
while (count--){
if (s[0]=='}' && s[1]=='}' && s[2]=='}' && s[3]!='}'){
- blob_appendf(p->iblob, "<tt style='background:yellow'>%s</tt>", htmlize(p->icursor + 3, s - p->icursor-3));
+ blob_appendf(p->iblob, "<tt style='background:oldlace'>%s</tt>", htmlize(p->icursor + 3, s - p->icursor-3));
p->icursor = s + 3;
return 1;
}
s++;
@@ -373,29 +375,50 @@
//}}}
static int cr_iImage(Parser *p){//{{{
- if ((p->iend - p->icursor)<4) return 0;
-
- if (p->icursor[1]!='{')
- return 0;
+ if (p->inLink) return 0;
+ if ((p->iend - p->icursor)<3) return 0;
+
+ if (p->icursor[1]!='{') return 0;
char *s = p->icursor + 2;
+ char *bar = NULL;
int count = p->iend - p->icursor - 4;
while (count--){
if (s[0]=='}' && s[1]=='}'){
- blob_appendf(p->iblob, "<span style='color:blue;'>%s</span>", htmlize(p->icursor+2, s - p->icursor-2));
+ if (!bar) bar = p->icursor + 2;
+ blob_appendf(p->iblob, "<span style='color:green;border:1px solid green;'>%s</span>", htmlize(bar, s - bar ));
p->icursor = s + 2;
return 1;
}
+ if (!bar && s[0]=='|') bar=s+1;
s++;
}
return 0;
}
//}}}
static int cr_iMacro(Parser *p){//{{{
- return 0;
+
+ if (p->inLink) return 0;
+ if ((p->iend - p->icursor)<3) return 0;
+
+ if (p->icursor[1]!='<') return 0;
+
+ char *s = p->icursor + 2;
+
+ int count = p->iend - p->icursor - 4;
+ while (count--){
+ if (s[0]=='>' && s[1]=='>'){
+ blob_appendf(p->iblob, "<span style='color:red;border:1px solid red;'>%s</span>", htmlize(p->icursor, s - p->icursor + 2));
+ p->icursor = s + 2;
+ return 1;
+ }
+ s++;
+ }
+ return 0;
+
}
//}}}
static void cr_renderLink(Parser *p, char *s, char *bar, char *e){//{{{
@@ -583,8 +606,10 @@
}
//}}}
//}}}
+//{{{ BLOCK PARSER
+
static void cr_renderListItem(Parser *p, Node *n){//{{{
blob_append(p->iblob, "<li>", 4);
@@ -607,10 +632,10 @@
else blob_append(p->iblob, "</ul>", 5);
}
blob_append(p->iblob, "</li>", 5);
}
-
-static void cr_renderList(Parser *p){
+//}}}
+static void cr_renderList(Parser *p){//{{{
Node *n = p->list;
while (n->parent !=n) n = n->parent;
@@ -659,9 +684,8 @@
}
blob_append(p->iblob, "</tr>", 5);
}
//}}}
-
static void cr_renderTable(Parser *p, Node *n){//{{{
Node *row = n->children;
@@ -678,9 +702,8 @@
}
//}}}
-
static void cr_render(Parser *p, Node *node){//{{{
if (node->kind & KIND_PARAGRAPH){
blob_append(p->iblob, "\n<p>", -1);
@@ -688,15 +711,15 @@
blob_append(p->iblob, "</p>\n", -1 );
}
if (node->kind & KIND_HEADING){
-
blob_appendf(p->iblob,
- "\n<h%d>%s</h%d>\n",
+ "\n<h%d %s>",
node->level,
- htmlize(node->start, node->end - node->start),
- node->level
+ (node->flags & FLAG_CENTER) ? " style='text-align:center;'" : ""
);
+ cr_parseInline(p, node->start, node->end);
+ blob_appendf(p->iblob, "</h%d>\n", node->level );
return;
}
if (node->kind & KIND_HORIZONTAL_RULE){
@@ -723,9 +746,8 @@
}
}
//}}}
-
static char *cr_findEndOfBlock(Parser *p, char *s, char c){//{{{
char *end;
while (s[0]){
@@ -744,9 +766,8 @@
}
return 0;
}
//}}}
-
static int cr_addListItem(Parser *p, Node *n){//{{{
n->parent = n;
n->next = n->children = NULL;
@@ -783,9 +804,8 @@
return 1;
}
//}}}
-
static int isEndWikiMarker(Parser *p){//{{{
char *s = p->cursor;
@@ -833,12 +853,19 @@
static int isHeading(Parser *p){//{{{
char *s = cr_skipBlanks(p, p->cursor);
+ int flags = 0;
int level = cr_countChars(p, s, '=');
if (!level) return 0;
- s = cr_skipBlanks(p, s + level);
+ s += level;
+
+ if (s[0] == '<' && s[1] == '>') {
+ flags |= FLAG_CENTER;
+ s += 2;
+ }
+ s = cr_skipBlanks(p, s);
p->this->start = s;
s = cr_nextLine(p, s);
@@ -851,8 +878,9 @@
p->cursor = z;
p->this->kind = KIND_HEADING;
p->this->end = s;
p->this->level = level;
+ p->this->flags |= flags;
return 1;
}
return 0;
}
@@ -1008,8 +1036,10 @@
p->this = pool_new(p);
}
}
+//}}}
+
//}}}
char *wiki_render_creole(Renderer *r, char *z){//{{{