Diff
Not logged in

Differences From:

File src/creoleparser.c part of check-in [b877d2cfcd] - Whoops - forgot to add the parser! by robert on 2009-05-08 10:04:59. [view]

To:

File src/creoleparser.c part of check-in [26af399a5c] - mods to creole parser and add some default style for creole tables. by robert on 2009-05-09 06:19:39. [view]

@@ -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){//{{{