0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20 /*.** Copyright
0010: 28 63 29 20 32 30 30 39 20 52 6f 62 65 72 74 20 (c) 2009 Robert
0020: 4c 65 64 67 65 72 0a 2a 2a 0a 2a 2a 20 7b 7b 7b Ledger.**.** {{{
0030: 20 4c 69 63 65 6e 73 65 0a 2a 2a 0a 2a 2a 20 54 License.**.** T
0040: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 his program is f
0050: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f ree software; yo
0060: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 u can redistribu
0070: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20 te it and/or.**
0080: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20 modify it under
0090: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 the terms of the
00a0: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 GNU General Pub
00b0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 76 lic.** License v
00c0: 65 72 73 69 6f 6e 20 32 20 61 73 20 70 75 62 6c ersion 2 as publ
00d0: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65 ished by the Fre
00e0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 e Software Found
00f0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 ation..**.** Thi
0100: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 s program is dis
0110: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 tributed in the
0120: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c hope that it wil
0130: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 l be useful,.**
0140: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 but WITHOUT ANY
0150: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 WARRANTY; withou
0160: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 t even the impli
0170: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a ed warranty of.*
0180: 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 * MERCHANTABILIT
0190: 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 Y or FITNESS FOR
01a0: 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 A PARTICULAR PU
01b0: 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 20 RPOSE. See the
01c0: 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 50 GNU.** General P
01d0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f ublic License fo
01e0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a r more details..
01f0: 2a 2a 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c 64 **.** You should
0200: 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 61 have received a
0210: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e 55 copy of the GNU
0220: 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 0a General Public.
0230: 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e 67 ** License along
0240: 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72 61 with this libra
0250: 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69 74 ry; if not, writ
0260: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65 65 e to the.** Free
0270: 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 Software Founda
0280: 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20 54 tion, Inc., 59 T
0290: 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53 75 emple Place - Su
02a0: 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73 74 ite 330,.** Bost
02b0: 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31 33 on, MA 02111-13
02c0: 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20 41 07, USA..**.** A
02d0: 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69 6e uthor contact in
02e0: 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 20 formation:.**
02f0: 72 6f 62 65 72 74 40 70 79 74 72 61 73 68 2e 63 robert@pytrash.c
0300: 6f 2e 75 6b 0a 2a 2a 20 20 20 68 74 74 70 3a 2f o.uk.** http:/
0310: 2f 70 79 74 72 61 73 68 2e 63 6f 2e 75 6b 0a 2a /pytrash.co.uk.*
0320: 2a 7d 7d 7d 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a *}}}.***********
0330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0370: 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 ****.**.** This
0380: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f file contains co
0390: 64 65 20 74 6f 20 72 65 6e 64 65 72 20 63 72 65 de to render cre
03a0: 6f 6c 65 20 31 2e 30 20 66 6f 72 6d 61 74 65 64 ole 1.0 formated
03b0: 20 74 65 78 74 20 61 73 20 68 74 6d 6c 2e 0a 2a text as html..*
03c0: 2f 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 /.#include <asse
03d0: 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 22 rt.h>.#include "
03e0: 63 6f 6e 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75 config.h".#inclu
03f0: 64 65 20 22 63 72 65 6f 6c 65 70 61 72 73 65 72 de "creoleparser
0400: 2e 68 22 0a 0a 23 69 66 20 49 4e 54 45 52 46 41 .h"..#if INTERFA
0410: 43 45 0a 23 64 65 66 69 6e 65 20 48 41 56 45 5f CE.#define HAVE_
0420: 4d 41 43 52 4f 5f 45 58 54 45 4e 53 49 4f 4e 53 MACRO_EXTENSIONS
0430: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2f 7b 7b 7b 1.#endif..//{{{
0440: 20 4c 4f 43 41 4c 20 49 4e 54 45 52 46 41 43 45 LOCAL INTERFACE
0450: 0a 23 69 66 20 4c 4f 43 41 4c 5f 49 4e 54 45 52 .#if LOCAL_INTER
0460: 46 41 43 45 0a 0a 23 64 65 66 69 6e 65 20 50 4f FACE..#define PO
0470: 4f 4c 5f 43 48 55 4e 4b 5f 53 49 5a 45 20 31 30 OL_CHUNK_SIZE 10
0480: 30 0a 0a 2f 2f 7b 7b 7b 20 4b 49 4e 44 0a 23 64 0..//{{{ KIND.#d
0490: 65 66 69 6e 65 20 4b 49 4e 44 5f 52 4f 4f 54 20 efine KIND_ROOT
04a0: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 0x000
04b0: 30 30 30 31 0a 23 64 65 66 69 6e 65 20 4b 49 4e 0001.#define KIN
04c0: 44 5f 48 4f 52 49 5a 4f 4e 54 41 4c 5f 52 55 4c D_HORIZONTAL_RUL
04d0: 45 20 30 78 30 30 30 30 30 30 32 0a 23 64 65 66 E 0x0000002.#def
04e0: 69 6e 65 20 4b 49 4e 44 5f 48 45 41 44 49 4e 47 ine KIND_HEADING
04f0: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30 30 0x00000
0500: 30 34 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 04.#define KIND_
0510: 4f 52 44 45 52 45 44 5f 4c 49 53 54 20 20 20 20 ORDERED_LIST
0520: 30 78 30 30 30 30 30 30 38 0a 0a 23 64 65 66 69 0x0000008..#defi
0530: 6e 65 20 4b 49 4e 44 5f 55 4e 4f 52 44 45 52 45 ne KIND_UNORDERE
0540: 44 5f 4c 49 53 54 20 20 30 78 30 30 30 30 30 31 D_LIST 0x000001
0550: 30 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 50 0.#define KIND_P
0560: 41 52 41 47 52 41 50 48 20 20 20 20 20 20 20 30 ARAGRAPH 0
0570: 78 30 30 30 30 30 32 30 0a 23 64 65 66 69 6e 65 x0000020.#define
0580: 20 4b 49 4e 44 5f 54 41 42 4c 45 20 20 20 20 20 KIND_TABLE
0590: 20 20 20 20 20 20 30 78 30 30 30 30 30 34 30 0a 0x0000040.
05a0: 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 4e 4f 5f #define KIND_NO_
05b0: 57 49 4b 49 5f 42 4c 4f 43 4b 20 20 20 30 78 30 WIKI_BLOCK 0x0
05c0: 30 30 30 30 38 30 0a 0a 23 64 65 66 69 6e 65 20 000080..#define
05d0: 4b 49 4e 44 5f 50 41 52 41 5f 42 52 45 41 4b 20 KIND_PARA_BREAK
05e0: 20 20 20 20 20 30 78 30 30 30 30 31 30 30 0a 23 0x0000100.#
05f0: 64 65 66 69 6e 65 20 4b 49 4e 44 5f 45 4e 44 5f define KIND_END_
0600: 57 49 4b 49 5f 4d 41 52 4b 45 52 20 30 78 30 30 WIKI_MARKER 0x00
0610: 30 30 32 30 30 0a 0a 23 64 65 66 69 6e 65 20 4b 00200..#define K
0620: 49 4e 44 5f 42 4f 4c 44 20 20 20 20 20 20 20 20 IND_BOLD
0630: 20 20 20 20 30 78 30 30 30 30 34 30 30 0a 23 64 0x0000400.#d
0640: 65 66 69 6e 65 20 4b 49 4e 44 5f 49 54 41 4c 49 efine KIND_ITALI
0650: 43 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 C 0x000
0660: 30 38 30 30 0a 23 64 65 66 69 6e 65 20 4b 49 4e 0800.#define KIN
0670: 44 5f 53 55 50 45 52 53 43 52 49 50 54 20 20 20 D_SUPERSCRIPT
0680: 20 20 30 78 30 30 30 31 30 30 30 0a 23 64 65 66 0x0001000.#def
0690: 69 6e 65 20 4b 49 4e 44 5f 53 55 42 53 43 52 49 ine KIND_SUBSCRI
06a0: 50 54 20 20 20 20 20 20 20 30 78 30 30 30 32 30 PT 0x00020
06b0: 30 30 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 00.#define KIND_
06c0: 4d 4f 4e 4f 53 50 41 43 45 44 20 20 20 20 20 20 MONOSPACED
06d0: 30 78 30 30 30 34 30 30 30 0a 23 64 65 66 69 6e 0x0004000.#defin
06e0: 65 20 4b 49 4e 44 5f 42 52 45 41 4b 20 20 20 20 e KIND_BREAK
06f0: 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30 30 0x0008000
0700: 0a 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 54 ..#define KIND_T
0710: 41 42 4c 45 5f 52 4f 57 20 20 20 20 20 20 20 30 ABLE_ROW 0
0720: 78 30 30 31 30 30 30 30 0a 2f 2f 7d 7d 7d 0a 2f x0010000.//}}}./
0730: 2f 7b 7b 7b 20 46 4c 41 47 0a 2f 2f 20 6b 65 65 /{{{ FLAG.// kee
0740: 70 20 66 69 72 73 74 20 66 6f 75 72 20 62 69 74 p first four bit
0750: 73 20 66 72 65 65 0a 23 64 65 66 69 6e 65 20 46 s free.#define F
0760: 4c 41 47 5f 43 45 4e 54 45 52 09 20 30 78 30 30 LAG_CENTER. 0x00
0770: 30 30 31 30 30 0a 2f 2f 7d 7d 7d 0a 73 74 72 75 00100.//}}}.stru
0780: 63 74 20 4e 6f 64 65 20 7b 2f 2f 7b 7b 7b 0a 0a ct Node {//{{{..
0790: 09 63 68 61 72 20 2a 73 74 61 72 74 3b 0a 09 63 .char *start;..c
07a0: 68 61 72 20 2a 65 6e 64 3b 0a 0a 09 69 6e 74 20 har *end;...int
07b0: 6b 69 6e 64 3b 0a 09 69 6e 74 20 6c 65 76 65 6c kind;..int level
07c0: 3b 0a 09 69 6e 74 20 66 6c 61 67 73 3b 0a 0a 09 ;..int flags;...
07d0: 4e 6f 64 65 20 2a 70 61 72 65 6e 74 3b 0a 09 4e Node *parent;..N
07e0: 6f 64 65 20 2a 6e 65 78 74 3b 0a 09 4e 6f 64 65 ode *next;..Node
07f0: 20 2a 63 68 69 6c 64 72 65 6e 3b 0a 0a 7d 3b 0a *children;..};.
0800: 2f 2f 7d 7d 7d 0a 73 74 72 75 63 74 20 4e 6f 64 //}}}.struct Nod
0810: 65 50 6f 6f 6c 20 7b 2f 2f 7b 7b 7b 0a 09 4e 6f ePool {//{{{..No
0820: 64 65 50 6f 6f 6c 20 2a 6e 65 78 74 3b 0a 09 4e dePool *next;..N
0830: 6f 64 65 20 61 5b 50 4f 4f 4c 5f 43 48 55 4e 4b ode a[POOL_CHUNK
0840: 5f 53 49 5a 45 5d 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a _SIZE];.}.//}}}.
0850: 73 74 72 75 63 74 20 50 61 72 73 65 72 20 7b 2f struct Parser {/
0860: 2f 7b 7b 7b 0a 0a 09 42 6c 6f 62 20 2a 70 4f 75 /{{{...Blob *pOu
0870: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t;
0880: 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 61 70 70 /* Output app
0890: 65 6e 64 65 64 20 74 6f 20 74 68 69 73 20 62 6c ended to this bl
08a0: 6f 62 20 2a 2f 0a 09 52 65 6e 64 65 72 65 72 20 ob */..Renderer
08b0: 2a 72 3b 0a 0a 09 4e 6f 64 65 50 6f 6f 6c 20 2a *r;...NodePool *
08c0: 70 6f 6f 6c 3b 0a 09 69 6e 74 20 6e 46 72 65 65 pool;..int nFree
08d0: 3b 0a 0a 20 20 4e 6f 64 65 20 2a 74 68 69 73 3b ;.. Node *this;
08e0: 0a 09 4e 6f 64 65 20 2a 70 72 65 76 69 6f 75 73 ..Node *previous
08f0: 3b 0a 09 4e 6f 64 65 20 2a 6c 69 73 74 3b 0a 0a ;..Node *list;..
0900: 09 63 68 61 72 20 2a 63 75 72 73 6f 72 3b 0a 0a .char *cursor;..
0910: 09 69 6e 74 20 6c 69 6e 65 57 61 73 42 6c 61 6e .int lineWasBlan
0920: 6b 3b 0a 09 69 6e 74 20 63 68 61 72 43 6f 75 6e k;..int charCoun
0930: 74 3b 0a 0a 09 4e 6f 64 65 20 2a 69 74 65 6d 3b t;...Node *item;
0940: 0a 09 4e 6f 64 65 20 2a 69 73 74 61 63 6b 3b 0a ..Node *istack;.
0950: 09 63 68 61 72 20 2a 69 63 75 72 73 6f 72 3b 0a .char *icursor;.
0960: 09 63 68 61 72 20 2a 69 65 6e 64 3b 0a 0a 09 69 .char *iend;...i
0970: 6e 74 20 69 6e 4c 69 6e 6b 3b 0a 09 69 6e 74 20 nt inLink;..int
0980: 69 6e 54 61 62 6c 65 3b 0a 09 69 6e 74 20 69 65 inTable;..int ie
0990: 73 63 3b 0a 0a 09 42 6c 6f 62 20 2a 69 62 6c 6f sc;...Blob *iblo
09a0: 62 3b 0a 0a 0a 0a 0a 7d 3b 0a 2f 2f 7d 7d 7d 0a b;.....};.//}}}.
09b0: 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 69 .#endif..const i
09c0: 6e 74 20 4b 49 4e 44 5f 4c 49 53 54 20 3d 20 28 nt KIND_LIST = (
09d0: 4b 49 4e 44 5f 55 4e 4f 52 44 45 52 45 44 5f 4c KIND_UNORDERED_L
09e0: 49 53 54 20 7c 20 4b 49 4e 44 5f 4f 52 44 45 52 IST | KIND_ORDER
09f0: 45 44 5f 4c 49 53 54 29 3b 0a 63 6f 6e 73 74 20 ED_LIST);.const
0a00: 69 6e 74 20 4b 49 4e 44 5f 4c 49 53 54 5f 4f 52 int KIND_LIST_OR
0a10: 5f 50 41 52 41 47 52 41 50 48 20 3d 20 28 4b 49 _PARAGRAPH = (KI
0a20: 4e 44 5f 50 41 52 41 47 52 41 50 48 20 7c 20 4b ND_PARAGRAPH | K
0a30: 49 4e 44 5f 55 4e 4f 52 44 45 52 45 44 5f 4c 49 IND_UNORDERED_LI
0a40: 53 54 20 7c 20 4b 49 4e 44 5f 4f 52 44 45 52 45 ST | KIND_ORDERE
0a50: 44 5f 4c 49 53 54 29 3b 0a 2f 2f 7d 7d 7d 0a 0a D_LIST);.//}}}..
0a60: 2f 2f 7b 7b 7b 20 50 4f 4f 4c 20 4d 41 4e 41 47 //{{{ POOL MANAG
0a70: 45 4d 45 4e 54 0a 73 74 61 74 69 63 20 4e 6f 64 EMENT.static Nod
0a80: 65 20 2a 70 6f 6f 6c 5f 6e 65 77 28 50 61 72 73 e *pool_new(Pars
0a90: 65 72 20 2a 70 29 7b 0a 0a 09 69 66 20 28 20 70 er *p){...if ( p
0aa0: 2d 3e 70 6f 6f 6c 20 3d 3d 20 4e 55 4c 4c 20 7c ->pool == NULL |
0ab0: 7c 20 70 2d 3e 6e 46 72 65 65 20 3d 3d 20 30 29 | p->nFree == 0)
0ac0: 7b 0a 0a 09 09 4e 6f 64 65 50 6f 6f 6c 20 2a 74 {....NodePool *t
0ad0: 65 6d 70 20 3d 20 70 2d 3e 70 6f 6f 6c 3b 0a 0a emp = p->pool;..
0ae0: 09 09 70 2d 3e 70 6f 6f 6c 20 3d 20 6d 61 6c 6c ..p->pool = mall
0af0: 6f 63 28 73 69 7a 65 6f 66 28 4e 6f 64 65 50 6f oc(sizeof(NodePo
0b00: 6f 6c 29 29 3b 0a 09 09 69 66 28 20 70 2d 3e 70 ol));...if( p->p
0b10: 6f 6f 6c 20 3d 3d 20 4e 55 4c 4c 20 29 20 66 6f ool == NULL ) fo
0b20: 73 73 69 6c 5f 70 61 6e 69 63 28 22 6f 75 74 20 ssil_panic("out
0b30: 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 0a 09 09 of memory");....
0b40: 70 2d 3e 70 6f 6f 6c 2d 3e 6e 65 78 74 20 3d 20 p->pool->next =
0b50: 74 65 6d 70 3b 0a 09 09 70 2d 3e 6e 46 72 65 65 temp;...p->nFree
0b60: 20 3d 20 50 4f 4f 4c 5f 43 48 55 4e 4b 5f 53 49 = POOL_CHUNK_SI
0b70: 5a 45 3b 0a 09 7d 0a 09 70 2d 3e 6e 46 72 65 65 ZE;..}..p->nFree
0b80: 20 2d 3d 20 31 3b 0a 09 4e 6f 64 65 20 2a 6e 6f -= 1;..Node *no
0b90: 64 65 20 3d 20 26 28 70 2d 3e 70 6f 6f 6c 2d 3e de = &(p->pool->
0ba0: 61 5b 70 2d 3e 6e 46 72 65 65 5d 29 3b 0a 09 6d a[p->nFree]);..m
0bb0: 65 6d 73 65 74 28 6e 6f 64 65 2c 20 30 2c 20 73 emset(node, 0, s
0bc0: 69 7a 65 6f 66 28 2a 6e 6f 64 65 29 29 3b 0a 0a izeof(*node));..
0bd0: 09 72 65 74 75 72 6e 20 6e 6f 64 65 3b 0a 7d 0a .return node;.}.
0be0: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 6f ..static void po
0bf0: 6f 6c 5f 66 72 65 65 28 50 61 72 73 65 72 20 2a ol_free(Parser *
0c00: 70 29 7b 0a 0a 09 4e 6f 64 65 50 6f 6f 6c 20 2a p){...NodePool *
0c10: 74 65 6d 70 3b 0a 0a 09 77 68 69 6c 65 20 28 70 temp;...while (p
0c20: 2d 3e 70 6f 6f 6c 20 21 3d 20 4e 55 4c 4c 29 7b ->pool != NULL){
0c30: 0a 09 09 74 65 6d 70 20 3d 20 70 2d 3e 70 6f 6f ...temp = p->poo
0c40: 6c 3b 0a 09 09 70 2d 3e 70 6f 6f 6c 20 3d 20 74 l;...p->pool = t
0c50: 65 6d 70 2d 3e 6e 65 78 74 3b 0a 09 09 66 72 65 emp->next;...fre
0c60: 65 28 74 65 6d 70 29 3b 0a 09 7d 0a 0a 7d 0a 2f e(temp);..}..}./
0c70: 2f 7d 7d 7d 0a 0a 2f 2f 7b 7b 7b 20 55 74 69 6c /}}}..//{{{ Util
0c80: 69 74 79 20 4d 65 74 68 6f 64 73 0a 0a 73 74 61 ity Methods..sta
0c90: 74 69 63 20 63 68 61 72 20 2a 63 72 5f 73 6b 69 tic char *cr_ski
0ca0: 70 42 6c 61 6e 6b 73 28 50 61 72 73 65 72 20 2a pBlanks(Parser *
0cb0: 70 2c 20 63 68 61 72 2a 20 7a 29 7b 2f 2f 7b 7b p, char* z){//{{
0cc0: 7b 0a 09 63 68 61 72 20 2a 73 20 3d 20 7a 3b 0a {..char *s = z;.
0cd0: 09 77 68 69 6c 65 20 28 7a 5b 30 5d 20 3d 3d 20 .while (z[0] ==
0ce0: 27 20 27 20 7c 7c 20 7a 5b 30 5d 20 3d 3d 20 27 ' ' || z[0] == '
0cf0: 5c 74 27 29 20 7a 2b 2b 3b 0a 09 70 2d 3e 63 68 \t') z++;..p->ch
0d00: 61 72 43 6f 75 6e 74 20 3d 20 7a 20 2d 20 73 3b arCount = z - s;
0d10: 0a 09 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 2f 2f ..return z;.}.//
0d20: 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 63 }}}.static int c
0d30: 72 5f 63 6f 75 6e 74 42 6c 61 6e 6b 73 28 50 61 r_countBlanks(Pa
0d40: 72 73 65 72 20 2a 70 2c 20 63 68 61 72 2a 20 7a rser *p, char* z
0d50: 29 7b 2f 2f 7b 7b 7b 0a 09 63 72 5f 73 6b 69 70 ){//{{{..cr_skip
0d60: 42 6c 61 6e 6b 73 28 70 2c 20 7a 29 3b 0a 09 72 Blanks(p, z);..r
0d70: 65 74 75 72 6e 20 70 2d 3e 63 68 61 72 43 6f 75 eturn p->charCou
0d80: 6e 74 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 nt;.}.//}}}.stat
0d90: 69 63 20 63 68 61 72 20 2a 63 72 5f 73 6b 69 70 ic char *cr_skip
0da0: 43 68 61 72 73 28 50 61 72 73 65 72 20 2a 70 2c Chars(Parser *p,
0db0: 20 63 68 61 72 20 2a 7a 2c 20 63 68 61 72 20 63 char *z, char c
0dc0: 29 7b 2f 2f 7b 7b 7b 0a 09 63 68 61 72 20 2a 73 ){//{{{..char *s
0dd0: 20 3d 20 7a 3b 0a 09 77 68 69 6c 65 20 28 7a 5b = z;..while (z[
0de0: 30 5d 20 3d 3d 20 63 29 20 7a 2b 2b 3b 0a 09 70 0] == c) z++;..p
0df0: 2d 3e 63 68 61 72 43 6f 75 6e 74 20 3d 20 7a 20 ->charCount = z
0e00: 2d 20 73 3b 0a 09 72 65 74 75 72 6e 20 7a 3b 0a - s;..return z;.
0e10: 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 }.//}}}.static i
0e20: 6e 74 20 63 72 5f 63 6f 75 6e 74 43 68 61 72 73 nt cr_countChars
0e30: 28 50 61 72 73 65 72 20 2a 70 2c 20 63 68 61 72 (Parser *p, char
0e40: 20 2a 7a 2c 20 63 68 61 72 20 63 29 7b 2f 2f 7b *z, char c){//{
0e50: 7b 7b 0a 09 63 72 5f 73 6b 69 70 43 68 61 72 73 {{..cr_skipChars
0e60: 28 70 2c 20 7a 2c 20 63 29 3b 0a 09 72 65 74 75 (p, z, c);..retu
0e70: 72 6e 20 70 2d 3e 63 68 61 72 43 6f 75 6e 74 3b rn p->charCount;
0e80: 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 .}.//}}}.static
0e90: 63 68 61 72 20 2a 63 72 5f 6e 65 78 74 4c 69 6e char *cr_nextLin
0ea0: 65 28 50 61 72 73 65 72 20 2a 70 2c 20 63 68 61 e(Parser *p, cha
0eb0: 72 20 2a 7a 29 7b 2f 2f 7b 7b 7b 0a 0a 09 70 2d r *z){//{{{...p-
0ec0: 3e 6c 69 6e 65 57 61 73 42 6c 61 6e 6b 20 3d 20 >lineWasBlank =
0ed0: 31 3b 0a 0a 09 77 68 69 6c 65 20 28 31 29 7b 0a 1;...while (1){.
0ee0: 0a 09 09 73 77 69 74 63 68 20 28 7a 5b 30 5d 29 ...switch (z[0])
0ef0: 7b 0a 0a 09 09 09 63 61 73 65 20 27 5c 72 27 3a {.....case '\r':
0f00: 0a 09 09 09 09 69 66 20 28 7a 5b 31 5d 20 3d 3d .....if (z[1] ==
0f10: 20 27 5c 6e 27 29 20 7b 0a 09 09 09 09 09 7a 5b '\n') {......z[
0f20: 30 5d 20 3d 20 27 20 27 3b 0a 09 09 09 09 09 72 0] = ' ';......r
0f30: 65 74 75 72 6e 20 7a 20 2b 20 32 3b 0a 09 09 09 eturn z + 2;....
0f40: 09 7d 0a 09 09 09 09 7a 5b 30 5d 20 3d 20 27 5c .}.....z[0] = '\
0f50: 6e 27 3b 0a 09 09 09 09 72 65 74 75 72 6e 20 7a n';.....return z
0f60: 20 2b 20 31 3b 0a 0a 09 09 09 63 61 73 65 27 5c + 1;.....case'\
0f70: 6e 27 3a 0a 09 09 09 09 72 65 74 75 72 6e 20 7a n':.....return z
0f80: 20 2b 20 31 3b 0a 0a 09 09 09 63 61 73 65 20 27 + 1;.....case '
0f90: 5c 74 27 3a 0a 09 09 09 09 7a 5b 30 5d 20 3d 20 \t':.....z[0] =
0fa0: 27 20 27 3b 0a 09 09 09 09 7a 2b 2b 3b 0a 09 09 ' ';.....z++;...
0fb0: 09 09 62 72 65 61 6b 3b 0a 0a 09 09 09 63 61 73 ..break;.....cas
0fc0: 65 20 27 20 27 3a 0a 09 09 09 09 7a 2b 2b 3b 0a e ' ':.....z++;.
0fd0: 09 09 09 09 62 72 65 61 6b 3b 0a 0a 09 09 09 63 ....break;.....c
0fe0: 61 73 65 20 27 5c 30 27 3a 0a 09 09 09 09 72 65 ase '\0':.....re
0ff0: 74 75 72 6e 20 7a 3b 0a 0a 09 09 09 64 65 66 61 turn z;.....defa
1000: 75 6c 74 3a 0a 09 09 09 09 70 2d 3e 6c 69 6e 65 ult:.....p->line
1010: 57 61 73 42 6c 61 6e 6b 20 3d 20 30 3b 0a 09 09 WasBlank = 0;...
1020: 09 09 7a 2b 2b 3b 0a 09 09 7d 0a 09 7d 0a 7d 0a ..z++;...}..}.}.
1030: 2f 2f 7d 7d 7d 0a 2f 2f 7d 7d 7d 0a 0a 2f 2f 7b //}}}.//}}}..//{
1040: 7b 7b 20 49 4e 4c 49 4e 45 20 50 41 52 53 45 52 {{ INLINE PARSER
1050: 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 5f ..static int cr_
1060: 69 73 45 73 63 28 50 61 72 73 65 72 20 2a 70 29 isEsc(Parser *p)
1070: 7b 2f 2f 7b 7b 7b 0a 09 69 66 20 28 70 2d 3e 69 {//{{{..if (p->i
1080: 65 73 63 29 7b 0a 09 09 62 6c 6f 62 5f 61 70 70 esc){...blob_app
1090: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 70 2d end(p->iblob, p-
10a0: 3e 69 63 75 72 73 6f 72 2c 20 31 29 3b 0a 09 09 >icursor, 1);...
10b0: 70 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 09 09 70 p->iesc = 0;...p
10c0: 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 31 3b 0a ->icursor += 1;.
10d0: 09 09 72 65 74 75 72 6e 20 31 3b 0a 09 7d 0a 09 ..return 1;..}..
10e0: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d return 0;.}.//}}
10f0: 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 5f }.static int cr_
1100: 69 4f 70 65 6e 28 50 61 72 73 65 72 20 2a 70 2c iOpen(Parser *p,
1110: 20 69 6e 74 20 6b 69 6e 64 29 7b 2f 2f 7b 7b 7b int kind){//{{{
1120: 0a 0a 09 73 77 69 74 63 68 20 28 6b 69 6e 64 29 ...switch (kind)
1130: 7b 0a 0a 09 09 63 61 73 65 20 4b 49 4e 44 5f 42 {....case KIND_B
1140: 4f 4c 44 3a 0a 09 09 09 62 6c 6f 62 5f 61 70 70 OLD:....blob_app
1150: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c end(p->iblob, "<
1160: 73 74 72 6f 6e 67 3e 22 2c 20 38 29 3b 0a 09 09 strong>", 8);...
1170: 09 72 65 74 75 72 6e 20 31 3b 0a 0a 09 09 63 61 .return 1;....ca
1180: 73 65 20 4b 49 4e 44 5f 49 54 41 4c 49 43 3a 0a se KIND_ITALIC:.
1190: 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 ...blob_append(p
11a0: 2d 3e 69 62 6c 6f 62 2c 20 22 3c 65 6d 3e 22 2c ->iblob, "<em>",
11b0: 20 34 29 3b 0a 09 09 09 72 65 74 75 72 6e 20 31 4);....return 1
11c0: 3b 0a 0a 09 09 63 61 73 65 20 4b 49 4e 44 5f 53 ;....case KIND_S
11d0: 55 50 45 52 53 43 52 49 50 54 3a 0a 09 09 09 62 UPERSCRIPT:....b
11e0: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 lob_append(p->ib
11f0: 6c 6f 62 2c 20 22 3c 73 75 70 3e 22 2c 20 35 29 lob, "<sup>", 5)
1200: 3b 0a 09 09 09 72 65 74 75 72 6e 20 31 3b 0a 0a ;....return 1;..
1210: 09 09 63 61 73 65 20 4b 49 4e 44 5f 53 55 42 53 ..case KIND_SUBS
1220: 43 52 49 50 54 3a 0a 09 09 09 62 6c 6f 62 5f 61 CRIPT:....blob_a
1230: 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 ppend(p->iblob,
1240: 22 3c 73 75 62 3e 22 2c 20 35 29 3b 0a 09 09 09 "<sub>", 5);....
1250: 72 65 74 75 72 6e 20 31 3b 0a 0a 09 09 63 61 73 return 1;....cas
1260: 65 20 4b 49 4e 44 5f 4d 4f 4e 4f 53 50 41 43 45 e KIND_MONOSPACE
1270: 44 3a 0a 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e D:....blob_appen
1280: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 74 74 d(p->iblob, "<tt
1290: 3e 22 2c 20 34 29 3b 0a 09 09 09 72 65 74 75 72 >", 4);....retur
12a0: 6e 20 31 3b 0a 09 7d 0a 09 72 65 74 75 72 6e 20 n 1;..}..return
12b0: 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 0;.}.//}}}.stati
12c0: 63 20 69 6e 74 20 63 72 5f 69 43 6c 6f 73 65 28 c int cr_iClose(
12d0: 50 61 72 73 65 72 20 2a 70 2c 20 69 6e 74 20 6b Parser *p, int k
12e0: 69 6e 64 29 7b 2f 2f 7b 7b 7b 0a 0a 09 73 77 69 ind){//{{{...swi
12f0: 74 63 68 20 28 6b 69 6e 64 29 7b 0a 0a 09 09 63 tch (kind){....c
1300: 61 73 65 20 4b 49 4e 44 5f 42 4f 4c 44 3a 0a 09 ase KIND_BOLD:..
1310: 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d ..blob_append(p-
1320: 3e 69 62 6c 6f 62 2c 20 22 3c 2f 73 74 72 6f 6e >iblob, "</stron
1330: 67 3e 22 2c 20 39 29 3b 0a 09 09 09 72 65 74 75 g>", 9);....retu
1340: 72 6e 20 31 3b 0a 0a 09 09 63 61 73 65 20 4b 49 rn 1;....case KI
1350: 4e 44 5f 49 54 41 4c 49 43 3a 0a 09 09 09 62 6c ND_ITALIC:....bl
1360: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
1370: 6f 62 2c 20 22 3c 2f 65 6d 3e 22 2c 20 35 29 3b ob, "</em>", 5);
1380: 0a 09 09 09 72 65 74 75 72 6e 20 31 3b 0a 0a 09 ....return 1;...
1390: 09 63 61 73 65 20 4b 49 4e 44 5f 53 55 50 45 52 .case KIND_SUPER
13a0: 53 43 52 49 50 54 3a 0a 09 09 09 62 6c 6f 62 5f SCRIPT:....blob_
13b0: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
13c0: 20 22 3c 2f 73 75 70 3e 22 2c 20 36 29 3b 0a 09 "</sup>", 6);..
13d0: 09 09 72 65 74 75 72 6e 20 31 3b 0a 0a 09 09 63 ..return 1;....c
13e0: 61 73 65 20 4b 49 4e 44 5f 53 55 42 53 43 52 49 ase KIND_SUBSCRI
13f0: 50 54 3a 0a 09 09 09 62 6c 6f 62 5f 61 70 70 65 PT:....blob_appe
1400: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f nd(p->iblob, "</
1410: 73 75 62 3e 22 2c 20 36 29 3b 0a 09 09 09 72 65 sub>", 6);....re
1420: 74 75 72 6e 20 31 3b 0a 0a 09 09 63 61 73 65 20 turn 1;....case
1430: 4b 49 4e 44 5f 4d 4f 4e 4f 53 50 41 43 45 44 3a KIND_MONOSPACED:
1440: 0a 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 ....blob_append(
1450: 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 74 74 3e p->iblob, "</tt>
1460: 22 2c 20 35 29 3b 0a 09 09 09 72 65 74 75 72 6e ", 5);....return
1470: 20 31 3b 0a 09 7d 0a 09 72 65 74 75 72 6e 20 30 1;..}..return 0
1480: 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 0a 73 74 61 74 ;.}.//}}}...stat
1490: 69 63 20 76 6f 69 64 20 63 72 5f 69 4d 61 72 6b ic void cr_iMark
14a0: 75 70 28 50 61 72 73 65 72 20 2a 70 2c 20 69 6e up(Parser *p, in
14b0: 74 20 6b 69 6e 64 29 7b 2f 2f 7b 7b 7b 0a 0a 09 t kind){//{{{...
14c0: 69 66 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a 09 if (p->iesc) {..
14d0: 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e .blob_append(p->
14e0: 69 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f iblob, p->icurso
14f0: 72 2c 20 31 29 3b 0a 09 09 70 2d 3e 69 63 75 72 r, 1);...p->icur
1500: 73 6f 72 20 2b 3d 31 3b 0a 09 09 70 2d 3e 69 65 sor +=1;...p->ie
1510: 73 63 20 3d 30 3b 0a 09 09 72 65 74 75 72 6e 3b sc =0;...return;
1520: 0a 09 7d 0a 0a 09 69 66 20 28 70 2d 3e 69 63 75 ..}...if (p->icu
1530: 72 73 6f 72 5b 31 5d 20 21 3d 20 70 2d 3e 69 63 rsor[1] != p->ic
1540: 75 72 73 6f 72 5b 30 5d 29 20 7b 0a 09 09 62 6c ursor[0]) {...bl
1550: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
1560: 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72 2c 20 ob, p->icursor,
1570: 31 29 3b 0a 09 09 70 2d 3e 69 63 75 72 73 6f 72 1);...p->icursor
1580: 20 2b 3d 31 3b 0a 09 09 72 65 74 75 72 6e 3b 0a +=1;...return;.
1590: 09 7d 0a 0a 09 70 2d 3e 69 63 75 72 73 6f 72 20 .}...p->icursor
15a0: 2b 3d 20 32 3b 0a 0a 09 69 66 20 28 6b 69 6e 64 += 2;...if (kind
15b0: 20 26 20 4b 49 4e 44 5f 42 52 45 41 4b 29 20 7b & KIND_BREAK) {
15c0: 0a 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 ....blob_append(
15d0: 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 62 72 20 2f p->iblob, "<br /
15e0: 3e 22 2c 20 36 29 3b 0a 09 09 09 72 65 74 75 72 >", 6);....retur
15f0: 6e 3b 0a 09 7d 0a 0a 09 69 66 20 28 6b 69 6e 64 n;..}...if (kind
1600: 20 26 20 4b 49 4e 44 5f 49 54 41 4c 49 43 20 26 & KIND_ITALIC &
1610: 26 20 70 2d 3e 69 63 75 72 73 6f 72 5b 2d 33 5d & p->icursor[-3]
1620: 20 3d 3d 20 27 3a 27 29 7b 0a 09 09 09 09 62 6c == ':'){.....bl
1630: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
1640: 6f 62 2c 20 22 2f 2f 22 2c 20 32 29 3b 0a 09 09 ob, "//", 2);...
1650: 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 4e ..return;..}...N
1660: 6f 64 65 20 2a 6e 20 3d 20 70 2d 3e 69 73 74 61 ode *n = p->ista
1670: 63 6b 3b 0a 0a 09 69 6e 74 20 66 6f 75 6e 64 20 ck;...int found
1680: 3d 20 30 3b 0a 09 77 68 69 6c 65 20 28 6e 29 20 = 0;..while (n)
1690: 7b 0a 09 09 69 66 20 28 6e 2d 3e 6b 69 6e 64 20 {...if (n->kind
16a0: 26 20 6b 69 6e 64 29 20 7b 0a 09 09 09 66 6f 75 & kind) {....fou
16b0: 6e 64 20 3d 20 31 3b 0a 09 09 09 62 72 65 61 6b nd = 1;....break
16c0: 3b 0a 09 09 7d 0a 09 09 6e 20 3d 20 6e 2d 3e 6e ;...}...n = n->n
16d0: 65 78 74 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 66 ext;..}...if (!f
16e0: 6f 75 6e 64 29 20 7b 0a 09 09 6e 20 3d 20 70 6f ound) {...n = po
16f0: 6f 6c 5f 6e 65 77 28 70 29 3b 0a 09 09 6e 2d 3e ol_new(p);...n->
1700: 6b 69 6e 64 20 3d 20 6b 69 6e 64 3b 0a 09 09 6e kind = kind;...n
1710: 2d 3e 6e 65 78 74 20 3d 20 70 2d 3e 69 73 74 61 ->next = p->ista
1720: 63 6b 3b 0a 09 09 70 2d 3e 69 73 74 61 63 6b 20 ck;...p->istack
1730: 3d 20 6e 3b 0a 0a 09 09 61 73 73 65 72 74 28 63 = n;....assert(c
1740: 72 5f 69 4f 70 65 6e 28 70 2c 20 6b 69 6e 64 29 r_iOpen(p, kind)
1750: 29 3b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 3b );...return;..};
1760: 0a 0a 09 6e 3d 20 70 2d 3e 69 73 74 61 63 6b 3b ...n= p->istack;
1770: 0a 09 77 68 69 6c 65 20 28 6e 29 7b 0a 09 09 70 ..while (n){...p
1780: 2d 3e 69 73 74 61 63 6b 20 3d 20 6e 2d 3e 6e 65 ->istack = n->ne
1790: 78 74 3b 0a 0a 09 09 61 73 73 65 72 74 28 63 72 xt;....assert(cr
17a0: 5f 69 43 6c 6f 73 65 28 70 2c 20 6e 2d 3e 6b 69 _iClose(p, n->ki
17b0: 6e 64 29 29 3b 0a 0a 09 09 69 66 20 28 6b 69 6e nd));....if (kin
17c0: 64 20 3d 3d 20 6e 2d 3e 6b 69 6e 64 29 20 72 65 d == n->kind) re
17d0: 74 75 72 6e 3b 0a 09 09 6e 20 3d 20 70 2d 3e 69 turn;...n = p->i
17e0: 73 74 61 63 6b 3b 0a 09 7d 0a 7d 0a 2f 2f 7d 7d stack;..}.}.//}}
17f0: 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 5f }.static int cr_
1800: 69 4e 6f 57 69 6b 69 28 50 61 72 73 65 72 20 2a iNoWiki(Parser *
1810: 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 69 66 20 28 28 p){//{{{...if ((
1820: 70 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 63 75 p->iend - p->icu
1830: 72 73 6f 72 29 3c 36 29 20 72 65 74 75 72 6e 20 rsor)<6) return
1840: 30 3b 0a 0a 09 69 66 20 28 70 2d 3e 69 63 75 72 0;...if (p->icur
1850: 73 6f 72 5b 31 5d 21 3d 27 7b 27 20 7c 7c 20 70 sor[1]!='{' || p
1860: 2d 3e 69 63 75 72 73 6f 72 5b 32 5d 21 3d 27 7b ->icursor[2]!='{
1870: 27 29 0a 09 09 72 65 74 75 72 6e 20 30 3b 0a 0a ')...return 0;..
1880: 09 63 68 61 72 20 2a 73 20 3d 20 70 2d 3e 69 63 .char *s = p->ic
1890: 75 72 73 6f 72 20 2b 20 33 3b 0a 0a 09 69 6e 74 ursor + 3;...int
18a0: 20 63 6f 75 6e 74 20 3d 20 70 2d 3e 69 65 6e 64 count = p->iend
18b0: 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2d 20 - p->icursor -
18c0: 36 3b 0a 09 77 68 69 6c 65 20 28 63 6f 75 6e 74 6;..while (count
18d0: 2d 2d 29 7b 0a 09 09 69 66 20 28 73 5b 30 5d 3d --){...if (s[0]=
18e0: 3d 27 7d 27 20 26 26 20 73 5b 31 5d 3d 3d 27 7d ='}' && s[1]=='}
18f0: 27 20 26 26 20 73 5b 32 5d 3d 3d 27 7d 27 20 26 ' && s[2]=='}' &
1900: 26 20 73 5b 33 5d 21 3d 27 7d 27 29 7b 0a 09 09 & s[3]!='}'){...
1910: 09 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 2d .blob_appendf(p-
1920: 3e 69 62 6c 6f 62 2c 20 22 3c 74 74 20 73 74 79 >iblob, "<tt sty
1930: 6c 65 3d 27 62 61 63 6b 67 72 6f 75 6e 64 3a 6f le='background:o
1940: 6c 64 6c 61 63 65 27 3e 25 73 3c 2f 74 74 3e 22 ldlace'>%s</tt>"
1950: 2c 20 68 74 6d 6c 69 7a 65 28 70 2d 3e 69 63 75 , htmlize(p->icu
1960: 72 73 6f 72 20 2b 20 33 2c 20 73 20 2d 20 70 2d rsor + 3, s - p-
1970: 3e 69 63 75 72 73 6f 72 2d 33 29 29 3b 0a 09 09 >icursor-3));...
1980: 09 70 2d 3e 69 63 75 72 73 6f 72 20 3d 20 73 20 .p->icursor = s
1990: 2b 20 33 3b 0a 09 09 09 72 65 74 75 72 6e 20 31 + 3;....return 1
19a0: 3b 0a 09 09 7d 0a 09 09 73 2b 2b 3b 0a 09 7d 0a ;...}...s++;..}.
19b0: 09 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2f .return 0;.}..//
19c0: 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 63 }}}.static int c
19d0: 72 5f 69 49 6d 61 67 65 28 50 61 72 73 65 72 20 r_iImage(Parser
19e0: 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 69 66 20 28 *p){//{{{...if (
19f0: 70 2d 3e 69 6e 4c 69 6e 6b 29 20 72 65 74 75 72 p->inLink) retur
1a00: 6e 20 30 3b 0a 09 69 66 20 28 28 70 2d 3e 69 65 n 0;..if ((p->ie
1a10: 6e 64 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 29 nd - p->icursor)
1a20: 3c 33 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 09 <3) return 0;...
1a30: 69 66 20 28 70 2d 3e 69 63 75 72 73 6f 72 5b 31 if (p->icursor[1
1a40: 5d 21 3d 27 7b 27 29 20 72 65 74 75 72 6e 20 30 ]!='{') return 0
1a50: 3b 0a 0a 09 63 68 61 72 20 2a 73 20 3d 20 70 2d ;...char *s = p-
1a60: 3e 69 63 75 72 73 6f 72 20 2b 20 32 3b 0a 09 63 >icursor + 2;..c
1a70: 68 61 72 20 2a 62 61 72 20 3d 20 4e 55 4c 4c 3b har *bar = NULL;
1a80: 0a 0a 09 69 6e 74 20 63 6f 75 6e 74 20 3d 20 70 ...int count = p
1a90: 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 63 75 72 ->iend - p->icur
1aa0: 73 6f 72 20 2d 20 34 3b 0a 09 77 68 69 6c 65 20 sor - 4;..while
1ab0: 28 63 6f 75 6e 74 2d 2d 29 7b 0a 09 09 69 66 20 (count--){...if
1ac0: 28 73 5b 30 5d 3d 3d 27 7d 27 20 26 26 20 73 5b (s[0]=='}' && s[
1ad0: 31 5d 3d 3d 27 7d 27 29 7b 0a 09 09 09 69 66 20 1]=='}'){....if
1ae0: 28 21 62 61 72 29 20 62 61 72 20 3d 20 70 2d 3e (!bar) bar = p->
1af0: 69 63 75 72 73 6f 72 20 2b 20 32 3b 0a 09 09 09 icursor + 2;....
1b00: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 2d 3e blob_appendf(p->
1b10: 69 62 6c 6f 62 2c 20 22 3c 73 70 61 6e 20 73 74 iblob, "<span st
1b20: 79 6c 65 3d 27 63 6f 6c 6f 72 3a 67 72 65 65 6e yle='color:green
1b30: 3b 62 6f 72 64 65 72 3a 31 70 78 20 73 6f 6c 69 ;border:1px soli
1b40: 64 20 67 72 65 65 6e 3b 27 3e 25 73 3c 2f 73 70 d green;'>%s</sp
1b50: 61 6e 3e 22 2c 20 68 74 6d 6c 69 7a 65 28 62 61 an>", htmlize(ba
1b60: 72 2c 20 73 20 2d 20 62 61 72 20 29 29 3b 0a 09 r, s - bar ));..
1b70: 09 09 70 2d 3e 69 63 75 72 73 6f 72 20 3d 20 73 ..p->icursor = s
1b80: 20 2b 20 32 3b 0a 09 09 09 72 65 74 75 72 6e 20 + 2;....return
1b90: 31 3b 0a 09 09 7d 0a 09 09 69 66 20 28 21 62 61 1;...}...if (!ba
1ba0: 72 20 26 26 20 73 5b 30 5d 3d 3d 27 7c 27 29 20 r && s[0]=='|')
1bb0: 62 61 72 3d 73 2b 31 3b 0a 09 09 73 2b 2b 3b 0a bar=s+1;...s++;.
1bc0: 09 7d 0a 09 72 65 74 75 72 6e 20 30 3b 0a 7d 0a .}..return 0;.}.
1bd0: 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 //}}}.static int
1be0: 20 63 72 5f 69 4d 61 63 72 6f 28 50 61 72 73 65 cr_iMacro(Parse
1bf0: 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 69 66 r *p){//{{{...if
1c00: 20 28 70 2d 3e 69 6e 4c 69 6e 6b 29 20 72 65 74 (p->inLink) ret
1c10: 75 72 6e 20 30 3b 0a 09 69 66 20 28 28 70 2d 3e urn 0;..if ((p->
1c20: 69 65 6e 64 20 2d 20 70 2d 3e 69 63 75 72 73 6f iend - p->icurso
1c30: 72 29 3c 33 29 20 72 65 74 75 72 6e 20 30 3b 0a r)<3) return 0;.
1c40: 0a 09 69 66 20 28 70 2d 3e 69 63 75 72 73 6f 72 ..if (p->icursor
1c50: 5b 31 5d 21 3d 27 3c 27 29 20 72 65 74 75 72 6e [1]!='<') return
1c60: 20 30 3b 0a 0a 09 63 68 61 72 20 2a 73 20 3d 20 0;...char *s =
1c70: 70 2d 3e 69 63 75 72 73 6f 72 20 2b 20 32 3b 0a p->icursor + 2;.
1c80: 0a 09 69 6e 74 20 63 6f 75 6e 74 20 3d 20 70 2d ..int count = p-
1c90: 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 63 75 72 73 >iend - p->icurs
1ca0: 6f 72 20 2d 20 34 3b 0a 09 77 68 69 6c 65 20 28 or - 4;..while (
1cb0: 63 6f 75 6e 74 2d 2d 29 7b 0a 09 09 69 66 20 28 count--){...if (
1cc0: 73 5b 30 5d 3d 3d 27 3e 27 20 26 26 20 73 5b 31 s[0]=='>' && s[1
1cd0: 5d 3d 3d 27 3e 27 29 7b 0a 09 09 09 62 6c 6f 62 ]=='>'){....blob
1ce0: 5f 61 70 70 65 6e 64 66 28 70 2d 3e 69 62 6c 6f _appendf(p->iblo
1cf0: 62 2c 20 22 3c 73 70 61 6e 20 73 74 79 6c 65 3d b, "<span style=
1d00: 27 63 6f 6c 6f 72 3a 72 65 64 3b 62 6f 72 64 65 'color:red;borde
1d10: 72 3a 31 70 78 20 73 6f 6c 69 64 20 72 65 64 3b r:1px solid red;
1d20: 27 3e 25 73 3c 2f 73 70 61 6e 3e 22 2c 20 68 74 '>%s</span>", ht
1d30: 6d 6c 69 7a 65 28 70 2d 3e 69 63 75 72 73 6f 72 mlize(p->icursor
1d40: 2c 20 73 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 , s - p->icursor
1d50: 20 2b 20 32 29 29 3b 0a 09 09 09 70 2d 3e 69 63 + 2));....p->ic
1d60: 75 72 73 6f 72 20 3d 20 73 20 2b 20 32 3b 0a 09 ursor = s + 2;..
1d70: 09 09 72 65 74 75 72 6e 20 31 3b 0a 09 09 7d 0a ..return 1;...}.
1d80: 09 09 73 2b 2b 3b 0a 09 7d 0a 09 72 65 74 75 72 ..s++;..}..retur
1d90: 6e 20 30 3b 0a 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 n 0;..}.//}}}..s
1da0: 74 61 74 69 63 20 76 6f 69 64 20 63 72 5f 72 65 tatic void cr_re
1db0: 6e 64 65 72 4c 69 6e 6b 28 50 61 72 73 65 72 20 nderLink(Parser
1dc0: 2a 70 2c 20 63 68 61 72 20 2a 73 2c 20 63 68 61 *p, char *s, cha
1dd0: 72 20 2a 62 61 72 2c 20 63 68 61 72 20 2a 65 29 r *bar, char *e)
1de0: 7b 2f 2f 7b 7b 7b 0a 0a 09 69 6e 74 20 74 73 69 {//{{{...int tsi
1df0: 7a 65 20 3d 20 62 61 72 2d 73 3b 0a 09 69 6e 74 ze = bar-s;..int
1e00: 20 64 73 69 7a 65 20 3d 20 65 20 2d 20 62 61 72 dsize = e - bar
1e10: 2d 31 3b 0a 0a 09 69 66 20 28 74 73 69 7a 65 20 -1;...if (tsize
1e20: 3c 20 31 29 20 72 65 74 75 72 6e 3b 0a 09 69 66 < 1) return;..if
1e30: 20 28 64 73 69 7a 65 20 3c 20 31 29 20 64 73 69 (dsize < 1) dsi
1e40: 7a 65 20 3d 20 30 3b 0a 0a 09 63 68 61 72 20 7a ze = 0;...char z
1e50: 54 61 72 67 65 74 5b 74 73 69 7a 65 20 2b 20 31 Target[tsize + 1
1e60: 5d 3b 0a 09 6d 65 6d 63 70 79 28 7a 54 61 72 67 ];..memcpy(zTarg
1e70: 65 74 2c 20 73 2c 20 74 73 69 7a 65 29 3b 0a 09 et, s, tsize);..
1e80: 7a 54 61 72 67 65 74 5b 74 73 69 7a 65 5d 20 3d zTarget[tsize] =
1e90: 20 27 5c 30 27 3b 0a 0a 09 63 68 61 72 20 7a 43 '\0';...char zC
1ea0: 6c 6f 73 65 5b 32 30 5d 3b 0a 0a 09 42 6c 6f 62 lose[20];...Blob
1eb0: 20 2a 70 4f 75 74 20 3d 20 70 2d 3e 72 2d 3e 70 *pOut = p->r->p
1ec0: 4f 75 74 3b 0a 0a 09 70 2d 3e 72 2d 3e 70 4f 75 Out;...p->r->pOu
1ed0: 74 20 3d 20 70 2d 3e 69 62 6c 6f 62 3b 0a 09 77 t = p->iblob;..w
1ee0: 66 5f 6f 70 65 6e 48 79 70 65 72 6c 69 6e 6b 28 f_openHyperlink(
1ef0: 70 2d 3e 72 2c 20 7a 54 61 72 67 65 74 2c 20 7a p->r, zTarget, z
1f00: 43 6c 6f 73 65 2c 20 73 69 7a 65 6f 66 28 7a 43 Close, sizeof(zC
1f10: 6c 6f 73 65 29 29 3b 0a 09 70 2d 3e 72 2d 3e 70 lose));..p->r->p
1f20: 4f 75 74 20 3d 20 70 4f 75 74 3b 0a 0a 09 69 66 Out = pOut;...if
1f30: 20 28 64 73 69 7a 65 29 0a 09 09 63 72 5f 70 61 (dsize)...cr_pa
1f40: 72 73 65 49 6e 6c 69 6e 65 28 70 2c 20 62 61 72 rseInline(p, bar
1f50: 2b 31 2c 20 65 29 20 3b 0a 09 65 6c 73 65 0a 09 +1, e) ;..else..
1f60: 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e .blob_append(p->
1f70: 69 62 6c 6f 62 2c 20 68 74 6d 6c 69 7a 65 28 73 iblob, htmlize(s
1f80: 2c 20 74 73 69 7a 65 29 2c 20 2d 31 29 3b 0a 09 , tsize), -1);..
1f90: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
1fa0: 62 6c 6f 62 2c 20 7a 43 6c 6f 73 65 2c 20 2d 31 blob, zClose, -1
1fb0: 29 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 );.}.//}}}..stat
1fc0: 69 63 20 69 6e 74 20 63 72 5f 69 4c 69 6e 6b 28 ic int cr_iLink(
1fd0: 50 61 72 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b Parser *p){//{{{
1fe0: 0a 0a 09 69 66 20 28 70 2d 3e 69 6e 4c 69 6e 6b ...if (p->inLink
1ff0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 09 69 66 20 ) return 0;..if
2000: 28 28 70 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 ((p->iend - p->i
2010: 63 75 72 73 6f 72 29 3c 33 29 20 72 65 74 75 72 cursor)<3) retur
2020: 6e 20 30 3b 0a 0a 09 69 66 20 28 70 2d 3e 69 63 n 0;...if (p->ic
2030: 75 72 73 6f 72 5b 31 5d 21 3d 27 5b 27 29 20 72 ursor[1]!='[') r
2040: 65 74 75 72 6e 20 30 3b 0a 0a 09 63 68 61 72 20 eturn 0;...char
2050: 2a 73 20 3d 20 70 2d 3e 69 63 75 72 73 6f 72 20 *s = p->icursor
2060: 2b 20 32 3b 0a 09 63 68 61 72 20 2a 62 61 72 20 + 2;..char *bar
2070: 3d 20 4e 55 4c 4c 3b 0a 0a 09 69 6e 74 20 63 6f = NULL;...int co
2080: 75 6e 74 20 3d 20 70 2d 3e 69 65 6e 64 20 2d 20 unt = p->iend -
2090: 70 2d 3e 69 63 75 72 73 6f 72 20 2d 33 3b 0a 09 p->icursor -3;..
20a0: 77 68 69 6c 65 20 28 63 6f 75 6e 74 2d 2d 29 7b while (count--){
20b0: 0a 09 09 69 66 20 28 73 5b 30 5d 3d 3d 27 5d 27 ...if (s[0]==']'
20c0: 20 26 26 20 73 5b 31 5d 3d 3d 27 5d 27 29 7b 0a && s[1]==']'){.
20d0: 09 09 09 69 66 20 28 21 62 61 72 29 20 62 61 72 ...if (!bar) bar
20e0: 20 3d 20 73 3b 0a 09 09 09 70 2d 3e 69 6e 4c 69 = s;....p->inLi
20f0: 6e 6b 20 3d 20 31 3b 0a 09 09 09 63 72 5f 72 65 nk = 1;....cr_re
2100: 6e 64 65 72 4c 69 6e 6b 28 70 2c 20 70 2d 3e 69 nderLink(p, p->i
2110: 63 75 72 73 6f 72 2b 32 2c 20 62 61 72 2c 20 73 cursor+2, bar, s
2120: 29 3b 0a 09 09 09 70 2d 3e 69 6e 4c 69 6e 6b 20 );....p->inLink
2130: 3d 20 30 3b 0a 09 09 09 70 2d 3e 69 63 75 72 73 = 0;....p->icurs
2140: 6f 72 20 3d 20 73 20 2b 20 32 3b 0a 09 09 09 72 or = s + 2;....r
2150: 65 74 75 72 6e 20 31 3b 0a 09 09 7d 0a 09 09 69 eturn 1;...}...i
2160: 66 20 28 21 62 61 72 20 26 26 20 73 5b 30 5d 3d f (!bar && s[0]=
2170: 3d 27 7c 27 29 20 62 61 72 3d 73 3b 0a 09 09 73 ='|') bar=s;...s
2180: 2b 2b 3b 0a 09 7d 0a 09 72 65 74 75 72 6e 20 30 ++;..}..return 0
2190: 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 4c 4f 43 41 4c ;.}.//}}}..LOCAL
21a0: 20 63 68 61 72 20 2a 63 72 5f 70 61 72 73 65 49 char *cr_parseI
21b0: 6e 6c 69 6e 65 28 50 61 72 73 65 72 20 2a 70 2c nline(Parser *p,
21c0: 20 63 68 61 72 20 2a 73 2c 20 63 68 61 72 20 2a char *s, char *
21d0: 65 29 7b 2f 2f 7b 7b 7b 0a 0a 09 69 6e 74 20 73 e){//{{{...int s
21e0: 61 76 65 5f 69 65 73 63 20 3d 20 70 2d 3e 69 65 ave_iesc = p->ie
21f0: 73 63 3b 0a 09 63 68 61 72 20 2a 73 61 76 65 5f sc;..char *save_
2200: 69 65 6e 64 20 3d 20 70 2d 3e 69 65 6e 64 3b 0a iend = p->iend;.
2210: 09 4e 6f 64 65 20 2a 73 61 76 65 5f 69 73 74 61 .Node *save_ista
2220: 63 6b 20 3d 20 70 2d 3e 69 73 74 61 63 6b 3b 0a ck = p->istack;.
2230: 0a 09 70 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 09 ..p->iesc = 0;..
2240: 70 2d 3e 69 65 6e 64 20 3d 20 65 3b 0a 09 70 2d p->iend = e;..p-
2250: 3e 69 73 74 61 63 6b 20 3d 20 4e 55 4c 4c 3b 0a >istack = NULL;.
2260: 0a 09 70 2d 3e 69 63 75 72 73 6f 72 20 3d 20 73 ..p->icursor = s
2270: 3b 0a 0a 09 63 68 61 72 20 2a 65 6f 66 20 3d 20 ;...char *eof =
2280: 4e 55 4c 4c 3b 0a 09 77 68 69 6c 65 20 28 21 65 NULL;..while (!e
2290: 6f 66 20 26 26 20 20 70 2d 3e 69 63 75 72 73 6f of && p->icurso
22a0: 72 20 3c 20 70 2d 3e 69 65 6e 64 20 29 7b 0a 0a r < p->iend ){..
22b0: 09 09 73 77 69 74 63 68 20 28 2a 70 2d 3e 69 63 ..switch (*p->ic
22c0: 75 72 73 6f 72 29 20 7b 2f 2f 7b 7b 7b 0a 0a 09 ursor) {//{{{...
22d0: 09 09 63 61 73 65 20 27 7e 27 3a 0a 09 09 09 09 ..case '~':.....
22e0: 69 66 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a 09 if (p->iesc) {..
22f0: 09 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 ....blob_append(
2300: 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e 22 2c 20 31 p->iblob, "~", 1
2310: 29 3b 0a 09 09 09 09 09 70 2d 3e 69 65 73 63 20 );......p->iesc
2320: 3d 20 30 3b 0a 09 09 09 09 7d 0a 09 09 09 09 70 = 0;.....}.....p
2330: 2d 3e 69 65 73 63 20 3d 20 21 70 2d 3e 69 65 73 ->iesc = !p->ies
2340: 63 3b 0a 09 09 09 09 70 2d 3e 69 63 75 72 73 6f c;.....p->icurso
2350: 72 2b 3d 31 3b 0a 09 09 09 09 62 72 65 61 6b 3b r+=1;.....break;
2360: 0a 0a 09 09 09 63 61 73 65 20 27 2a 27 3a 0a 09 .....case '*':..
2370: 09 09 09 63 72 5f 69 4d 61 72 6b 75 70 28 70 2c ...cr_iMarkup(p,
2380: 20 4b 49 4e 44 5f 42 4f 4c 44 29 3b 0a 09 09 09 KIND_BOLD);....
2390: 09 62 72 65 61 6b 3b 0a 0a 09 09 09 63 61 73 65 .break;.....case
23a0: 20 27 2f 27 3a 0a 09 09 09 09 63 72 5f 69 4d 61 '/':.....cr_iMa
23b0: 72 6b 75 70 28 70 2c 20 4b 49 4e 44 5f 49 54 41 rkup(p, KIND_ITA
23c0: 4c 49 43 29 3b 0a 09 09 09 09 62 72 65 61 6b 3b LIC);.....break;
23d0: 0a 0a 09 09 09 63 61 73 65 20 27 5e 27 3a 0a 09 .....case '^':..
23e0: 09 09 09 63 72 5f 69 4d 61 72 6b 75 70 28 70 2c ...cr_iMarkup(p,
23f0: 20 4b 49 4e 44 5f 53 55 50 45 52 53 43 52 49 50 KIND_SUPERSCRIP
2400: 54 29 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a T);.....break;..
2410: 09 09 09 63 61 73 65 20 27 2c 27 3a 0a 09 09 09 ...case ',':....
2420: 09 63 72 5f 69 4d 61 72 6b 75 70 28 70 2c 20 4b .cr_iMarkup(p, K
2430: 49 4e 44 5f 53 55 42 53 43 52 49 50 54 29 3b 0a IND_SUBSCRIPT);.
2440: 09 09 09 09 62 72 65 61 6b 3b 0a 0a 09 09 09 63 ....break;.....c
2450: 61 73 65 20 27 23 27 3a 0a 09 09 09 09 63 72 5f ase '#':.....cr_
2460: 69 4d 61 72 6b 75 70 28 70 2c 20 4b 49 4e 44 5f iMarkup(p, KIND_
2470: 4d 4f 4e 4f 53 50 41 43 45 44 29 3b 0a 09 09 09 MONOSPACED);....
2480: 09 62 72 65 61 6b 3b 0a 0a 09 09 09 63 61 73 65 .break;.....case
2490: 20 27 5c 5c 27 3a 0a 09 09 09 09 63 72 5f 69 4d '\\':.....cr_iM
24a0: 61 72 6b 75 70 28 70 2c 20 4b 49 4e 44 5f 42 52 arkup(p, KIND_BR
24b0: 45 41 4b 29 3b 0a 09 09 09 09 62 72 65 61 6b 3b EAK);.....break;
24c0: 0a 0a 09 09 09 63 61 73 65 20 27 7b 27 3a 0a 09 .....case '{':..
24d0: 09 09 09 69 66 20 28 63 72 5f 69 73 45 73 63 28 ...if (cr_isEsc(
24e0: 70 29 29 20 62 72 65 61 6b 3b 0a 09 09 09 09 69 p)) break;.....i
24f0: 66 20 28 63 72 5f 69 4e 6f 57 69 6b 69 28 70 29 f (cr_iNoWiki(p)
2500: 29 20 62 72 65 61 6b 3b 0a 09 09 09 09 69 66 20 ) break;.....if
2510: 28 63 72 5f 69 49 6d 61 67 65 28 70 29 29 20 62 (cr_iImage(p)) b
2520: 72 65 61 6b 3b 0a 09 09 09 09 62 6c 6f 62 5f 61 reak;.....blob_a
2530: 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 ppend(p->iblob,
2540: 70 2d 3e 69 63 75 72 73 6f 72 2c 20 31 29 3b 0a p->icursor, 1);.
2550: 09 09 09 09 70 2d 3e 69 63 75 72 73 6f 72 20 2b ....p->icursor +
2560: 3d 20 31 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a = 1;.....break;.
2570: 0a 09 09 09 63 61 73 65 20 27 5b 27 3a 0a 09 09 ....case '[':...
2580: 09 09 69 66 20 28 63 72 5f 69 73 45 73 63 28 70 ..if (cr_isEsc(p
2590: 29 29 20 62 72 65 61 6b 3b 0a 09 09 09 09 69 66 )) break;.....if
25a0: 20 28 63 72 5f 69 4c 69 6e 6b 28 70 29 29 20 62 (cr_iLink(p)) b
25b0: 72 65 61 6b 3b 0a 09 09 09 09 62 6c 6f 62 5f 61 reak;.....blob_a
25c0: 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 ppend(p->iblob,
25d0: 70 2d 3e 69 63 75 72 73 6f 72 2c 20 31 29 3b 0a p->icursor, 1);.
25e0: 09 09 09 09 70 2d 3e 69 63 75 72 73 6f 72 20 2b ....p->icursor +
25f0: 3d 20 31 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a = 1;.....break;.
2600: 0a 0a 09 09 09 63 61 73 65 20 27 3c 27 3a 0a 09 .....case '<':..
2610: 09 09 09 69 66 20 28 63 72 5f 69 73 45 73 63 28 ...if (cr_isEsc(
2620: 70 29 29 20 62 72 65 61 6b 3b 0a 09 09 09 09 69 p)) break;.....i
2630: 66 20 28 63 72 5f 69 4d 61 63 72 6f 28 70 29 29 f (cr_iMacro(p))
2640: 20 62 72 65 61 6b 3b 0a 0a 09 09 09 09 62 6c 6f break;......blo
2650: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
2660: 62 2c 20 22 26 6c 74 3b 22 2c 20 34 29 3b 0a 09 b, "<", 4);..
2670: 09 09 09 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d ...p->icursor +=
2680: 20 31 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a 1;.....break;..
2690: 09 09 09 63 61 73 65 20 27 3e 27 3a 0a 09 09 09 ...case '>':....
26a0: 09 69 66 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a .if (p->iesc) {.
26b0: 09 09 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 .....blob_append
26c0: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e 22 2c 20 (p->iblob, "~",
26d0: 31 29 3b 0a 09 09 09 09 09 70 2d 3e 69 65 73 63 1);......p->iesc
26e0: 20 3d 20 30 3b 0a 09 09 09 09 7d 0a 09 09 09 09 = 0;.....}.....
26f0: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
2700: 62 6c 6f 62 2c 20 22 26 67 74 3b 22 2c 20 34 29 blob, ">", 4)
2710: 3b 0a 09 09 09 09 70 2d 3e 69 63 75 72 73 6f 72 ;.....p->icursor
2720: 20 2b 3d 20 31 3b 0a 09 09 09 09 62 72 65 61 6b += 1;.....break
2730: 3b 0a 0a 09 09 09 63 61 73 65 20 27 26 27 3a 0a ;.....case '&':.
2740: 09 09 09 09 69 66 20 28 70 2d 3e 69 65 73 63 29 ....if (p->iesc)
2750: 20 7b 0a 09 09 09 09 09 62 6c 6f 62 5f 61 70 70 {......blob_app
2760: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e end(p->iblob, "~
2770: 22 2c 20 31 29 3b 0a 09 09 09 09 09 70 2d 3e 69 ", 1);......p->i
2780: 65 73 63 20 3d 20 30 3b 0a 09 09 09 09 7d 0a 09 esc = 0;.....}..
2790: 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 ...blob_append(p
27a0: 2d 3e 69 62 6c 6f 62 2c 20 22 26 61 6d 70 3b 22 ->iblob, "&"
27b0: 2c 20 35 29 3b 0a 09 09 09 09 70 2d 3e 69 63 75 , 5);.....p->icu
27c0: 72 73 6f 72 20 2b 3d 20 31 3b 0a 09 09 09 09 62 rsor += 1;.....b
27d0: 72 65 61 6b 3b 0a 0a 09 09 09 63 61 73 65 20 27 reak;.....case '
27e0: 7c 27 3a 0a 09 09 09 09 69 66 20 28 70 2d 3e 69 |':.....if (p->i
27f0: 6e 54 61 62 6c 65 29 7b 0a 09 09 09 09 09 69 66 nTable){......if
2800: 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a 09 09 09 (p->iesc) {....
2810: 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 ...blob_append(p
2820: 2d 3e 69 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 ->iblob, p->icur
2830: 73 6f 72 2c 20 31 29 3b 0a 09 09 09 09 09 09 70 sor, 1);.......p
2840: 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 09 09 09 09 ->iesc = 0;.....
2850: 09 09 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 ..p->icursor +=
2860: 31 3b 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 1;.......break;.
2870: 09 09 09 09 09 7d 0a 09 09 09 09 09 65 6f 66 20 .....}......eof
2880: 3d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2b 20 31 = p->icursor + 1
2890: 3b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 ;......break;...
28a0: 09 09 7d 0a 09 09 09 09 2f 2f 20 66 61 6c 6c 20 ..}.....// fall
28b0: 74 68 72 6f 75 67 68 20 74 6f 20 64 65 66 61 75 through to defau
28c0: 6c 74 0a 0a 09 09 09 64 65 66 61 75 6c 74 3a 0a lt.....default:.
28d0: 09 09 09 09 69 66 20 28 70 2d 3e 69 65 73 63 29 ....if (p->iesc)
28e0: 20 7b 0a 09 09 09 09 09 62 6c 6f 62 5f 61 70 70 {......blob_app
28f0: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e end(p->iblob, "~
2900: 22 2c 20 31 29 3b 0a 09 09 09 09 09 70 2d 3e 69 ", 1);......p->i
2910: 65 73 63 20 3d 20 30 3b 0a 09 09 09 09 7d 0a 09 esc = 0;.....}..
2920: 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 ...blob_append(p
2930: 2d 3e 69 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 ->iblob, p->icur
2940: 73 6f 72 2c 20 31 29 3b 0a 09 09 09 09 70 2d 3e sor, 1);.....p->
2950: 69 63 75 72 73 6f 72 20 2b 3d 31 3b 0a 09 09 7d icursor +=1;...}
2960: 2f 2f 7d 7d 7d 0a 0a 09 7d 0a 0a 09 77 68 69 6c //}}}...}...whil
2970: 65 20 28 70 2d 3e 69 73 74 61 63 6b 29 7b 0a 09 e (p->istack){..
2980: 09 63 72 5f 69 43 6c 6f 73 65 28 70 2c 20 70 2d .cr_iClose(p, p-
2990: 3e 69 73 74 61 63 6b 2d 3e 6b 69 6e 64 29 3b 0a >istack->kind);.
29a0: 09 09 70 2d 3e 69 73 74 61 63 6b 20 3d 20 70 2d ..p->istack = p-
29b0: 3e 69 73 74 61 63 6b 2d 3e 6e 65 78 74 3b 0a 09 >istack->next;..
29c0: 7d 0a 0a 09 70 2d 3e 69 65 73 63 20 3d 20 73 61 }...p->iesc = sa
29d0: 76 65 5f 69 65 73 63 3b 0a 09 70 2d 3e 69 65 6e ve_iesc;..p->ien
29e0: 64 20 3d 20 73 61 76 65 5f 69 65 6e 64 3b 0a 09 d = save_iend;..
29f0: 70 2d 3e 69 73 74 61 63 6b 20 3d 20 73 61 76 65 p->istack = save
2a00: 5f 69 73 74 61 63 6b 3b 0a 0a 09 72 65 74 75 72 _istack;...retur
2a10: 6e 20 65 6f 66 3b 0a 0a 7d 0a 2f 2f 7d 7d 7d 0a n eof;..}.//}}}.
2a20: 2f 2f 7d 7d 7d 0a 0a 2f 2f 7b 7b 7b 20 42 4c 4f //}}}..//{{{ BLO
2a30: 43 4b 20 50 41 52 53 45 52 0a 0a 73 74 61 74 69 CK PARSER..stati
2a40: 63 20 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 72 c void cr_render
2a50: 4c 69 73 74 49 74 65 6d 28 50 61 72 73 65 72 20 ListItem(Parser
2a60: 2a 70 2c 20 4e 6f 64 65 20 2a 6e 29 7b 2f 2f 7b *p, Node *n){//{
2a70: 7b 7b 0a 0a 0a 09 62 6c 6f 62 5f 61 70 70 65 6e {{....blob_appen
2a80: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 6c 69 d(p->iblob, "<li
2a90: 3e 22 2c 20 34 29 3b 0a 09 63 72 5f 70 61 72 73 >", 4);..cr_pars
2aa0: 65 49 6e 6c 69 6e 65 28 70 2c 20 6e 2d 3e 73 74 eInline(p, n->st
2ab0: 61 72 74 2c 20 6e 2d 3e 65 6e 64 29 3b 0a 0a 09 art, n->end);...
2ac0: 69 66 20 28 6e 2d 3e 63 68 69 6c 64 72 65 6e 29 if (n->children)
2ad0: 7b 0a 0a 09 09 69 6e 74 20 6f 72 64 20 3d 20 28 {....int ord = (
2ae0: 6e 2d 3e 63 68 69 6c 64 72 65 6e 2d 3e 6b 69 6e n->children->kin
2af0: 64 20 26 20 4b 49 4e 44 5f 4f 52 44 45 52 45 44 d & KIND_ORDERED
2b00: 5f 4c 49 53 54 29 3b 0a 0a 09 09 69 66 20 28 6f _LIST);....if (o
2b10: 72 64 29 20 09 62 6c 6f 62 5f 61 70 70 65 6e 64 rd) .blob_append
2b20: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 6f 6c 3e (p->iblob, "<ol>
2b30: 22 2c 20 34 29 3b 0a 09 09 65 6c 73 65 20 09 09 ", 4);...else ..
2b40: 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e .blob_append(p->
2b50: 69 62 6c 6f 62 2c 20 22 3c 75 6c 3e 22 2c 20 34 iblob, "<ul>", 4
2b60: 29 3b 0a 0a 09 09 6e 20 3d 20 6e 2d 3e 63 68 69 );....n = n->chi
2b70: 6c 64 72 65 6e 3b 0a 09 09 77 68 69 6c 65 20 28 ldren;...while (
2b80: 6e 29 7b 0a 09 09 09 63 72 5f 72 65 6e 64 65 72 n){....cr_render
2b90: 4c 69 73 74 49 74 65 6d 28 70 2c 20 6e 29 3b 0a ListItem(p, n);.
2ba0: 09 09 09 6e 20 3d 20 6e 2d 3e 6e 65 78 74 3b 0a ...n = n->next;.
2bb0: 09 09 7d 0a 0a 09 09 69 66 20 28 6f 72 64 29 20 ..}....if (ord)
2bc0: 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e .blob_append(p->
2bd0: 69 62 6c 6f 62 2c 20 22 3c 2f 6f 6c 3e 22 2c 20 iblob, "</ol>",
2be0: 35 29 3b 0a 09 09 65 6c 73 65 20 09 09 09 62 6c 5);...else ...bl
2bf0: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
2c00: 6f 62 2c 20 22 3c 2f 75 6c 3e 22 2c 20 35 29 3b ob, "</ul>", 5);
2c10: 0a 09 7d 0a 09 62 6c 6f 62 5f 61 70 70 65 6e 64 ..}..blob_append
2c20: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 6c 69 (p->iblob, "</li
2c30: 3e 22 2c 20 35 29 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a >", 5);.}.//}}}.
2c40: 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 5f 72 static void cr_r
2c50: 65 6e 64 65 72 4c 69 73 74 28 50 61 72 73 65 72 enderList(Parser
2c60: 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 4e 6f 64 *p){//{{{...Nod
2c70: 65 20 2a 6e 20 3d 20 70 2d 3e 6c 69 73 74 3b 0a e *n = p->list;.
2c80: 0a 09 77 68 69 6c 65 20 28 6e 2d 3e 70 61 72 65 ..while (n->pare
2c90: 6e 74 20 21 3d 6e 29 20 20 6e 20 3d 20 6e 2d 3e nt !=n) n = n->
2ca0: 70 61 72 65 6e 74 3b 0a 0a 09 69 6e 74 20 6f 72 parent;...int or
2cb0: 64 20 3d 20 28 6e 2d 3e 6b 69 6e 64 20 26 20 4b d = (n->kind & K
2cc0: 49 4e 44 5f 4f 52 44 45 52 45 44 5f 4c 49 53 54 IND_ORDERED_LIST
2cd0: 29 3b 0a 0a 09 69 66 20 28 6f 72 64 29 20 09 62 );...if (ord) .b
2ce0: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 lob_append(p->ib
2cf0: 6c 6f 62 2c 20 22 5c 6e 5c 6e 3c 6f 6c 3e 22 2c lob, "\n\n<ol>",
2d00: 20 2d 31 29 3b 0a 09 65 6c 73 65 20 09 09 09 62 -1);..else ...b
2d10: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 lob_append(p->ib
2d20: 6c 6f 62 2c 20 22 5c 6e 5c 6e 3c 75 6c 3e 22 2c lob, "\n\n<ul>",
2d30: 20 2d 31 29 3b 0a 0a 09 77 68 69 6c 65 20 28 6e -1);...while (n
2d40: 29 20 7b 0a 09 09 63 72 5f 72 65 6e 64 65 72 4c ) {...cr_renderL
2d50: 69 73 74 49 74 65 6d 28 70 2c 20 6e 29 3b 0a 09 istItem(p, n);..
2d60: 09 6e 20 3d 20 6e 2d 3e 6e 65 78 74 3b 0a 09 7d .n = n->next;..}
2d70: 0a 0a 09 69 66 20 28 6f 72 64 29 20 09 62 6c 6f ...if (ord) .blo
2d80: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
2d90: 62 2c 20 22 3c 2f 6f 6c 3e 22 2c 20 35 29 3b 0a b, "</ol>", 5);.
2da0: 09 65 6c 73 65 20 09 09 09 62 6c 6f 62 5f 61 70 .else ...blob_ap
2db0: 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 pend(p->iblob, "
2dc0: 3c 2f 75 6c 3e 22 2c 20 35 29 3b 0a 7d 0a 0a 2f </ul>", 5);.}../
2dd0: 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 /}}}..static voi
2de0: 64 20 63 72 5f 72 65 6e 64 65 72 54 61 62 6c 65 d cr_renderTable
2df0: 52 6f 77 28 50 61 72 73 65 72 20 2a 70 2c 20 4e Row(Parser *p, N
2e00: 6f 64 65 20 2a 72 6f 77 29 7b 2f 2f 7b 7b 7b 0a ode *row){//{{{.
2e10: 0a 09 63 68 61 72 20 2a 73 20 3d 20 72 6f 77 2d ..char *s = row-
2e20: 3e 73 74 61 72 74 3b 0a 09 69 6e 74 20 74 68 3b >start;..int th;
2e30: 0a 0a 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 ...blob_append(p
2e40: 2d 3e 69 62 6c 6f 62 2c 20 22 5c 6e 3c 74 72 3e ->iblob, "\n<tr>
2e50: 22 2c 20 2d 31 29 3b 0a 0a 09 77 68 69 6c 65 20 ", -1);...while
2e60: 28 73 20 26 26 20 73 20 3c 20 72 6f 77 2d 3e 65 (s && s < row->e
2e70: 6e 64 29 7b 0a 0a 09 09 69 66 20 28 28 74 68 20 nd){....if ((th
2e80: 3d 20 2a 73 20 3d 3d 20 27 3d 27 29 29 20 7b 0a = *s == '=')) {.
2e90: 09 09 09 73 2b 2b 3b 0a 09 09 09 62 6c 6f 62 5f ...s++;....blob_
2ea0: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
2eb0: 20 22 3c 74 68 3e 22 2c 20 2d 31 29 3b 0a 09 09 "<th>", -1);...
2ec0: 7d 0a 09 09 65 6c 73 65 20 7b 0a 09 09 09 62 6c }...else {....bl
2ed0: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
2ee0: 6f 62 2c 20 22 3c 74 64 3e 22 2c 20 2d 31 29 3b ob, "<td>", -1);
2ef0: 0a 09 09 7d 0a 0a 09 09 73 20 3d 20 63 72 5f 70 ...}....s = cr_p
2f00: 61 72 73 65 49 6e 6c 69 6e 65 28 70 2c 20 73 2c arseInline(p, s,
2f10: 20 72 6f 77 2d 3e 65 6e 64 29 3b 0a 0a 09 09 69 row->end);....i
2f20: 66 20 28 74 68 29 0a 09 09 09 62 6c 6f 62 5f 61 f (th)....blob_a
2f30: 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 ppend(p->iblob,
2f40: 22 3c 2f 74 68 3e 5c 6e 22 2c 20 2d 31 29 3b 0a "</th>\n", -1);.
2f50: 09 09 65 6c 73 65 0a 09 09 09 62 6c 6f 62 5f 61 ..else....blob_a
2f60: 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 ppend(p->iblob,
2f70: 22 3c 2f 74 64 3e 5c 6e 22 2c 20 2d 31 29 3b 0a "</td>\n", -1);.
2f80: 0a 09 09 69 66 20 28 21 73 29 20 62 72 65 61 6b ...if (!s) break
2f90: 3b 0a 09 7d 0a 09 62 6c 6f 62 5f 61 70 70 65 6e ;..}..blob_appen
2fa0: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 74 d(p->iblob, "</t
2fb0: 72 3e 22 2c 20 35 29 3b 0a 7d 0a 2f 2f 7d 7d 7d r>", 5);.}.//}}}
2fc0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 5f .static void cr_
2fd0: 72 65 6e 64 65 72 54 61 62 6c 65 28 50 61 72 73 renderTable(Pars
2fe0: 65 72 20 2a 70 2c 20 4e 6f 64 65 20 2a 6e 29 7b er *p, Node *n){
2ff0: 2f 2f 7b 7b 7b 0a 0a 09 4e 6f 64 65 20 2a 72 6f //{{{...Node *ro
3000: 77 20 3d 20 6e 2d 3e 63 68 69 6c 64 72 65 6e 3b w = n->children;
3010: 0a 0a 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 ...blob_append(p
3020: 2d 3e 69 62 6c 6f 62 2c 20 22 3c 74 61 62 6c 65 ->iblob, "<table
3030: 20 63 6c 61 73 73 3d 27 63 72 65 6f 6c 65 74 61 class='creoleta
3040: 62 6c 65 27 3e 22 2c 20 2d 31 29 3b 0a 09 70 2d ble'>", -1);..p-
3050: 3e 69 6e 54 61 62 6c 65 20 3d 20 31 3b 0a 09 77 >inTable = 1;..w
3060: 68 69 6c 65 20 28 72 6f 77 29 7b 0a 0a 09 09 63 hile (row){....c
3070: 72 5f 72 65 6e 64 65 72 54 61 62 6c 65 52 6f 77 r_renderTableRow
3080: 28 70 2c 20 72 6f 77 29 3b 0a 09 09 72 6f 77 20 (p, row);...row
3090: 3d 20 72 6f 77 2d 3e 6e 65 78 74 3b 0a 0a 09 7d = row->next;...}
30a0: 0a 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d ..blob_append(p-
30b0: 3e 69 62 6c 6f 62 2c 20 22 3c 2f 74 61 62 6c 65 >iblob, "</table
30c0: 3e 22 2c 20 2d 31 29 3b 0a 09 70 2d 3e 69 6e 54 >", -1);..p->inT
30d0: 61 62 6c 65 20 3d 20 30 3b 0a 0a 7d 0a 2f 2f 7d able = 0;..}.//}
30e0: 7d 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 }}..static void
30f0: 63 72 5f 72 65 6e 64 65 72 28 50 61 72 73 65 72 cr_render(Parser
3100: 20 2a 70 2c 20 4e 6f 64 65 20 2a 6e 6f 64 65 29 *p, Node *node)
3110: 7b 2f 2f 7b 7b 7b 0a 0a 09 69 66 20 28 6e 6f 64 {//{{{...if (nod
3120: 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 50 e->kind & KIND_P
3130: 41 52 41 47 52 41 50 48 29 7b 0a 09 09 62 6c 6f ARAGRAPH){...blo
3140: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
3150: 62 2c 20 09 22 5c 6e 3c 70 3e 22 2c 20 2d 31 29 b, ."\n<p>", -1)
3160: 3b 0a 09 09 63 72 5f 70 61 72 73 65 49 6e 6c 69 ;...cr_parseInli
3170: 6e 65 28 70 2c 20 6e 6f 64 65 2d 3e 73 74 61 72 ne(p, node->star
3180: 74 2c 20 6e 6f 64 65 2d 3e 65 6e 64 20 29 3b 0a t, node->end );.
3190: 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d ..blob_append(p-
31a0: 3e 69 62 6c 6f 62 2c 20 22 3c 2f 70 3e 5c 6e 22 >iblob, "</p>\n"
31b0: 2c 20 2d 31 09 29 3b 0a 09 7d 0a 0a 09 69 66 20 , -1.);..}...if
31c0: 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 (node->kind & KI
31d0: 4e 44 5f 48 45 41 44 49 4e 47 29 7b 0a 09 09 62 ND_HEADING){...b
31e0: 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 2d 3e 69 lob_appendf(p->i
31f0: 62 6c 6f 62 2c 0a 09 09 09 09 22 5c 6e 3c 68 25 blob,....."\n<h%
3200: 64 20 25 73 3e 22 2c 0a 09 09 09 09 6e 6f 64 65 d %s>",.....node
3210: 2d 3e 6c 65 76 65 6c 2c 0a 09 09 09 09 28 6e 6f ->level,.....(no
3220: 64 65 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 de->flags & FLAG
3230: 5f 43 45 4e 54 45 52 29 20 3f 20 22 20 73 74 79 _CENTER) ? " sty
3240: 6c 65 3d 27 74 65 78 74 2d 61 6c 69 67 6e 3a 63 le='text-align:c
3250: 65 6e 74 65 72 3b 27 22 20 3a 20 22 22 0a 09 09 enter;'" : ""...
3260: 29 3b 0a 09 09 63 72 5f 70 61 72 73 65 49 6e 6c );...cr_parseInl
3270: 69 6e 65 28 70 2c 20 6e 6f 64 65 2d 3e 73 74 61 ine(p, node->sta
3280: 72 74 2c 20 6e 6f 64 65 2d 3e 65 6e 64 29 3b 0a rt, node->end);.
3290: 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 ..blob_appendf(p
32a0: 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 68 25 64 3e ->iblob, "</h%d>
32b0: 5c 6e 22 2c 20 6e 6f 64 65 2d 3e 6c 65 76 65 6c \n", node->level
32c0: 09 29 3b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d .);...return;..}
32d0: 0a 0a 09 69 66 20 28 6e 6f 64 65 2d 3e 6b 69 6e ...if (node->kin
32e0: 64 20 26 20 4b 49 4e 44 5f 48 4f 52 49 5a 4f 4e d & KIND_HORIZON
32f0: 54 41 4c 5f 52 55 4c 45 29 7b 0a 09 09 62 6c 6f TAL_RULE){...blo
3300: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
3310: 62 2c 20 22 3c 68 72 20 2f 3e 22 2c 20 2d 31 29 b, "<hr />", -1)
3320: 3b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a ;...return;..}..
3330: 09 69 66 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 .if (node->kind
3340: 26 20 4b 49 4e 44 5f 4c 49 53 54 29 7b 0a 09 09 & KIND_LIST){...
3350: 63 72 5f 72 65 6e 64 65 72 4c 69 73 74 28 70 29 cr_renderList(p)
3360: 3b 0a 09 09 70 2d 3e 6c 69 73 74 20 3d 20 4e 55 ;...p->list = NU
3370: 4c 4c 3b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d LL;...return;..}
3380: 0a 0a 09 69 66 20 28 6e 6f 64 65 2d 3e 6b 69 6e ...if (node->kin
3390: 64 20 26 20 4b 49 4e 44 5f 54 41 42 4c 45 29 7b d & KIND_TABLE){
33a0: 0a 09 09 63 72 5f 72 65 6e 64 65 72 54 61 62 6c ...cr_renderTabl
33b0: 65 28 70 2c 20 6e 6f 64 65 29 3b 0a 09 09 72 65 e(p, node);...re
33c0: 74 75 72 6e 3b 0a 09 7d 0a 0a 09 69 66 20 28 6e turn;..}...if (n
33d0: 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e 44 ode->kind & KIND
33e0: 5f 4e 4f 5f 57 49 4b 49 5f 42 4c 4f 43 4b 29 7b _NO_WIKI_BLOCK){
33f0: 0a 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 ...blob_appendf(
3400: 70 2d 3e 69 62 6c 6f 62 2c 0a 09 09 09 22 5c 6e p->iblob,...."\n
3410: 3c 62 6c 6f 63 6b 71 75 6f 74 65 20 73 74 79 6c <blockquote styl
3420: 65 3d 27 62 61 63 6b 67 72 6f 75 6e 64 3a 6f 6c e='background:ol
3430: 64 6c 61 63 65 27 3e 3c 70 72 65 3e 25 73 3c 2f dlace'><pre>%s</
3440: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 pre></blockquote
3450: 3e 5c 6e 22 2c 0a 09 09 09 09 68 74 6d 6c 69 7a >\n",.....htmliz
3460: 65 28 20 6e 6f 64 65 2d 3e 73 74 61 72 74 2c 20 e( node->start,
3470: 6e 6f 64 65 2d 3e 65 6e 64 20 2d 20 6e 6f 64 65 node->end - node
3480: 2d 3e 73 74 61 72 74 29 0a 09 09 29 3b 0a 09 7d ->start)...);..}
3490: 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 .}.//}}}..static
34a0: 20 63 68 61 72 20 2a 63 72 5f 66 69 6e 64 45 6e char *cr_findEn
34b0: 64 4f 66 42 6c 6f 63 6b 28 50 61 72 73 65 72 20 dOfBlock(Parser
34c0: 2a 70 2c 20 63 68 61 72 20 2a 73 2c 20 63 68 61 *p, char *s, cha
34d0: 72 20 63 29 7b 2f 2f 7b 7b 7b 0a 0a 09 63 68 61 r c){//{{{...cha
34e0: 72 20 2a 65 6e 64 3b 0a 09 77 68 69 6c 65 20 28 r *end;..while (
34f0: 73 5b 30 5d 29 7b 0a 0a 09 09 65 6e 64 20 3d 20 s[0]){....end =
3500: 73 3b 0a 09 09 69 66 20 28 73 5b 30 5d 20 3d 3d s;...if (s[0] ==
3510: 20 63 20 26 26 20 73 5b 30 5d 20 3d 3d 20 63 20 c && s[0] == c
3520: 26 26 20 73 5b 30 5d 20 3d 3d 20 63 29 20 7b 0a && s[0] == c) {.
3530: 09 09 09 73 20 3d 20 63 72 5f 6e 65 78 74 4c 69 ...s = cr_nextLi
3540: 6e 65 28 70 2c 20 73 20 2b 20 33 29 3b 0a 09 09 ne(p, s + 3);...
3550: 09 69 66 20 28 70 2d 3e 6c 69 6e 65 57 61 73 42 .if (p->lineWasB
3560: 6c 61 6e 6b 29 20 7b 0a 09 09 09 09 09 70 2d 3e lank) {......p->
3570: 63 75 72 73 6f 72 20 3d 20 73 3b 0a 09 09 09 09 cursor = s;.....
3580: 09 72 65 74 75 72 6e 20 65 6e 64 3b 0a 09 09 09 .return end;....
3590: 7d 0a 09 09 7d 0a 09 09 65 6c 73 65 20 7b 0a 09 }...}...else {..
35a0: 09 09 73 20 3d 20 63 72 5f 6e 65 78 74 4c 69 6e ..s = cr_nextLin
35b0: 65 28 70 2c 20 73 29 3b 0a 09 09 7d 0a 09 7d 0a e(p, s);...}..}.
35c0: 09 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d .return 0;.}.//}
35d0: 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 }}.static int cr
35e0: 5f 61 64 64 4c 69 73 74 49 74 65 6d 28 50 61 72 _addListItem(Par
35f0: 73 65 72 20 2a 70 2c 20 4e 6f 64 65 20 2a 6e 29 ser *p, Node *n)
3600: 7b 2f 2f 7b 7b 7b 0a 0a 09 6e 2d 3e 70 61 72 65 {//{{{...n->pare
3610: 6e 74 20 3d 20 6e 3b 0a 09 6e 2d 3e 6e 65 78 74 nt = n;..n->next
3620: 20 3d 20 6e 2d 3e 63 68 69 6c 64 72 65 6e 20 3d = n->children =
3630: 20 4e 55 4c 4c 3b 0a 0a 09 69 66 20 28 21 70 2d NULL;...if (!p-
3640: 3e 6c 69 73 74 29 20 7b 0a 09 09 69 66 20 28 6e >list) {...if (n
3650: 2d 3e 6c 65 76 65 6c 20 21 3d 20 31 29 20 72 65 ->level != 1) re
3660: 74 75 72 6e 20 30 3b 0a 09 09 70 2d 3e 6c 69 73 turn 0;...p->lis
3670: 74 20 3d 20 6e 3b 0a 09 09 72 65 74 75 72 6e 20 t = n;...return
3680: 31 3b 0a 09 7d 0a 0a 09 4e 6f 64 65 20 2a 6c 69 1;..}...Node *li
3690: 73 74 20 3d 20 70 2d 3e 6c 69 73 74 3b 0a 0a 09 st = p->list;...
36a0: 77 68 69 6c 65 20 28 6e 2d 3e 6c 65 76 65 6c 20 while (n->level
36b0: 3c 20 6c 69 73 74 2d 3e 6c 65 76 65 6c 29 7b 0a < list->level){.
36c0: 09 09 6c 69 73 74 20 3d 20 6c 69 73 74 2d 3e 70 ..list = list->p
36d0: 61 72 65 6e 74 3b 0a 09 7d 0a 0a 09 69 66 20 28 arent;..}...if (
36e0: 6e 2d 3e 6c 65 76 65 6c 20 3d 3d 20 6c 69 73 74 n->level == list
36f0: 2d 3e 6c 65 76 65 6c 29 7b 0a 0a 09 09 69 66 20 ->level){....if
3700: 28 6e 2d 3e 6b 69 6e 64 20 21 3d 20 6c 69 73 74 (n->kind != list
3710: 2d 3e 6b 69 6e 64 29 7b 0a 09 09 09 69 66 20 28 ->kind){....if (
3720: 6e 2d 3e 6c 65 76 65 6c 3e 31 29 20 72 65 74 75 n->level>1) retu
3730: 72 6e 20 30 3b 0a 09 09 09 63 72 5f 72 65 6e 64 rn 0;....cr_rend
3740: 65 72 4c 69 73 74 28 70 29 3b 0a 09 09 09 70 2d erList(p);....p-
3750: 3e 6c 69 73 74 20 3d 20 6e 3b 0a 09 09 09 72 65 >list = n;....re
3760: 74 75 72 6e 20 31 3b 0a 09 09 7d 0a 09 09 6e 2d turn 1;...}...n-
3770: 3e 70 61 72 65 6e 74 20 3d 20 6c 69 73 74 2d 3e >parent = list->
3780: 70 61 72 65 6e 74 3b 0a 09 09 70 2d 3e 6c 69 73 parent;...p->lis
3790: 74 20 3d 20 6c 69 73 74 2d 3e 6e 65 78 74 20 3d t = list->next =
37a0: 20 6e 3b 0a 09 09 72 65 74 75 72 6e 20 31 3b 0a n;...return 1;.
37b0: 09 7d 0a 0a 09 69 66 20 28 20 28 6e 2d 3e 6c 65 .}...if ( (n->le
37c0: 76 65 6c 20 2d 20 6c 69 73 74 2d 3e 6c 65 76 65 vel - list->leve
37d0: 6c 29 20 3e 20 31 20 29 20 72 65 74 75 72 6e 20 l) > 1 ) return
37e0: 30 3b 0a 09 6e 2d 3e 70 61 72 65 6e 74 20 3d 20 0;..n->parent =
37f0: 70 2d 3e 6c 69 73 74 3b 0a 09 70 2d 3e 6c 69 73 p->list;..p->lis
3800: 74 2d 3e 63 68 69 6c 64 72 65 6e 20 3d 20 6e 3b t->children = n;
3810: 0a 09 70 2d 3e 6c 69 73 74 20 3d 20 6e 3b 0a 09 ..p->list = n;..
3820: 72 65 74 75 72 6e 20 31 3b 0a 0a 7d 0a 2f 2f 7d return 1;..}.//}
3830: 7d 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 69 }}..static int i
3840: 73 45 6e 64 57 69 6b 69 4d 61 72 6b 65 72 28 50 sEndWikiMarker(P
3850: 61 72 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a arser *p){//{{{.
3860: 0a 09 63 68 61 72 20 2a 73 20 3d 20 70 2d 3e 63 ..char *s = p->c
3870: 75 72 73 6f 72 3b 0a 09 69 66 20 28 6d 65 6d 63 ursor;..if (memc
3880: 6d 70 28 73 2c 20 22 3c 3c 66 6f 73 73 69 6c 3e mp(s, "<<fossil>
3890: 3e 22 2c 20 31 30 29 29 20 72 65 74 75 72 6e 20 >", 10)) return
38a0: 30 3b 0a 09 70 2d 3e 74 68 69 73 2d 3e 73 74 61 0;..p->this->sta
38b0: 72 74 20 3d 20 73 3b 0a 09 70 2d 3e 74 68 69 73 rt = s;..p->this
38c0: 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 45 4e ->kind = KIND_EN
38d0: 44 5f 57 49 4b 49 5f 4d 41 52 4b 45 52 3b 0a 09 D_WIKI_MARKER;..
38e0: 70 2d 3e 63 75 72 73 6f 72 20 2b 3d 20 31 30 3b p->cursor += 10;
38f0: 0a 09 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 2f 2f ..return 1;.}.//
3900: 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 /}}}.static int
3910: 69 73 4e 6f 57 69 6b 69 42 6c 6f 63 6b 28 50 61 isNoWikiBlock(Pa
3920: 72 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a rser *p){//{{{..
3930: 09 63 68 61 72 20 2a 73 20 3d 20 70 2d 3e 63 75 .char *s = p->cu
3940: 72 73 6f 72 3b 0a 0a 09 69 66 20 28 73 5b 30 5d rsor;...if (s[0]
3950: 20 21 3d 20 27 7b 27 29 20 72 65 74 75 72 6e 20 != '{') return
3960: 30 3b 20 73 2b 2b 3b 0a 09 69 66 20 28 73 5b 30 0; s++;..if (s[0
3970: 5d 20 21 3d 20 27 7b 27 29 20 72 65 74 75 72 6e ] != '{') return
3980: 20 30 3b 20 73 2b 2b 3b 0a 09 69 66 20 28 73 5b 0; s++;..if (s[
3990: 30 5d 20 21 3d 20 27 7b 27 29 20 72 65 74 75 72 0] != '{') retur
39a0: 6e 20 30 3b 20 73 2b 2b 3b 0a 0a 09 73 20 3d 20 n 0; s++;...s =
39b0: 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73 cr_nextLine(p, s
39c0: 29 3b 0a 09 69 66 20 28 21 70 2d 3e 6c 69 6e 65 );..if (!p->line
39d0: 57 61 73 42 6c 61 6e 6b 29 20 72 65 74 75 72 6e WasBlank) return
39e0: 20 30 3b 0a 0a 09 70 2d 3e 74 68 69 73 2d 3e 73 0;...p->this->s
39f0: 74 61 72 74 20 3d 20 73 3b 0a 0a 09 73 20 3d 20 tart = s;...s =
3a00: 63 72 5f 66 69 6e 64 45 6e 64 4f 66 42 6c 6f 63 cr_findEndOfBloc
3a10: 6b 28 70 2c 20 73 2c 20 27 7d 27 29 3b 0a 0a 09 k(p, s, '}');...
3a20: 69 66 20 28 21 73 29 20 72 65 74 75 72 6e 20 30 if (!s) return 0
3a30: 3b 0a 0a 09 2f 2f 20 70 2d 3e 63 75 72 73 6f 72 ;...// p->cursor
3a40: 20 77 61 73 20 73 65 74 20 62 79 20 66 69 6e 64 was set by find
3a50: 45 6e 64 4f 66 42 6c 6f 63 6b 0a 09 70 2d 3e 74 EndOfBlock..p->t
3a60: 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 his->kind = KIND
3a70: 5f 4e 4f 5f 57 49 4b 49 5f 42 4c 4f 43 4b 3b 0a _NO_WIKI_BLOCK;.
3a80: 09 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d 20 .p->this->end =
3a90: 73 3b 0a 09 72 65 74 75 72 6e 20 31 3b 0a 7d 0a s;..return 1;.}.
3aa0: 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e .//}}}.static in
3ab0: 74 20 69 73 50 61 72 61 42 72 65 61 6b 28 50 61 t isParaBreak(Pa
3ac0: 72 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a rser *p){//{{{..
3ad0: 09 63 68 61 72 20 2a 73 20 3d 20 63 72 5f 6e 65 .char *s = cr_ne
3ae0: 78 74 4c 69 6e 65 28 70 2c 20 70 2d 3e 63 75 72 xtLine(p, p->cur
3af0: 73 6f 72 29 3b 0a 09 69 66 20 28 21 70 2d 3e 6c sor);..if (!p->l
3b00: 69 6e 65 57 61 73 42 6c 61 6e 6b 29 20 72 65 74 ineWasBlank) ret
3b10: 75 72 6e 20 30 3b 0a 0a 09 70 2d 3e 63 75 72 73 urn 0;...p->curs
3b20: 6f 72 20 3d 20 73 3b 0a 09 70 2d 3e 74 68 69 73 or = s;..p->this
3b30: 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 50 41 ->kind = KIND_PA
3b40: 52 41 5f 42 52 45 41 4b 3b 0a 09 72 65 74 75 72 RA_BREAK;..retur
3b50: 6e 20 31 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 n 1;.}.//}}}.sta
3b60: 74 69 63 20 69 6e 74 20 69 73 48 65 61 64 69 6e tic int isHeadin
3b70: 67 28 50 61 72 73 65 72 20 2a 70 29 7b 2f 2f 7b g(Parser *p){//{
3b80: 7b 7b 0a 0a 09 63 68 61 72 20 2a 73 20 3d 20 63 {{...char *s = c
3b90: 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 r_skipBlanks(p,
3ba0: 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 0a 09 69 6e p->cursor);...in
3bb0: 74 20 66 6c 61 67 73 20 3d 20 30 3b 0a 09 69 6e t flags = 0;..in
3bc0: 74 20 6c 65 76 65 6c 20 3d 20 63 72 5f 63 6f 75 t level = cr_cou
3bd0: 6e 74 43 68 61 72 73 28 70 2c 20 73 2c 20 27 3d ntChars(p, s, '=
3be0: 27 29 3b 0a 09 69 66 20 28 21 6c 65 76 65 6c 29 ');..if (!level)
3bf0: 20 72 65 74 75 72 6e 20 30 3b 0a 0a 09 73 20 2b return 0;...s +
3c00: 3d 20 6c 65 76 65 6c 3b 0a 0a 09 69 66 20 28 73 = level;...if (s
3c10: 5b 30 5d 20 3d 3d 20 27 3c 27 20 26 26 20 73 5b [0] == '<' && s[
3c20: 31 5d 20 3d 3d 20 27 3e 27 29 20 7b 0a 09 09 66 1] == '>') {...f
3c30: 6c 61 67 73 20 7c 3d 20 46 4c 41 47 5f 43 45 4e lags |= FLAG_CEN
3c40: 54 45 52 3b 0a 09 09 73 20 2b 3d 20 32 3b 0a 09 TER;...s += 2;..
3c50: 7d 0a 09 73 20 3d 20 63 72 5f 73 6b 69 70 42 6c }..s = cr_skipBl
3c60: 61 6e 6b 73 28 70 2c 20 73 29 3b 0a 0a 09 70 2d anks(p, s);...p-
3c70: 3e 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 73 >this->start = s
3c80: 3b 0a 0a 09 73 20 3d 20 63 72 5f 6e 65 78 74 4c ;...s = cr_nextL
3c90: 69 6e 65 28 70 2c 20 73 29 3b 0a 09 63 68 61 72 ine(p, s);..char
3ca0: 20 2a 7a 20 3d 20 73 3b 0a 0a 09 69 66 20 28 73 *z = s;...if (s
3cb0: 5b 2d 31 5d 20 3d 3d 20 27 5c 6e 27 29 20 73 2d [-1] == '\n') s-
3cc0: 2d 3b 0a 09 77 68 69 6c 65 28 73 5b 2d 31 5d 20 -;..while(s[-1]
3cd0: 3d 3d 20 27 20 27 20 7c 7c 20 73 5b 2d 31 5d 3d == ' ' || s[-1]=
3ce0: 3d 27 5c 74 27 29 20 73 2d 2d 3b 0a 09 77 68 69 ='\t') s--;..whi
3cf0: 6c 65 28 73 5b 2d 31 5d 20 3d 3d 20 27 3d 27 20 le(s[-1] == '='
3d00: 29 20 73 2d 2d 3b 0a 09 69 66 20 28 70 2d 3e 74 ) s--;..if (p->t
3d10: 68 69 73 2d 3e 73 74 61 72 74 20 3c 20 73 29 7b his->start < s){
3d20: 0a 09 09 70 2d 3e 63 75 72 73 6f 72 20 3d 20 7a ...p->cursor = z
3d30: 3b 0a 09 09 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e ;...p->this->kin
3d40: 64 20 3d 20 4b 49 4e 44 5f 48 45 41 44 49 4e 47 d = KIND_HEADING
3d50: 3b 0a 09 09 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 ;...p->this->end
3d60: 20 3d 20 73 3b 0a 09 09 70 2d 3e 74 68 69 73 2d = s;...p->this-
3d70: 3e 6c 65 76 65 6c 20 3d 20 6c 65 76 65 6c 3b 0a >level = level;.
3d80: 09 09 70 2d 3e 74 68 69 73 2d 3e 66 6c 61 67 73 ..p->this->flags
3d90: 20 7c 3d 20 66 6c 61 67 73 3b 0a 09 09 72 65 74 |= flags;...ret
3da0: 75 72 6e 20 31 3b 0a 09 7d 0a 09 72 65 74 75 72 urn 1;..}..retur
3db0: 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 n 0;.}.//}}}.sta
3dc0: 74 69 63 20 69 6e 74 20 69 73 48 6f 72 69 7a 6f tic int isHorizo
3dd0: 6e 74 61 6c 52 75 6c 65 28 50 61 72 73 65 72 20 ntalRule(Parser
3de0: 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 63 68 61 72 *p){//{{{...char
3df0: 20 2a 73 20 3d 20 63 72 5f 73 6b 69 70 42 6c 61 *s = cr_skipBla
3e00: 6e 6b 73 28 70 2c 20 70 2d 3e 63 75 72 73 6f 72 nks(p, p->cursor
3e10: 29 3b 0a 0a 09 69 6e 74 20 6c 65 76 65 6c 20 3d );...int level =
3e20: 20 63 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 70 cr_countChars(p
3e30: 2c 20 73 2c 20 27 2d 27 29 3b 0a 0a 09 69 66 20 , s, '-');...if
3e40: 20 28 6c 65 76 65 6c 20 3c 20 34 29 20 72 65 74 (level < 4) ret
3e50: 75 72 6e 20 30 3b 0a 09 73 20 3d 20 63 72 5f 6e urn 0;..s = cr_n
3e60: 65 78 74 4c 69 6e 65 28 70 2c 20 73 20 2b 20 6c extLine(p, s + l
3e70: 65 76 65 6c 29 3b 0a 09 69 66 20 28 21 70 2d 3e evel);..if (!p->
3e80: 6c 69 6e 65 57 61 73 42 6c 61 6e 6b 29 20 72 65 lineWasBlank) re
3e90: 74 75 72 6e 20 30 3b 0a 0a 09 70 2d 3e 63 75 72 turn 0;...p->cur
3ea0: 73 6f 72 20 3d 20 73 3b 0a 09 70 2d 3e 74 68 69 sor = s;..p->thi
3eb0: 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 48 s->kind = KIND_H
3ec0: 4f 52 49 5a 4f 4e 54 41 4c 5f 52 55 4c 45 3b 0a ORIZONTAL_RULE;.
3ed0: 0a 09 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 2f 2f ..return 1;.}.//
3ee0: 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 69 }}}.static int i
3ef0: 73 4c 69 73 74 49 74 65 6d 28 50 61 72 73 65 72 sListItem(Parser
3f00: 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 63 68 61 *p){//{{{...cha
3f10: 72 20 2a 73 20 3d 20 63 72 5f 73 6b 69 70 42 6c r *s = cr_skipBl
3f20: 61 6e 6b 73 28 70 2c 20 70 2d 3e 63 75 72 73 6f anks(p, p->curso
3f30: 72 29 3b 0a 0a 09 69 6e 74 20 6c 65 76 65 6c 20 r);...int level
3f40: 3d 20 63 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 = cr_countChars(
3f50: 70 2c 20 73 2c 20 27 23 27 29 3b 0a 09 69 66 20 p, s, '#');..if
3f60: 28 21 6c 65 76 65 6c 29 20 6c 65 76 65 6c 20 3d (!level) level =
3f70: 20 63 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 70 cr_countChars(p
3f80: 2c 20 73 2c 20 27 2a 27 29 3b 0a 0a 09 69 66 20 , s, '*');...if
3f90: 28 20 21 6c 65 76 65 6c 29 20 72 65 74 75 72 6e ( !level) return
3fa0: 20 30 3b 0a 0a 09 70 2d 3e 74 68 69 73 2d 3e 6b 0;...p->this->k
3fb0: 69 6e 64 20 3d 20 28 73 5b 30 5d 20 3d 3d 20 27 ind = (s[0] == '
3fc0: 23 27 29 20 3f 20 4b 49 4e 44 5f 4f 52 44 45 52 #') ? KIND_ORDER
3fd0: 45 44 5f 4c 49 53 54 20 3a 20 4b 49 4e 44 5f 55 ED_LIST : KIND_U
3fe0: 4e 4f 52 44 45 52 45 44 5f 4c 49 53 54 3b 0a 09 NORDERED_LIST;..
3ff0: 70 2d 3e 74 68 69 73 2d 3e 6c 65 76 65 6c 20 3d p->this->level =
4000: 20 6c 65 76 65 6c 3b 0a 0a 09 73 20 3d 20 63 72 level;...s = cr
4010: 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 73 _skipBlanks(p, s
4020: 20 2b 20 6c 65 76 65 6c 29 3b 0a 09 70 2d 3e 74 + level);..p->t
4030: 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 73 3b 0a his->start = s;.
4040: 0a 09 73 20 3d 20 63 72 5f 6e 65 78 74 4c 69 6e ..s = cr_nextLin
4050: 65 28 70 2c 20 73 29 3b 0a 09 69 66 20 28 70 2d e(p, s);..if (p-
4060: 3e 6c 69 6e 65 57 61 73 42 6c 61 6e 6b 29 20 72 >lineWasBlank) r
4070: 65 74 75 72 6e 20 30 3b 0a 0a 09 69 66 20 28 63 eturn 0;...if (c
4080: 72 5f 61 64 64 4c 69 73 74 49 74 65 6d 28 70 2c r_addListItem(p,
4090: 20 70 2d 3e 74 68 69 73 29 29 7b 0a 09 09 70 2d p->this)){...p-
40a0: 3e 63 75 72 73 6f 72 20 3d 20 70 2d 3e 74 68 69 >cursor = p->thi
40b0: 73 2d 3e 65 6e 64 20 3d 20 73 3b 0a 09 09 72 65 s->end = s;...re
40c0: 74 75 72 6e 20 31 3b 0a 09 7d 0a 09 70 2d 3e 74 turn 1;..}..p->t
40d0: 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 30 3b 0a 09 his->kind = 0;..
40e0: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d return 0;.}.//}}
40f0: 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 69 73 54 }.static int isT
4100: 61 62 6c 65 28 50 61 72 73 65 72 20 2a 70 29 7b able(Parser *p){
4110: 2f 2f 7b 7b 7b 0a 0a 09 70 2d 3e 74 68 69 73 2d //{{{...p->this-
4120: 3e 73 74 61 72 74 20 3d 20 70 2d 3e 63 75 72 73 >start = p->curs
4130: 6f 72 3b 0a 09 63 68 61 72 20 2a 73 20 3d 20 63 or;..char *s = c
4140: 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 r_skipBlanks(p,
4150: 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 09 69 66 20 p->cursor);..if
4160: 28 73 5b 30 5d 20 21 3d 20 27 7c 27 29 20 72 65 (s[0] != '|') re
4170: 74 75 72 6e 20 30 3b 0a 20 20 73 20 2b 3d 31 3b turn 0;. s +=1;
4180: 0a 09 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 ..p->this->kind
4190: 3d 20 4b 49 4e 44 5f 54 41 42 4c 45 3b 0a 0a 0a = KIND_TABLE;...
41a0: 09 2f 2f 70 2d 3e 63 75 72 73 6f 72 20 3d 20 09 .//p->cursor = .
41b0: 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d 20 63 p->this->end = c
41c0: 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73 29 r_nextLine(p, s)
41d0: 3b 0a 09 4e 6f 64 65 20 2a 72 6f 77 3b 0a 09 4e ;..Node *row;..N
41e0: 6f 64 65 20 2a 74 61 69 6c 20 3d 20 4e 55 4c 4c ode *tail = NULL
41f0: 3b 0a 0a 09 77 68 69 6c 65 20 28 31 29 20 7b 0a ;...while (1) {.
4200: 0a 09 09 72 6f 77 20 3d 20 70 6f 6f 6c 5f 6e 65 ...row = pool_ne
4210: 77 28 70 29 3b 0a 09 09 72 6f 77 2d 3e 6b 69 6e w(p);...row->kin
4220: 64 20 3d 20 4b 49 4e 44 5f 54 41 42 4c 45 5f 52 d = KIND_TABLE_R
4230: 4f 57 3b 0a 0a 09 09 69 66 20 28 74 61 69 6c 29 OW;....if (tail)
4240: 20 09 74 61 69 6c 20 3d 20 74 61 69 6c 2d 3e 6e .tail = tail->n
4250: 65 78 74 20 3d 20 72 6f 77 3b 0a 09 09 65 6c 73 ext = row;...els
4260: 65 20 70 2d 3e 74 68 69 73 2d 3e 63 68 69 6c 64 e p->this->child
4270: 72 65 6e 20 3d 20 74 61 69 6c 20 3d 20 72 6f 77 ren = tail = row
4280: 3b 0a 0a 09 09 72 6f 77 2d 3e 73 74 61 72 74 20 ;....row->start
4290: 3d 20 73 3b 0a 09 09 70 2d 3e 63 75 72 73 6f 72 = s;...p->cursor
42a0: 20 3d 20 73 20 3d 20 09 72 6f 77 2d 3e 65 6e 64 = s = .row->end
42b0: 20 3d 20 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 = p->this->end
42c0: 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c = cr_nextLine(p,
42d0: 20 73 29 3b 0a 0a 09 09 69 66 20 28 72 6f 77 2d s);....if (row-
42e0: 3e 65 6e 64 5b 2d 31 5d 20 3d 3d 20 27 5c 6e 27 >end[-1] == '\n'
42f0: 29 20 72 6f 77 2d 3e 65 6e 64 20 2d 3d 20 31 3b ) row->end -= 1;
4300: 0a 09 09 77 68 69 6c 65 28 72 6f 77 2d 3e 65 6e ...while(row->en
4310: 64 5b 2d 31 5d 20 3d 3d 20 27 20 27 20 29 20 72 d[-1] == ' ' ) r
4320: 6f 77 2d 3e 65 6e 64 20 2d 3d 20 31 3b 0a 09 09 ow->end -= 1;...
4330: 69 66 20 28 72 6f 77 2d 3e 65 6e 64 5b 2d 31 5d if (row->end[-1]
4340: 20 3d 3d 20 27 7c 27 29 20 72 6f 77 2d 3e 65 6e == '|') row->en
4350: 64 20 2d 3d 20 31 3b 0a 0a 09 09 69 66 20 28 21 d -= 1;....if (!
4360: 2a 73 29 20 62 72 65 61 6b 3b 0a 0a 09 09 2f 2f *s) break;....//
4370: 20 62 6c 61 6e 6b 73 20 2a 6e 6f 74 2a 20 6e 6f blanks *not* no
4380: 72 6d 61 6c 69 7a 65 64 0a 09 09 73 20 3d 20 63 rmalized...s = c
4390: 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 r_skipBlanks(p,
43a0: 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 09 09 69 66 p->cursor);...if
43b0: 20 28 73 5b 30 5d 20 21 3d 20 27 7c 27 29 20 62 (s[0] != '|') b
43c0: 72 65 61 6b 3b 0a 09 09 73 2b 2b 3b 0a 0a 09 7d reak;...s++;...}
43d0: 0a 09 72 65 74 75 72 6e 20 31 3b 0a 0a 7d 3b 0a ..return 1;..};.
43e0: 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 //}}}.static int
43f0: 20 69 73 50 61 72 61 67 72 61 70 68 28 50 61 72 isParagraph(Par
4400: 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 ser *p){//{{{...
4410: 63 68 61 72 20 2a 73 20 3d 20 70 2d 3e 63 75 72 char *s = p->cur
4420: 73 6f 72 3b 0a 09 70 2d 3e 74 68 69 73 2d 3e 73 sor;..p->this->s
4430: 74 61 72 74 20 3d 20 73 3b 0a 0a 09 73 20 3d 20 tart = s;...s =
4440: 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73 cr_nextLine(p, s
4450: 29 3b 0a 09 70 2d 3e 63 75 72 73 6f 72 20 3d 20 );..p->cursor =
4460: 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d 20 73 p->this->end = s
4470: 3b 0a 09 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 ;..p->this->kind
4480: 20 3d 20 4b 49 4e 44 5f 50 41 52 41 47 52 41 50 = KIND_PARAGRAP
4490: 48 3b 0a 09 72 65 74 75 72 6e 20 31 3b 0a 0a 7d H;..return 1;..}
44a0: 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 76 6f .//}}}.static vo
44b0: 69 64 20 63 72 5f 70 61 72 73 65 28 50 61 72 73 id cr_parse(Pars
44c0: 65 72 20 2a 70 2c 20 63 68 61 72 2a 20 7a 29 7b er *p, char* z){
44d0: 2f 2f 7b 7b 7b 0a 0a 09 70 2d 3e 70 72 65 76 69 //{{{...p->previ
44e0: 6f 75 73 20 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 ous = pool_new(p
44f0: 29 3b 0a 09 70 2d 3e 70 72 65 76 69 6f 75 73 2d );..p->previous-
4500: 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 50 41 52 >kind = KIND_PAR
4510: 41 5f 42 52 45 41 4b 3b 0a 0a 09 70 2d 3e 74 68 A_BREAK;...p->th
4520: 69 73 20 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 is = pool_new(p)
4530: 3b 0a 09 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 ;..p->this->kind
4540: 20 3d 20 4b 49 4e 44 5f 50 41 52 41 5f 42 52 45 = KIND_PARA_BRE
4550: 41 4b 3b 0a 0a 09 70 2d 3e 69 6e 4c 69 6e 6b 20 AK;...p->inLink
4560: 3d 20 30 3b 0a 09 70 2d 3e 69 6e 54 61 62 6c 65 = 0;..p->inTable
4570: 20 3d 20 30 3b 0a 0a 09 70 2d 3e 63 75 72 73 6f = 0;...p->curso
4580: 72 20 3d 20 7a 3b 0a 09 70 2d 3e 6c 69 73 74 20 r = z;..p->list
4590: 3d 20 4e 55 4c 4c 3b 0a 09 70 2d 3e 69 73 74 61 = NULL;..p->ista
45a0: 63 6b 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 77 68 69 ck = NULL;...whi
45b0: 6c 65 20 28 70 2d 3e 63 75 72 73 6f 72 5b 30 5d le (p->cursor[0]
45c0: 29 20 7b 0a 0a 09 09 77 68 69 6c 65 20 28 31 29 ) {....while (1)
45d0: 7b 0a 0a 09 09 09 2f 2f 20 6d 75 73 74 20 62 65 {.....// must be
45e0: 20 66 69 72 73 74 0a 09 09 09 69 66 20 28 69 73 first....if (is
45f0: 4e 6f 57 69 6b 69 42 6c 6f 63 6b 28 70 29 29 20 NoWikiBlock(p))
4600: 62 72 65 61 6b 3b 0a 09 09 09 69 66 20 28 69 73 break;....if (is
4610: 50 61 72 61 42 72 65 61 6b 28 70 29 29 20 09 62 ParaBreak(p)) .b
4620: 72 65 61 6b 3b 0a 0a 09 09 09 2f 2f 20 6f 72 64 reak;.....// ord
4630: 65 72 20 6e 6f 74 20 69 6d 70 6f 72 74 61 6e 74 er not important
4640: 0a 09 09 09 69 66 20 28 69 73 48 65 61 64 69 6e ....if (isHeadin
4650: 67 28 70 29 29 20 62 72 65 61 6b 3b 0a 09 09 09 g(p)) break;....
4660: 69 66 20 28 69 73 48 6f 72 69 7a 6f 6e 74 61 6c if (isHorizontal
4670: 52 75 6c 65 28 70 29 29 20 62 72 65 61 6b 3b 0a Rule(p)) break;.
4680: 09 09 09 69 66 20 28 69 73 4c 69 73 74 49 74 65 ...if (isListIte
4690: 6d 28 70 29 29 20 62 72 65 61 6b 3b 0a 09 09 09 m(p)) break;....
46a0: 69 66 20 28 69 73 54 61 62 6c 65 28 70 29 29 20 if (isTable(p))
46b0: 62 72 65 61 6b 3b 0a 0a 09 09 09 2f 2f 20 68 65 break;.....// he
46c0: 72 65 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63 re for efficienc
46d0: 79 3f 0a 09 09 09 69 66 20 28 69 73 45 6e 64 57 y?....if (isEndW
46e0: 69 6b 69 4d 61 72 6b 65 72 28 70 29 29 20 62 72 ikiMarker(p)) br
46f0: 65 61 6b 3b 0a 0a 09 09 09 2f 2f 20 6d 75 73 74 eak;.....// must
4700: 20 62 65 20 6c 61 73 74 0a 09 09 09 69 66 20 28 be last....if (
4710: 69 73 50 61 72 61 67 72 61 70 68 28 70 29 29 3b isParagraph(p));
4720: 20 62 72 65 61 6b 3b 0a 0a 09 09 09 2f 2f 20 64 break;.....// d
4730: 6f 68 21 0a 09 09 20 20 61 73 73 65 72 74 28 30 oh!... assert(0
4740: 29 3b 0a 09 09 7d 0a 0a 09 09 69 6e 74 20 6b 69 );...}....int ki
4750: 6e 64 20 3d 20 70 2d 3e 74 68 69 73 2d 3e 6b 69 nd = p->this->ki
4760: 6e 64 3b 0a 09 09 69 6e 74 20 70 72 65 76 20 3d nd;...int prev =
4770: 20 70 2d 3e 70 72 65 76 69 6f 75 73 2d 3e 6b 69 p->previous->ki
4780: 6e 64 3b 0a 0a 09 09 69 66 20 28 6b 69 6e 64 20 nd;....if (kind
4790: 26 20 4b 49 4e 44 5f 45 4e 44 5f 57 49 4b 49 5f & KIND_END_WIKI_
47a0: 4d 41 52 4b 45 52 29 09 72 65 74 75 72 6e 3b 0a MARKER).return;.
47b0: 0a 09 09 69 66 20 28 6b 69 6e 64 20 3d 3d 20 4b ...if (kind == K
47c0: 49 4e 44 5f 50 41 52 41 47 52 41 50 48 20 26 26 IND_PARAGRAPH &&
47d0: 20 70 72 65 76 20 26 20 4b 49 4e 44 5f 4c 49 53 prev & KIND_LIS
47e0: 54 5f 4f 52 5f 50 41 52 41 47 52 41 50 48 29 20 T_OR_PARAGRAPH)
47f0: 7b 0a 09 09 09 09 70 2d 3e 70 72 65 76 69 6f 75 {.....p->previou
4800: 73 2d 3e 65 6e 64 20 3d 20 70 2d 3e 74 68 69 73 s->end = p->this
4810: 2d 3e 65 6e 64 3b 0a 09 09 09 09 70 2d 3e 74 68 ->end;.....p->th
4820: 69 73 20 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 is = pool_new(p)
4830: 3b 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a ;.....continue;.
4840: 09 09 7d 0a 0a 09 09 69 66 20 28 20 21 28 6b 69 ..}....if ( !(ki
4850: 6e 64 20 26 20 4b 49 4e 44 5f 4c 49 53 54 20 26 nd & KIND_LIST &
4860: 26 20 70 72 65 76 20 26 20 4b 49 4e 44 5f 4c 49 & prev & KIND_LI
4870: 53 54 29 20 29 0a 09 09 09 63 72 5f 72 65 6e 64 ST) )....cr_rend
4880: 65 72 28 70 2c 20 70 2d 3e 70 72 65 76 69 6f 75 er(p, p->previou
4890: 73 29 3b 0a 0a 09 09 70 2d 3e 70 72 65 76 69 6f s);....p->previo
48a0: 75 73 20 3d 20 70 2d 3e 74 68 69 73 3b 0a 09 09 us = p->this;...
48b0: 70 2d 3e 74 68 69 73 20 3d 20 70 6f 6f 6c 5f 6e p->this = pool_n
48c0: 65 77 28 70 29 3b 0a 0a 09 7d 0a 7d 0a 2f 2f 7d ew(p);...}.}.//}
48d0: 7d 7d 0a 0a 2f 2f 7d 7d 7d 0a 0a 63 68 61 72 20 }}..//}}}..char
48e0: 2a 77 69 6b 69 5f 72 65 6e 64 65 72 5f 63 72 65 *wiki_render_cre
48f0: 6f 6c 65 28 52 65 6e 64 65 72 65 72 20 2a 72 2c ole(Renderer *r,
4900: 20 63 68 61 72 20 2a 7a 29 7b 2f 2f 7b 7b 7b 0a char *z){//{{{.
4910: 0a 20 20 50 61 72 73 65 72 20 70 61 72 73 65 72 . Parser parser
4920: 3b 0a 09 50 61 72 73 65 72 20 2a 70 20 3d 20 26 ;..Parser *p = &
4930: 70 61 72 73 65 72 3b 0a 0a 09 70 2d 3e 72 20 3d parser;...p->r =
4940: 20 72 3b 0a 09 70 2d 3e 69 62 6c 6f 62 20 3d 20 r;..p->iblob =
4950: 72 2d 3e 70 4f 75 74 3b 0a 0a 09 70 2d 3e 6e 46 r->pOut;...p->nF
4960: 72 65 65 20 3d 20 30 3b 0a 09 70 2d 3e 70 6f 6f ree = 0;..p->poo
4970: 6c 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 63 72 5f 70 l = NULL;...cr_p
4980: 61 72 73 65 28 70 2c 20 7a 29 3b 0a 0a 09 63 72 arse(p, z);...cr
4990: 5f 72 65 6e 64 65 72 28 70 2c 20 70 2d 3e 70 72 _render(p, p->pr
49a0: 65 76 69 6f 75 73 29 3b 0a 0a 09 70 6f 6f 6c 5f evious);...pool_
49b0: 66 72 65 65 28 70 29 3b 0a 0a 09 72 65 74 75 72 free(p);...retur
49c0: 6e 20 70 2d 3e 63 75 72 73 6f 72 3b 0a 0a 7d 0a n p->cursor;..}.
49d0: 2f 2f 7d 7d 7d 0a 0a 0a 63 68 61 72 20 2a 77 69 //}}}...char *wi
49e0: 6b 69 5f 72 65 6e 64 65 72 5f 6d 61 63 72 6f 28 ki_render_macro(
49f0: 52 65 6e 64 65 72 65 72 20 2a 70 2c 20 63 68 61 Renderer *p, cha
4a00: 72 20 2a 7a 2c 20 69 6e 74 20 2a 74 6f 6b 65 6e r *z, int *token
4a10: 54 79 70 65 29 7b 0a 09 69 66 20 28 21 6d 65 6d Type){..if (!mem
4a20: 63 6d 70 28 7a 2c 20 22 3c 3c 66 6f 73 73 69 6c cmp(z, "<<fossil
4a30: 3e 3e 22 2c 20 39 29 29 7b 0a 09 09 2a 74 6f 6b >>", 9)){...*tok
4a40: 65 6e 54 79 70 65 20 3d 20 31 3b 0a 09 09 72 65 enType = 1;...re
4a50: 74 75 72 6e 20 7a 20 2b 20 31 30 3b 0a 09 7d 0a turn z + 10;..}.
4a60: 09 69 66 20 28 6d 65 6d 63 6d 70 28 7a 2c 20 22 .if (memcmp(z, "
4a70: 3c 3c 63 72 65 6f 6c 65 3e 3e 22 2c 20 39 29 29 <<creole>>", 9))
4a80: 20 7b 0a 09 09 2a 74 6f 6b 65 6e 54 79 70 65 20 {...*tokenType
4a90: 3d 20 30 3b 0a 09 09 72 65 74 75 72 6e 20 7a 3b = 0;...return z;
4aa0: 0a 09 7d 0a 09 2a 74 6f 6b 65 6e 54 79 70 65 20 ..}..*tokenType
4ab0: 3d 20 31 3b 0a 09 72 65 74 75 72 6e 20 77 69 6b = 1;..return wik
4ac0: 69 5f 72 65 6e 64 65 72 5f 63 72 65 6f 6c 65 28 i_render_creole(
4ad0: 70 2c 20 7a 2b 31 30 29 3b 0a 0a 7d 0a 0a 2f 2a p, z+10);..}../*
4ae0: 20 3a 66 6f 6c 64 69 6e 67 3d 65 78 70 6c 69 63 :folding=explic
4af0: 69 74 3a 63 6f 6c 6c 61 70 73 65 46 6f 6c 64 73 it:collapseFolds
4b00: 3d 31 3a 74 61 62 53 69 7a 65 3d 32 3a 69 6e 64 =1:tabSize=2:ind
4b10: 65 6e 74 53 69 7a 65 3d 32 3a 6e 6f 54 61 62 73 entSize=2:noTabs
4b20: 3d 66 61 6c 73 65 3a 20 2a 2f 0a =false: */.