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 73 74 79 6c iblob, "<tt styl
1a80: 65 3d 27 62 61 63 6b 67 72 6f 75 6e 64 3a 6f 6c e='background:ol
1a90: 64 6c 61 63 65 27 3e 25 73 3c 2f 74 74 3e 22 2c dlace'>%s</tt>",
1aa0: 20 68 74 6d 6c 69 7a 65 28 70 2d 3e 69 63 75 72 htmlize(p->icur
1ab0: 73 6f 72 20 2b 20 33 2c 20 73 20 2d 20 70 2d 3e sor + 3, s - p->
1ac0: 69 63 75 72 73 6f 72 2d 33 29 29 3b 0a 20 20 20 icursor-3));.
1ad0: 20 20 20 70 2d 3e 69 63 75 72 73 6f 72 20 3d 20 p->icursor =
1ae0: 73 20 2b 20 33 3b 0a 20 20 20 20 20 20 72 65 74 s + 3;. ret
1af0: 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 urn 1;. }.
1b00: 20 73 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 s++;. }. retu
1b10: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2f 7d 7d 7d 0a 73 rn 0;.}..//}}}.s
1b20: 74 61 74 69 63 20 69 6e 74 20 63 72 5f 69 49 6d tatic int cr_iIm
1b30: 61 67 65 28 50 61 72 73 65 72 20 2a 70 29 7b 2f age(Parser *p){/
1b40: 2f 7b 7b 7b 0a 0a 20 20 69 66 20 28 70 2d 3e 69 /{{{.. if (p->i
1b50: 6e 4c 69 6e 6b 29 20 72 65 74 75 72 6e 20 30 3b nLink) return 0;
1b60: 0a 20 20 69 66 20 28 28 70 2d 3e 69 65 6e 64 20 . if ((p->iend
1b70: 2d 20 70 2d 3e 69 63 75 72 73 6f 72 29 3c 33 29 - p->icursor)<3)
1b80: 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 69 66 return 0;.. if
1b90: 20 28 70 2d 3e 69 63 75 72 73 6f 72 5b 31 5d 21 (p->icursor[1]!
1ba0: 3d 27 7b 27 29 20 72 65 74 75 72 6e 20 30 3b 0a ='{') return 0;.
1bb0: 0a 20 20 63 68 61 72 20 2a 73 20 3d 20 70 2d 3e . char *s = p->
1bc0: 69 63 75 72 73 6f 72 20 2b 20 32 3b 0a 20 20 63 icursor + 2;. c
1bd0: 68 61 72 20 2a 62 61 72 20 3d 20 4e 55 4c 4c 3b har *bar = NULL;
1be0: 0a 0a 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 .. int count =
1bf0: 70 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 63 75 p->iend - p->icu
1c00: 72 73 6f 72 20 2d 20 34 3b 0a 20 20 77 68 69 6c rsor - 4;. whil
1c10: 65 20 28 63 6f 75 6e 74 2d 2d 29 7b 0a 20 20 20 e (count--){.
1c20: 20 69 66 20 28 73 5b 30 5d 3d 3d 27 7d 27 20 26 if (s[0]=='}' &
1c30: 26 20 73 5b 31 5d 3d 3d 27 7d 27 29 7b 0a 20 20 & s[1]=='}'){.
1c40: 20 20 20 20 69 66 20 28 21 62 61 72 29 20 62 61 if (!bar) ba
1c50: 72 20 3d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2b r = p->icursor +
1c60: 20 32 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 2;. blob_a
1c70: 70 70 65 6e 64 66 28 70 2d 3e 69 62 6c 6f 62 2c ppendf(p->iblob,
1c80: 20 22 3c 73 70 61 6e 20 73 74 79 6c 65 3d 27 63 "<span style='c
1c90: 6f 6c 6f 72 3a 67 72 65 65 6e 3b 62 6f 72 64 65 olor:green;borde
1ca0: 72 3a 31 70 78 20 73 6f 6c 69 64 20 67 72 65 65 r:1px solid gree
1cb0: 6e 3b 27 3e 25 73 3c 2f 73 70 61 6e 3e 22 2c 20 n;'>%s</span>",
1cc0: 68 74 6d 6c 69 7a 65 28 62 61 72 2c 20 73 20 2d htmlize(bar, s -
1cd0: 20 62 61 72 20 29 29 3b 0a 20 20 20 20 20 20 70 bar ));. p
1ce0: 2d 3e 69 63 75 72 73 6f 72 20 3d 20 73 20 2b 20 ->icursor = s +
1cf0: 32 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2;. return
1d00: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 1;. }. if
1d10: 28 21 62 61 72 20 26 26 20 73 5b 30 5d 3d 3d 27 (!bar && s[0]=='
1d20: 7c 27 29 20 62 61 72 3d 73 2b 31 3b 0a 20 20 20 |') bar=s+1;.
1d30: 20 73 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 s++;. }. retu
1d40: 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 rn 0;.}.//}}}.st
1d50: 61 74 69 63 20 69 6e 74 20 63 72 5f 69 4d 61 63 atic int cr_iMac
1d60: 72 6f 28 50 61 72 73 65 72 20 2a 70 29 7b 2f 2f ro(Parser *p){//
1d70: 7b 7b 7b 0a 0a 20 20 69 66 20 28 70 2d 3e 69 6e {{{.. if (p->in
1d80: 4c 69 6e 6b 29 20 72 65 74 75 72 6e 20 30 3b 0a Link) return 0;.
1d90: 20 20 69 66 20 28 28 70 2d 3e 69 65 6e 64 20 2d if ((p->iend -
1da0: 20 70 2d 3e 69 63 75 72 73 6f 72 29 3c 33 29 20 p->icursor)<3)
1db0: 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 69 66 20 return 0;.. if
1dc0: 28 70 2d 3e 69 63 75 72 73 6f 72 5b 31 5d 21 3d (p->icursor[1]!=
1dd0: 27 3c 27 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a '<') return 0;..
1de0: 20 20 63 68 61 72 20 2a 73 20 3d 20 70 2d 3e 69 char *s = p->i
1df0: 63 75 72 73 6f 72 20 2b 20 32 3b 0a 0a 20 20 69 cursor + 2;.. i
1e00: 6e 74 20 63 6f 75 6e 74 20 3d 20 70 2d 3e 69 65 nt count = p->ie
1e10: 6e 64 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 20 nd - p->icursor
1e20: 2d 20 33 3b 0a 20 20 77 68 69 6c 65 20 28 63 6f - 3;. while (co
1e30: 75 6e 74 2d 2d 29 7b 0a 20 20 20 20 62 6c 6f 62 unt--){. blob
1e40: 5f 61 70 70 65 6e 64 66 28 70 2d 3e 69 62 6c 6f _appendf(p->iblo
1e50: 62 2c 20 22 7c 7e 25 73 7c 22 2c 20 73 2c 32 20 b, "|~%s|", s,2
1e60: 29 3b 0a 20 20 20 20 69 66 20 28 73 5b 30 5d 3d );. if (s[0]=
1e70: 3d 27 3e 27 20 26 26 20 73 5b 31 5d 3d 3d 27 3e ='>' && s[1]=='>
1e80: 27 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 '){. blob_a
1e90: 70 70 65 6e 64 66 28 70 2d 3e 69 62 6c 6f 62 2c ppendf(p->iblob,
1ea0: 20 22 3c 73 70 61 6e 20 73 74 79 6c 65 3d 27 63 "<span style='c
1eb0: 6f 6c 6f 72 3a 72 65 64 3b 62 6f 72 64 65 72 3a olor:red;border:
1ec0: 31 70 78 20 73 6f 6c 69 64 20 72 65 64 3b 27 3e 1px solid red;'>
1ed0: 25 73 3c 2f 73 70 61 6e 3e 22 2c 20 68 74 6d 6c %s</span>", html
1ee0: 69 7a 65 28 70 2d 3e 69 63 75 72 73 6f 72 2c 20 ize(p->icursor,
1ef0: 73 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2b s - p->icursor +
1f00: 20 32 29 29 3b 0a 20 20 20 20 20 20 70 2d 3e 69 2));. p->i
1f10: 63 75 72 73 6f 72 20 3d 20 73 20 2b 20 32 3b 0a cursor = s + 2;.
1f20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a return 1;.
1f30: 20 20 20 20 7d 0a 20 20 20 20 73 2b 2b 3b 0a 20 }. s++;.
1f40: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 0a }. return 0;..
1f50: 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 20 }.//}}}..static
1f60: 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 72 4c 69 void cr_renderLi
1f70: 6e 6b 28 50 61 72 73 65 72 20 2a 70 2c 20 63 68 nk(Parser *p, ch
1f80: 61 72 20 2a 73 2c 20 63 68 61 72 20 2a 62 61 72 ar *s, char *bar
1f90: 2c 20 63 68 61 72 20 2a 65 29 7b 2f 2f 7b 7b 7b , char *e){//{{{
1fa0: 0a 0a 20 20 69 6e 74 20 74 73 69 7a 65 20 3d 20 .. int tsize =
1fb0: 62 61 72 2d 73 3b 0a 20 20 69 6e 74 20 64 73 69 bar-s;. int dsi
1fc0: 7a 65 20 3d 20 65 20 2d 20 62 61 72 2d 31 3b 0a ze = e - bar-1;.
1fd0: 0a 20 20 69 66 20 28 74 73 69 7a 65 20 3c 20 31 . if (tsize < 1
1fe0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 20 28 ) return;. if (
1ff0: 64 73 69 7a 65 20 3c 20 31 29 20 64 73 69 7a 65 dsize < 1) dsize
2000: 20 3d 20 30 3b 0a 0a 20 20 63 68 61 72 20 7a 54 = 0;.. char zT
2010: 61 72 67 65 74 5b 74 73 69 7a 65 20 2b 20 31 5d arget[tsize + 1]
2020: 3b 0a 20 20 6d 65 6d 63 70 79 28 7a 54 61 72 67 ;. memcpy(zTarg
2030: 65 74 2c 20 73 2c 20 74 73 69 7a 65 29 3b 0a 20 et, s, tsize);.
2040: 20 7a 54 61 72 67 65 74 5b 74 73 69 7a 65 5d 20 zTarget[tsize]
2050: 3d 20 27 5c 30 27 3b 0a 0a 20 20 63 68 61 72 20 = '\0';.. char
2060: 7a 43 6c 6f 73 65 5b 32 30 5d 3b 0a 0a 20 20 42 zClose[20];.. B
2070: 6c 6f 62 20 2a 70 4f 75 74 20 3d 20 70 2d 3e 72 lob *pOut = p->r
2080: 2d 3e 70 4f 75 74 3b 0a 0a 20 20 70 2d 3e 72 2d ->pOut;.. p->r-
2090: 3e 70 4f 75 74 20 3d 20 70 2d 3e 69 62 6c 6f 62 >pOut = p->iblob
20a0: 3b 0a 20 20 77 66 5f 6f 70 65 6e 48 79 70 65 72 ;. wf_openHyper
20b0: 6c 69 6e 6b 28 70 2d 3e 72 2c 20 7a 54 61 72 67 link(p->r, zTarg
20c0: 65 74 2c 20 7a 43 6c 6f 73 65 2c 20 73 69 7a 65 et, zClose, size
20d0: 6f 66 28 7a 43 6c 6f 73 65 29 29 3b 0a 20 20 70 of(zClose));. p
20e0: 2d 3e 72 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 ->r->pOut = pOut
20f0: 3b 0a 0a 20 20 69 66 20 28 64 73 69 7a 65 29 0a ;.. if (dsize).
2100: 20 20 20 20 63 72 5f 70 61 72 73 65 49 6e 6c 69 cr_parseInli
2110: 6e 65 28 70 2c 20 62 61 72 2b 31 2c 20 65 29 20 ne(p, bar+1, e)
2120: 3b 0a 20 20 65 6c 73 65 0a 20 20 20 20 62 6c 6f ;. else. blo
2130: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
2140: 62 2c 20 68 74 6d 6c 69 7a 65 28 73 2c 20 74 73 b, htmlize(s, ts
2150: 69 7a 65 29 2c 20 2d 31 29 3b 0a 20 20 62 6c 6f ize), -1);. blo
2160: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
2170: 62 2c 20 7a 43 6c 6f 73 65 2c 20 2d 31 29 3b 0a b, zClose, -1);.
2180: 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 20 }.//}}}..static
2190: 69 6e 74 20 63 72 5f 69 4c 69 6e 6b 28 50 61 72 int cr_iLink(Par
21a0: 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 ser *p){//{{{..
21b0: 20 69 66 20 28 70 2d 3e 69 6e 4c 69 6e 6b 29 20 if (p->inLink)
21c0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 20 28 return 0;. if (
21d0: 28 70 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 63 (p->iend - p->ic
21e0: 75 72 73 6f 72 29 3c 33 29 20 72 65 74 75 72 6e ursor)<3) return
21f0: 20 30 3b 0a 0a 20 20 69 66 20 28 70 2d 3e 69 63 0;.. if (p->ic
2200: 75 72 73 6f 72 5b 31 5d 21 3d 27 5b 27 29 20 72 ursor[1]!='[') r
2210: 65 74 75 72 6e 20 30 3b 0a 0a 20 20 63 68 61 72 eturn 0;.. char
2220: 20 2a 73 20 3d 20 70 2d 3e 69 63 75 72 73 6f 72 *s = p->icursor
2230: 20 2b 20 32 3b 0a 20 20 63 68 61 72 20 2a 62 61 + 2;. char *ba
2240: 72 20 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 69 6e 74 r = NULL;.. int
2250: 20 63 6f 75 6e 74 20 3d 20 70 2d 3e 69 65 6e 64 count = p->iend
2260: 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2d 33 - p->icursor -3
2270: 3b 0a 20 20 77 68 69 6c 65 20 28 63 6f 75 6e 74 ;. while (count
2280: 2d 2d 29 7b 0a 20 20 20 20 69 66 20 28 73 5b 30 --){. if (s[0
2290: 5d 3d 3d 27 5d 27 20 26 26 20 73 5b 31 5d 3d 3d ]==']' && s[1]==
22a0: 27 5d 27 29 7b 0a 20 20 20 20 20 20 69 66 20 28 ']'){. if (
22b0: 21 62 61 72 29 20 62 61 72 20 3d 20 73 3b 0a 20 !bar) bar = s;.
22c0: 20 20 20 20 20 70 2d 3e 69 6e 4c 69 6e 6b 20 3d p->inLink =
22d0: 20 31 3b 0a 20 20 20 20 20 20 63 72 5f 72 65 6e 1;. cr_ren
22e0: 64 65 72 4c 69 6e 6b 28 70 2c 20 70 2d 3e 69 63 derLink(p, p->ic
22f0: 75 72 73 6f 72 2b 32 2c 20 62 61 72 2c 20 73 29 ursor+2, bar, s)
2300: 3b 0a 20 20 20 20 20 20 70 2d 3e 69 6e 4c 69 6e ;. p->inLin
2310: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 2d 3e k = 0;. p->
2320: 69 63 75 72 73 6f 72 20 3d 20 73 20 2b 20 32 3b icursor = s + 2;
2330: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b . return 1;
2340: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 21 . }. if (!
2350: 62 61 72 20 26 26 20 73 5b 30 5d 3d 3d 27 7c 27 bar && s[0]=='|'
2360: 29 20 62 61 72 3d 73 3b 0a 20 20 20 20 73 2b 2b ) bar=s;. s++
2370: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 ;. }. return 0
2380: 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 4c 4f 43 41 4c ;.}.//}}}..LOCAL
2390: 20 63 68 61 72 20 2a 63 72 5f 70 61 72 73 65 49 char *cr_parseI
23a0: 6e 6c 69 6e 65 28 50 61 72 73 65 72 20 2a 70 2c nline(Parser *p,
23b0: 20 63 68 61 72 20 2a 73 2c 20 63 68 61 72 20 2a char *s, char *
23c0: 65 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 69 6e 74 20 e){//{{{.. int
23d0: 73 61 76 65 5f 69 65 73 63 20 3d 20 70 2d 3e 69 save_iesc = p->i
23e0: 65 73 63 3b 0a 20 20 63 68 61 72 20 2a 73 61 76 esc;. char *sav
23f0: 65 5f 69 65 6e 64 20 3d 20 70 2d 3e 69 65 6e 64 e_iend = p->iend
2400: 3b 0a 20 20 4e 6f 64 65 20 2a 73 61 76 65 5f 69 ;. Node *save_i
2410: 73 74 61 63 6b 20 3d 20 70 2d 3e 69 73 74 61 63 stack = p->istac
2420: 6b 3b 0a 0a 20 20 70 2d 3e 69 65 73 63 20 3d 20 k;.. p->iesc =
2430: 30 3b 0a 20 20 70 2d 3e 69 65 6e 64 20 3d 20 65 0;. p->iend = e
2440: 3b 0a 20 20 70 2d 3e 69 73 74 61 63 6b 20 3d 20 ;. p->istack =
2450: 4e 55 4c 4c 3b 0a 0a 20 20 70 2d 3e 69 63 75 72 NULL;.. p->icur
2460: 73 6f 72 20 3d 20 73 3b 0a 0a 20 20 63 68 61 72 sor = s;.. char
2470: 20 2a 65 6f 66 20 3d 20 4e 55 4c 4c 3b 0a 20 20 *eof = NULL;.
2480: 77 68 69 6c 65 20 28 21 65 6f 66 20 26 26 20 20 while (!eof &&
2490: 70 2d 3e 69 63 75 72 73 6f 72 20 3c 20 70 2d 3e p->icursor < p->
24a0: 69 65 6e 64 20 29 7b 0a 0a 20 20 20 20 73 77 69 iend ){.. swi
24b0: 74 63 68 20 28 2a 70 2d 3e 69 63 75 72 73 6f 72 tch (*p->icursor
24c0: 29 20 7b 2f 2f 7b 7b 7b 0a 0a 20 20 20 20 20 20 ) {//{{{..
24d0: 63 61 73 65 20 27 7e 27 3a 0a 20 20 20 20 20 20 case '~':.
24e0: 20 20 69 66 20 28 70 2d 3e 69 65 73 63 29 20 7b if (p->iesc) {
24f0: 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 5f . blob_
2500: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
2510: 20 22 7e 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 "~", 1);.
2520: 20 20 20 20 70 2d 3e 69 65 73 63 20 3d 20 30 3b p->iesc = 0;
2530: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 . }.
2540: 20 20 20 70 2d 3e 69 65 73 63 20 3d 20 21 70 2d p->iesc = !p-
2550: 3e 69 65 73 63 3b 0a 20 20 20 20 20 20 20 20 70 >iesc;. p
2560: 2d 3e 69 63 75 72 73 6f 72 2b 3d 31 3b 0a 20 20 ->icursor+=1;.
2570: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 break;..
2580: 20 20 20 20 63 61 73 65 20 27 2a 27 3a 0a 20 20 case '*':.
2590: 20 20 20 20 20 20 63 72 5f 69 4d 61 72 6b 75 70 cr_iMarkup
25a0: 28 70 2c 20 4b 49 4e 44 5f 42 4f 4c 44 29 3b 0a (p, KIND_BOLD);.
25b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a break;..
25c0: 20 20 20 20 20 20 63 61 73 65 20 27 2f 27 3a 0a case '/':.
25d0: 20 20 20 20 20 20 20 20 63 72 5f 69 4d 61 72 6b cr_iMark
25e0: 75 70 28 70 2c 20 4b 49 4e 44 5f 49 54 41 4c 49 up(p, KIND_ITALI
25f0: 43 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 C);. brea
2600: 6b 3b 0a 0a 20 20 20 20 20 20 63 61 73 65 20 27 k;.. case '
2610: 5e 27 3a 0a 20 20 20 20 20 20 20 20 63 72 5f 69 ^':. cr_i
2620: 4d 61 72 6b 75 70 28 70 2c 20 4b 49 4e 44 5f 53 Markup(p, KIND_S
2630: 55 50 45 52 53 43 52 49 50 54 29 3b 0a 20 20 20 UPERSCRIPT);.
2640: 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 break;..
2650: 20 20 20 63 61 73 65 20 27 2c 27 3a 0a 20 20 20 case ',':.
2660: 20 20 20 20 20 63 72 5f 69 4d 61 72 6b 75 70 28 cr_iMarkup(
2670: 70 2c 20 4b 49 4e 44 5f 53 55 42 53 43 52 49 50 p, KIND_SUBSCRIP
2680: 54 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 T);. brea
2690: 6b 3b 0a 0a 20 20 20 20 20 20 63 61 73 65 20 27 k;.. case '
26a0: 23 27 3a 0a 20 20 20 20 20 20 20 20 63 72 5f 69 #':. cr_i
26b0: 4d 61 72 6b 75 70 28 70 2c 20 4b 49 4e 44 5f 4d Markup(p, KIND_M
26c0: 4f 4e 4f 53 50 41 43 45 44 29 3b 0a 20 20 20 20 ONOSPACED);.
26d0: 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 break;..
26e0: 20 20 63 61 73 65 20 27 5c 5c 27 3a 0a 20 20 20 case '\\':.
26f0: 20 20 20 20 20 63 72 5f 69 4d 61 72 6b 75 70 28 cr_iMarkup(
2700: 70 2c 20 4b 49 4e 44 5f 42 52 45 41 4b 29 3b 0a p, KIND_BREAK);.
2710: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a break;..
2720: 20 20 20 20 20 20 63 61 73 65 20 27 7b 27 3a 0a case '{':.
2730: 20 20 20 20 20 20 20 20 69 66 20 28 63 72 5f 69 if (cr_i
2740: 73 45 73 63 28 70 29 29 20 62 72 65 61 6b 3b 0a sEsc(p)) break;.
2750: 20 20 20 20 20 20 20 20 69 66 20 28 63 72 5f 69 if (cr_i
2760: 4e 6f 57 69 6b 69 28 70 29 29 20 62 72 65 61 6b NoWiki(p)) break
2770: 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 72 ;. if (cr
2780: 5f 69 49 6d 61 67 65 28 70 29 29 20 62 72 65 61 _iImage(p)) brea
2790: 6b 3b 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 5f k;. blob_
27a0: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
27b0: 20 70 2d 3e 69 63 75 72 73 6f 72 2c 20 31 29 3b p->icursor, 1);
27c0: 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 63 75 72 . p->icur
27d0: 73 6f 72 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 sor += 1;.
27e0: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 break;..
27f0: 63 61 73 65 20 27 5b 27 3a 0a 20 20 20 20 20 20 case '[':.
2800: 20 20 69 66 20 28 63 72 5f 69 73 45 73 63 28 70 if (cr_isEsc(p
2810: 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 )) break;.
2820: 20 20 69 66 20 28 63 72 5f 69 4c 69 6e 6b 28 70 if (cr_iLink(p
2830: 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 )) break;.
2840: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d blob_append(p-
2850: 3e 69 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 >iblob, p->icurs
2860: 6f 72 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 or, 1);.
2870: 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 31 3b p->icursor += 1;
2880: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a . break;.
2890: 0a 0a 20 20 20 20 20 20 63 61 73 65 20 27 3c 27 .. case '<'
28a0: 3a 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 72 :. if (cr
28b0: 5f 69 73 45 73 63 28 70 29 29 20 62 72 65 61 6b _isEsc(p)) break
28c0: 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 72 ;. if (cr
28d0: 5f 69 4d 61 63 72 6f 28 70 29 29 20 62 72 65 61 _iMacro(p)) brea
28e0: 6b 3b 0a 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 k;.. blob
28f0: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
2900: 2c 20 22 26 6c 74 3b 22 2c 20 34 29 3b 0a 20 20 , "<", 4);.
2910: 20 20 20 20 20 20 70 2d 3e 69 63 75 72 73 6f 72 p->icursor
2920: 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 += 1;. b
2930: 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 63 61 73 reak;.. cas
2940: 65 20 27 3e 27 3a 0a 20 20 20 20 20 20 20 20 69 e '>':. i
2950: 66 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a 20 20 f (p->iesc) {.
2960: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 blob_app
2970: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e end(p->iblob, "~
2980: 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 ", 1);.
2990: 20 70 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 20 20 p->iesc = 0;.
29a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
29b0: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
29c0: 62 6c 6f 62 2c 20 22 26 67 74 3b 22 2c 20 34 29 blob, ">", 4)
29d0: 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 63 75 ;. p->icu
29e0: 72 73 6f 72 20 2b 3d 20 31 3b 0a 20 20 20 20 20 rsor += 1;.
29f0: 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 break;..
2a00: 20 63 61 73 65 20 27 26 27 3a 0a 20 20 20 20 20 case '&':.
2a10: 20 20 20 69 66 20 28 70 2d 3e 69 65 73 63 29 20 if (p->iesc)
2a20: 7b 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 {. blob
2a30: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
2a40: 2c 20 22 7e 22 2c 20 31 29 3b 0a 20 20 20 20 20 , "~", 1);.
2a50: 20 20 20 20 20 70 2d 3e 69 65 73 63 20 3d 20 30 p->iesc = 0
2a60: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 ;. }.
2a70: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 blob_append(
2a80: 70 2d 3e 69 62 6c 6f 62 2c 20 22 26 61 6d 70 3b p->iblob, "&
2a90: 22 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20 70 ", 5);. p
2aa0: 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 31 3b 0a ->icursor += 1;.
2ab0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a break;..
2ac0: 20 20 20 20 20 20 63 61 73 65 20 27 7c 27 3a 0a case '|':.
2ad0: 20 20 20 20 20 20 20 20 69 66 20 28 70 2d 3e 69 if (p->i
2ae0: 6e 54 61 62 6c 65 29 7b 0a 20 20 20 20 20 20 20 nTable){.
2af0: 20 20 20 69 66 20 28 70 2d 3e 69 65 73 63 29 20 if (p->iesc)
2b00: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6c {. bl
2b10: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
2b20: 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72 2c 20 ob, p->icursor,
2b30: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 1);.
2b40: 70 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 20 20 20 p->iesc = 0;.
2b50: 20 20 20 20 20 20 20 20 20 70 2d 3e 69 63 75 72 p->icur
2b60: 73 6f 72 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 sor += 1;.
2b70: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
2b80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 }.
2b90: 20 20 20 65 6f 66 20 3d 20 70 2d 3e 69 63 75 72 eof = p->icur
2ba0: 73 6f 72 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 sor + 1;.
2bb0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 break;.
2bc0: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2f 20 66 }. // f
2bd0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 64 all through to d
2be0: 65 66 61 75 6c 74 0a 0a 20 20 20 20 20 20 64 65 efault.. de
2bf0: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 69 fault:. i
2c00: 66 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a 20 20 f (p->iesc) {.
2c10: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 blob_app
2c20: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e end(p->iblob, "~
2c30: 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 ", 1);.
2c40: 20 70 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 20 20 p->iesc = 0;.
2c50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
2c60: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
2c70: 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72 blob, p->icursor
2c80: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 70 2d , 1);. p-
2c90: 3e 69 63 75 72 73 6f 72 20 2b 3d 31 3b 0a 20 20 >icursor +=1;.
2ca0: 20 20 7d 2f 2f 7d 7d 7d 0a 0a 20 20 7d 0a 0a 20 }//}}}.. }..
2cb0: 20 77 68 69 6c 65 20 28 70 2d 3e 69 73 74 61 63 while (p->istac
2cc0: 6b 29 7b 0a 20 20 20 20 63 72 5f 69 43 6c 6f 73 k){. cr_iClos
2cd0: 65 28 70 2c 20 70 2d 3e 69 73 74 61 63 6b 2d 3e e(p, p->istack->
2ce0: 6b 69 6e 64 29 3b 0a 20 20 20 20 70 2d 3e 69 73 kind);. p->is
2cf0: 74 61 63 6b 20 3d 20 70 2d 3e 69 73 74 61 63 6b tack = p->istack
2d00: 2d 3e 6e 65 78 74 3b 0a 20 20 7d 0a 0a 20 20 70 ->next;. }.. p
2d10: 2d 3e 69 65 73 63 20 3d 20 73 61 76 65 5f 69 65 ->iesc = save_ie
2d20: 73 63 3b 0a 20 20 70 2d 3e 69 65 6e 64 20 3d 20 sc;. p->iend =
2d30: 73 61 76 65 5f 69 65 6e 64 3b 0a 20 20 70 2d 3e save_iend;. p->
2d40: 69 73 74 61 63 6b 20 3d 20 73 61 76 65 5f 69 73 istack = save_is
2d50: 74 61 63 6b 3b 0a 0a 20 20 72 65 74 75 72 6e 20 tack;.. return
2d60: 65 6f 66 3b 0a 0a 7d 0a 2f 2f 7d 7d 7d 0a 2f 2f eof;..}.//}}}.//
2d70: 7d 7d 7d 0a 0a 2f 2f 7b 7b 7b 20 42 4c 4f 43 4b }}}..//{{{ BLOCK
2d80: 20 50 41 52 53 45 52 0a 0a 73 74 61 74 69 63 20 PARSER..static
2d90: 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 72 4c 69 void cr_renderLi
2da0: 73 74 49 74 65 6d 28 50 61 72 73 65 72 20 2a 70 stItem(Parser *p
2db0: 2c 20 4e 6f 64 65 20 2a 6e 29 7b 2f 2f 7b 7b 7b , Node *n){//{{{
2dc0: 0a 0a 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 ... blob_append
2dd0: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 6c 69 3e (p->iblob, "<li>
2de0: 22 2c 20 34 29 3b 0a 20 20 63 72 5f 70 61 72 73 ", 4);. cr_pars
2df0: 65 49 6e 6c 69 6e 65 28 70 2c 20 6e 2d 3e 73 74 eInline(p, n->st
2e00: 61 72 74 2c 20 6e 2d 3e 65 6e 64 29 3b 0a 0a 20 art, n->end);..
2e10: 20 69 66 20 28 6e 2d 3e 63 68 69 6c 64 72 65 6e if (n->children
2e20: 29 7b 0a 0a 20 20 20 20 69 6e 74 20 6f 72 64 20 ){.. int ord
2e30: 3d 20 28 6e 2d 3e 63 68 69 6c 64 72 65 6e 2d 3e = (n->children->
2e40: 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 4f 52 44 45 kind & KIND_ORDE
2e50: 52 45 44 5f 4c 49 53 54 29 3b 0a 0a 20 20 20 20 RED_LIST);..
2e60: 69 66 20 28 6f 72 64 29 20 20 20 62 6c 6f 62 5f if (ord) blob_
2e70: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
2e80: 20 22 3c 6f 6c 3e 22 2c 20 34 29 3b 0a 20 20 20 "<ol>", 4);.
2e90: 20 65 6c 73 65 20 20 20 20 20 20 20 62 6c 6f 62 else blob
2ea0: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
2eb0: 2c 20 22 3c 75 6c 3e 22 2c 20 34 29 3b 0a 0a 20 , "<ul>", 4);..
2ec0: 20 20 20 6e 20 3d 20 6e 2d 3e 63 68 69 6c 64 72 n = n->childr
2ed0: 65 6e 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 6e en;. while (n
2ee0: 29 7b 0a 20 20 20 20 20 20 63 72 5f 72 65 6e 64 ){. cr_rend
2ef0: 65 72 4c 69 73 74 49 74 65 6d 28 70 2c 20 6e 29 erListItem(p, n)
2f00: 3b 0a 20 20 20 20 20 20 6e 20 3d 20 6e 2d 3e 6e ;. n = n->n
2f10: 65 78 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ext;. }..
2f20: 69 66 20 28 6f 72 64 29 20 20 20 62 6c 6f 62 5f if (ord) blob_
2f30: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
2f40: 20 22 3c 2f 6f 6c 3e 22 2c 20 35 29 3b 0a 20 20 "</ol>", 5);.
2f50: 20 20 65 6c 73 65 20 20 20 20 20 20 20 62 6c 6f else blo
2f60: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
2f70: 62 2c 20 22 3c 2f 75 6c 3e 22 2c 20 35 29 3b 0a b, "</ul>", 5);.
2f80: 20 20 7d 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e }. blob_appen
2f90: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 6c d(p->iblob, "</l
2fa0: 69 3e 22 2c 20 35 29 3b 0a 7d 0a 2f 2f 7d 7d 7d i>", 5);.}.//}}}
2fb0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 5f .static void cr_
2fc0: 72 65 6e 64 65 72 4c 69 73 74 28 50 61 72 73 65 renderList(Parse
2fd0: 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 4e r *p){//{{{.. N
2fe0: 6f 64 65 20 2a 6e 20 3d 20 70 2d 3e 6c 69 73 74 ode *n = p->list
2ff0: 3b 0a 0a 20 20 77 68 69 6c 65 20 28 6e 2d 3e 70 ;.. while (n->p
3000: 61 72 65 6e 74 20 21 3d 6e 29 20 20 6e 20 3d 20 arent !=n) n =
3010: 6e 2d 3e 70 61 72 65 6e 74 3b 0a 0a 20 20 69 6e n->parent;.. in
3020: 74 20 6f 72 64 20 3d 20 28 6e 2d 3e 6b 69 6e 64 t ord = (n->kind
3030: 20 26 20 4b 49 4e 44 5f 4f 52 44 45 52 45 44 5f & KIND_ORDERED_
3040: 4c 49 53 54 29 3b 0a 0a 20 20 69 66 20 28 6f 72 LIST);.. if (or
3050: 64 29 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 d) blob_append
3060: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 5c 6e 5c 6e (p->iblob, "\n\n
3070: 3c 6f 6c 3e 22 2c 20 2d 31 29 3b 0a 20 20 65 6c <ol>", -1);. el
3080: 73 65 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 se blob_ap
3090: 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 pend(p->iblob, "
30a0: 5c 6e 5c 6e 3c 75 6c 3e 22 2c 20 2d 31 29 3b 0a \n\n<ul>", -1);.
30b0: 0a 20 20 77 68 69 6c 65 20 28 6e 29 20 7b 0a 20 . while (n) {.
30c0: 20 20 20 63 72 5f 72 65 6e 64 65 72 4c 69 73 74 cr_renderList
30d0: 49 74 65 6d 28 70 2c 20 6e 29 3b 0a 20 20 20 20 Item(p, n);.
30e0: 6e 20 3d 20 6e 2d 3e 6e 65 78 74 3b 0a 20 20 7d n = n->next;. }
30f0: 0a 0a 20 20 69 66 20 28 6f 72 64 29 20 20 20 62 .. if (ord) b
3100: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 lob_append(p->ib
3110: 6c 6f 62 2c 20 22 3c 2f 6f 6c 3e 22 2c 20 35 29 lob, "</ol>", 5)
3120: 3b 0a 20 20 65 6c 73 65 20 20 20 20 20 20 20 62 ;. else b
3130: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 lob_append(p->ib
3140: 6c 6f 62 2c 20 22 3c 2f 75 6c 3e 22 2c 20 35 29 lob, "</ul>", 5)
3150: 3b 0a 7d 0a 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 ;.}..//}}}..stat
3160: 69 63 20 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 ic void cr_rende
3170: 72 54 61 62 6c 65 52 6f 77 28 50 61 72 73 65 72 rTableRow(Parser
3180: 20 2a 70 2c 20 4e 6f 64 65 20 2a 72 6f 77 29 7b *p, Node *row){
3190: 2f 2f 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 73 //{{{.. char *s
31a0: 20 3d 20 72 6f 77 2d 3e 73 74 61 72 74 3b 0a 20 = row->start;.
31b0: 20 69 6e 74 20 74 68 3b 0a 0a 20 20 62 6c 6f 62 int th;.. blob
31c0: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
31d0: 2c 20 22 5c 6e 3c 74 72 3e 22 2c 20 2d 31 29 3b , "\n<tr>", -1);
31e0: 0a 0a 20 20 77 68 69 6c 65 20 28 73 20 26 26 20 .. while (s &&
31f0: 73 20 3c 20 72 6f 77 2d 3e 65 6e 64 29 7b 0a 0a s < row->end){..
3200: 20 20 20 20 69 66 20 28 28 74 68 20 3d 20 2a 73 if ((th = *s
3210: 20 3d 3d 20 27 3d 27 29 29 20 7b 0a 20 20 20 20 == '=')) {.
3220: 20 20 73 2b 2b 3b 0a 20 20 20 20 20 20 62 6c 6f s++;. blo
3230: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
3240: 62 2c 20 22 3c 74 68 3e 22 2c 20 2d 31 29 3b 0a b, "<th>", -1);.
3250: 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 7b }. else {
3260: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 . blob_appe
3270: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 74 nd(p->iblob, "<t
3280: 64 3e 22 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 0a d>", -1);. }.
3290: 0a 20 20 20 20 73 20 3d 20 63 72 5f 70 61 72 73 . s = cr_pars
32a0: 65 49 6e 6c 69 6e 65 28 70 2c 20 73 2c 20 72 6f eInline(p, s, ro
32b0: 77 2d 3e 65 6e 64 29 3b 0a 0a 20 20 20 20 69 66 w->end);.. if
32c0: 20 28 74 68 29 0a 20 20 20 20 20 20 62 6c 6f 62 (th). blob
32d0: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
32e0: 2c 20 22 3c 2f 74 68 3e 5c 6e 22 2c 20 2d 31 29 , "</th>\n", -1)
32f0: 3b 0a 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 ;. else.
3300: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e blob_append(p->
3310: 69 62 6c 6f 62 2c 20 22 3c 2f 74 64 3e 5c 6e 22 iblob, "</td>\n"
3320: 2c 20 2d 31 29 3b 0a 0a 20 20 20 20 69 66 20 28 , -1);.. if (
3330: 21 73 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 !s) break;. }.
3340: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e blob_append(p->
3350: 69 62 6c 6f 62 2c 20 22 3c 2f 74 72 3e 22 2c 20 iblob, "</tr>",
3360: 35 29 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 5);.}.//}}}.stat
3370: 69 63 20 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 ic void cr_rende
3380: 72 54 61 62 6c 65 28 50 61 72 73 65 72 20 2a 70 rTable(Parser *p
3390: 2c 20 4e 6f 64 65 20 2a 6e 29 7b 2f 2f 7b 7b 7b , Node *n){//{{{
33a0: 0a 0a 20 20 4e 6f 64 65 20 2a 72 6f 77 20 3d 20 .. Node *row =
33b0: 6e 2d 3e 63 68 69 6c 64 72 65 6e 3b 0a 0a 20 20 n->children;..
33c0: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
33d0: 62 6c 6f 62 2c 20 22 3c 74 61 62 6c 65 20 63 6c blob, "<table cl
33e0: 61 73 73 3d 27 63 72 65 6f 6c 65 74 61 62 6c 65 ass='creoletable
33f0: 27 3e 22 2c 20 2d 31 29 3b 0a 20 20 70 2d 3e 69 '>", -1);. p->i
3400: 6e 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 77 68 nTable = 1;. wh
3410: 69 6c 65 20 28 72 6f 77 29 7b 0a 0a 20 20 20 20 ile (row){..
3420: 63 72 5f 72 65 6e 64 65 72 54 61 62 6c 65 52 6f cr_renderTableRo
3430: 77 28 70 2c 20 72 6f 77 29 3b 0a 20 20 20 20 72 w(p, row);. r
3440: 6f 77 20 3d 20 72 6f 77 2d 3e 6e 65 78 74 3b 0a ow = row->next;.
3450: 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 61 70 70 65 . }. blob_appe
3460: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f nd(p->iblob, "</
3470: 74 61 62 6c 65 3e 22 2c 20 2d 31 29 3b 0a 20 20 table>", -1);.
3480: 70 2d 3e 69 6e 54 61 62 6c 65 20 3d 20 30 3b 0a p->inTable = 0;.
3490: 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 .}.//}}}..static
34a0: 20 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 72 28 void cr_render(
34b0: 50 61 72 73 65 72 20 2a 70 2c 20 4e 6f 64 65 20 Parser *p, Node
34c0: 2a 6e 6f 64 65 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 *node){//{{{..
34d0: 69 66 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 26 if (node->kind &
34e0: 20 4b 49 4e 44 5f 50 41 52 41 47 52 41 50 48 29 KIND_PARAGRAPH)
34f0: 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e {. blob_appen
3500: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 20 20 22 5c d(p->iblob, "\
3510: 6e 3c 70 3e 22 2c 20 2d 31 29 3b 0a 20 20 20 20 n<p>", -1);.
3520: 63 72 5f 70 61 72 73 65 49 6e 6c 69 6e 65 28 70 cr_parseInline(p
3530: 2c 20 6e 6f 64 65 2d 3e 73 74 61 72 74 2c 20 6e , node->start, n
3540: 6f 64 65 2d 3e 65 6e 64 20 29 3b 0a 20 20 20 20 ode->end );.
3550: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
3560: 62 6c 6f 62 2c 20 22 3c 2f 70 3e 5c 6e 22 2c 20 blob, "</p>\n",
3570: 2d 31 20 20 29 3b 0a 20 20 7d 0a 0a 20 20 69 66 -1 );. }.. if
3580: 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b (node->kind & K
3590: 49 4e 44 5f 48 45 41 44 49 4e 47 29 7b 0a 20 20 IND_HEADING){.
35a0: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 blob_appendf(p
35b0: 2d 3e 69 62 6c 6f 62 2c 0a 20 20 20 20 20 20 20 ->iblob,.
35c0: 20 22 5c 6e 3c 68 25 64 20 25 73 3e 22 2c 0a 20 "\n<h%d %s>",.
35d0: 20 20 20 20 20 20 20 6e 6f 64 65 2d 3e 6c 65 76 node->lev
35e0: 65 6c 2c 0a 20 20 20 20 20 20 20 20 28 6e 6f 64 el,. (nod
35f0: 65 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 5f e->flags & FLAG_
3600: 43 45 4e 54 45 52 29 20 3f 20 22 20 73 74 79 6c CENTER) ? " styl
3610: 65 3d 27 74 65 78 74 2d 61 6c 69 67 6e 3a 63 65 e='text-align:ce
3620: 6e 74 65 72 3b 27 22 20 3a 20 22 22 0a 20 20 20 nter;'" : "".
3630: 20 29 3b 0a 20 20 20 20 63 72 5f 70 61 72 73 65 );. cr_parse
3640: 49 6e 6c 69 6e 65 28 70 2c 20 6e 6f 64 65 2d 3e Inline(p, node->
3650: 73 74 61 72 74 2c 20 6e 6f 64 65 2d 3e 65 6e 64 start, node->end
3660: 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 );. blob_appe
3670: 6e 64 66 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c ndf(p->iblob, "<
3680: 2f 68 25 64 3e 5c 6e 22 2c 20 6e 6f 64 65 2d 3e /h%d>\n", node->
3690: 6c 65 76 65 6c 20 20 29 3b 0a 20 20 20 20 72 65 level );. re
36a0: 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 turn;. }.. if
36b0: 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 (node->kind & KI
36c0: 4e 44 5f 48 4f 52 49 5a 4f 4e 54 41 4c 5f 52 55 ND_HORIZONTAL_RU
36d0: 4c 45 29 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 LE){. blob_ap
36e0: 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 pend(p->iblob, "
36f0: 3c 68 72 20 2f 3e 22 2c 20 2d 31 29 3b 0a 20 20 <hr />", -1);.
3700: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 return;. }..
3710: 20 69 66 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 if (node->kind
3720: 26 20 4b 49 4e 44 5f 4c 49 53 54 29 7b 0a 20 20 & KIND_LIST){.
3730: 20 20 63 72 5f 72 65 6e 64 65 72 4c 69 73 74 28 cr_renderList(
3740: 70 29 3b 0a 20 20 20 20 70 2d 3e 6c 69 73 74 20 p);. p->list
3750: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 72 65 74 75 = NULL;. retu
3760: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 6e rn;. }.. if (n
3770: 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e 44 ode->kind & KIND
3780: 5f 54 41 42 4c 45 29 7b 0a 20 20 20 20 63 72 5f _TABLE){. cr_
3790: 72 65 6e 64 65 72 54 61 62 6c 65 28 70 2c 20 6e renderTable(p, n
37a0: 6f 64 65 29 3b 0a 20 20 20 20 72 65 74 75 72 6e ode);. return
37b0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 6e 6f 64 ;. }.. if (nod
37c0: 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 4e e->kind & KIND_N
37d0: 4f 5f 57 49 4b 49 5f 42 4c 4f 43 4b 29 7b 0a 20 O_WIKI_BLOCK){.
37e0: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
37f0: 70 2d 3e 69 62 6c 6f 62 2c 0a 20 20 20 20 20 20 p->iblob,.
3800: 22 5c 6e 3c 62 6c 6f 63 6b 71 75 6f 74 65 20 73 "\n<blockquote s
3810: 74 79 6c 65 3d 27 62 61 63 6b 67 72 6f 75 6e 64 tyle='background
3820: 3a 6f 6c 64 6c 61 63 65 27 3e 3c 70 72 65 3e 25 :oldlace'><pre>%
3830: 73 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 s</pre></blockqu
3840: 6f 74 65 3e 5c 6e 22 2c 0a 20 20 20 20 20 20 20 ote>\n",.
3850: 20 68 74 6d 6c 69 7a 65 28 20 6e 6f 64 65 2d 3e htmlize( node->
3860: 73 74 61 72 74 2c 20 6e 6f 64 65 2d 3e 65 6e 64 start, node->end
3870: 20 2d 20 6e 6f 64 65 2d 3e 73 74 61 72 74 29 0a - node->start).
3880: 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 0a 2f 2f 7d );. }.}.//}
3890: 7d 7d 0a 0a 73 74 61 74 69 63 20 63 68 61 72 20 }}..static char
38a0: 2a 63 72 5f 66 69 6e 64 45 6e 64 4f 66 42 6c 6f *cr_findEndOfBlo
38b0: 63 6b 28 50 61 72 73 65 72 20 2a 70 2c 20 63 68 ck(Parser *p, ch
38c0: 61 72 20 2a 73 2c 20 63 68 61 72 20 63 29 7b 2f ar *s, char c){/
38d0: 2f 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 65 6e /{{{.. char *en
38e0: 64 3b 0a 20 20 77 68 69 6c 65 20 28 73 5b 30 5d d;. while (s[0]
38f0: 29 7b 0a 0a 20 20 20 20 65 6e 64 20 3d 20 73 3b ){.. end = s;
3900: 0a 20 20 20 20 69 66 20 28 73 5b 30 5d 20 3d 3d . if (s[0] ==
3910: 20 63 20 26 26 20 73 5b 30 5d 20 3d 3d 20 63 20 c && s[0] == c
3920: 26 26 20 73 5b 30 5d 20 3d 3d 20 63 29 20 7b 0a && s[0] == c) {.
3930: 20 20 20 20 20 20 73 20 3d 20 63 72 5f 6e 65 78 s = cr_nex
3940: 74 4c 69 6e 65 28 70 2c 20 73 20 2b 20 33 29 3b tLine(p, s + 3);
3950: 0a 20 20 20 20 20 20 69 66 20 28 70 2d 3e 6c 69 . if (p->li
3960: 6e 65 57 61 73 42 6c 61 6e 6b 29 20 7b 0a 20 20 neWasBlank) {.
3970: 20 20 20 20 20 20 20 20 70 2d 3e 63 75 72 73 6f p->curso
3980: 72 20 3d 20 73 3b 0a 20 20 20 20 20 20 20 20 20 r = s;.
3990: 20 72 65 74 75 72 6e 20 65 6e 64 3b 0a 20 20 20 return end;.
39a0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65 }. }. e
39b0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 73 20 3d 20 lse {. s =
39c0: 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73 cr_nextLine(p, s
39d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 );. }. }. r
39e0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d eturn 0;.}.//}}}
39f0: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 5f 61 .static int cr_a
3a00: 64 64 4c 69 73 74 49 74 65 6d 28 50 61 72 73 65 ddListItem(Parse
3a10: 72 20 2a 70 2c 20 4e 6f 64 65 20 2a 6e 29 7b 2f r *p, Node *n){/
3a20: 2f 7b 7b 7b 0a 0a 20 20 6e 2d 3e 70 61 72 65 6e /{{{.. n->paren
3a30: 74 20 3d 20 6e 3b 0a 20 20 6e 2d 3e 6e 65 78 74 t = n;. n->next
3a40: 20 3d 20 6e 2d 3e 63 68 69 6c 64 72 65 6e 20 3d = n->children =
3a50: 20 4e 55 4c 4c 3b 0a 0a 20 20 69 66 20 28 21 70 NULL;.. if (!p
3a60: 2d 3e 6c 69 73 74 29 20 7b 0a 20 20 20 20 69 66 ->list) {. if
3a70: 20 28 6e 2d 3e 6c 65 76 65 6c 20 21 3d 20 31 29 (n->level != 1)
3a80: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 70 return 0;. p
3a90: 2d 3e 6c 69 73 74 20 3d 20 6e 3b 0a 20 20 20 20 ->list = n;.
3aa0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 0a 20 return 1;. }..
3ab0: 20 4e 6f 64 65 20 2a 6c 69 73 74 20 3d 20 70 2d Node *list = p-
3ac0: 3e 6c 69 73 74 3b 0a 0a 20 20 77 68 69 6c 65 20 >list;.. while
3ad0: 28 6e 2d 3e 6c 65 76 65 6c 20 3c 20 6c 69 73 74 (n->level < list
3ae0: 2d 3e 6c 65 76 65 6c 29 7b 0a 20 20 20 20 6c 69 ->level){. li
3af0: 73 74 20 3d 20 6c 69 73 74 2d 3e 70 61 72 65 6e st = list->paren
3b00: 74 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 6e 2d t;. }.. if (n-
3b10: 3e 6c 65 76 65 6c 20 3d 3d 20 6c 69 73 74 2d 3e >level == list->
3b20: 6c 65 76 65 6c 29 7b 0a 0a 20 20 20 20 69 66 20 level){.. if
3b30: 28 6e 2d 3e 6b 69 6e 64 20 21 3d 20 6c 69 73 74 (n->kind != list
3b40: 2d 3e 6b 69 6e 64 29 7b 0a 20 20 20 20 20 20 69 ->kind){. i
3b50: 66 20 28 6e 2d 3e 6c 65 76 65 6c 3e 31 29 20 72 f (n->level>1) r
3b60: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 63 eturn 0;. c
3b70: 72 5f 72 65 6e 64 65 72 4c 69 73 74 28 70 29 3b r_renderList(p);
3b80: 0a 20 20 20 20 20 20 70 2d 3e 6c 69 73 74 20 3d . p->list =
3b90: 20 6e 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e n;. return
3ba0: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 2d 1;. }. n-
3bb0: 3e 70 61 72 65 6e 74 20 3d 20 6c 69 73 74 2d 3e >parent = list->
3bc0: 70 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6c parent;. p->l
3bd0: 69 73 74 20 3d 20 6c 69 73 74 2d 3e 6e 65 78 74 ist = list->next
3be0: 20 3d 20 6e 3b 0a 20 20 20 20 72 65 74 75 72 6e = n;. return
3bf0: 20 31 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 20 1;. }.. if (
3c00: 28 6e 2d 3e 6c 65 76 65 6c 20 2d 20 6c 69 73 74 (n->level - list
3c10: 2d 3e 6c 65 76 65 6c 29 20 3e 20 31 20 29 20 72 ->level) > 1 ) r
3c20: 65 74 75 72 6e 20 30 3b 0a 20 20 6e 2d 3e 70 61 eturn 0;. n->pa
3c30: 72 65 6e 74 20 3d 20 70 2d 3e 6c 69 73 74 3b 0a rent = p->list;.
3c40: 20 20 70 2d 3e 6c 69 73 74 2d 3e 63 68 69 6c 64 p->list->child
3c50: 72 65 6e 20 3d 20 6e 3b 0a 20 20 70 2d 3e 6c 69 ren = n;. p->li
3c60: 73 74 20 3d 20 6e 3b 0a 20 20 72 65 74 75 72 6e st = n;. return
3c70: 20 31 3b 0a 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 1;..}.//}}}..st
3c80: 61 74 69 63 20 69 6e 74 20 69 73 45 6e 64 57 69 atic int isEndWi
3c90: 6b 69 4d 61 72 6b 65 72 28 50 61 72 73 65 72 20 kiMarker(Parser
3ca0: 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 63 68 61 *p){//{{{.. cha
3cb0: 72 20 2a 73 20 3d 20 70 2d 3e 63 75 72 73 6f 72 r *s = p->cursor
3cc0: 3b 0a 20 20 69 66 20 28 6d 65 6d 63 6d 70 28 73 ;. if (memcmp(s
3cd0: 2c 20 22 3c 3c 66 6f 73 73 69 6c 3e 3e 22 2c 20 , "<<fossil>>",
3ce0: 31 30 29 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 10)) return 0;.
3cf0: 20 70 2d 3e 74 68 69 73 2d 3e 73 74 61 72 74 20 p->this->start
3d00: 3d 20 73 3b 0a 20 20 70 2d 3e 74 68 69 73 2d 3e = s;. p->this->
3d10: 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 45 4e 44 5f kind = KIND_END_
3d20: 57 49 4b 49 5f 4d 41 52 4b 45 52 3b 0a 20 20 70 WIKI_MARKER;. p
3d30: 2d 3e 63 75 72 73 6f 72 20 2b 3d 20 31 30 3b 0a ->cursor += 10;.
3d40: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 2f 2f return 1;.}.//
3d50: 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 /}}}.static int
3d60: 69 73 4e 6f 57 69 6b 69 42 6c 6f 63 6b 28 50 61 isNoWikiBlock(Pa
3d70: 72 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a rser *p){//{{{..
3d80: 20 20 63 68 61 72 20 2a 73 20 3d 20 70 2d 3e 63 char *s = p->c
3d90: 75 72 73 6f 72 3b 0a 0a 20 20 69 66 20 28 73 5b ursor;.. if (s[
3da0: 30 5d 20 21 3d 20 27 7b 27 29 20 72 65 74 75 72 0] != '{') retur
3db0: 6e 20 30 3b 20 73 2b 2b 3b 0a 20 20 69 66 20 28 n 0; s++;. if (
3dc0: 73 5b 30 5d 20 21 3d 20 27 7b 27 29 20 72 65 74 s[0] != '{') ret
3dd0: 75 72 6e 20 30 3b 20 73 2b 2b 3b 0a 20 20 69 66 urn 0; s++;. if
3de0: 20 28 73 5b 30 5d 20 21 3d 20 27 7b 27 29 20 72 (s[0] != '{') r
3df0: 65 74 75 72 6e 20 30 3b 20 73 2b 2b 3b 0a 0a 20 eturn 0; s++;..
3e00: 20 73 20 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65 s = cr_nextLine
3e10: 28 70 2c 20 73 29 3b 0a 20 20 69 66 20 28 21 70 (p, s);. if (!p
3e20: 2d 3e 6c 69 6e 65 57 61 73 42 6c 61 6e 6b 29 20 ->lineWasBlank)
3e30: 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 70 2d 3e return 0;.. p->
3e40: 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 73 3b this->start = s;
3e50: 0a 0a 20 20 73 20 3d 20 63 72 5f 66 69 6e 64 45 .. s = cr_findE
3e60: 6e 64 4f 66 42 6c 6f 63 6b 28 70 2c 20 73 2c 20 ndOfBlock(p, s,
3e70: 27 7d 27 29 3b 0a 0a 20 20 69 66 20 28 21 73 29 '}');.. if (!s)
3e80: 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 2f 2f return 0;.. //
3e90: 20 70 2d 3e 63 75 72 73 6f 72 20 77 61 73 20 73 p->cursor was s
3ea0: 65 74 20 62 79 20 66 69 6e 64 45 6e 64 4f 66 42 et by findEndOfB
3eb0: 6c 6f 63 6b 0a 20 20 70 2d 3e 74 68 69 73 2d 3e lock. p->this->
3ec0: 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 4e 4f 5f 57 kind = KIND_NO_W
3ed0: 49 4b 49 5f 42 4c 4f 43 4b 3b 0a 20 20 70 2d 3e IKI_BLOCK;. p->
3ee0: 74 68 69 73 2d 3e 65 6e 64 20 3d 20 73 3b 0a 20 this->end = s;.
3ef0: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2f return 1;.}..//
3f00: 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 69 }}}.static int i
3f10: 73 50 61 72 61 42 72 65 61 6b 28 50 61 72 73 65 sParaBreak(Parse
3f20: 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 63 r *p){//{{{.. c
3f30: 68 61 72 20 2a 73 20 3d 20 63 72 5f 6e 65 78 74 har *s = cr_next
3f40: 4c 69 6e 65 28 70 2c 20 70 2d 3e 63 75 72 73 6f Line(p, p->curso
3f50: 72 29 3b 0a 20 20 69 66 20 28 21 70 2d 3e 6c 69 r);. if (!p->li
3f60: 6e 65 57 61 73 42 6c 61 6e 6b 29 20 72 65 74 75 neWasBlank) retu
3f70: 72 6e 20 30 3b 0a 0a 20 20 70 2d 3e 63 75 72 73 rn 0;.. p->curs
3f80: 6f 72 20 3d 20 73 3b 0a 20 20 70 2d 3e 74 68 69 or = s;. p->thi
3f90: 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 50 s->kind = KIND_P
3fa0: 41 52 41 5f 42 52 45 41 4b 3b 0a 20 20 72 65 74 ARA_BREAK;. ret
3fb0: 75 72 6e 20 31 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 urn 1;.}.//}}}.s
3fc0: 74 61 74 69 63 20 69 6e 74 20 69 73 48 65 61 64 tatic int isHead
3fd0: 69 6e 67 28 50 61 72 73 65 72 20 2a 70 29 7b 2f ing(Parser *p){/
3fe0: 2f 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 73 20 /{{{.. char *s
3ff0: 3d 20 63 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 = cr_skipBlanks(
4000: 70 2c 20 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 0a p, p->cursor);..
4010: 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20 30 3b int flags = 0;
4020: 0a 20 20 69 6e 74 20 6c 65 76 65 6c 20 3d 20 63 . int level = c
4030: 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 70 2c 20 r_countChars(p,
4040: 73 2c 20 27 3d 27 29 3b 0a 20 20 69 66 20 28 21 s, '=');. if (!
4050: 6c 65 76 65 6c 29 20 72 65 74 75 72 6e 20 30 3b level) return 0;
4060: 0a 0a 20 20 73 20 2b 3d 20 6c 65 76 65 6c 3b 0a .. s += level;.
4070: 0a 20 20 69 66 20 28 73 5b 30 5d 20 3d 3d 20 27 . if (s[0] == '
4080: 3c 27 20 26 26 20 73 5b 31 5d 20 3d 3d 20 27 3e <' && s[1] == '>
4090: 27 29 20 7b 0a 20 20 20 20 66 6c 61 67 73 20 7c ') {. flags |
40a0: 3d 20 46 4c 41 47 5f 43 45 4e 54 45 52 3b 0a 20 = FLAG_CENTER;.
40b0: 20 20 20 73 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 s += 2;. }.
40c0: 20 73 20 3d 20 63 72 5f 73 6b 69 70 42 6c 61 6e s = cr_skipBlan
40d0: 6b 73 28 70 2c 20 73 29 3b 0a 0a 20 20 70 2d 3e ks(p, s);.. p->
40e0: 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 73 3b this->start = s;
40f0: 0a 0a 20 20 73 20 3d 20 63 72 5f 6e 65 78 74 4c .. s = cr_nextL
4100: 69 6e 65 28 70 2c 20 73 29 3b 0a 20 20 63 68 61 ine(p, s);. cha
4110: 72 20 2a 7a 20 3d 20 73 3b 0a 0a 20 20 69 66 20 r *z = s;.. if
4120: 28 73 5b 2d 31 5d 20 3d 3d 20 27 5c 6e 27 29 20 (s[-1] == '\n')
4130: 73 2d 2d 3b 0a 20 20 77 68 69 6c 65 28 73 5b 2d s--;. while(s[-
4140: 31 5d 20 3d 3d 20 27 20 27 20 7c 7c 20 73 5b 2d 1] == ' ' || s[-
4150: 31 5d 3d 3d 27 5c 74 27 29 20 73 2d 2d 3b 0a 20 1]=='\t') s--;.
4160: 20 77 68 69 6c 65 28 73 5b 2d 31 5d 20 3d 3d 20 while(s[-1] ==
4170: 27 3d 27 20 29 20 73 2d 2d 3b 0a 20 20 69 66 20 '=' ) s--;. if
4180: 28 70 2d 3e 74 68 69 73 2d 3e 73 74 61 72 74 20 (p->this->start
4190: 3c 20 73 29 7b 0a 20 20 20 20 70 2d 3e 63 75 72 < s){. p->cur
41a0: 73 6f 72 20 3d 20 7a 3b 0a 20 20 20 20 70 2d 3e sor = z;. p->
41b0: 74 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e this->kind = KIN
41c0: 44 5f 48 45 41 44 49 4e 47 3b 0a 20 20 20 20 70 D_HEADING;. p
41d0: 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d 20 73 3b ->this->end = s;
41e0: 0a 20 20 20 20 70 2d 3e 74 68 69 73 2d 3e 6c 65 . p->this->le
41f0: 76 65 6c 20 3d 20 6c 65 76 65 6c 3b 0a 20 20 20 vel = level;.
4200: 20 70 2d 3e 74 68 69 73 2d 3e 66 6c 61 67 73 20 p->this->flags
4210: 7c 3d 20 66 6c 61 67 73 3b 0a 20 20 20 20 72 65 |= flags;. re
4220: 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 turn 1;. }. re
4230: 74 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a turn 0;.}.//}}}.
4240: 73 74 61 74 69 63 20 69 6e 74 20 69 73 48 6f 72 static int isHor
4250: 69 7a 6f 6e 74 61 6c 52 75 6c 65 28 50 61 72 73 izontalRule(Pars
4260: 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 er *p){//{{{..
4270: 63 68 61 72 20 2a 73 20 3d 20 63 72 5f 73 6b 69 char *s = cr_ski
4280: 70 42 6c 61 6e 6b 73 28 70 2c 20 70 2d 3e 63 75 pBlanks(p, p->cu
4290: 72 73 6f 72 29 3b 0a 0a 20 20 69 6e 74 20 6c 65 rsor);.. int le
42a0: 76 65 6c 20 3d 20 63 72 5f 63 6f 75 6e 74 43 68 vel = cr_countCh
42b0: 61 72 73 28 70 2c 20 73 2c 20 27 2d 27 29 3b 0a ars(p, s, '-');.
42c0: 0a 20 20 69 66 20 20 28 6c 65 76 65 6c 20 3c 20 . if (level <
42d0: 34 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 73 4) return 0;. s
42e0: 20 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 = cr_nextLine(p
42f0: 2c 20 73 20 2b 20 6c 65 76 65 6c 29 3b 0a 20 20 , s + level);.
4300: 69 66 20 28 21 70 2d 3e 6c 69 6e 65 57 61 73 42 if (!p->lineWasB
4310: 6c 61 6e 6b 29 20 72 65 74 75 72 6e 20 30 3b 0a lank) return 0;.
4320: 0a 20 20 70 2d 3e 63 75 72 73 6f 72 20 3d 20 73 . p->cursor = s
4330: 3b 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e ;. p->this->kin
4340: 64 20 3d 20 4b 49 4e 44 5f 48 4f 52 49 5a 4f 4e d = KIND_HORIZON
4350: 54 41 4c 5f 52 55 4c 45 3b 0a 0a 20 20 72 65 74 TAL_RULE;.. ret
4360: 75 72 6e 20 31 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 urn 1;.}.//}}}.s
4370: 74 61 74 69 63 20 69 6e 74 20 69 73 4c 69 73 74 tatic int isList
4380: 49 74 65 6d 28 50 61 72 73 65 72 20 2a 70 29 7b Item(Parser *p){
4390: 2f 2f 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 73 //{{{.. char *s
43a0: 20 3d 20 63 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 = cr_skipBlanks
43b0: 28 70 2c 20 70 2d 3e 63 75 72 73 6f 72 29 3b 0a (p, p->cursor);.
43c0: 0a 20 20 69 6e 74 20 6c 65 76 65 6c 20 3d 20 63 . int level = c
43d0: 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 70 2c 20 r_countChars(p,
43e0: 73 2c 20 27 23 27 29 3b 0a 20 20 69 66 20 28 21 s, '#');. if (!
43f0: 6c 65 76 65 6c 29 20 6c 65 76 65 6c 20 3d 20 63 level) level = c
4400: 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 70 2c 20 r_countChars(p,
4410: 73 2c 20 27 2a 27 29 3b 0a 0a 20 20 69 66 20 28 s, '*');.. if (
4420: 20 21 6c 65 76 65 6c 29 20 72 65 74 75 72 6e 20 !level) return
4430: 30 3b 0a 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 6b 0;.. p->this->k
4440: 69 6e 64 20 3d 20 28 73 5b 30 5d 20 3d 3d 20 27 ind = (s[0] == '
4450: 23 27 29 20 3f 20 4b 49 4e 44 5f 4f 52 44 45 52 #') ? KIND_ORDER
4460: 45 44 5f 4c 49 53 54 20 3a 20 4b 49 4e 44 5f 55 ED_LIST : KIND_U
4470: 4e 4f 52 44 45 52 45 44 5f 4c 49 53 54 3b 0a 20 NORDERED_LIST;.
4480: 20 70 2d 3e 74 68 69 73 2d 3e 6c 65 76 65 6c 20 p->this->level
4490: 3d 20 6c 65 76 65 6c 3b 0a 0a 20 20 73 20 3d 20 = level;.. s =
44a0: 63 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c cr_skipBlanks(p,
44b0: 20 73 20 2b 20 6c 65 76 65 6c 29 3b 0a 20 20 70 s + level);. p
44c0: 2d 3e 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 ->this->start =
44d0: 73 3b 0a 0a 20 20 73 20 3d 20 63 72 5f 6e 65 78 s;.. s = cr_nex
44e0: 74 4c 69 6e 65 28 70 2c 20 73 29 3b 0a 20 20 69 tLine(p, s);. i
44f0: 66 20 28 70 2d 3e 6c 69 6e 65 57 61 73 42 6c 61 f (p->lineWasBla
4500: 6e 6b 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 nk) return 0;..
4510: 20 69 66 20 28 63 72 5f 61 64 64 4c 69 73 74 49 if (cr_addListI
4520: 74 65 6d 28 70 2c 20 70 2d 3e 74 68 69 73 29 29 tem(p, p->this))
4530: 7b 0a 20 20 20 20 70 2d 3e 63 75 72 73 6f 72 20 {. p->cursor
4540: 3d 20 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d = p->this->end =
4550: 20 73 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 s;. return 1
4560: 3b 0a 20 20 7d 0a 20 20 70 2d 3e 74 68 69 73 2d ;. }. p->this-
4570: 3e 6b 69 6e 64 20 3d 20 30 3b 0a 20 20 72 65 74 >kind = 0;. ret
4580: 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 urn 0;.}.//}}}.s
4590: 74 61 74 69 63 20 69 6e 74 20 69 73 54 61 62 6c tatic int isTabl
45a0: 65 28 50 61 72 73 65 72 20 2a 70 29 7b 2f 2f 7b e(Parser *p){//{
45b0: 7b 7b 0a 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 73 {{.. p->this->s
45c0: 74 61 72 74 20 3d 20 70 2d 3e 63 75 72 73 6f 72 tart = p->cursor
45d0: 3b 0a 20 20 63 68 61 72 20 2a 73 20 3d 20 63 72 ;. char *s = cr
45e0: 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 70 _skipBlanks(p, p
45f0: 2d 3e 63 75 72 73 6f 72 29 3b 0a 20 20 69 66 20 ->cursor);. if
4600: 28 73 5b 30 5d 20 21 3d 20 27 7c 27 29 20 72 65 (s[0] != '|') re
4610: 74 75 72 6e 20 30 3b 0a 20 20 73 20 2b 3d 31 3b turn 0;. s +=1;
4620: 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 . p->this->kind
4630: 20 3d 20 4b 49 4e 44 5f 54 41 42 4c 45 3b 0a 0a = KIND_TABLE;..
4640: 0a 20 20 2f 2f 70 2d 3e 63 75 72 73 6f 72 20 3d . //p->cursor =
4650: 20 20 20 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 p->this->end
4660: 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c = cr_nextLine(p,
4670: 20 73 29 3b 0a 20 20 4e 6f 64 65 20 2a 72 6f 77 s);. Node *row
4680: 3b 0a 20 20 4e 6f 64 65 20 2a 74 61 69 6c 20 3d ;. Node *tail =
4690: 20 4e 55 4c 4c 3b 0a 0a 20 20 77 68 69 6c 65 20 NULL;.. while
46a0: 28 31 29 20 7b 0a 0a 20 20 20 20 72 6f 77 20 3d (1) {.. row =
46b0: 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 3b 0a 20 20 pool_new(p);.
46c0: 20 20 72 6f 77 2d 3e 6b 69 6e 64 20 3d 20 4b 49 row->kind = KI
46d0: 4e 44 5f 54 41 42 4c 45 5f 52 4f 57 3b 0a 0a 20 ND_TABLE_ROW;..
46e0: 20 20 20 69 66 20 28 74 61 69 6c 29 20 20 20 74 if (tail) t
46f0: 61 69 6c 20 3d 20 74 61 69 6c 2d 3e 6e 65 78 74 ail = tail->next
4700: 20 3d 20 72 6f 77 3b 0a 20 20 20 20 65 6c 73 65 = row;. else
4710: 20 70 2d 3e 74 68 69 73 2d 3e 63 68 69 6c 64 72 p->this->childr
4720: 65 6e 20 3d 20 74 61 69 6c 20 3d 20 72 6f 77 3b en = tail = row;
4730: 0a 0a 20 20 20 20 72 6f 77 2d 3e 73 74 61 72 74 .. row->start
4740: 20 3d 20 73 3b 0a 20 20 20 20 70 2d 3e 63 75 72 = s;. p->cur
4750: 73 6f 72 20 3d 20 73 20 3d 20 20 20 72 6f 77 2d sor = s = row-
4760: 3e 65 6e 64 20 3d 20 70 2d 3e 74 68 69 73 2d 3e >end = p->this->
4770: 65 6e 64 20 3d 20 63 72 5f 6e 65 78 74 4c 69 6e end = cr_nextLin
4780: 65 28 70 2c 20 73 29 3b 0a 0a 20 20 20 20 69 66 e(p, s);.. if
4790: 20 28 72 6f 77 2d 3e 65 6e 64 5b 2d 31 5d 20 3d (row->end[-1] =
47a0: 3d 20 27 5c 6e 27 29 20 72 6f 77 2d 3e 65 6e 64 = '\n') row->end
47b0: 20 2d 3d 20 31 3b 0a 20 20 20 20 77 68 69 6c 65 -= 1;. while
47c0: 28 72 6f 77 2d 3e 65 6e 64 5b 2d 31 5d 20 3d 3d (row->end[-1] ==
47d0: 20 27 20 27 20 29 20 72 6f 77 2d 3e 65 6e 64 20 ' ' ) row->end
47e0: 2d 3d 20 31 3b 0a 20 20 20 20 69 66 20 28 72 6f -= 1;. if (ro
47f0: 77 2d 3e 65 6e 64 5b 2d 31 5d 20 3d 3d 20 27 7c w->end[-1] == '|
4800: 27 29 20 72 6f 77 2d 3e 65 6e 64 20 2d 3d 20 31 ') row->end -= 1
4810: 3b 0a 0a 20 20 20 20 69 66 20 28 21 2a 73 29 20 ;.. if (!*s)
4820: 62 72 65 61 6b 3b 0a 0a 20 20 20 20 2f 2f 20 62 break;.. // b
4830: 6c 61 6e 6b 73 20 2a 6e 6f 74 2a 20 6e 6f 72 6d lanks *not* norm
4840: 61 6c 69 7a 65 64 0a 20 20 20 20 73 20 3d 20 63 alized. s = c
4850: 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 r_skipBlanks(p,
4860: 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 20 20 20 20 p->cursor);.
4870: 69 66 20 28 73 5b 30 5d 20 21 3d 20 27 7c 27 29 if (s[0] != '|')
4880: 20 62 72 65 61 6b 3b 0a 20 20 20 20 73 2b 2b 3b break;. s++;
4890: 0a 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 .. }. return 1
48a0: 3b 0a 0a 7d 3b 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 ;..};.//}}}.stat
48b0: 69 63 20 69 6e 74 20 69 73 50 61 72 61 67 72 61 ic int isParagra
48c0: 70 68 28 50 61 72 73 65 72 20 2a 70 29 7b 2f 2f ph(Parser *p){//
48d0: 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 73 20 3d {{{.. char *s =
48e0: 20 70 2d 3e 63 75 72 73 6f 72 3b 0a 20 20 70 2d p->cursor;. p-
48f0: 3e 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 73 >this->start = s
4900: 3b 0a 0a 20 20 73 20 3d 20 63 72 5f 6e 65 78 74 ;.. s = cr_next
4910: 4c 69 6e 65 28 70 2c 20 73 29 3b 0a 20 20 70 2d Line(p, s);. p-
4920: 3e 63 75 72 73 6f 72 20 3d 20 70 2d 3e 74 68 69 >cursor = p->thi
4930: 73 2d 3e 65 6e 64 20 3d 20 73 3b 0a 20 20 70 2d s->end = s;. p-
4940: 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 >this->kind = KI
4950: 4e 44 5f 50 41 52 41 47 52 41 50 48 3b 0a 20 20 ND_PARAGRAPH;.
4960: 72 65 74 75 72 6e 20 31 3b 0a 0a 7d 0a 2f 2f 7d return 1;..}.//}
4970: 7d 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 }}.static void c
4980: 72 5f 70 61 72 73 65 28 50 61 72 73 65 72 20 2a r_parse(Parser *
4990: 70 2c 20 63 68 61 72 2a 20 7a 29 7b 2f 2f 7b 7b p, char* z){//{{
49a0: 7b 0a 0a 20 20 70 2d 3e 70 72 65 76 69 6f 75 73 {.. p->previous
49b0: 20 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 3b 0a = pool_new(p);.
49c0: 20 20 70 2d 3e 70 72 65 76 69 6f 75 73 2d 3e 6b p->previous->k
49d0: 69 6e 64 20 3d 20 4b 49 4e 44 5f 50 41 52 41 5f ind = KIND_PARA_
49e0: 42 52 45 41 4b 3b 0a 0a 20 20 70 2d 3e 74 68 69 BREAK;.. p->thi
49f0: 73 20 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 3b s = pool_new(p);
4a00: 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 . p->this->kind
4a10: 20 3d 20 4b 49 4e 44 5f 50 41 52 41 5f 42 52 45 = KIND_PARA_BRE
4a20: 41 4b 3b 0a 0a 20 20 70 2d 3e 69 6e 4c 69 6e 6b AK;.. p->inLink
4a30: 20 3d 20 30 3b 0a 20 20 70 2d 3e 69 6e 54 61 62 = 0;. p->inTab
4a40: 6c 65 20 3d 20 30 3b 0a 0a 20 20 70 2d 3e 63 75 le = 0;.. p->cu
4a50: 72 73 6f 72 20 3d 20 7a 3b 0a 20 20 70 2d 3e 6c rsor = z;. p->l
4a60: 69 73 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20 70 2d ist = NULL;. p-
4a70: 3e 69 73 74 61 63 6b 20 3d 20 4e 55 4c 4c 3b 0a >istack = NULL;.
4a80: 0a 20 20 77 68 69 6c 65 20 28 70 2d 3e 63 75 72 . while (p->cur
4a90: 73 6f 72 5b 30 5d 29 20 7b 0a 0a 20 20 20 20 77 sor[0]) {.. w
4aa0: 68 69 6c 65 20 28 31 29 7b 0a 0a 20 20 20 20 20 hile (1){..
4ab0: 20 2f 2f 20 6d 75 73 74 20 62 65 20 66 69 72 73 // must be firs
4ac0: 74 0a 20 20 20 20 20 20 69 66 20 28 69 73 4e 6f t. if (isNo
4ad0: 57 69 6b 69 42 6c 6f 63 6b 28 70 29 29 20 62 72 WikiBlock(p)) br
4ae0: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 20 28 69 eak;. if (i
4af0: 73 50 61 72 61 42 72 65 61 6b 28 70 29 29 20 20 sParaBreak(p))
4b00: 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 2f break;.. /
4b10: 2f 20 6f 72 64 65 72 20 6e 6f 74 20 69 6d 70 6f / order not impo
4b20: 72 74 61 6e 74 0a 20 20 20 20 20 20 69 66 20 28 rtant. if (
4b30: 69 73 48 65 61 64 69 6e 67 28 70 29 29 20 62 72 isHeading(p)) br
4b40: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 20 28 69 eak;. if (i
4b50: 73 48 6f 72 69 7a 6f 6e 74 61 6c 52 75 6c 65 28 sHorizontalRule(
4b60: 70 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 p)) break;.
4b70: 20 69 66 20 28 69 73 4c 69 73 74 49 74 65 6d 28 if (isListItem(
4b80: 70 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 p)) break;.
4b90: 20 69 66 20 28 69 73 54 61 62 6c 65 28 70 29 29 if (isTable(p))
4ba0: 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 2f break;.. /
4bb0: 2f 20 68 65 72 65 20 66 6f 72 20 65 66 66 69 63 / here for effic
4bc0: 69 65 6e 63 79 3f 0a 20 20 20 20 20 20 69 66 20 iency?. if
4bd0: 28 69 73 45 6e 64 57 69 6b 69 4d 61 72 6b 65 72 (isEndWikiMarker
4be0: 28 70 29 29 20 62 72 65 61 6b 3b 0a 0a 20 20 20 (p)) break;..
4bf0: 20 20 20 2f 2f 20 6d 75 73 74 20 62 65 20 6c 61 // must be la
4c00: 73 74 0a 20 20 20 20 20 20 69 66 20 28 69 73 50 st. if (isP
4c10: 61 72 61 67 72 61 70 68 28 70 29 29 3b 20 62 72 aragraph(p)); br
4c20: 65 61 6b 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 64 eak;.. // d
4c30: 6f 68 21 0a 20 20 20 20 20 20 61 73 73 65 72 74 oh!. assert
4c40: 28 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 (0);. }..
4c50: 69 6e 74 20 6b 69 6e 64 20 3d 20 70 2d 3e 74 68 int kind = p->th
4c60: 69 73 2d 3e 6b 69 6e 64 3b 0a 20 20 20 20 69 6e is->kind;. in
4c70: 74 20 70 72 65 76 20 3d 20 70 2d 3e 70 72 65 76 t prev = p->prev
4c80: 69 6f 75 73 2d 3e 6b 69 6e 64 3b 0a 0a 20 20 20 ious->kind;..
4c90: 20 69 66 20 28 6b 69 6e 64 20 26 20 4b 49 4e 44 if (kind & KIND
4ca0: 5f 45 4e 44 5f 57 49 4b 49 5f 4d 41 52 4b 45 52 _END_WIKI_MARKER
4cb0: 29 20 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20 20 ) return;..
4cc0: 69 66 20 28 6b 69 6e 64 20 3d 3d 20 4b 49 4e 44 if (kind == KIND
4cd0: 5f 50 41 52 41 47 52 41 50 48 20 26 26 20 70 72 _PARAGRAPH && pr
4ce0: 65 76 20 26 20 4b 49 4e 44 5f 4c 49 53 54 5f 4f ev & KIND_LIST_O
4cf0: 52 5f 50 41 52 41 47 52 41 50 48 29 20 7b 0a 20 R_PARAGRAPH) {.
4d00: 20 20 20 20 20 20 20 70 2d 3e 70 72 65 76 69 6f p->previo
4d10: 75 73 2d 3e 65 6e 64 20 3d 20 70 2d 3e 74 68 69 us->end = p->thi
4d20: 73 2d 3e 65 6e 64 3b 0a 20 20 20 20 20 20 20 20 s->end;.
4d30: 70 2d 3e 74 68 69 73 20 3d 20 70 6f 6f 6c 5f 6e p->this = pool_n
4d40: 65 77 28 70 29 3b 0a 20 20 20 20 20 20 20 20 63 ew(p);. c
4d50: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 0a ontinue;. }..
4d60: 20 20 20 20 69 66 20 28 20 21 28 6b 69 6e 64 20 if ( !(kind
4d70: 26 20 4b 49 4e 44 5f 4c 49 53 54 20 26 26 20 70 & KIND_LIST && p
4d80: 72 65 76 20 26 20 4b 49 4e 44 5f 4c 49 53 54 29 rev & KIND_LIST)
4d90: 20 29 0a 20 20 20 20 20 20 63 72 5f 72 65 6e 64 ). cr_rend
4da0: 65 72 28 70 2c 20 70 2d 3e 70 72 65 76 69 6f 75 er(p, p->previou
4db0: 73 29 3b 0a 0a 20 20 20 20 70 2d 3e 70 72 65 76 s);.. p->prev
4dc0: 69 6f 75 73 20 3d 20 70 2d 3e 74 68 69 73 3b 0a ious = p->this;.
4dd0: 20 20 20 20 70 2d 3e 74 68 69 73 20 3d 20 70 6f p->this = po
4de0: 6f 6c 5f 6e 65 77 28 70 29 3b 0a 0a 20 20 7d 0a ol_new(p);.. }.
4df0: 7d 0a 2f 2f 7d 7d 7d 0a 0a 2f 2f 7d 7d 7d 0a 0a }.//}}}..//}}}..
4e00: 63 68 61 72 20 2a 77 69 6b 69 5f 72 65 6e 64 65 char *wiki_rende
4e10: 72 5f 63 72 65 6f 6c 65 28 52 65 6e 64 65 72 65 r_creole(Rendere
4e20: 72 20 2a 72 2c 20 63 68 61 72 20 2a 7a 29 7b 0a r *r, char *z){.
4e30: 0a 20 20 50 61 72 73 65 72 20 70 61 72 73 65 72 . Parser parser
4e40: 3b 0a 20 20 50 61 72 73 65 72 20 2a 70 20 3d 20 ;. Parser *p =
4e50: 26 70 61 72 73 65 72 3b 0a 0a 20 20 70 2d 3e 72 &parser;.. p->r
4e60: 20 3d 20 72 3b 0a 20 20 70 2d 3e 69 62 6c 6f 62 = r;. p->iblob
4e70: 20 3d 20 72 2d 3e 70 4f 75 74 3b 0a 0a 20 20 70 = r->pOut;.. p
4e80: 2d 3e 6e 46 72 65 65 20 3d 20 30 3b 0a 20 20 70 ->nFree = 0;. p
4e90: 2d 3e 70 6f 6f 6c 20 3d 20 4e 55 4c 4c 3b 0a 0a ->pool = NULL;..
4ea0: 20 20 63 72 5f 70 61 72 73 65 28 70 2c 20 7a 29 cr_parse(p, z)
4eb0: 3b 0a 0a 20 20 63 72 5f 72 65 6e 64 65 72 28 70 ;.. cr_render(p
4ec0: 2c 20 70 2d 3e 70 72 65 76 69 6f 75 73 29 3b 0a , p->previous);.
4ed0: 0a 20 20 70 6f 6f 6c 5f 66 72 65 65 28 70 29 3b . pool_free(p);
4ee0: 0a 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 63 75 .. return p->cu
4ef0: 72 73 6f 72 3b 0a 0a 7d 0a 0a rsor;..}..