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: 43 52 45 4f 4c 45 5f 4d 41 43 52 4f 20 31 0a 23 CREOLE_MACRO 1.#
0430: 65 6e 64 69 66 0a 0a 2f 2f 7b 7b 7b 20 4c 4f 43 endif..//{{{ LOC
0440: 41 4c 20 49 4e 54 45 52 46 41 43 45 0a 23 69 66 AL INTERFACE.#if
0450: 20 4c 4f 43 41 4c 5f 49 4e 54 45 52 46 41 43 45 LOCAL_INTERFACE
0460: 0a 0a 23 64 65 66 69 6e 65 20 50 4f 4f 4c 5f 43 ..#define POOL_C
0470: 48 55 4e 4b 5f 53 49 5a 45 20 31 30 30 0a 0a 2f HUNK_SIZE 100../
0480: 2f 7b 7b 7b 20 4b 49 4e 44 0a 23 64 65 66 69 6e /{{{ KIND.#defin
0490: 65 20 4b 49 4e 44 5f 52 4f 4f 54 20 20 20 20 20 e KIND_ROOT
04a0: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30 31 0x0000001
04b0: 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 48 4f .#define KIND_HO
04c0: 52 49 5a 4f 4e 54 41 4c 5f 52 55 4c 45 20 30 78 RIZONTAL_RULE 0x
04d0: 30 30 30 30 30 30 32 0a 23 64 65 66 69 6e 65 20 0000002.#define
04e0: 4b 49 4e 44 5f 48 45 41 44 49 4e 47 20 20 20 20 KIND_HEADING
04f0: 20 20 20 20 20 30 78 30 30 30 30 30 30 34 0a 23 0x0000004.#
0500: 64 65 66 69 6e 65 20 4b 49 4e 44 5f 4f 52 44 45 define KIND_ORDE
0510: 52 45 44 5f 4c 49 53 54 20 20 20 20 30 78 30 30 RED_LIST 0x00
0520: 30 30 30 30 38 0a 0a 23 64 65 66 69 6e 65 20 4b 00008..#define K
0530: 49 4e 44 5f 55 4e 4f 52 44 45 52 45 44 5f 4c 49 IND_UNORDERED_LI
0540: 53 54 20 20 30 78 30 30 30 30 30 31 30 0a 23 64 ST 0x0000010.#d
0550: 65 66 69 6e 65 20 4b 49 4e 44 5f 50 41 52 41 47 efine KIND_PARAG
0560: 52 41 50 48 20 20 20 20 20 20 20 30 78 30 30 30 RAPH 0x000
0570: 30 30 32 30 0a 23 64 65 66 69 6e 65 20 4b 49 4e 0020.#define KIN
0580: 44 5f 54 41 42 4c 45 20 20 20 20 20 20 20 20 20 D_TABLE
0590: 20 20 30 78 30 30 30 30 30 34 30 0a 23 64 65 66 0x0000040.#def
05a0: 69 6e 65 20 4b 49 4e 44 5f 4e 4f 5f 57 49 4b 49 ine KIND_NO_WIKI
05b0: 5f 42 4c 4f 43 4b 20 20 20 30 78 30 30 30 30 30 _BLOCK 0x00000
05c0: 38 30 0a 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 80..#define KIND
05d0: 5f 50 41 52 41 5f 42 52 45 41 4b 20 20 20 20 20 _PARA_BREAK
05e0: 20 30 78 30 30 30 30 31 30 30 0a 23 64 65 66 69 0x0000100.#defi
05f0: 6e 65 20 4b 49 4e 44 5f 45 4e 44 5f 57 49 4b 49 ne KIND_END_WIKI
0600: 5f 4d 41 52 4b 45 52 20 30 78 30 30 30 30 32 30 _MARKER 0x000020
0610: 30 0a 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 0..#define KIND_
0620: 42 4f 4c 44 20 20 20 20 20 20 20 20 20 20 20 20 BOLD
0630: 30 78 30 30 30 30 34 30 30 0a 23 64 65 66 69 6e 0x0000400.#defin
0640: 65 20 4b 49 4e 44 5f 49 54 41 4c 49 43 20 20 20 e KIND_ITALIC
0650: 20 20 20 20 20 20 20 30 78 30 30 30 30 38 30 30 0x0000800
0660: 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 53 55 .#define KIND_SU
0670: 50 45 52 53 43 52 49 50 54 20 20 20 20 20 30 78 PERSCRIPT 0x
0680: 30 30 30 31 30 30 30 0a 23 64 65 66 69 6e 65 20 0001000.#define
0690: 4b 49 4e 44 5f 53 55 42 53 43 52 49 50 54 20 20 KIND_SUBSCRIPT
06a0: 20 20 20 20 20 30 78 30 30 30 32 30 30 30 0a 23 0x0002000.#
06b0: 64 65 66 69 6e 65 20 4b 49 4e 44 5f 4d 4f 4e 4f define KIND_MONO
06c0: 53 50 41 43 45 44 20 20 20 20 20 20 30 78 30 30 SPACED 0x00
06d0: 30 34 30 30 30 0a 23 64 65 66 69 6e 65 20 4b 49 04000.#define KI
06e0: 4e 44 5f 42 52 45 41 4b 20 20 20 20 20 20 20 20 ND_BREAK
06f0: 20 20 20 30 78 30 30 30 38 30 30 30 0a 0a 23 64 0x0008000..#d
0700: 65 66 69 6e 65 20 4b 49 4e 44 5f 54 41 42 4c 45 efine KIND_TABLE
0710: 5f 52 4f 57 20 20 20 20 20 20 20 30 78 30 30 31 _ROW 0x001
0720: 30 30 30 30 0a 2f 2f 7d 7d 7d 0a 2f 2f 7b 7b 7b 0000.//}}}.//{{{
0730: 20 46 4c 41 47 0a 2f 2f 20 6b 65 65 70 20 66 69 FLAG.// keep fi
0740: 72 73 74 20 66 6f 75 72 20 62 69 74 73 20 66 72 rst four bits fr
0750: 65 65 0a 23 64 65 66 69 6e 65 20 46 4c 41 47 5f ee.#define FLAG_
0760: 43 45 4e 54 45 52 20 20 20 30 78 30 30 30 30 31 CENTER 0x00001
0770: 30 30 0a 2f 2f 7d 7d 7d 0a 73 74 72 75 63 74 20 00.//}}}.struct
0780: 4e 6f 64 65 20 7b 2f 2f 7b 7b 7b 0a 0a 20 20 63 Node {//{{{.. c
0790: 68 61 72 20 2a 73 74 61 72 74 3b 0a 20 20 63 68 har *start;. ch
07a0: 61 72 20 2a 65 6e 64 3b 0a 0a 20 20 69 6e 74 20 ar *end;.. int
07b0: 6b 69 6e 64 3b 0a 20 20 69 6e 74 20 6c 65 76 65 kind;. int leve
07c0: 6c 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a l;. int flags;.
07d0: 0a 20 20 4e 6f 64 65 20 2a 70 61 72 65 6e 74 3b . Node *parent;
07e0: 0a 20 20 4e 6f 64 65 20 2a 6e 65 78 74 3b 0a 20 . Node *next;.
07f0: 20 4e 6f 64 65 20 2a 63 68 69 6c 64 72 65 6e 3b Node *children;
0800: 0a 0a 7d 3b 0a 2f 2f 7d 7d 7d 0a 73 74 72 75 63 ..};.//}}}.struc
0810: 74 20 4e 6f 64 65 50 6f 6f 6c 20 7b 2f 2f 7b 7b t NodePool {//{{
0820: 7b 0a 20 20 4e 6f 64 65 50 6f 6f 6c 20 2a 6e 65 {. NodePool *ne
0830: 78 74 3b 0a 20 20 4e 6f 64 65 20 61 5b 50 4f 4f xt;. Node a[POO
0840: 4c 5f 43 48 55 4e 4b 5f 53 49 5a 45 5d 3b 0a 7d L_CHUNK_SIZE];.}
0850: 0a 2f 2f 7d 7d 7d 0a 73 74 72 75 63 74 20 50 61 .//}}}.struct Pa
0860: 72 73 65 72 20 7b 2f 2f 7b 7b 7b 0a 0a 20 20 42 rser {//{{{.. B
0870: 6c 6f 62 20 2a 70 4f 75 74 3b 20 20 20 20 20 20 lob *pOut;
0880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 /* Ou
0890: 74 70 75 74 20 61 70 70 65 6e 64 65 64 20 74 6f tput appended to
08a0: 20 74 68 69 73 20 62 6c 6f 62 20 2a 2f 0a 20 20 this blob */.
08b0: 52 65 6e 64 65 72 65 72 20 2a 72 3b 0a 0a 20 20 Renderer *r;..
08c0: 4e 6f 64 65 50 6f 6f 6c 20 2a 70 6f 6f 6c 3b 0a NodePool *pool;.
08d0: 20 20 69 6e 74 20 6e 46 72 65 65 3b 0a 0a 20 20 int nFree;..
08e0: 4e 6f 64 65 20 2a 74 68 69 73 3b 0a 20 20 4e 6f Node *this;. No
08f0: 64 65 20 2a 70 72 65 76 69 6f 75 73 3b 0a 20 20 de *previous;.
0900: 4e 6f 64 65 20 2a 6c 69 73 74 3b 0a 0a 20 20 63 Node *list;.. c
0910: 68 61 72 20 2a 63 75 72 73 6f 72 3b 0a 0a 20 20 har *cursor;..
0920: 69 6e 74 20 6c 69 6e 65 57 61 73 42 6c 61 6e 6b int lineWasBlank
0930: 3b 0a 20 20 69 6e 74 20 63 68 61 72 43 6f 75 6e ;. int charCoun
0940: 74 3b 0a 0a 20 20 4e 6f 64 65 20 2a 69 74 65 6d t;.. Node *item
0950: 3b 0a 20 20 4e 6f 64 65 20 2a 69 73 74 61 63 6b ;. Node *istack
0960: 3b 0a 20 20 63 68 61 72 20 2a 69 63 75 72 73 6f ;. char *icurso
0970: 72 3b 0a 20 20 63 68 61 72 20 2a 69 65 6e 64 3b r;. char *iend;
0980: 0a 0a 20 20 69 6e 74 20 69 6e 4c 69 6e 6b 3b 0a .. int inLink;.
0990: 20 20 69 6e 74 20 69 6e 54 61 62 6c 65 3b 0a 20 int inTable;.
09a0: 20 69 6e 74 20 69 65 73 63 3b 0a 0a 20 20 42 6c int iesc;.. Bl
09b0: 6f 62 20 2a 69 62 6c 6f 62 3b 0a 0a 0a 0a 0a 7d ob *iblob;.....}
09c0: 3b 0a 2f 2f 7d 7d 7d 0a 0a 23 65 6e 64 69 66 0a ;.//}}}..#endif.
09d0: 0a 63 6f 6e 73 74 20 69 6e 74 20 4b 49 4e 44 5f .const int KIND_
09e0: 4c 49 53 54 20 3d 20 28 4b 49 4e 44 5f 55 4e 4f LIST = (KIND_UNO
09f0: 52 44 45 52 45 44 5f 4c 49 53 54 20 7c 20 4b 49 RDERED_LIST | KI
0a00: 4e 44 5f 4f 52 44 45 52 45 44 5f 4c 49 53 54 29 ND_ORDERED_LIST)
0a10: 3b 0a 63 6f 6e 73 74 20 69 6e 74 20 4b 49 4e 44 ;.const int KIND
0a20: 5f 4c 49 53 54 5f 4f 52 5f 50 41 52 41 47 52 41 _LIST_OR_PARAGRA
0a30: 50 48 20 3d 20 28 4b 49 4e 44 5f 50 41 52 41 47 PH = (KIND_PARAG
0a40: 52 41 50 48 20 7c 20 4b 49 4e 44 5f 55 4e 4f 52 RAPH | KIND_UNOR
0a50: 44 45 52 45 44 5f 4c 49 53 54 20 7c 20 4b 49 4e DERED_LIST | KIN
0a60: 44 5f 4f 52 44 45 52 45 44 5f 4c 49 53 54 29 3b D_ORDERED_LIST);
0a70: 0a 2f 2f 7d 7d 7d 0a 0a 2f 2f 7b 7b 7b 20 50 4f .//}}}..//{{{ PO
0a80: 4f 4c 20 4d 41 4e 41 47 45 4d 45 4e 54 0a 73 74 OL MANAGEMENT.st
0a90: 61 74 69 63 20 4e 6f 64 65 20 2a 70 6f 6f 6c 5f atic Node *pool_
0aa0: 6e 65 77 28 50 61 72 73 65 72 20 2a 70 29 7b 0a new(Parser *p){.
0ab0: 0a 20 20 69 66 20 28 20 70 2d 3e 70 6f 6f 6c 20 . if ( p->pool
0ac0: 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 70 2d 3e 6e 46 == NULL || p->nF
0ad0: 72 65 65 20 3d 3d 20 30 29 7b 0a 0a 20 20 20 20 ree == 0){..
0ae0: 4e 6f 64 65 50 6f 6f 6c 20 2a 74 65 6d 70 20 3d NodePool *temp =
0af0: 20 70 2d 3e 70 6f 6f 6c 3b 0a 0a 20 20 20 20 70 p->pool;.. p
0b00: 2d 3e 70 6f 6f 6c 20 3d 20 6d 61 6c 6c 6f 63 28 ->pool = malloc(
0b10: 73 69 7a 65 6f 66 28 4e 6f 64 65 50 6f 6f 6c 29 sizeof(NodePool)
0b20: 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 70 6f );. if( p->po
0b30: 6f 6c 20 3d 3d 20 4e 55 4c 4c 20 29 20 66 6f 73 ol == NULL ) fos
0b40: 73 69 6c 5f 70 61 6e 69 63 28 22 6f 75 74 20 6f sil_panic("out o
0b50: 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 0a 20 20 20 f memory");..
0b60: 20 70 2d 3e 70 6f 6f 6c 2d 3e 6e 65 78 74 20 3d p->pool->next =
0b70: 20 74 65 6d 70 3b 0a 20 20 20 20 70 2d 3e 6e 46 temp;. p->nF
0b80: 72 65 65 20 3d 20 50 4f 4f 4c 5f 43 48 55 4e 4b ree = POOL_CHUNK
0b90: 5f 53 49 5a 45 3b 0a 20 20 7d 0a 20 20 70 2d 3e _SIZE;. }. p->
0ba0: 6e 46 72 65 65 20 2d 3d 20 31 3b 0a 20 20 4e 6f nFree -= 1;. No
0bb0: 64 65 20 2a 6e 6f 64 65 20 3d 20 26 28 70 2d 3e de *node = &(p->
0bc0: 70 6f 6f 6c 2d 3e 61 5b 70 2d 3e 6e 46 72 65 65 pool->a[p->nFree
0bd0: 5d 29 3b 0a 20 20 6d 65 6d 73 65 74 28 6e 6f 64 ]);. memset(nod
0be0: 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 6e 6f e, 0, sizeof(*no
0bf0: 64 65 29 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 de));.. return
0c00: 6e 6f 64 65 3b 0a 7d 0a 0a 0a 73 74 61 74 69 63 node;.}...static
0c10: 20 76 6f 69 64 20 70 6f 6f 6c 5f 66 72 65 65 28 void pool_free(
0c20: 50 61 72 73 65 72 20 2a 70 29 7b 0a 0a 20 20 4e Parser *p){.. N
0c30: 6f 64 65 50 6f 6f 6c 20 2a 74 65 6d 70 3b 0a 0a odePool *temp;..
0c40: 20 20 77 68 69 6c 65 20 28 70 2d 3e 70 6f 6f 6c while (p->pool
0c50: 20 21 3d 20 4e 55 4c 4c 29 7b 0a 20 20 20 20 74 != NULL){. t
0c60: 65 6d 70 20 3d 20 70 2d 3e 70 6f 6f 6c 3b 0a 20 emp = p->pool;.
0c70: 20 20 20 70 2d 3e 70 6f 6f 6c 20 3d 20 74 65 6d p->pool = tem
0c80: 70 2d 3e 6e 65 78 74 3b 0a 20 20 20 20 66 72 65 p->next;. fre
0c90: 65 28 74 65 6d 70 29 3b 0a 20 20 7d 0a 0a 7d 0a e(temp);. }..}.
0ca0: 2f 2f 7d 7d 7d 0a 0a 2f 2f 7b 7b 7b 20 55 74 69 //}}}..//{{{ Uti
0cb0: 6c 69 74 79 20 4d 65 74 68 6f 64 73 0a 0a 73 74 lity Methods..st
0cc0: 61 74 69 63 20 63 68 61 72 20 2a 63 72 5f 73 6b atic char *cr_sk
0cd0: 69 70 42 6c 61 6e 6b 73 28 50 61 72 73 65 72 20 ipBlanks(Parser
0ce0: 2a 70 2c 20 63 68 61 72 2a 20 7a 29 7b 2f 2f 7b *p, char* z){//{
0cf0: 7b 7b 0a 20 20 63 68 61 72 20 2a 73 20 3d 20 7a {{. char *s = z
0d00: 3b 0a 20 20 77 68 69 6c 65 20 28 7a 5b 30 5d 20 ;. while (z[0]
0d10: 3d 3d 20 27 20 27 20 7c 7c 20 7a 5b 30 5d 20 3d == ' ' || z[0] =
0d20: 3d 20 27 5c 74 27 29 20 7a 2b 2b 3b 0a 20 20 70 = '\t') z++;. p
0d30: 2d 3e 63 68 61 72 43 6f 75 6e 74 20 3d 20 7a 20 ->charCount = z
0d40: 2d 20 73 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b - s;. return z;
0d50: 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 .}.//}}}.static
0d60: 69 6e 74 20 63 72 5f 63 6f 75 6e 74 42 6c 61 6e int cr_countBlan
0d70: 6b 73 28 50 61 72 73 65 72 20 2a 70 2c 20 63 68 ks(Parser *p, ch
0d80: 61 72 2a 20 7a 29 7b 2f 2f 7b 7b 7b 0a 20 20 63 ar* z){//{{{. c
0d90: 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 r_skipBlanks(p,
0da0: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e z);. return p->
0db0: 63 68 61 72 43 6f 75 6e 74 3b 0a 7d 0a 2f 2f 7d charCount;.}.//}
0dc0: 7d 7d 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a }}.static char *
0dd0: 63 72 5f 73 6b 69 70 43 68 61 72 73 28 50 61 72 cr_skipChars(Par
0de0: 73 65 72 20 2a 70 2c 20 63 68 61 72 20 2a 7a 2c ser *p, char *z,
0df0: 20 63 68 61 72 20 63 29 7b 2f 2f 7b 7b 7b 0a 20 char c){//{{{.
0e00: 20 63 68 61 72 20 2a 73 20 3d 20 7a 3b 0a 20 20 char *s = z;.
0e10: 77 68 69 6c 65 20 28 7a 5b 30 5d 20 3d 3d 20 63 while (z[0] == c
0e20: 29 20 7a 2b 2b 3b 0a 20 20 70 2d 3e 63 68 61 72 ) z++;. p->char
0e30: 43 6f 75 6e 74 20 3d 20 7a 20 2d 20 73 3b 0a 20 Count = z - s;.
0e40: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 2f 2f 7d return z;.}.//}
0e50: 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 }}.static int cr
0e60: 5f 63 6f 75 6e 74 43 68 61 72 73 28 50 61 72 73 _countChars(Pars
0e70: 65 72 20 2a 70 2c 20 63 68 61 72 20 2a 7a 2c 20 er *p, char *z,
0e80: 63 68 61 72 20 63 29 7b 2f 2f 7b 7b 7b 0a 20 20 char c){//{{{.
0e90: 63 72 5f 73 6b 69 70 43 68 61 72 73 28 70 2c 20 cr_skipChars(p,
0ea0: 7a 2c 20 63 29 3b 0a 20 20 72 65 74 75 72 6e 20 z, c);. return
0eb0: 70 2d 3e 63 68 61 72 43 6f 75 6e 74 3b 0a 7d 0a p->charCount;.}.
0ec0: 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 63 68 61 //}}}.static cha
0ed0: 72 20 2a 63 72 5f 6e 65 78 74 4c 69 6e 65 28 50 r *cr_nextLine(P
0ee0: 61 72 73 65 72 20 2a 70 2c 20 63 68 61 72 20 2a arser *p, char *
0ef0: 7a 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 70 2d 3e 6c z){//{{{.. p->l
0f00: 69 6e 65 57 61 73 42 6c 61 6e 6b 20 3d 20 31 3b ineWasBlank = 1;
0f10: 0a 0a 20 20 77 68 69 6c 65 20 28 31 29 7b 0a 0a .. while (1){..
0f20: 20 20 20 20 73 77 69 74 63 68 20 28 7a 5b 30 5d switch (z[0]
0f30: 29 7b 0a 0a 20 20 20 20 20 20 63 61 73 65 20 27 ){.. case '
0f40: 5c 72 27 3a 0a 20 20 20 20 20 20 20 20 69 66 20 \r':. if
0f50: 28 7a 5b 31 5d 20 3d 3d 20 27 5c 6e 27 29 20 7b (z[1] == '\n') {
0f60: 0a 20 20 20 20 20 20 20 20 20 20 7a 5b 30 5d 20 . z[0]
0f70: 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20 20 20 = ' ';.
0f80: 20 72 65 74 75 72 6e 20 7a 20 2b 20 32 3b 0a 20 return z + 2;.
0f90: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
0fa0: 20 7a 5b 30 5d 20 3d 20 27 5c 6e 27 3b 0a 20 20 z[0] = '\n';.
0fb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 7a 20 2b return z +
0fc0: 20 31 3b 0a 0a 20 20 20 20 20 20 63 61 73 65 27 1;.. case'
0fd0: 5c 6e 27 3a 0a 20 20 20 20 20 20 20 20 72 65 74 \n':. ret
0fe0: 75 72 6e 20 7a 20 2b 20 31 3b 0a 0a 20 20 20 20 urn z + 1;..
0ff0: 20 20 63 61 73 65 20 27 5c 74 27 3a 0a 20 20 20 case '\t':.
1000: 20 20 20 20 20 7a 5b 30 5d 20 3d 20 27 20 27 3b z[0] = ' ';
1010: 0a 20 20 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 . z++;.
1020: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 break;..
1030: 20 20 20 20 63 61 73 65 20 27 20 27 3a 0a 20 20 case ' ':.
1040: 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 z++;.
1050: 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 break;..
1060: 20 63 61 73 65 20 27 5c 30 27 3a 0a 20 20 20 20 case '\0':.
1070: 20 20 20 20 72 65 74 75 72 6e 20 7a 3b 0a 0a 20 return z;..
1080: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 default:.
1090: 20 20 20 20 20 20 70 2d 3e 6c 69 6e 65 57 61 73 p->lineWas
10a0: 42 6c 61 6e 6b 20 3d 20 30 3b 0a 20 20 20 20 20 Blank = 0;.
10b0: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 z++;. }.
10c0: 7d 0a 7d 0a 2f 2f 7d 7d 7d 0a 2f 2f 7d 7d 7d 0a }.}.//}}}.//}}}.
10d0: 0a 2f 2f 7b 7b 7b 20 49 4e 4c 49 4e 45 20 50 41 .//{{{ INLINE PA
10e0: 52 53 45 52 0a 0a 73 74 61 74 69 63 20 69 6e 74 RSER..static int
10f0: 20 63 72 5f 69 73 45 73 63 28 50 61 72 73 65 72 cr_isEsc(Parser
1100: 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 20 20 69 66 20 *p){//{{{. if
1110: 28 70 2d 3e 69 65 73 63 29 7b 0a 20 20 20 20 62 (p->iesc){. b
1120: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 lob_append(p->ib
1130: 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72 2c lob, p->icursor,
1140: 20 31 29 3b 0a 20 20 20 20 70 2d 3e 69 65 73 63 1);. p->iesc
1150: 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 69 63 75 = 0;. p->icu
1160: 72 73 6f 72 20 2b 3d 20 31 3b 0a 20 20 20 20 72 rsor += 1;. r
1170: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 eturn 1;. }. r
1180: 65 74 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d eturn 0;.}.//}}}
1190: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 5f 69 .static int cr_i
11a0: 4f 70 65 6e 28 50 61 72 73 65 72 20 2a 70 2c 20 Open(Parser *p,
11b0: 69 6e 74 20 6b 69 6e 64 29 7b 2f 2f 7b 7b 7b 0a int kind){//{{{.
11c0: 0a 20 20 73 77 69 74 63 68 20 28 6b 69 6e 64 29 . switch (kind)
11d0: 7b 0a 0a 20 20 20 20 63 61 73 65 20 4b 49 4e 44 {.. case KIND
11e0: 5f 42 4f 4c 44 3a 0a 20 20 20 20 20 20 62 6c 6f _BOLD:. blo
11f0: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
1200: 62 2c 20 22 3c 73 74 72 6f 6e 67 3e 22 2c 20 38 b, "<strong>", 8
1210: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 );. return
1220: 31 3b 0a 0a 20 20 20 20 63 61 73 65 20 4b 49 4e 1;.. case KIN
1230: 44 5f 49 54 41 4c 49 43 3a 0a 20 20 20 20 20 20 D_ITALIC:.
1240: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
1250: 62 6c 6f 62 2c 20 22 3c 65 6d 3e 22 2c 20 34 29 blob, "<em>", 4)
1260: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 ;. return 1
1270: 3b 0a 0a 20 20 20 20 63 61 73 65 20 4b 49 4e 44 ;.. case KIND
1280: 5f 53 55 50 45 52 53 43 52 49 50 54 3a 0a 20 20 _SUPERSCRIPT:.
1290: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 blob_append(
12a0: 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 73 75 70 3e p->iblob, "<sup>
12b0: 22 2c 20 35 29 3b 0a 20 20 20 20 20 20 72 65 74 ", 5);. ret
12c0: 75 72 6e 20 31 3b 0a 0a 20 20 20 20 63 61 73 65 urn 1;.. case
12d0: 20 4b 49 4e 44 5f 53 55 42 53 43 52 49 50 54 3a KIND_SUBSCRIPT:
12e0: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 . blob_appe
12f0: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 73 nd(p->iblob, "<s
1300: 75 62 3e 22 2c 20 35 29 3b 0a 20 20 20 20 20 20 ub>", 5);.
1310: 72 65 74 75 72 6e 20 31 3b 0a 0a 20 20 20 20 63 return 1;.. c
1320: 61 73 65 20 4b 49 4e 44 5f 4d 4f 4e 4f 53 50 41 ase KIND_MONOSPA
1330: 43 45 44 3a 0a 20 20 20 20 20 20 62 6c 6f 62 5f CED:. blob_
1340: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
1350: 20 22 3c 74 74 3e 22 2c 20 34 29 3b 0a 20 20 20 "<tt>", 4);.
1360: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d return 1;. }
1370: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 2f . return 0;.}./
1380: 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 /}}}.static int
1390: 63 72 5f 69 43 6c 6f 73 65 28 50 61 72 73 65 72 cr_iClose(Parser
13a0: 20 2a 70 2c 20 69 6e 74 20 6b 69 6e 64 29 7b 2f *p, int kind){/
13b0: 2f 7b 7b 7b 0a 0a 20 20 73 77 69 74 63 68 20 28 /{{{.. switch (
13c0: 6b 69 6e 64 29 7b 0a 0a 20 20 20 20 63 61 73 65 kind){.. case
13d0: 20 4b 49 4e 44 5f 42 4f 4c 44 3a 0a 20 20 20 20 KIND_BOLD:.
13e0: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d blob_append(p-
13f0: 3e 69 62 6c 6f 62 2c 20 22 3c 2f 73 74 72 6f 6e >iblob, "</stron
1400: 67 3e 22 2c 20 39 29 3b 0a 20 20 20 20 20 20 72 g>", 9);. r
1410: 65 74 75 72 6e 20 31 3b 0a 0a 20 20 20 20 63 61 eturn 1;.. ca
1420: 73 65 20 4b 49 4e 44 5f 49 54 41 4c 49 43 3a 0a se KIND_ITALIC:.
1430: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e blob_appen
1440: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 65 d(p->iblob, "</e
1450: 6d 3e 22 2c 20 35 29 3b 0a 20 20 20 20 20 20 72 m>", 5);. r
1460: 65 74 75 72 6e 20 31 3b 0a 0a 20 20 20 20 63 61 eturn 1;.. ca
1470: 73 65 20 4b 49 4e 44 5f 53 55 50 45 52 53 43 52 se KIND_SUPERSCR
1480: 49 50 54 3a 0a 20 20 20 20 20 20 62 6c 6f 62 5f IPT:. blob_
1490: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
14a0: 20 22 3c 2f 73 75 70 3e 22 2c 20 36 29 3b 0a 20 "</sup>", 6);.
14b0: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 0a return 1;..
14c0: 20 20 20 20 63 61 73 65 20 4b 49 4e 44 5f 53 55 case KIND_SU
14d0: 42 53 43 52 49 50 54 3a 0a 20 20 20 20 20 20 62 BSCRIPT:. b
14e0: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 lob_append(p->ib
14f0: 6c 6f 62 2c 20 22 3c 2f 73 75 62 3e 22 2c 20 36 lob, "</sub>", 6
1500: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 );. return
1510: 31 3b 0a 0a 20 20 20 20 63 61 73 65 20 4b 49 4e 1;.. case KIN
1520: 44 5f 4d 4f 4e 4f 53 50 41 43 45 44 3a 0a 20 20 D_MONOSPACED:.
1530: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 blob_append(
1540: 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 74 74 3e p->iblob, "</tt>
1550: 22 2c 20 35 29 3b 0a 20 20 20 20 20 20 72 65 74 ", 5);. ret
1560: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 urn 1;. }. ret
1570: 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a urn 0;.}.//}}}..
1580: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 5f .static void cr_
1590: 69 4d 61 72 6b 75 70 28 50 61 72 73 65 72 20 2a iMarkup(Parser *
15a0: 70 2c 20 69 6e 74 20 6b 69 6e 64 29 7b 2f 2f 7b p, int kind){//{
15b0: 7b 7b 0a 0a 20 20 69 66 20 28 70 2d 3e 69 65 73 {{.. if (p->ies
15c0: 63 29 20 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 c) {. blob_ap
15d0: 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 70 pend(p->iblob, p
15e0: 2d 3e 69 63 75 72 73 6f 72 2c 20 31 29 3b 0a 20 ->icursor, 1);.
15f0: 20 20 20 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d p->icursor +=
1600: 31 3b 0a 20 20 20 20 70 2d 3e 69 65 73 63 20 3d 1;. p->iesc =
1610: 30 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 0;. return;.
1620: 20 7d 0a 0a 20 20 69 66 20 28 70 2d 3e 69 63 75 }.. if (p->icu
1630: 72 73 6f 72 5b 31 5d 20 21 3d 20 70 2d 3e 69 63 rsor[1] != p->ic
1640: 75 72 73 6f 72 5b 30 5d 29 20 7b 0a 20 20 20 20 ursor[0]) {.
1650: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
1660: 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72 blob, p->icursor
1670: 2c 20 31 29 3b 0a 20 20 20 20 70 2d 3e 69 63 75 , 1);. p->icu
1680: 72 73 6f 72 20 2b 3d 31 3b 0a 20 20 20 20 72 65 rsor +=1;. re
1690: 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e turn;. }.. p->
16a0: 69 63 75 72 73 6f 72 20 2b 3d 20 32 3b 0a 0a 20 icursor += 2;..
16b0: 20 69 66 20 28 6b 69 6e 64 20 26 20 4b 49 4e 44 if (kind & KIND
16c0: 5f 42 52 45 41 4b 29 20 7b 0a 20 20 20 20 20 20 _BREAK) {.
16d0: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
16e0: 62 6c 6f 62 2c 20 22 3c 62 72 20 2f 3e 22 2c 20 blob, "<br />",
16f0: 36 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 6);. return
1700: 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 6b 69 6e ;. }.. if (kin
1710: 64 20 26 20 4b 49 4e 44 5f 49 54 41 4c 49 43 20 d & KIND_ITALIC
1720: 26 26 20 70 2d 3e 69 63 75 72 73 6f 72 5b 2d 33 && p->icursor[-3
1730: 5d 20 3d 3d 20 27 3a 27 29 7b 0a 20 20 20 20 20 ] == ':'){.
1740: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 blob_append(p
1750: 2d 3e 69 62 6c 6f 62 2c 20 22 2f 2f 22 2c 20 32 ->iblob, "//", 2
1760: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 );. retur
1770: 6e 3b 0a 20 20 7d 0a 0a 20 20 4e 6f 64 65 20 2a n;. }.. Node *
1780: 6e 20 3d 20 70 2d 3e 69 73 74 61 63 6b 3b 0a 0a n = p->istack;..
1790: 20 20 69 6e 74 20 66 6f 75 6e 64 20 3d 20 30 3b int found = 0;
17a0: 0a 20 20 77 68 69 6c 65 20 28 6e 29 20 7b 0a 20 . while (n) {.
17b0: 20 20 20 69 66 20 28 6e 2d 3e 6b 69 6e 64 20 26 if (n->kind &
17c0: 20 6b 69 6e 64 29 20 7b 0a 20 20 20 20 20 20 66 kind) {. f
17d0: 6f 75 6e 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 ound = 1;.
17e0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 break;. }.
17f0: 20 6e 20 3d 20 6e 2d 3e 6e 65 78 74 3b 0a 20 20 n = n->next;.
1800: 7d 0a 0a 20 20 69 66 20 28 21 66 6f 75 6e 64 29 }.. if (!found)
1810: 20 7b 0a 20 20 20 20 6e 20 3d 20 70 6f 6f 6c 5f {. n = pool_
1820: 6e 65 77 28 70 29 3b 0a 20 20 20 20 6e 2d 3e 6b new(p);. n->k
1830: 69 6e 64 20 3d 20 6b 69 6e 64 3b 0a 20 20 20 20 ind = kind;.
1840: 6e 2d 3e 6e 65 78 74 20 3d 20 70 2d 3e 69 73 74 n->next = p->ist
1850: 61 63 6b 3b 0a 20 20 20 20 70 2d 3e 69 73 74 61 ack;. p->ista
1860: 63 6b 20 3d 20 6e 3b 0a 0a 20 20 20 20 61 73 73 ck = n;.. ass
1870: 65 72 74 28 63 72 5f 69 4f 70 65 6e 28 70 2c 20 ert(cr_iOpen(p,
1880: 6b 69 6e 64 29 29 3b 0a 20 20 20 20 72 65 74 75 kind));. retu
1890: 72 6e 3b 0a 20 20 7d 3b 0a 0a 20 20 6e 3d 20 70 rn;. };.. n= p
18a0: 2d 3e 69 73 74 61 63 6b 3b 0a 20 20 77 68 69 6c ->istack;. whil
18b0: 65 20 28 6e 29 7b 0a 20 20 20 20 70 2d 3e 69 73 e (n){. p->is
18c0: 74 61 63 6b 20 3d 20 6e 2d 3e 6e 65 78 74 3b 0a tack = n->next;.
18d0: 0a 20 20 20 20 61 73 73 65 72 74 28 63 72 5f 69 . assert(cr_i
18e0: 43 6c 6f 73 65 28 70 2c 20 6e 2d 3e 6b 69 6e 64 Close(p, n->kind
18f0: 29 29 3b 0a 0a 20 20 20 20 69 66 20 28 6b 69 6e ));.. if (kin
1900: 64 20 3d 3d 20 6e 2d 3e 6b 69 6e 64 29 20 72 65 d == n->kind) re
1910: 74 75 72 6e 3b 0a 20 20 20 20 6e 20 3d 20 70 2d turn;. n = p-
1920: 3e 69 73 74 61 63 6b 3b 0a 20 20 7d 0a 7d 0a 2f >istack;. }.}./
1930: 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 /}}}.static int
1940: 63 72 5f 69 4e 6f 57 69 6b 69 28 50 61 72 73 65 cr_iNoWiki(Parse
1950: 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 69 r *p){//{{{.. i
1960: 66 20 28 28 70 2d 3e 69 65 6e 64 20 2d 20 70 2d f ((p->iend - p-
1970: 3e 69 63 75 72 73 6f 72 29 3c 36 29 20 72 65 74 >icursor)<6) ret
1980: 75 72 6e 20 30 3b 0a 0a 20 20 69 66 20 28 70 2d urn 0;.. if (p-
1990: 3e 69 63 75 72 73 6f 72 5b 31 5d 21 3d 27 7b 27 >icursor[1]!='{'
19a0: 20 7c 7c 20 70 2d 3e 69 63 75 72 73 6f 72 5b 32 || p->icursor[2
19b0: 5d 21 3d 27 7b 27 29 0a 20 20 20 20 72 65 74 75 ]!='{'). retu
19c0: 72 6e 20 30 3b 0a 0a 20 20 63 68 61 72 20 2a 73 rn 0;.. char *s
19d0: 20 3d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2b 20 = p->icursor +
19e0: 33 3b 0a 0a 20 20 69 6e 74 20 63 6f 75 6e 74 20 3;.. int count
19f0: 3d 20 70 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 = p->iend - p->i
1a00: 63 75 72 73 6f 72 20 2d 20 36 3b 0a 20 20 77 68 cursor - 6;. wh
1a10: 69 6c 65 20 28 63 6f 75 6e 74 2d 2d 29 7b 0a 20 ile (count--){.
1a20: 20 20 20 69 66 20 28 73 5b 30 5d 3d 3d 27 7d 27 if (s[0]=='}'
1a30: 20 26 26 20 73 5b 31 5d 3d 3d 27 7d 27 20 26 26 && s[1]=='}' &&
1a40: 20 73 5b 32 5d 3d 3d 27 7d 27 20 26 26 20 73 5b s[2]=='}' && s[
1a50: 33 5d 21 3d 27 7d 27 29 7b 0a 20 20 20 20 20 20 3]!='}'){.
1a60: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 2d 3e blob_appendf(p->
1a70: 69 62 6c 6f 62 2c 20 22 3c 74 74 20 63 6c 61 73 iblob, "<tt clas
1a80: 73 3d 27 63 72 65 6f 6c 65 2d 69 6e 6c 69 6e 65 s='creole-inline
1a90: 2d 6e 6f 77 69 6b 69 27 3e 25 73 3c 2f 74 74 3e -nowiki'>%s</tt>
1aa0: 22 2c 20 68 74 6d 6c 69 7a 65 28 70 2d 3e 69 63 ", htmlize(p->ic
1ab0: 75 72 73 6f 72 20 2b 20 33 2c 20 73 20 2d 20 70 ursor + 3, s - p
1ac0: 2d 3e 69 63 75 72 73 6f 72 2d 33 29 29 3b 0a 20 ->icursor-3));.
1ad0: 20 20 20 20 20 70 2d 3e 69 63 75 72 73 6f 72 20 p->icursor
1ae0: 3d 20 73 20 2b 20 33 3b 0a 20 20 20 20 20 20 72 = s + 3;. r
1af0: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 eturn 1;. }.
1b00: 20 20 20 73 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 s++;. }. re
1b10: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2f 7d 7d 7d turn 0;.}..//}}}
1b20: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 5f 69 .static int cr_i
1b30: 49 6d 61 67 65 28 50 61 72 73 65 72 20 2a 70 29 Image(Parser *p)
1b40: 7b 2f 2f 7b 7b 7b 0a 0a 20 20 69 66 20 28 70 2d {//{{{.. if (p-
1b50: 3e 69 6e 4c 69 6e 6b 29 20 72 65 74 75 72 6e 20 >inLink) return
1b60: 30 3b 0a 20 20 69 66 20 28 28 70 2d 3e 69 65 6e 0;. if ((p->ien
1b70: 64 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 29 3c d - p->icursor)<
1b80: 33 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 3) return 0;..
1b90: 69 66 20 28 70 2d 3e 69 63 75 72 73 6f 72 5b 31 if (p->icursor[1
1ba0: 5d 21 3d 27 7b 27 29 20 72 65 74 75 72 6e 20 30 ]!='{') return 0
1bb0: 3b 0a 0a 20 20 63 68 61 72 20 2a 73 20 3d 20 70 ;.. char *s = p
1bc0: 2d 3e 69 63 75 72 73 6f 72 20 2b 20 32 3b 0a 20 ->icursor + 2;.
1bd0: 20 63 68 61 72 20 2a 62 61 72 20 3d 20 4e 55 4c char *bar = NUL
1be0: 4c 3b 0a 0a 20 20 69 6e 74 20 63 6f 75 6e 74 20 L;.. int count
1bf0: 3d 20 70 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 = p->iend - p->i
1c00: 63 75 72 73 6f 72 20 2d 20 34 3b 0a 20 20 77 68 cursor - 4;. wh
1c10: 69 6c 65 20 28 63 6f 75 6e 74 2d 2d 29 7b 0a 20 ile (count--){.
1c20: 20 20 20 69 66 20 28 73 5b 30 5d 3d 3d 27 7d 27 if (s[0]=='}'
1c30: 20 26 26 20 73 5b 31 5d 3d 3d 27 7d 27 29 7b 0a && s[1]=='}'){.
1c40: 20 20 20 20 20 20 69 66 20 28 21 62 61 72 29 20 if (!bar)
1c50: 62 61 72 20 3d 20 70 2d 3e 69 63 75 72 73 6f 72 bar = p->icursor
1c60: 20 2b 20 32 3b 0a 20 20 20 20 20 20 62 6c 6f 62 + 2;. blob
1c70: 5f 61 70 70 65 6e 64 66 28 70 2d 3e 69 62 6c 6f _appendf(p->iblo
1c80: 62 2c 20 22 3c 73 70 61 6e 20 63 6c 61 73 73 3d b, "<span class=
1c90: 27 63 72 65 6f 6c 65 2d 6e 6f 69 6d 61 67 65 27 'creole-noimage'
1ca0: 3e 25 73 3c 2f 73 70 61 6e 3e 22 2c 20 68 74 6d >%s</span>", htm
1cb0: 6c 69 7a 65 28 62 61 72 2c 20 73 20 2d 20 62 61 lize(bar, s - ba
1cc0: 72 20 29 29 3b 0a 20 20 20 20 20 20 70 2d 3e 69 r ));. p->i
1cd0: 63 75 72 73 6f 72 20 3d 20 73 20 2b 20 32 3b 0a cursor = s + 2;.
1ce0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a return 1;.
1cf0: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 21 62 }. if (!b
1d00: 61 72 20 26 26 20 73 5b 30 5d 3d 3d 27 7c 27 29 ar && s[0]=='|')
1d10: 20 62 61 72 3d 73 2b 31 3b 0a 20 20 20 20 73 2b bar=s+1;. s+
1d20: 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 +;. }. return
1d30: 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 0;.}.//}}}.stati
1d40: 63 20 69 6e 74 20 63 72 5f 69 4d 61 63 72 6f 28 c int cr_iMacro(
1d50: 50 61 72 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b Parser *p){//{{{
1d60: 0a 0a 20 20 69 66 20 28 70 2d 3e 69 6e 4c 69 6e .. if (p->inLin
1d70: 6b 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 69 k) return 0;. i
1d80: 66 20 28 28 70 2d 3e 69 65 6e 64 20 2d 20 70 2d f ((p->iend - p-
1d90: 3e 69 63 75 72 73 6f 72 29 3c 33 29 20 72 65 74 >icursor)<3) ret
1da0: 75 72 6e 20 30 3b 0a 0a 20 20 69 66 20 28 70 2d urn 0;.. if (p-
1db0: 3e 69 63 75 72 73 6f 72 5b 31 5d 21 3d 27 3c 27 >icursor[1]!='<'
1dc0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 63 ) return 0;.. c
1dd0: 68 61 72 20 2a 73 20 3d 20 70 2d 3e 69 63 75 72 har *s = p->icur
1de0: 73 6f 72 20 2b 20 32 3b 0a 0a 20 20 69 6e 74 20 sor + 2;.. int
1df0: 63 6f 75 6e 74 20 3d 20 70 2d 3e 69 65 6e 64 20 count = p->iend
1e00: 2d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2d 20 33 - p->icursor - 3
1e10: 3b 0a 20 20 77 68 69 6c 65 20 28 63 6f 75 6e 74 ;. while (count
1e20: 2d 2d 29 7b 0a 20 20 20 69 66 20 28 73 5b 30 5d --){. if (s[0]
1e30: 3d 3d 27 3e 27 20 26 26 20 73 5b 31 5d 3d 3d 27 =='>' && s[1]=='
1e40: 3e 27 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f >'){. blob_
1e50: 61 70 70 65 6e 64 66 28 70 2d 3e 69 62 6c 6f 62 appendf(p->iblob
1e60: 2c 20 22 3c 73 70 61 6e 20 63 6c 61 73 73 3d 27 , "<span class='
1e70: 63 72 65 6f 6c 65 2d 6e 6f 6d 61 63 72 6f 27 3e creole-nomacro'>
1e80: 25 73 3c 2f 73 70 61 6e 3e 22 2c 20 68 74 6d 6c %s</span>", html
1e90: 69 7a 65 28 70 2d 3e 69 63 75 72 73 6f 72 2c 20 ize(p->icursor,
1ea0: 73 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2b s - p->icursor +
1eb0: 20 32 29 29 3b 0a 20 20 20 20 20 20 70 2d 3e 69 2));. p->i
1ec0: 63 75 72 73 6f 72 20 3d 20 73 20 2b 20 32 3b 0a cursor = s + 2;.
1ed0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a return 1;.
1ee0: 20 20 20 20 7d 0a 20 20 20 20 73 2b 2b 3b 0a 20 }. s++;.
1ef0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 0a }. return 0;..
1f00: 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 20 }.//}}}..static
1f10: 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 72 4c 69 void cr_renderLi
1f20: 6e 6b 28 50 61 72 73 65 72 20 2a 70 2c 20 63 68 nk(Parser *p, ch
1f30: 61 72 20 2a 73 2c 20 63 68 61 72 20 2a 62 61 72 ar *s, char *bar
1f40: 2c 20 63 68 61 72 20 2a 65 29 7b 2f 2f 7b 7b 7b , char *e){//{{{
1f50: 0a 0a 20 20 69 6e 74 20 74 73 69 7a 65 20 3d 20 .. int tsize =
1f60: 62 61 72 2d 73 3b 0a 20 20 69 6e 74 20 64 73 69 bar-s;. int dsi
1f70: 7a 65 20 3d 20 65 20 2d 20 62 61 72 2d 31 3b 0a ze = e - bar-1;.
1f80: 0a 20 20 69 66 20 28 74 73 69 7a 65 20 3c 20 31 . if (tsize < 1
1f90: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 20 28 ) return;. if (
1fa0: 64 73 69 7a 65 20 3c 20 31 29 20 64 73 69 7a 65 dsize < 1) dsize
1fb0: 20 3d 20 30 3b 0a 0a 20 20 63 68 61 72 20 7a 54 = 0;.. char zT
1fc0: 61 72 67 65 74 5b 74 73 69 7a 65 20 2b 20 31 5d arget[tsize + 1]
1fd0: 3b 0a 20 20 6d 65 6d 63 70 79 28 7a 54 61 72 67 ;. memcpy(zTarg
1fe0: 65 74 2c 20 73 2c 20 74 73 69 7a 65 29 3b 0a 20 et, s, tsize);.
1ff0: 20 7a 54 61 72 67 65 74 5b 74 73 69 7a 65 5d 20 zTarget[tsize]
2000: 3d 20 27 5c 30 27 3b 0a 0a 20 20 63 68 61 72 20 = '\0';.. char
2010: 7a 43 6c 6f 73 65 5b 32 30 5d 3b 0a 0a 20 20 42 zClose[20];.. B
2020: 6c 6f 62 20 2a 70 4f 75 74 20 3d 20 70 2d 3e 72 lob *pOut = p->r
2030: 2d 3e 70 4f 75 74 3b 0a 0a 20 20 70 2d 3e 72 2d ->pOut;.. p->r-
2040: 3e 70 4f 75 74 20 3d 20 70 2d 3e 69 62 6c 6f 62 >pOut = p->iblob
2050: 3b 0a 20 20 77 66 5f 6f 70 65 6e 48 79 70 65 72 ;. wf_openHyper
2060: 6c 69 6e 6b 28 70 2d 3e 72 2c 20 7a 54 61 72 67 link(p->r, zTarg
2070: 65 74 2c 20 7a 43 6c 6f 73 65 2c 20 73 69 7a 65 et, zClose, size
2080: 6f 66 28 7a 43 6c 6f 73 65 29 29 3b 0a 20 20 70 of(zClose));. p
2090: 2d 3e 72 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 ->r->pOut = pOut
20a0: 3b 0a 0a 20 20 69 66 20 28 64 73 69 7a 65 29 0a ;.. if (dsize).
20b0: 20 20 20 20 63 72 5f 70 61 72 73 65 49 6e 6c 69 cr_parseInli
20c0: 6e 65 28 70 2c 20 62 61 72 2b 31 2c 20 65 29 20 ne(p, bar+1, e)
20d0: 3b 0a 20 20 65 6c 73 65 0a 20 20 20 20 62 6c 6f ;. else. blo
20e0: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
20f0: 62 2c 20 68 74 6d 6c 69 7a 65 28 73 2c 20 74 73 b, htmlize(s, ts
2100: 69 7a 65 29 2c 20 2d 31 29 3b 0a 20 20 62 6c 6f ize), -1);. blo
2110: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
2120: 62 2c 20 7a 43 6c 6f 73 65 2c 20 2d 31 29 3b 0a b, zClose, -1);.
2130: 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 20 }.//}}}..static
2140: 69 6e 74 20 63 72 5f 69 4c 69 6e 6b 28 50 61 72 int cr_iLink(Par
2150: 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 ser *p){//{{{..
2160: 20 69 66 20 28 70 2d 3e 69 6e 4c 69 6e 6b 29 20 if (p->inLink)
2170: 72 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 20 28 return 0;. if (
2180: 28 70 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 63 (p->iend - p->ic
2190: 75 72 73 6f 72 29 3c 33 29 20 72 65 74 75 72 6e ursor)<3) return
21a0: 20 30 3b 0a 0a 20 20 69 66 20 28 70 2d 3e 69 63 0;.. if (p->ic
21b0: 75 72 73 6f 72 5b 31 5d 21 3d 27 5b 27 29 20 72 ursor[1]!='[') r
21c0: 65 74 75 72 6e 20 30 3b 0a 0a 20 20 63 68 61 72 eturn 0;.. char
21d0: 20 2a 73 20 3d 20 70 2d 3e 69 63 75 72 73 6f 72 *s = p->icursor
21e0: 20 2b 20 32 3b 0a 20 20 63 68 61 72 20 2a 62 61 + 2;. char *ba
21f0: 72 20 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 69 6e 74 r = NULL;.. int
2200: 20 63 6f 75 6e 74 20 3d 20 70 2d 3e 69 65 6e 64 count = p->iend
2210: 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2d 33 - p->icursor -3
2220: 3b 0a 20 20 77 68 69 6c 65 20 28 63 6f 75 6e 74 ;. while (count
2230: 2d 2d 29 7b 0a 20 20 20 20 69 66 20 28 73 5b 30 --){. if (s[0
2240: 5d 3d 3d 27 5d 27 20 26 26 20 73 5b 31 5d 3d 3d ]==']' && s[1]==
2250: 27 5d 27 29 7b 0a 20 20 20 20 20 20 69 66 20 28 ']'){. if (
2260: 21 62 61 72 29 20 62 61 72 20 3d 20 73 3b 0a 20 !bar) bar = s;.
2270: 20 20 20 20 20 70 2d 3e 69 6e 4c 69 6e 6b 20 3d p->inLink =
2280: 20 31 3b 0a 20 20 20 20 20 20 63 72 5f 72 65 6e 1;. cr_ren
2290: 64 65 72 4c 69 6e 6b 28 70 2c 20 70 2d 3e 69 63 derLink(p, p->ic
22a0: 75 72 73 6f 72 2b 32 2c 20 62 61 72 2c 20 73 29 ursor+2, bar, s)
22b0: 3b 0a 20 20 20 20 20 20 70 2d 3e 69 6e 4c 69 6e ;. p->inLin
22c0: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 2d 3e k = 0;. p->
22d0: 69 63 75 72 73 6f 72 20 3d 20 73 20 2b 20 32 3b icursor = s + 2;
22e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b . return 1;
22f0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 21 . }. if (!
2300: 62 61 72 20 26 26 20 73 5b 30 5d 3d 3d 27 7c 27 bar && s[0]=='|'
2310: 29 20 62 61 72 3d 73 3b 0a 20 20 20 20 73 2b 2b ) bar=s;. s++
2320: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 ;. }. return 0
2330: 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 4c 4f 43 41 4c ;.}.//}}}..LOCAL
2340: 20 63 68 61 72 20 2a 63 72 5f 70 61 72 73 65 49 char *cr_parseI
2350: 6e 6c 69 6e 65 28 50 61 72 73 65 72 20 2a 70 2c nline(Parser *p,
2360: 20 63 68 61 72 20 2a 73 2c 20 63 68 61 72 20 2a char *s, char *
2370: 65 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 69 6e 74 20 e){//{{{.. int
2380: 73 61 76 65 5f 69 65 73 63 20 3d 20 70 2d 3e 69 save_iesc = p->i
2390: 65 73 63 3b 0a 20 20 63 68 61 72 20 2a 73 61 76 esc;. char *sav
23a0: 65 5f 69 65 6e 64 20 3d 20 70 2d 3e 69 65 6e 64 e_iend = p->iend
23b0: 3b 0a 20 20 4e 6f 64 65 20 2a 73 61 76 65 5f 69 ;. Node *save_i
23c0: 73 74 61 63 6b 20 3d 20 70 2d 3e 69 73 74 61 63 stack = p->istac
23d0: 6b 3b 0a 0a 20 20 70 2d 3e 69 65 73 63 20 3d 20 k;.. p->iesc =
23e0: 30 3b 0a 20 20 70 2d 3e 69 65 6e 64 20 3d 20 65 0;. p->iend = e
23f0: 3b 0a 20 20 70 2d 3e 69 73 74 61 63 6b 20 3d 20 ;. p->istack =
2400: 4e 55 4c 4c 3b 0a 0a 20 20 70 2d 3e 69 63 75 72 NULL;.. p->icur
2410: 73 6f 72 20 3d 20 73 3b 0a 0a 20 20 63 68 61 72 sor = s;.. char
2420: 20 2a 65 6f 66 20 3d 20 4e 55 4c 4c 3b 0a 20 20 *eof = NULL;.
2430: 77 68 69 6c 65 20 28 21 65 6f 66 20 26 26 20 20 while (!eof &&
2440: 70 2d 3e 69 63 75 72 73 6f 72 20 3c 20 70 2d 3e p->icursor < p->
2450: 69 65 6e 64 20 29 7b 0a 0a 20 20 20 20 73 77 69 iend ){.. swi
2460: 74 63 68 20 28 2a 70 2d 3e 69 63 75 72 73 6f 72 tch (*p->icursor
2470: 29 20 7b 2f 2f 7b 7b 7b 0a 0a 20 20 20 20 20 20 ) {//{{{..
2480: 63 61 73 65 20 27 7e 27 3a 0a 20 20 20 20 20 20 case '~':.
2490: 20 20 69 66 20 28 70 2d 3e 69 65 73 63 29 20 7b if (p->iesc) {
24a0: 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 5f . blob_
24b0: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
24c0: 20 22 7e 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 "~", 1);.
24d0: 20 20 20 20 70 2d 3e 69 65 73 63 20 3d 20 30 3b p->iesc = 0;
24e0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 . }.
24f0: 20 20 20 70 2d 3e 69 65 73 63 20 3d 20 21 70 2d p->iesc = !p-
2500: 3e 69 65 73 63 3b 0a 20 20 20 20 20 20 20 20 70 >iesc;. p
2510: 2d 3e 69 63 75 72 73 6f 72 2b 3d 31 3b 0a 20 20 ->icursor+=1;.
2520: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 break;..
2530: 20 20 20 20 63 61 73 65 20 27 2a 27 3a 0a 20 20 case '*':.
2540: 20 20 20 20 20 20 63 72 5f 69 4d 61 72 6b 75 70 cr_iMarkup
2550: 28 70 2c 20 4b 49 4e 44 5f 42 4f 4c 44 29 3b 0a (p, KIND_BOLD);.
2560: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a break;..
2570: 20 20 20 20 20 20 63 61 73 65 20 27 2f 27 3a 0a case '/':.
2580: 20 20 20 20 20 20 20 20 63 72 5f 69 4d 61 72 6b cr_iMark
2590: 75 70 28 70 2c 20 4b 49 4e 44 5f 49 54 41 4c 49 up(p, KIND_ITALI
25a0: 43 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 C);. brea
25b0: 6b 3b 0a 0a 20 20 20 20 20 20 63 61 73 65 20 27 k;.. case '
25c0: 5e 27 3a 0a 20 20 20 20 20 20 20 20 63 72 5f 69 ^':. cr_i
25d0: 4d 61 72 6b 75 70 28 70 2c 20 4b 49 4e 44 5f 53 Markup(p, KIND_S
25e0: 55 50 45 52 53 43 52 49 50 54 29 3b 0a 20 20 20 UPERSCRIPT);.
25f0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 break;..
2600: 20 20 20 63 61 73 65 20 27 2c 27 3a 0a 20 20 20 case ',':.
2610: 20 20 20 20 20 63 72 5f 69 4d 61 72 6b 75 70 28 cr_iMarkup(
2620: 70 2c 20 4b 49 4e 44 5f 53 55 42 53 43 52 49 50 p, KIND_SUBSCRIP
2630: 54 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 T);. brea
2640: 6b 3b 0a 0a 20 20 20 20 20 20 63 61 73 65 20 27 k;.. case '
2650: 23 27 3a 0a 20 20 20 20 20 20 20 20 63 72 5f 69 #':. cr_i
2660: 4d 61 72 6b 75 70 28 70 2c 20 4b 49 4e 44 5f 4d Markup(p, KIND_M
2670: 4f 4e 4f 53 50 41 43 45 44 29 3b 0a 20 20 20 20 ONOSPACED);.
2680: 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 break;..
2690: 20 20 63 61 73 65 20 27 5c 5c 27 3a 0a 20 20 20 case '\\':.
26a0: 20 20 20 20 20 63 72 5f 69 4d 61 72 6b 75 70 28 cr_iMarkup(
26b0: 70 2c 20 4b 49 4e 44 5f 42 52 45 41 4b 29 3b 0a p, KIND_BREAK);.
26c0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a break;..
26d0: 20 20 20 20 20 20 63 61 73 65 20 27 7b 27 3a 0a case '{':.
26e0: 20 20 20 20 20 20 20 20 69 66 20 28 63 72 5f 69 if (cr_i
26f0: 73 45 73 63 28 70 29 29 20 62 72 65 61 6b 3b 0a sEsc(p)) break;.
2700: 20 20 20 20 20 20 20 20 69 66 20 28 63 72 5f 69 if (cr_i
2710: 4e 6f 57 69 6b 69 28 70 29 29 20 62 72 65 61 6b NoWiki(p)) break
2720: 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 72 ;. if (cr
2730: 5f 69 49 6d 61 67 65 28 70 29 29 20 62 72 65 61 _iImage(p)) brea
2740: 6b 3b 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 5f k;. blob_
2750: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
2760: 20 70 2d 3e 69 63 75 72 73 6f 72 2c 20 31 29 3b p->icursor, 1);
2770: 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 63 75 72 . p->icur
2780: 73 6f 72 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 sor += 1;.
2790: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 break;..
27a0: 63 61 73 65 20 27 5b 27 3a 0a 20 20 20 20 20 20 case '[':.
27b0: 20 20 69 66 20 28 63 72 5f 69 73 45 73 63 28 70 if (cr_isEsc(p
27c0: 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 )) break;.
27d0: 20 20 69 66 20 28 63 72 5f 69 4c 69 6e 6b 28 70 if (cr_iLink(p
27e0: 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 )) break;.
27f0: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d blob_append(p-
2800: 3e 69 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 >iblob, p->icurs
2810: 6f 72 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 or, 1);.
2820: 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 31 3b p->icursor += 1;
2830: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a . break;.
2840: 0a 0a 20 20 20 20 20 20 63 61 73 65 20 27 3c 27 .. case '<'
2850: 3a 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 72 :. if (cr
2860: 5f 69 73 45 73 63 28 70 29 29 20 62 72 65 61 6b _isEsc(p)) break
2870: 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 72 ;. if (cr
2880: 5f 69 4d 61 63 72 6f 28 70 29 29 20 62 72 65 61 _iMacro(p)) brea
2890: 6b 3b 0a 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 k;.. blob
28a0: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
28b0: 2c 20 22 26 6c 74 3b 22 2c 20 34 29 3b 0a 20 20 , "<", 4);.
28c0: 20 20 20 20 20 20 70 2d 3e 69 63 75 72 73 6f 72 p->icursor
28d0: 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 += 1;. b
28e0: 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 63 61 73 reak;.. cas
28f0: 65 20 27 3e 27 3a 0a 20 20 20 20 20 20 20 20 69 e '>':. i
2900: 66 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a 20 20 f (p->iesc) {.
2910: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 blob_app
2920: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e end(p->iblob, "~
2930: 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 ", 1);.
2940: 20 70 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 20 20 p->iesc = 0;.
2950: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
2960: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
2970: 62 6c 6f 62 2c 20 22 26 67 74 3b 22 2c 20 34 29 blob, ">", 4)
2980: 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 63 75 ;. p->icu
2990: 72 73 6f 72 20 2b 3d 20 31 3b 0a 20 20 20 20 20 rsor += 1;.
29a0: 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 break;..
29b0: 20 63 61 73 65 20 27 26 27 3a 0a 20 20 20 20 20 case '&':.
29c0: 20 20 20 69 66 20 28 70 2d 3e 69 65 73 63 29 20 if (p->iesc)
29d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 {. blob
29e0: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
29f0: 2c 20 22 7e 22 2c 20 31 29 3b 0a 20 20 20 20 20 , "~", 1);.
2a00: 20 20 20 20 20 70 2d 3e 69 65 73 63 20 3d 20 30 p->iesc = 0
2a10: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
2a20: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 blob_append(
2a30: 70 2d 3e 69 62 6c 6f 62 2c 20 22 26 61 6d 70 3b p->iblob, "&
2a40: 22 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20 70 ", 5);. p
2a50: 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 31 3b 0a ->icursor += 1;.
2a60: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a break;..
2a70: 20 20 20 20 20 20 63 61 73 65 20 27 7c 27 3a 0a case '|':.
2a80: 20 20 20 20 20 20 20 20 69 66 20 28 70 2d 3e 69 if (p->i
2a90: 6e 54 61 62 6c 65 29 7b 0a 20 20 20 20 20 20 20 nTable){.
2aa0: 20 20 20 69 66 20 28 70 2d 3e 69 65 73 63 29 20 if (p->iesc)
2ab0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6c {. bl
2ac0: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
2ad0: 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72 2c 20 ob, p->icursor,
2ae0: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 1);.
2af0: 70 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 20 20 20 p->iesc = 0;.
2b00: 20 20 20 20 20 20 20 20 20 70 2d 3e 69 63 75 72 p->icur
2b10: 73 6f 72 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 sor += 1;.
2b20: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
2b30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
2b40: 20 20 20 65 6f 66 20 3d 20 70 2d 3e 69 63 75 72 eof = p->icur
2b50: 73 6f 72 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 sor + 1;.
2b60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 break;.
2b70: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2f 20 66 }. // f
2b80: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 64 all through to d
2b90: 65 66 61 75 6c 74 0a 0a 20 20 20 20 20 20 64 65 efault.. de
2ba0: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 69 fault:. i
2bb0: 66 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a 20 20 f (p->iesc) {.
2bc0: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 blob_app
2bd0: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e end(p->iblob, "~
2be0: 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 ", 1);.
2bf0: 20 70 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 20 20 p->iesc = 0;.
2c00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
2c10: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
2c20: 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72 blob, p->icursor
2c30: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 70 2d , 1);. p-
2c40: 3e 69 63 75 72 73 6f 72 20 2b 3d 31 3b 0a 20 20 >icursor +=1;.
2c50: 20 20 7d 2f 2f 7d 7d 7d 0a 0a 20 20 7d 0a 0a 20 }//}}}.. }..
2c60: 20 77 68 69 6c 65 20 28 70 2d 3e 69 73 74 61 63 while (p->istac
2c70: 6b 29 7b 0a 20 20 20 20 63 72 5f 69 43 6c 6f 73 k){. cr_iClos
2c80: 65 28 70 2c 20 70 2d 3e 69 73 74 61 63 6b 2d 3e e(p, p->istack->
2c90: 6b 69 6e 64 29 3b 0a 20 20 20 20 70 2d 3e 69 73 kind);. p->is
2ca0: 74 61 63 6b 20 3d 20 70 2d 3e 69 73 74 61 63 6b tack = p->istack
2cb0: 2d 3e 6e 65 78 74 3b 0a 20 20 7d 0a 0a 20 20 70 ->next;. }.. p
2cc0: 2d 3e 69 65 73 63 20 3d 20 73 61 76 65 5f 69 65 ->iesc = save_ie
2cd0: 73 63 3b 0a 20 20 70 2d 3e 69 65 6e 64 20 3d 20 sc;. p->iend =
2ce0: 73 61 76 65 5f 69 65 6e 64 3b 0a 20 20 70 2d 3e save_iend;. p->
2cf0: 69 73 74 61 63 6b 20 3d 20 73 61 76 65 5f 69 73 istack = save_is
2d00: 74 61 63 6b 3b 0a 0a 20 20 72 65 74 75 72 6e 20 tack;.. return
2d10: 65 6f 66 3b 0a 0a 7d 0a 2f 2f 7d 7d 7d 0a 2f 2f eof;..}.//}}}.//
2d20: 7d 7d 7d 0a 0a 2f 2f 7b 7b 7b 20 42 4c 4f 43 4b }}}..//{{{ BLOCK
2d30: 20 50 41 52 53 45 52 0a 0a 73 74 61 74 69 63 20 PARSER..static
2d40: 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 72 4c 69 void cr_renderLi
2d50: 73 74 49 74 65 6d 28 50 61 72 73 65 72 20 2a 70 stItem(Parser *p
2d60: 2c 20 4e 6f 64 65 20 2a 6e 29 7b 2f 2f 7b 7b 7b , Node *n){//{{{
2d70: 0a 0a 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 ... blob_append
2d80: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 6c 69 3e (p->iblob, "<li>
2d90: 22 2c 20 34 29 3b 0a 20 20 63 72 5f 70 61 72 73 ", 4);. cr_pars
2da0: 65 49 6e 6c 69 6e 65 28 70 2c 20 6e 2d 3e 73 74 eInline(p, n->st
2db0: 61 72 74 2c 20 6e 2d 3e 65 6e 64 29 3b 0a 0a 20 art, n->end);..
2dc0: 20 69 66 20 28 6e 2d 3e 63 68 69 6c 64 72 65 6e if (n->children
2dd0: 29 7b 0a 0a 20 20 20 20 69 6e 74 20 6f 72 64 20 ){.. int ord
2de0: 3d 20 28 6e 2d 3e 63 68 69 6c 64 72 65 6e 2d 3e = (n->children->
2df0: 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 4f 52 44 45 kind & KIND_ORDE
2e00: 52 45 44 5f 4c 49 53 54 29 3b 0a 0a 20 20 20 20 RED_LIST);..
2e10: 69 66 20 28 6f 72 64 29 20 20 20 62 6c 6f 62 5f if (ord) blob_
2e20: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
2e30: 20 22 3c 6f 6c 3e 22 2c 20 34 29 3b 0a 20 20 20 "<ol>", 4);.
2e40: 20 65 6c 73 65 20 20 20 20 20 20 20 62 6c 6f 62 else blob
2e50: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
2e60: 2c 20 22 3c 75 6c 3e 22 2c 20 34 29 3b 0a 0a 20 , "<ul>", 4);..
2e70: 20 20 20 6e 20 3d 20 6e 2d 3e 63 68 69 6c 64 72 n = n->childr
2e80: 65 6e 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 6e en;. while (n
2e90: 29 7b 0a 20 20 20 20 20 20 63 72 5f 72 65 6e 64 ){. cr_rend
2ea0: 65 72 4c 69 73 74 49 74 65 6d 28 70 2c 20 6e 29 erListItem(p, n)
2eb0: 3b 0a 20 20 20 20 20 20 6e 20 3d 20 6e 2d 3e 6e ;. n = n->n
2ec0: 65 78 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ext;. }..
2ed0: 69 66 20 28 6f 72 64 29 20 20 20 62 6c 6f 62 5f if (ord) blob_
2ee0: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
2ef0: 20 22 3c 2f 6f 6c 3e 22 2c 20 35 29 3b 0a 20 20 "</ol>", 5);.
2f00: 20 20 65 6c 73 65 20 20 20 20 20 20 20 62 6c 6f else blo
2f10: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
2f20: 62 2c 20 22 3c 2f 75 6c 3e 22 2c 20 35 29 3b 0a b, "</ul>", 5);.
2f30: 20 20 7d 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e }. blob_appen
2f40: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 6c d(p->iblob, "</l
2f50: 69 3e 22 2c 20 35 29 3b 0a 7d 0a 2f 2f 7d 7d 7d i>", 5);.}.//}}}
2f60: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 5f .static void cr_
2f70: 72 65 6e 64 65 72 4c 69 73 74 28 50 61 72 73 65 renderList(Parse
2f80: 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 4e r *p){//{{{.. N
2f90: 6f 64 65 20 2a 6e 20 3d 20 70 2d 3e 6c 69 73 74 ode *n = p->list
2fa0: 3b 0a 0a 20 20 77 68 69 6c 65 20 28 6e 2d 3e 70 ;.. while (n->p
2fb0: 61 72 65 6e 74 20 21 3d 6e 29 20 20 6e 20 3d 20 arent !=n) n =
2fc0: 6e 2d 3e 70 61 72 65 6e 74 3b 0a 0a 20 20 69 6e n->parent;.. in
2fd0: 74 20 6f 72 64 20 3d 20 28 6e 2d 3e 6b 69 6e 64 t ord = (n->kind
2fe0: 20 26 20 4b 49 4e 44 5f 4f 52 44 45 52 45 44 5f & KIND_ORDERED_
2ff0: 4c 49 53 54 29 3b 0a 0a 20 20 69 66 20 28 6f 72 LIST);.. if (or
3000: 64 29 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 d) blob_append
3010: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 5c 6e 5c 6e (p->iblob, "\n\n
3020: 3c 6f 6c 3e 22 2c 20 2d 31 29 3b 0a 20 20 65 6c <ol>", -1);. el
3030: 73 65 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 se blob_ap
3040: 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 pend(p->iblob, "
3050: 5c 6e 5c 6e 3c 75 6c 3e 22 2c 20 2d 31 29 3b 0a \n\n<ul>", -1);.
3060: 0a 20 20 77 68 69 6c 65 20 28 6e 29 20 7b 0a 20 . while (n) {.
3070: 20 20 20 63 72 5f 72 65 6e 64 65 72 4c 69 73 74 cr_renderList
3080: 49 74 65 6d 28 70 2c 20 6e 29 3b 0a 20 20 20 20 Item(p, n);.
3090: 6e 20 3d 20 6e 2d 3e 6e 65 78 74 3b 0a 20 20 7d n = n->next;. }
30a0: 0a 0a 20 20 69 66 20 28 6f 72 64 29 20 20 20 62 .. if (ord) b
30b0: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 lob_append(p->ib
30c0: 6c 6f 62 2c 20 22 3c 2f 6f 6c 3e 22 2c 20 35 29 lob, "</ol>", 5)
30d0: 3b 0a 20 20 65 6c 73 65 20 20 20 20 20 20 20 62 ;. else b
30e0: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 lob_append(p->ib
30f0: 6c 6f 62 2c 20 22 3c 2f 75 6c 3e 22 2c 20 35 29 lob, "</ul>", 5)
3100: 3b 0a 7d 0a 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 ;.}..//}}}..stat
3110: 69 63 20 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 ic void cr_rende
3120: 72 54 61 62 6c 65 52 6f 77 28 50 61 72 73 65 72 rTableRow(Parser
3130: 20 2a 70 2c 20 4e 6f 64 65 20 2a 72 6f 77 29 7b *p, Node *row){
3140: 2f 2f 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 73 //{{{.. char *s
3150: 20 3d 20 72 6f 77 2d 3e 73 74 61 72 74 3b 0a 20 = row->start;.
3160: 20 69 6e 74 20 74 68 3b 0a 0a 20 20 62 6c 6f 62 int th;.. blob
3170: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
3180: 2c 20 22 5c 6e 3c 74 72 3e 22 2c 20 2d 31 29 3b , "\n<tr>", -1);
3190: 0a 0a 20 20 77 68 69 6c 65 20 28 73 20 26 26 20 .. while (s &&
31a0: 73 20 3c 20 72 6f 77 2d 3e 65 6e 64 29 7b 0a 0a s < row->end){..
31b0: 20 20 20 20 69 66 20 28 28 74 68 20 3d 20 2a 73 if ((th = *s
31c0: 20 3d 3d 20 27 3d 27 29 29 20 7b 0a 20 20 20 20 == '=')) {.
31d0: 20 20 73 2b 2b 3b 0a 20 20 20 20 20 20 62 6c 6f s++;. blo
31e0: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
31f0: 62 2c 20 22 3c 74 68 3e 22 2c 20 2d 31 29 3b 0a b, "<th>", -1);.
3200: 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 7b }. else {
3210: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 . blob_appe
3220: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 74 nd(p->iblob, "<t
3230: 64 3e 22 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 0a d>", -1);. }.
3240: 0a 20 20 20 20 73 20 3d 20 63 72 5f 70 61 72 73 . s = cr_pars
3250: 65 49 6e 6c 69 6e 65 28 70 2c 20 73 2c 20 72 6f eInline(p, s, ro
3260: 77 2d 3e 65 6e 64 29 3b 0a 0a 20 20 20 20 69 66 w->end);.. if
3270: 20 28 74 68 29 0a 20 20 20 20 20 20 62 6c 6f 62 (th). blob
3280: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
3290: 2c 20 22 3c 2f 74 68 3e 5c 6e 22 2c 20 2d 31 29 , "</th>\n", -1)
32a0: 3b 0a 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 ;. else.
32b0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e blob_append(p->
32c0: 69 62 6c 6f 62 2c 20 22 3c 2f 74 64 3e 5c 6e 22 iblob, "</td>\n"
32d0: 2c 20 2d 31 29 3b 0a 0a 20 20 20 20 69 66 20 28 , -1);.. if (
32e0: 21 73 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 !s) break;. }.
32f0: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e blob_append(p->
3300: 69 62 6c 6f 62 2c 20 22 3c 2f 74 72 3e 22 2c 20 iblob, "</tr>",
3310: 35 29 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 5);.}.//}}}.stat
3320: 69 63 20 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 ic void cr_rende
3330: 72 54 61 62 6c 65 28 50 61 72 73 65 72 20 2a 70 rTable(Parser *p
3340: 2c 20 4e 6f 64 65 20 2a 6e 29 7b 2f 2f 7b 7b 7b , Node *n){//{{{
3350: 0a 0a 20 20 4e 6f 64 65 20 2a 72 6f 77 20 3d 20 .. Node *row =
3360: 6e 2d 3e 63 68 69 6c 64 72 65 6e 3b 0a 0a 20 20 n->children;..
3370: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
3380: 62 6c 6f 62 2c 20 22 3c 74 61 62 6c 65 20 63 6c blob, "<table cl
3390: 61 73 73 3d 27 63 72 65 6f 6c 65 74 61 62 6c 65 ass='creoletable
33a0: 27 3e 22 2c 20 2d 31 29 3b 0a 20 20 70 2d 3e 69 '>", -1);. p->i
33b0: 6e 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 77 68 nTable = 1;. wh
33c0: 69 6c 65 20 28 72 6f 77 29 7b 0a 0a 20 20 20 20 ile (row){..
33d0: 63 72 5f 72 65 6e 64 65 72 54 61 62 6c 65 52 6f cr_renderTableRo
33e0: 77 28 70 2c 20 72 6f 77 29 3b 0a 20 20 20 20 72 w(p, row);. r
33f0: 6f 77 20 3d 20 72 6f 77 2d 3e 6e 65 78 74 3b 0a ow = row->next;.
3400: 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 61 70 70 65 . }. blob_appe
3410: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f nd(p->iblob, "</
3420: 74 61 62 6c 65 3e 22 2c 20 2d 31 29 3b 0a 20 20 table>", -1);.
3430: 70 2d 3e 69 6e 54 61 62 6c 65 20 3d 20 30 3b 0a p->inTable = 0;.
3440: 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 .}.//}}}..static
3450: 20 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 72 28 void cr_render(
3460: 50 61 72 73 65 72 20 2a 70 2c 20 4e 6f 64 65 20 Parser *p, Node
3470: 2a 6e 6f 64 65 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 *node){//{{{..
3480: 69 66 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 26 if (node->kind &
3490: 20 4b 49 4e 44 5f 50 41 52 41 47 52 41 50 48 29 KIND_PARAGRAPH)
34a0: 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e {. blob_appen
34b0: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 20 20 22 5c d(p->iblob, "\
34c0: 6e 3c 70 3e 22 2c 20 2d 31 29 3b 0a 20 20 20 20 n<p>", -1);.
34d0: 63 72 5f 70 61 72 73 65 49 6e 6c 69 6e 65 28 70 cr_parseInline(p
34e0: 2c 20 6e 6f 64 65 2d 3e 73 74 61 72 74 2c 20 6e , node->start, n
34f0: 6f 64 65 2d 3e 65 6e 64 20 29 3b 0a 20 20 20 20 ode->end );.
3500: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
3510: 62 6c 6f 62 2c 20 22 3c 2f 70 3e 5c 6e 22 2c 20 blob, "</p>\n",
3520: 2d 31 20 20 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 -1 );. }.. if
3530: 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b (node->kind & K
3540: 49 4e 44 5f 48 45 41 44 49 4e 47 29 7b 0a 20 20 IND_HEADING){.
3550: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 blob_appendf(p
3560: 2d 3e 69 62 6c 6f 62 2c 0a 20 20 20 20 20 20 20 ->iblob,.
3570: 20 22 5c 6e 3c 68 25 64 20 25 73 3e 22 2c 0a 20 "\n<h%d %s>",.
3580: 20 20 20 20 20 20 20 6e 6f 64 65 2d 3e 6c 65 76 node->lev
3590: 65 6c 2c 0a 20 20 20 20 20 20 20 20 28 6e 6f 64 el,. (nod
35a0: 65 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 5f e->flags & FLAG_
35b0: 43 45 4e 54 45 52 29 20 3f 20 22 20 73 74 79 6c CENTER) ? " styl
35c0: 65 3d 27 74 65 78 74 2d 61 6c 69 67 6e 3a 63 65 e='text-align:ce
35d0: 6e 74 65 72 3b 27 22 20 3a 20 22 22 0a 20 20 20 nter;'" : "".
35e0: 20 29 3b 0a 20 20 20 20 63 72 5f 70 61 72 73 65 );. cr_parse
35f0: 49 6e 6c 69 6e 65 28 70 2c 20 6e 6f 64 65 2d 3e Inline(p, node->
3600: 73 74 61 72 74 2c 20 6e 6f 64 65 2d 3e 65 6e 64 start, node->end
3610: 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 );. blob_appe
3620: 6e 64 66 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c ndf(p->iblob, "<
3630: 2f 68 25 64 3e 5c 6e 22 2c 20 6e 6f 64 65 2d 3e /h%d>\n", node->
3640: 6c 65 76 65 6c 20 20 29 3b 0a 20 20 20 20 72 65 level );. re
3650: 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 turn;. }.. if
3660: 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 (node->kind & KI
3670: 4e 44 5f 48 4f 52 49 5a 4f 4e 54 41 4c 5f 52 55 ND_HORIZONTAL_RU
3680: 4c 45 29 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 LE){. blob_ap
3690: 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 pend(p->iblob, "
36a0: 3c 68 72 20 2f 3e 22 2c 20 2d 31 29 3b 0a 20 20 <hr />", -1);.
36b0: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 return;. }..
36c0: 20 69 66 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 if (node->kind
36d0: 26 20 4b 49 4e 44 5f 4c 49 53 54 29 7b 0a 20 20 & KIND_LIST){.
36e0: 20 20 63 72 5f 72 65 6e 64 65 72 4c 69 73 74 28 cr_renderList(
36f0: 70 29 3b 0a 20 20 20 20 70 2d 3e 6c 69 73 74 20 p);. p->list
3700: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 72 65 74 75 = NULL;. retu
3710: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 6e rn;. }.. if (n
3720: 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e 44 ode->kind & KIND
3730: 5f 54 41 42 4c 45 29 7b 0a 20 20 20 20 63 72 5f _TABLE){. cr_
3740: 72 65 6e 64 65 72 54 61 62 6c 65 28 70 2c 20 6e renderTable(p, n
3750: 6f 64 65 29 3b 0a 20 20 20 20 72 65 74 75 72 6e ode);. return
3760: 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 6e 6f 64 ;. }.. if (nod
3770: 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 4e e->kind & KIND_N
3780: 4f 5f 57 49 4b 49 5f 42 4c 4f 43 4b 29 7b 0a 20 O_WIKI_BLOCK){.
3790: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
37a0: 70 2d 3e 69 62 6c 6f 62 2c 0a 20 20 20 20 20 20 p->iblob,.
37b0: 22 5c 6e 3c 70 72 65 20 63 6c 61 73 73 3d 27 63 "\n<pre class='c
37c0: 72 65 6f 6c 65 2d 62 6c 6f 63 6b 2d 6e 6f 77 69 reole-block-nowi
37d0: 6b 69 27 3e 25 73 3c 2f 70 72 65 3e 5c 6e 22 2c ki'>%s</pre>\n",
37e0: 0a 20 20 20 20 20 20 20 20 68 74 6d 6c 69 7a 65 . htmlize
37f0: 28 20 6e 6f 64 65 2d 3e 73 74 61 72 74 2c 20 6e ( node->start, n
3800: 6f 64 65 2d 3e 65 6e 64 20 2d 20 6e 6f 64 65 2d ode->end - node-
3810: 3e 73 74 61 72 74 29 0a 20 20 20 20 29 3b 0a 20 >start). );.
3820: 20 7d 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 }.}.//}}}..stat
3830: 69 63 20 63 68 61 72 20 2a 63 72 5f 66 69 6e 64 ic char *cr_find
3840: 45 6e 64 4f 66 42 6c 6f 63 6b 28 50 61 72 73 65 EndOfBlock(Parse
3850: 72 20 2a 70 2c 20 63 68 61 72 20 2a 73 2c 20 63 r *p, char *s, c
3860: 68 61 72 20 63 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 har c){//{{{..
3870: 63 68 61 72 20 2a 65 6e 64 3b 0a 20 20 77 68 69 char *end;. whi
3880: 6c 65 20 28 73 5b 30 5d 29 7b 0a 0a 20 20 20 20 le (s[0]){..
3890: 65 6e 64 20 3d 20 73 3b 0a 20 20 20 20 69 66 20 end = s;. if
38a0: 28 73 5b 30 5d 20 3d 3d 20 63 20 26 26 20 73 5b (s[0] == c && s[
38b0: 30 5d 20 3d 3d 20 63 20 26 26 20 73 5b 30 5d 20 0] == c && s[0]
38c0: 3d 3d 20 63 29 20 7b 0a 20 20 20 20 20 20 73 20 == c) {. s
38d0: 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c = cr_nextLine(p,
38e0: 20 73 20 2b 20 33 29 3b 0a 20 20 20 20 20 20 69 s + 3);. i
38f0: 66 20 28 70 2d 3e 6c 69 6e 65 57 61 73 42 6c 61 f (p->lineWasBla
3900: 6e 6b 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 nk) {.
3910: 70 2d 3e 63 75 72 73 6f 72 20 3d 20 73 3b 0a 20 p->cursor = s;.
3920: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return
3930: 65 6e 64 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 end;. }.
3940: 20 7d 0a 20 20 20 20 65 6c 73 65 20 7b 0a 20 20 }. else {.
3950: 20 20 20 20 73 20 3d 20 63 72 5f 6e 65 78 74 4c s = cr_nextL
3960: 69 6e 65 28 70 2c 20 73 29 3b 0a 20 20 20 20 7d ine(p, s);. }
3970: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b . }. return 0;
3980: 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 .}.//}}}.static
3990: 69 6e 74 20 63 72 5f 61 64 64 4c 69 73 74 49 74 int cr_addListIt
39a0: 65 6d 28 50 61 72 73 65 72 20 2a 70 2c 20 4e 6f em(Parser *p, No
39b0: 64 65 20 2a 6e 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 de *n){//{{{..
39c0: 6e 2d 3e 70 61 72 65 6e 74 20 3d 20 6e 3b 0a 20 n->parent = n;.
39d0: 20 6e 2d 3e 6e 65 78 74 20 3d 20 6e 2d 3e 63 68 n->next = n->ch
39e0: 69 6c 64 72 65 6e 20 3d 20 4e 55 4c 4c 3b 0a 0a ildren = NULL;..
39f0: 20 20 69 66 20 28 21 70 2d 3e 6c 69 73 74 29 20 if (!p->list)
3a00: 7b 0a 20 20 20 20 69 66 20 28 6e 2d 3e 6c 65 76 {. if (n->lev
3a10: 65 6c 20 21 3d 20 31 29 20 72 65 74 75 72 6e 20 el != 1) return
3a20: 30 3b 0a 20 20 20 20 70 2d 3e 6c 69 73 74 20 3d 0;. p->list =
3a30: 20 6e 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 n;. return 1
3a40: 3b 0a 20 20 7d 0a 0a 20 20 4e 6f 64 65 20 2a 6c ;. }.. Node *l
3a50: 69 73 74 20 3d 20 70 2d 3e 6c 69 73 74 3b 0a 0a ist = p->list;..
3a60: 20 20 77 68 69 6c 65 20 28 6e 2d 3e 6c 65 76 65 while (n->leve
3a70: 6c 20 3c 20 6c 69 73 74 2d 3e 6c 65 76 65 6c 29 l < list->level)
3a80: 7b 0a 20 20 20 20 6c 69 73 74 20 3d 20 6c 69 73 {. list = lis
3a90: 74 2d 3e 70 61 72 65 6e 74 3b 0a 20 20 7d 0a 0a t->parent;. }..
3aa0: 20 20 69 66 20 28 6e 2d 3e 6c 65 76 65 6c 20 3d if (n->level =
3ab0: 3d 20 6c 69 73 74 2d 3e 6c 65 76 65 6c 29 7b 0a = list->level){.
3ac0: 0a 20 20 20 20 69 66 20 28 6e 2d 3e 6b 69 6e 64 . if (n->kind
3ad0: 20 21 3d 20 6c 69 73 74 2d 3e 6b 69 6e 64 29 7b != list->kind){
3ae0: 0a 20 20 20 20 20 20 69 66 20 28 6e 2d 3e 6c 65 . if (n->le
3af0: 76 65 6c 3e 31 29 20 72 65 74 75 72 6e 20 30 3b vel>1) return 0;
3b00: 0a 20 20 20 20 20 20 63 72 5f 72 65 6e 64 65 72 . cr_render
3b10: 4c 69 73 74 28 70 29 3b 0a 20 20 20 20 20 20 70 List(p);. p
3b20: 2d 3e 6c 69 73 74 20 3d 20 6e 3b 0a 20 20 20 20 ->list = n;.
3b30: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 return 1;.
3b40: 7d 0a 20 20 20 20 6e 2d 3e 70 61 72 65 6e 74 20 }. n->parent
3b50: 3d 20 6c 69 73 74 2d 3e 70 61 72 65 6e 74 3b 0a = list->parent;.
3b60: 20 20 20 20 70 2d 3e 6c 69 73 74 20 3d 20 6c 69 p->list = li
3b70: 73 74 2d 3e 6e 65 78 74 20 3d 20 6e 3b 0a 20 20 st->next = n;.
3b80: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a return 1;. }.
3b90: 0a 20 20 69 66 20 28 20 28 6e 2d 3e 6c 65 76 65 . if ( (n->leve
3ba0: 6c 20 2d 20 6c 69 73 74 2d 3e 6c 65 76 65 6c 29 l - list->level)
3bb0: 20 3e 20 31 20 29 20 72 65 74 75 72 6e 20 30 3b > 1 ) return 0;
3bc0: 0a 20 20 6e 2d 3e 70 61 72 65 6e 74 20 3d 20 70 . n->parent = p
3bd0: 2d 3e 6c 69 73 74 3b 0a 20 20 70 2d 3e 6c 69 73 ->list;. p->lis
3be0: 74 2d 3e 63 68 69 6c 64 72 65 6e 20 3d 20 6e 3b t->children = n;
3bf0: 0a 20 20 70 2d 3e 6c 69 73 74 20 3d 20 6e 3b 0a . p->list = n;.
3c00: 20 20 72 65 74 75 72 6e 20 31 3b 0a 0a 7d 0a 2f return 1;..}./
3c10: 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 /}}}..static int
3c20: 20 69 73 45 6e 64 57 69 6b 69 4d 61 72 6b 65 72 isEndWikiMarker
3c30: 28 50 61 72 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b (Parser *p){//{{
3c40: 7b 0a 0a 20 20 63 68 61 72 20 2a 73 20 3d 20 70 {.. char *s = p
3c50: 2d 3e 63 75 72 73 6f 72 3b 0a 20 20 69 66 20 28 ->cursor;. if (
3c60: 6d 65 6d 63 6d 70 28 73 2c 20 22 3c 3c 66 6f 73 memcmp(s, "<<fos
3c70: 73 69 6c 3e 3e 22 2c 20 31 30 29 29 20 72 65 74 sil>>", 10)) ret
3c80: 75 72 6e 20 30 3b 0a 20 20 70 2d 3e 74 68 69 73 urn 0;. p->this
3c90: 2d 3e 73 74 61 72 74 20 3d 20 73 3b 0a 20 20 70 ->start = s;. p
3ca0: 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 4b ->this->kind = K
3cb0: 49 4e 44 5f 45 4e 44 5f 57 49 4b 49 5f 4d 41 52 IND_END_WIKI_MAR
3cc0: 4b 45 52 3b 0a 20 20 70 2d 3e 63 75 72 73 6f 72 KER;. p->cursor
3cd0: 20 2b 3d 20 31 30 3b 0a 20 20 72 65 74 75 72 6e += 10;. return
3ce0: 20 31 3b 0a 7d 0a 2f 2f 2f 7d 7d 7d 0a 73 74 61 1;.}.///}}}.sta
3cf0: 74 69 63 20 69 6e 74 20 69 73 4e 6f 57 69 6b 69 tic int isNoWiki
3d00: 42 6c 6f 63 6b 28 50 61 72 73 65 72 20 2a 70 29 Block(Parser *p)
3d10: 7b 2f 2f 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a {//{{{.. char *
3d20: 73 20 3d 20 70 2d 3e 63 75 72 73 6f 72 3b 0a 0a s = p->cursor;..
3d30: 20 20 69 66 20 28 73 5b 30 5d 20 21 3d 20 27 7b if (s[0] != '{
3d40: 27 29 20 72 65 74 75 72 6e 20 30 3b 20 73 2b 2b ') return 0; s++
3d50: 3b 0a 20 20 69 66 20 28 73 5b 30 5d 20 21 3d 20 ;. if (s[0] !=
3d60: 27 7b 27 29 20 72 65 74 75 72 6e 20 30 3b 20 73 '{') return 0; s
3d70: 2b 2b 3b 0a 20 20 69 66 20 28 73 5b 30 5d 20 21 ++;. if (s[0] !
3d80: 3d 20 27 7b 27 29 20 72 65 74 75 72 6e 20 30 3b = '{') return 0;
3d90: 20 73 2b 2b 3b 0a 0a 20 20 73 20 3d 20 63 72 5f s++;.. s = cr_
3da0: 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73 29 3b 0a nextLine(p, s);.
3db0: 20 20 69 66 20 28 21 70 2d 3e 6c 69 6e 65 57 61 if (!p->lineWa
3dc0: 73 42 6c 61 6e 6b 29 20 72 65 74 75 72 6e 20 30 sBlank) return 0
3dd0: 3b 0a 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 73 74 ;.. p->this->st
3de0: 61 72 74 20 3d 20 73 3b 0a 0a 20 20 73 20 3d 20 art = s;.. s =
3df0: 63 72 5f 66 69 6e 64 45 6e 64 4f 66 42 6c 6f 63 cr_findEndOfBloc
3e00: 6b 28 70 2c 20 73 2c 20 27 7d 27 29 3b 0a 0a 20 k(p, s, '}');..
3e10: 20 69 66 20 28 21 73 29 20 72 65 74 75 72 6e 20 if (!s) return
3e20: 30 3b 0a 0a 20 20 2f 2f 20 70 2d 3e 63 75 72 73 0;.. // p->curs
3e30: 6f 72 20 77 61 73 20 73 65 74 20 62 79 20 66 69 or was set by fi
3e40: 6e 64 45 6e 64 4f 66 42 6c 6f 63 6b 0a 20 20 70 ndEndOfBlock. p
3e50: 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 4b ->this->kind = K
3e60: 49 4e 44 5f 4e 4f 5f 57 49 4b 49 5f 42 4c 4f 43 IND_NO_WIKI_BLOC
3e70: 4b 3b 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 65 6e K;. p->this->en
3e80: 64 20 3d 20 73 3b 0a 20 20 72 65 74 75 72 6e 20 d = s;. return
3e90: 31 3b 0a 7d 0a 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 1;.}..//}}}.stat
3ea0: 69 63 20 69 6e 74 20 69 73 50 61 72 61 42 72 65 ic int isParaBre
3eb0: 61 6b 28 50 61 72 73 65 72 20 2a 70 29 7b 2f 2f ak(Parser *p){//
3ec0: 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 73 20 3d {{{.. char *s =
3ed0: 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 cr_nextLine(p,
3ee0: 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 20 20 69 66 p->cursor);. if
3ef0: 20 28 21 70 2d 3e 6c 69 6e 65 57 61 73 42 6c 61 (!p->lineWasBla
3f00: 6e 6b 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 nk) return 0;..
3f10: 20 70 2d 3e 63 75 72 73 6f 72 20 3d 20 73 3b 0a p->cursor = s;.
3f20: 20 20 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 p->this->kind
3f30: 3d 20 4b 49 4e 44 5f 50 41 52 41 5f 42 52 45 41 = KIND_PARA_BREA
3f40: 4b 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d K;. return 1;.}
3f50: 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e .//}}}.static in
3f60: 74 20 69 73 48 65 61 64 69 6e 67 28 50 61 72 73 t isHeading(Pars
3f70: 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 er *p){//{{{..
3f80: 63 68 61 72 20 2a 73 20 3d 20 63 72 5f 73 6b 69 char *s = cr_ski
3f90: 70 42 6c 61 6e 6b 73 28 70 2c 20 70 2d 3e 63 75 pBlanks(p, p->cu
3fa0: 72 73 6f 72 29 3b 0a 0a 20 20 69 6e 74 20 66 6c rsor);.. int fl
3fb0: 61 67 73 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6c ags = 0;. int l
3fc0: 65 76 65 6c 20 3d 20 63 72 5f 63 6f 75 6e 74 43 evel = cr_countC
3fd0: 68 61 72 73 28 70 2c 20 73 2c 20 27 3d 27 29 3b hars(p, s, '=');
3fe0: 0a 20 20 69 66 20 28 21 6c 65 76 65 6c 29 20 72 . if (!level) r
3ff0: 65 74 75 72 6e 20 30 3b 0a 0a 20 20 73 20 2b 3d eturn 0;.. s +=
4000: 20 6c 65 76 65 6c 3b 0a 0a 20 20 69 66 20 28 73 level;.. if (s
4010: 5b 30 5d 20 3d 3d 20 27 3c 27 20 26 26 20 73 5b [0] == '<' && s[
4020: 31 5d 20 3d 3d 20 27 3e 27 29 20 7b 0a 20 20 20 1] == '>') {.
4030: 20 66 6c 61 67 73 20 7c 3d 20 46 4c 41 47 5f 43 flags |= FLAG_C
4040: 45 4e 54 45 52 3b 0a 20 20 20 20 73 20 2b 3d 20 ENTER;. s +=
4050: 32 3b 0a 20 20 7d 0a 20 20 73 20 3d 20 63 72 5f 2;. }. s = cr_
4060: 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 73 29 skipBlanks(p, s)
4070: 3b 0a 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 73 74 ;.. p->this->st
4080: 61 72 74 20 3d 20 73 3b 0a 0a 20 20 73 20 3d 20 art = s;.. s =
4090: 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73 cr_nextLine(p, s
40a0: 29 3b 0a 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 );. char *z = s
40b0: 3b 0a 0a 20 20 69 66 20 28 73 5b 2d 31 5d 20 3d ;.. if (s[-1] =
40c0: 3d 20 27 5c 6e 27 29 20 73 2d 2d 3b 0a 20 20 77 = '\n') s--;. w
40d0: 68 69 6c 65 28 73 5b 2d 31 5d 20 3d 3d 20 27 20 hile(s[-1] == '
40e0: 27 20 7c 7c 20 73 5b 2d 31 5d 3d 3d 27 5c 74 27 ' || s[-1]=='\t'
40f0: 29 20 73 2d 2d 3b 0a 20 20 77 68 69 6c 65 28 73 ) s--;. while(s
4100: 5b 2d 31 5d 20 3d 3d 20 27 3d 27 20 29 20 73 2d [-1] == '=' ) s-
4110: 2d 3b 0a 20 20 69 66 20 28 70 2d 3e 74 68 69 73 -;. if (p->this
4120: 2d 3e 73 74 61 72 74 20 3c 20 73 29 7b 0a 20 20 ->start < s){.
4130: 20 20 70 2d 3e 63 75 72 73 6f 72 20 3d 20 7a 3b p->cursor = z;
4140: 0a 20 20 20 20 70 2d 3e 74 68 69 73 2d 3e 6b 69 . p->this->ki
4150: 6e 64 20 3d 20 4b 49 4e 44 5f 48 45 41 44 49 4e nd = KIND_HEADIN
4160: 47 3b 0a 20 20 20 20 70 2d 3e 74 68 69 73 2d 3e G;. p->this->
4170: 65 6e 64 20 3d 20 73 3b 0a 20 20 20 20 70 2d 3e end = s;. p->
4180: 74 68 69 73 2d 3e 6c 65 76 65 6c 20 3d 20 6c 65 this->level = le
4190: 76 65 6c 3b 0a 20 20 20 20 70 2d 3e 74 68 69 73 vel;. p->this
41a0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 66 6c 61 67 73 ->flags |= flags
41b0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a ;. return 1;.
41c0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a }. return 0;.
41d0: 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 }.//}}}.static i
41e0: 6e 74 20 69 73 48 6f 72 69 7a 6f 6e 74 61 6c 52 nt isHorizontalR
41f0: 75 6c 65 28 50 61 72 73 65 72 20 2a 70 29 7b 2f ule(Parser *p){/
4200: 2f 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 73 20 /{{{.. char *s
4210: 3d 20 63 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 = cr_skipBlanks(
4220: 70 2c 20 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 0a p, p->cursor);..
4230: 20 20 69 6e 74 20 6c 65 76 65 6c 20 3d 20 63 72 int level = cr
4240: 5f 63 6f 75 6e 74 43 68 61 72 73 28 70 2c 20 73 _countChars(p, s
4250: 2c 20 27 2d 27 29 3b 0a 0a 20 20 69 66 20 20 28 , '-');.. if (
4260: 6c 65 76 65 6c 20 3c 20 34 29 20 72 65 74 75 72 level < 4) retur
4270: 6e 20 30 3b 0a 20 20 73 20 3d 20 63 72 5f 6e 65 n 0;. s = cr_ne
4280: 78 74 4c 69 6e 65 28 70 2c 20 73 20 2b 20 6c 65 xtLine(p, s + le
4290: 76 65 6c 29 3b 0a 20 20 69 66 20 28 21 70 2d 3e vel);. if (!p->
42a0: 6c 69 6e 65 57 61 73 42 6c 61 6e 6b 29 20 72 65 lineWasBlank) re
42b0: 74 75 72 6e 20 30 3b 0a 0a 20 20 70 2d 3e 63 75 turn 0;.. p->cu
42c0: 72 73 6f 72 20 3d 20 73 3b 0a 20 20 70 2d 3e 74 rsor = s;. p->t
42d0: 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 his->kind = KIND
42e0: 5f 48 4f 52 49 5a 4f 4e 54 41 4c 5f 52 55 4c 45 _HORIZONTAL_RULE
42f0: 3b 0a 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d ;.. return 1;.}
4300: 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e .//}}}.static in
4310: 74 20 69 73 4c 69 73 74 49 74 65 6d 28 50 61 72 t isListItem(Par
4320: 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 ser *p){//{{{..
4330: 20 63 68 61 72 20 2a 73 20 3d 20 63 72 5f 73 6b char *s = cr_sk
4340: 69 70 42 6c 61 6e 6b 73 28 70 2c 20 70 2d 3e 63 ipBlanks(p, p->c
4350: 75 72 73 6f 72 29 3b 0a 0a 20 20 69 6e 74 20 6c ursor);.. int l
4360: 65 76 65 6c 20 3d 20 63 72 5f 63 6f 75 6e 74 43 evel = cr_countC
4370: 68 61 72 73 28 70 2c 20 73 2c 20 27 23 27 29 3b hars(p, s, '#');
4380: 0a 20 20 69 66 20 28 21 6c 65 76 65 6c 29 20 6c . if (!level) l
4390: 65 76 65 6c 20 3d 20 63 72 5f 63 6f 75 6e 74 43 evel = cr_countC
43a0: 68 61 72 73 28 70 2c 20 73 2c 20 27 2a 27 29 3b hars(p, s, '*');
43b0: 0a 0a 20 20 69 66 20 28 20 21 6c 65 76 65 6c 29 .. if ( !level)
43c0: 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 70 2d return 0;.. p-
43d0: 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 28 73 >this->kind = (s
43e0: 5b 30 5d 20 3d 3d 20 27 23 27 29 20 3f 20 4b 49 [0] == '#') ? KI
43f0: 4e 44 5f 4f 52 44 45 52 45 44 5f 4c 49 53 54 20 ND_ORDERED_LIST
4400: 3a 20 4b 49 4e 44 5f 55 4e 4f 52 44 45 52 45 44 : KIND_UNORDERED
4410: 5f 4c 49 53 54 3b 0a 20 20 70 2d 3e 74 68 69 73 _LIST;. p->this
4420: 2d 3e 6c 65 76 65 6c 20 3d 20 6c 65 76 65 6c 3b ->level = level;
4430: 0a 0a 20 20 73 20 3d 20 63 72 5f 73 6b 69 70 42 .. s = cr_skipB
4440: 6c 61 6e 6b 73 28 70 2c 20 73 20 2b 20 6c 65 76 lanks(p, s + lev
4450: 65 6c 29 3b 0a 20 20 70 2d 3e 74 68 69 73 2d 3e el);. p->this->
4460: 73 74 61 72 74 20 3d 20 73 3b 0a 0a 20 20 73 20 start = s;.. s
4470: 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c = cr_nextLine(p,
4480: 20 73 29 3b 0a 20 20 69 66 20 28 70 2d 3e 6c 69 s);. if (p->li
4490: 6e 65 57 61 73 42 6c 61 6e 6b 29 20 72 65 74 75 neWasBlank) retu
44a0: 72 6e 20 30 3b 0a 0a 20 20 69 66 20 28 63 72 5f rn 0;.. if (cr_
44b0: 61 64 64 4c 69 73 74 49 74 65 6d 28 70 2c 20 70 addListItem(p, p
44c0: 2d 3e 74 68 69 73 29 29 7b 0a 20 20 20 20 70 2d ->this)){. p-
44d0: 3e 63 75 72 73 6f 72 20 3d 20 70 2d 3e 74 68 69 >cursor = p->thi
44e0: 73 2d 3e 65 6e 64 20 3d 20 73 3b 0a 20 20 20 20 s->end = s;.
44f0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 return 1;. }.
4500: 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 p->this->kind =
4510: 30 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0;. return 0;.}
4520: 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e .//}}}.static in
4530: 74 20 69 73 54 61 62 6c 65 28 50 61 72 73 65 72 t isTable(Parser
4540: 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 70 2d *p){//{{{.. p-
4550: 3e 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 70 >this->start = p
4560: 2d 3e 63 75 72 73 6f 72 3b 0a 20 20 63 68 61 72 ->cursor;. char
4570: 20 2a 73 20 3d 20 63 72 5f 73 6b 69 70 42 6c 61 *s = cr_skipBla
4580: 6e 6b 73 28 70 2c 20 70 2d 3e 63 75 72 73 6f 72 nks(p, p->cursor
4590: 29 3b 0a 20 20 69 66 20 28 73 5b 30 5d 20 21 3d );. if (s[0] !=
45a0: 20 27 7c 27 29 20 72 65 74 75 72 6e 20 30 3b 0a '|') return 0;.
45b0: 20 20 73 20 2b 3d 31 3b 0a 20 20 70 2d 3e 74 68 s +=1;. p->th
45c0: 69 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f is->kind = KIND_
45d0: 54 41 42 4c 45 3b 0a 0a 0a 20 20 2f 2f 70 2d 3e TABLE;... //p->
45e0: 63 75 72 73 6f 72 20 3d 20 20 20 70 2d 3e 74 68 cursor = p->th
45f0: 69 73 2d 3e 65 6e 64 20 3d 20 63 72 5f 6e 65 78 is->end = cr_nex
4600: 74 4c 69 6e 65 28 70 2c 20 73 29 3b 0a 20 20 4e tLine(p, s);. N
4610: 6f 64 65 20 2a 72 6f 77 3b 0a 20 20 4e 6f 64 65 ode *row;. Node
4620: 20 2a 74 61 69 6c 20 3d 20 4e 55 4c 4c 3b 0a 0a *tail = NULL;..
4630: 20 20 77 68 69 6c 65 20 28 31 29 20 7b 0a 0a 20 while (1) {..
4640: 20 20 20 72 6f 77 20 3d 20 70 6f 6f 6c 5f 6e 65 row = pool_ne
4650: 77 28 70 29 3b 0a 20 20 20 20 72 6f 77 2d 3e 6b w(p);. row->k
4660: 69 6e 64 20 3d 20 4b 49 4e 44 5f 54 41 42 4c 45 ind = KIND_TABLE
4670: 5f 52 4f 57 3b 0a 0a 20 20 20 20 69 66 20 28 74 _ROW;.. if (t
4680: 61 69 6c 29 20 20 20 74 61 69 6c 20 3d 20 74 61 ail) tail = ta
4690: 69 6c 2d 3e 6e 65 78 74 20 3d 20 72 6f 77 3b 0a il->next = row;.
46a0: 20 20 20 20 65 6c 73 65 20 70 2d 3e 74 68 69 73 else p->this
46b0: 2d 3e 63 68 69 6c 64 72 65 6e 20 3d 20 74 61 69 ->children = tai
46c0: 6c 20 3d 20 72 6f 77 3b 0a 0a 20 20 20 20 72 6f l = row;.. ro
46d0: 77 2d 3e 73 74 61 72 74 20 3d 20 73 3b 0a 20 20 w->start = s;.
46e0: 20 20 70 2d 3e 63 75 72 73 6f 72 20 3d 20 73 20 p->cursor = s
46f0: 3d 20 20 20 72 6f 77 2d 3e 65 6e 64 20 3d 20 70 = row->end = p
4700: 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d 20 63 72 ->this->end = cr
4710: 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73 29 3b _nextLine(p, s);
4720: 0a 0a 20 20 20 20 69 66 20 28 72 6f 77 2d 3e 65 .. if (row->e
4730: 6e 64 5b 2d 31 5d 20 3d 3d 20 27 5c 6e 27 29 20 nd[-1] == '\n')
4740: 72 6f 77 2d 3e 65 6e 64 20 2d 3d 20 31 3b 0a 20 row->end -= 1;.
4750: 20 20 20 77 68 69 6c 65 28 72 6f 77 2d 3e 65 6e while(row->en
4760: 64 5b 2d 31 5d 20 3d 3d 20 27 20 27 20 29 20 72 d[-1] == ' ' ) r
4770: 6f 77 2d 3e 65 6e 64 20 2d 3d 20 31 3b 0a 20 20 ow->end -= 1;.
4780: 20 20 69 66 20 28 72 6f 77 2d 3e 65 6e 64 5b 2d if (row->end[-
4790: 31 5d 20 3d 3d 20 27 7c 27 29 20 72 6f 77 2d 3e 1] == '|') row->
47a0: 65 6e 64 20 2d 3d 20 31 3b 0a 0a 20 20 20 20 69 end -= 1;.. i
47b0: 66 20 28 21 2a 73 29 20 62 72 65 61 6b 3b 0a 0a f (!*s) break;..
47c0: 20 20 20 20 2f 2f 20 62 6c 61 6e 6b 73 20 2a 6e // blanks *n
47d0: 6f 74 2a 20 6e 6f 72 6d 61 6c 69 7a 65 64 0a 20 ot* normalized.
47e0: 20 20 20 73 20 3d 20 63 72 5f 73 6b 69 70 42 6c s = cr_skipBl
47f0: 61 6e 6b 73 28 70 2c 20 70 2d 3e 63 75 72 73 6f anks(p, p->curso
4800: 72 29 3b 0a 20 20 20 20 69 66 20 28 73 5b 30 5d r);. if (s[0]
4810: 20 21 3d 20 27 7c 27 29 20 62 72 65 61 6b 3b 0a != '|') break;.
4820: 20 20 20 20 73 2b 2b 3b 0a 0a 20 20 7d 0a 20 20 s++;.. }.
4830: 72 65 74 75 72 6e 20 31 3b 0a 0a 7d 3b 0a 2f 2f return 1;..};.//
4840: 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 69 }}}.static int i
4850: 73 50 61 72 61 67 72 61 70 68 28 50 61 72 73 65 sParagraph(Parse
4860: 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 63 r *p){//{{{.. c
4870: 68 61 72 20 2a 73 20 3d 20 70 2d 3e 63 75 72 73 har *s = p->curs
4880: 6f 72 3b 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 73 or;. p->this->s
4890: 74 61 72 74 20 3d 20 73 3b 0a 0a 20 20 73 20 3d tart = s;.. s =
48a0: 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 cr_nextLine(p,
48b0: 73 29 3b 0a 20 20 70 2d 3e 63 75 72 73 6f 72 20 s);. p->cursor
48c0: 3d 20 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d = p->this->end =
48d0: 20 73 3b 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 6b s;. p->this->k
48e0: 69 6e 64 20 3d 20 4b 49 4e 44 5f 50 41 52 41 47 ind = KIND_PARAG
48f0: 52 41 50 48 3b 0a 20 20 72 65 74 75 72 6e 20 31 RAPH;. return 1
4900: 3b 0a 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 ;..}.//}}}.stati
4910: 63 20 76 6f 69 64 20 63 72 5f 70 61 72 73 65 28 c void cr_parse(
4920: 50 61 72 73 65 72 20 2a 70 2c 20 63 68 61 72 2a Parser *p, char*
4930: 20 7a 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 70 2d 3e z){//{{{.. p->
4940: 70 72 65 76 69 6f 75 73 20 3d 20 70 6f 6f 6c 5f previous = pool_
4950: 6e 65 77 28 70 29 3b 0a 20 20 70 2d 3e 70 72 65 new(p);. p->pre
4960: 76 69 6f 75 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 vious->kind = KI
4970: 4e 44 5f 50 41 52 41 5f 42 52 45 41 4b 3b 0a 0a ND_PARA_BREAK;..
4980: 20 20 70 2d 3e 74 68 69 73 20 3d 20 70 6f 6f 6c p->this = pool
4990: 5f 6e 65 77 28 70 29 3b 0a 20 20 70 2d 3e 74 68 _new(p);. p->th
49a0: 69 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f is->kind = KIND_
49b0: 50 41 52 41 5f 42 52 45 41 4b 3b 0a 0a 20 20 70 PARA_BREAK;.. p
49c0: 2d 3e 69 6e 4c 69 6e 6b 20 3d 20 30 3b 0a 20 20 ->inLink = 0;.
49d0: 70 2d 3e 69 6e 54 61 62 6c 65 20 3d 20 30 3b 0a p->inTable = 0;.
49e0: 0a 20 20 70 2d 3e 63 75 72 73 6f 72 20 3d 20 7a . p->cursor = z
49f0: 3b 0a 20 20 70 2d 3e 6c 69 73 74 20 3d 20 4e 55 ;. p->list = NU
4a00: 4c 4c 3b 0a 20 20 70 2d 3e 69 73 74 61 63 6b 20 LL;. p->istack
4a10: 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 77 68 69 6c 65 = NULL;.. while
4a20: 20 28 70 2d 3e 63 75 72 73 6f 72 5b 30 5d 29 20 (p->cursor[0])
4a30: 7b 0a 0a 20 20 20 20 77 68 69 6c 65 20 28 31 29 {.. while (1)
4a40: 7b 0a 0a 20 20 20 20 20 20 2f 2f 20 6d 75 73 74 {.. // must
4a50: 20 62 65 20 66 69 72 73 74 0a 20 20 20 20 20 20 be first.
4a60: 69 66 20 28 69 73 4e 6f 57 69 6b 69 42 6c 6f 63 if (isNoWikiBloc
4a70: 6b 28 70 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 k(p)) break;.
4a80: 20 20 20 69 66 20 28 69 73 50 61 72 61 42 72 65 if (isParaBre
4a90: 61 6b 28 70 29 29 20 20 20 62 72 65 61 6b 3b 0a ak(p)) break;.
4aa0: 0a 20 20 20 20 20 20 2f 2f 20 6f 72 64 65 72 20 . // order
4ab0: 6e 6f 74 20 69 6d 70 6f 72 74 61 6e 74 0a 20 20 not important.
4ac0: 20 20 20 20 69 66 20 28 69 73 48 65 61 64 69 6e if (isHeadin
4ad0: 67 28 70 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 g(p)) break;.
4ae0: 20 20 20 69 66 20 28 69 73 48 6f 72 69 7a 6f 6e if (isHorizon
4af0: 74 61 6c 52 75 6c 65 28 70 29 29 20 62 72 65 61 talRule(p)) brea
4b00: 6b 3b 0a 20 20 20 20 20 20 69 66 20 28 69 73 4c k;. if (isL
4b10: 69 73 74 49 74 65 6d 28 70 29 29 20 62 72 65 61 istItem(p)) brea
4b20: 6b 3b 0a 20 20 20 20 20 20 69 66 20 28 69 73 54 k;. if (isT
4b30: 61 62 6c 65 28 70 29 29 20 62 72 65 61 6b 3b 0a able(p)) break;.
4b40: 0a 20 20 20 20 20 20 2f 2f 20 68 65 72 65 20 66 . // here f
4b50: 6f 72 20 65 66 66 69 63 69 65 6e 63 79 3f 0a 20 or efficiency?.
4b60: 20 20 20 20 20 69 66 20 28 69 73 45 6e 64 57 69 if (isEndWi
4b70: 6b 69 4d 61 72 6b 65 72 28 70 29 29 20 62 72 65 kiMarker(p)) bre
4b80: 61 6b 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 6d 75 ak;.. // mu
4b90: 73 74 20 62 65 20 6c 61 73 74 0a 20 20 20 20 20 st be last.
4ba0: 20 69 66 20 28 69 73 50 61 72 61 67 72 61 70 68 if (isParagraph
4bb0: 28 70 29 29 3b 20 62 72 65 61 6b 3b 0a 0a 20 20 (p)); break;..
4bc0: 20 20 20 20 2f 2f 20 64 6f 68 21 0a 20 20 20 20 // doh!.
4bd0: 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20 20 assert(0);.
4be0: 20 7d 0a 0a 20 20 20 20 69 6e 74 20 6b 69 6e 64 }.. int kind
4bf0: 20 3d 20 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 = p->this->kind
4c00: 3b 0a 20 20 20 20 69 6e 74 20 70 72 65 76 20 3d ;. int prev =
4c10: 20 70 2d 3e 70 72 65 76 69 6f 75 73 2d 3e 6b 69 p->previous->ki
4c20: 6e 64 3b 0a 0a 20 20 20 20 69 66 20 28 6b 69 6e nd;.. if (kin
4c30: 64 20 26 20 4b 49 4e 44 5f 45 4e 44 5f 57 49 4b d & KIND_END_WIK
4c40: 49 5f 4d 41 52 4b 45 52 29 20 20 72 65 74 75 72 I_MARKER) retur
4c50: 6e 3b 0a 0a 20 20 20 20 69 66 20 28 6b 69 6e 64 n;.. if (kind
4c60: 20 3d 3d 20 4b 49 4e 44 5f 50 41 52 41 47 52 41 == KIND_PARAGRA
4c70: 50 48 20 26 26 20 70 72 65 76 20 26 20 4b 49 4e PH && prev & KIN
4c80: 44 5f 4c 49 53 54 5f 4f 52 5f 50 41 52 41 47 52 D_LIST_OR_PARAGR
4c90: 41 50 48 29 20 7b 0a 20 20 20 20 20 20 20 20 70 APH) {. p
4ca0: 2d 3e 70 72 65 76 69 6f 75 73 2d 3e 65 6e 64 20 ->previous->end
4cb0: 3d 20 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 3b 0a = p->this->end;.
4cc0: 20 20 20 20 20 20 20 20 70 2d 3e 74 68 69 73 20 p->this
4cd0: 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 3b 0a 20 = pool_new(p);.
4ce0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b continue;
4cf0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 28 . }.. if (
4d00: 20 21 28 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 4c !(kind & KIND_L
4d10: 49 53 54 20 26 26 20 70 72 65 76 20 26 20 4b 49 IST && prev & KI
4d20: 4e 44 5f 4c 49 53 54 29 20 29 0a 20 20 20 20 20 ND_LIST) ).
4d30: 20 63 72 5f 72 65 6e 64 65 72 28 70 2c 20 70 2d cr_render(p, p-
4d40: 3e 70 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 20 >previous);..
4d50: 20 70 2d 3e 70 72 65 76 69 6f 75 73 20 3d 20 70 p->previous = p
4d60: 2d 3e 74 68 69 73 3b 0a 20 20 20 20 70 2d 3e 74 ->this;. p->t
4d70: 68 69 73 20 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 his = pool_new(p
4d80: 29 3b 0a 0a 20 20 7d 0a 7d 0a 2f 2f 7d 7d 7d 0a );.. }.}.//}}}.
4d90: 0a 2f 2f 7d 7d 7d 0a 0a 63 68 61 72 20 2a 77 69 .//}}}..char *wi
4da0: 6b 69 5f 72 65 6e 64 65 72 5f 63 72 65 6f 6c 65 ki_render_creole
4db0: 28 52 65 6e 64 65 72 65 72 20 2a 72 2c 20 63 68 (Renderer *r, ch
4dc0: 61 72 20 2a 7a 29 7b 0a 0a 20 20 50 61 72 73 65 ar *z){.. Parse
4dd0: 72 20 70 61 72 73 65 72 3b 0a 20 20 50 61 72 73 r parser;. Pars
4de0: 65 72 20 2a 70 20 3d 20 26 70 61 72 73 65 72 3b er *p = &parser;
4df0: 0a 0a 20 20 70 2d 3e 72 20 3d 20 72 3b 0a 20 20 .. p->r = r;.
4e00: 70 2d 3e 69 62 6c 6f 62 20 3d 20 72 2d 3e 70 4f p->iblob = r->pO
4e10: 75 74 3b 0a 0a 20 20 70 2d 3e 6e 46 72 65 65 20 ut;.. p->nFree
4e20: 3d 20 30 3b 0a 20 20 70 2d 3e 70 6f 6f 6c 20 3d = 0;. p->pool =
4e30: 20 4e 55 4c 4c 3b 0a 0a 20 20 63 72 5f 70 61 72 NULL;.. cr_par
4e40: 73 65 28 70 2c 20 7a 29 3b 0a 0a 20 20 63 72 5f se(p, z);.. cr_
4e50: 72 65 6e 64 65 72 28 70 2c 20 70 2d 3e 70 72 65 render(p, p->pre
4e60: 76 69 6f 75 73 29 3b 0a 0a 20 20 70 6f 6f 6c 5f vious);.. pool_
4e70: 66 72 65 65 28 70 29 3b 0a 0a 20 20 72 65 74 75 free(p);.. retu
4e80: 72 6e 20 70 2d 3e 63 75 72 73 6f 72 3b 0a 0a 7d rn p->cursor;..}
4e90: 0a 0a ..