Overview
SHA1 Hash: | 26af399a5c96dc30fa494a3b69c2ad643537b642 |
---|---|
Date: | 2009-05-09 06:19:39 |
User: | robert |
Comment: | mods to creole parser and add some default style for creole tables. |
Timelines: | ancestors | descendants | both | creole |
Other Links: | files | ZIP archive | manifest |
Tags And Properties
- bgcolor=#c0ffc0 inherited from [ecd1f09632]
- branch=creole inherited from [ecd1f09632]
- sym-creole inherited from [ecd1f09632]
Changes
[hide diffs]Modified src/creoleparser.c from [2c19d7097f] to [803615829f].
@@ -36,41 +36,45 @@ //{{{ LOCAL INTERFACE #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; @@ -111,12 +115,10 @@ }; -//}}} - //}}} #endif const int KIND_LIST = (KIND_UNORDERED_LIST | KIND_ORDERED_LIST); @@ -360,11 +362,11 @@ char *s = p->icursor + 3; 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++; } @@ -372,31 +374,52 @@ } //}}} 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){//{{{ @@ -582,10 +605,12 @@ } //}}} //}}} +//{{{ BLOCK PARSER + static void cr_renderListItem(Parser *p, Node *n){//{{{ blob_append(p->iblob, "<li>", 4); cr_parseInline(p, n->start, n->end); @@ -606,12 +631,12 @@ if (ord) blob_append(p->iblob, "</ol>", 5); 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; @@ -658,11 +683,10 @@ if (!s) break; } blob_append(p->iblob, "</tr>", 5); } //}}} - static void cr_renderTable(Parser *p, Node *n){//{{{ Node *row = n->children; blob_append(p->iblob, "<table class='creoletable'>", -1); @@ -677,27 +701,26 @@ p->inTable = 0; } //}}} - static void cr_render(Parser *p, Node *node){//{{{ if (node->kind & KIND_PARAGRAPH){ blob_append(p->iblob, "\n<p>", -1); cr_parseInline(p, node->start, node->end ); 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){ blob_append(p->iblob, "<hr />", -1); @@ -722,11 +745,10 @@ ); } } //}}} - static char *cr_findEndOfBlock(Parser *p, char *s, char c){//{{{ char *end; while (s[0]){ @@ -743,11 +765,10 @@ } } return 0; } //}}} - static int cr_addListItem(Parser *p, Node *n){//{{{ n->parent = n; n->next = n->children = NULL; @@ -782,11 +803,10 @@ p->list = n; return 1; } //}}} - static int isEndWikiMarker(Parser *p){//{{{ char *s = p->cursor; if (memcmp(s, "<<fossil>>", 10)) return 0; @@ -832,14 +852,21 @@ //}}} 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); char *z = s; @@ -850,10 +877,11 @@ if (p->this->start < s){ p->cursor = z; p->this->kind = KIND_HEADING; p->this->end = s; p->this->level = level; + p->this->flags |= flags; return 1; } return 0; } //}}} @@ -1007,10 +1035,12 @@ p->previous = p->this; p->this = pool_new(p); } } +//}}} + //}}} char *wiki_render_creole(Renderer *r, char *z){//{{{ Parser parser;
Modified src/style.c from [d90354f0ea] to [b19bc65e46].
@@ -412,10 +412,31 @@ @ } @ table.fossil_db_generic_query_view tr.header { @ background: #558195; @ font-size: 1.5em; @ color: #ffffff; +@ } +@ .creoletable { +@ border: 1px solid #666666; +@ border-spacing: 0; +@ margin: 1.5em 2em 1.8em 2em; +@ } +@ .creoletable * tr th { +@ font-size: 100%; +@ padding: .5em .7em .5em .7em; +@ border-left: 1px solid #666666; +@ background-color: #558195; +@ vertical-align: bottom; +@ color: white; +@ empty-cells: show; +@ } +@ .creoletable * tr td { +@ padding: .4em .7em .45em .7em; +@ border-left: 1px solid #D9D9D9; +@ border-top: 1px solid #D9D9D9; +@ vertical-align: center; +@ empty-cells: show; @ } ; /* ** WEBPAGE: style.css