0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20 /*.** Copyright
0010: 28 63 29 20 32 30 30 39 20 52 6f 62 65 72 74 20 (c) 2009 Robert
0020: 4c 65 64 67 65 72 0a 2a 2a 0a 2a 2a 20 7b 7b 7b Ledger.**.** {{{
0030: 20 4c 69 63 65 6e 73 65 0a 2a 2a 0a 2a 2a 20 54 License.**.** T
0040: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 his program is f
0050: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f ree software; yo
0060: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 u can redistribu
0070: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20 te it and/or.**
0080: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20 modify it under
0090: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 the terms of the
00a0: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 GNU General Pub
00b0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 76 lic.** License v
00c0: 65 72 73 69 6f 6e 20 32 20 61 73 20 70 75 62 6c ersion 2 as publ
00d0: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65 ished by the Fre
00e0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 e Software Found
00f0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 ation..**.** Thi
0100: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 s program is dis
0110: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 tributed in the
0120: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c hope that it wil
0130: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 l be useful,.**
0140: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 but WITHOUT ANY
0150: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 WARRANTY; withou
0160: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 t even the impli
0170: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a ed warranty of.*
0180: 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 * MERCHANTABILIT
0190: 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 Y or FITNESS FOR
01a0: 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 A PARTICULAR PU
01b0: 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 20 RPOSE. See the
01c0: 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 50 GNU.** General P
01d0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f ublic License fo
01e0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a r more details..
01f0: 2a 2a 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c 64 **.** You should
0200: 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 61 have received a
0210: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e 55 copy of the GNU
0220: 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 0a General Public.
0230: 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e 67 ** License along
0240: 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72 61 with this libra
0250: 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69 74 ry; if not, writ
0260: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65 65 e to the.** Free
0270: 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 Software Founda
0280: 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20 54 tion, Inc., 59 T
0290: 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53 75 emple Place - Su
02a0: 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73 74 ite 330,.** Bost
02b0: 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31 33 on, MA 02111-13
02c0: 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20 41 07, USA..**.** A
02d0: 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69 6e uthor contact in
02e0: 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 20 formation:.**
02f0: 72 6f 62 65 72 74 40 70 79 74 72 61 73 68 2e 63 robert@pytrash.c
0300: 6f 2e 75 6b 0a 2a 2a 20 20 20 68 74 74 70 3a 2f o.uk.** http:/
0310: 2f 70 79 74 72 61 73 68 2e 63 6f 2e 75 6b 0a 2a /pytrash.co.uk.*
0320: 2a 7d 7d 7d 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a *}}}.***********
0330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0370: 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 ****.**.** This
0380: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f file contains co
0390: 64 65 20 74 6f 20 72 65 6e 64 65 72 20 63 72 65 de to render cre
03a0: 6f 6c 65 20 31 2e 30 20 66 6f 72 6d 61 74 65 64 ole 1.0 formated
03b0: 20 74 65 78 74 20 61 73 20 68 74 6d 6c 2e 0a 2a text as html..*
03c0: 2f 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 /.#include <asse
03d0: 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 22 rt.h>.#include "
03e0: 63 6f 6e 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75 config.h".#inclu
03f0: 64 65 20 22 63 72 65 6f 6c 65 70 61 72 73 65 72 de "creoleparser
0400: 2e 68 22 0a 0a 23 69 66 20 49 4e 54 45 52 46 41 .h"..#if INTERFA
0410: 43 45 0a 23 64 65 66 69 6e 65 20 48 41 56 45 5f CE.#define HAVE_
0420: 4d 41 43 52 4f 5f 45 58 54 45 4e 53 49 4f 4e 53 MACRO_EXTENSIONS
0430: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2f 7b 7b 7b 1.#endif..//{{{
0440: 20 4c 4f 43 41 4c 20 49 4e 54 45 52 46 41 43 45 LOCAL INTERFACE
0450: 0a 23 69 66 20 4c 4f 43 41 4c 5f 49 4e 54 45 52 .#if LOCAL_INTER
0460: 46 41 43 45 0a 0a 23 64 65 66 69 6e 65 20 50 4f FACE..#define PO
0470: 4f 4c 5f 43 48 55 4e 4b 5f 53 49 5a 45 20 31 30 OL_CHUNK_SIZE 10
0480: 30 0a 0a 23 64 65 66 69 6e 65 20 09 4b 49 4e 44 0..#define .KIND
0490: 5f 52 4f 4f 54 20 20 20 20 20 20 20 20 20 20 20 _ROOT
04a0: 20 30 78 30 30 30 30 30 30 31 0a 23 64 65 66 69 0x0000001.#defi
04b0: 6e 65 20 09 4b 49 4e 44 5f 48 4f 52 49 5a 4f 4e ne .KIND_HORIZON
04c0: 54 41 4c 5f 52 55 4c 45 20 30 78 30 30 30 30 30 TAL_RULE 0x00000
04d0: 30 32 0a 23 64 65 66 69 6e 65 20 09 4b 49 4e 44 02.#define .KIND
04e0: 5f 48 45 41 44 49 4e 47 20 20 20 20 20 20 20 20 _HEADING
04f0: 20 30 78 30 30 30 30 30 30 34 0a 23 64 65 66 69 0x0000004.#defi
0500: 6e 65 20 09 4b 49 4e 44 5f 4f 52 44 45 52 45 44 ne .KIND_ORDERED
0510: 5f 4c 49 53 54 20 20 20 20 30 78 30 30 30 30 30 _LIST 0x00000
0520: 30 38 0a 0a 23 64 65 66 69 6e 65 20 09 4b 49 4e 08..#define .KIN
0530: 44 5f 55 4e 4f 52 44 45 52 45 44 5f 4c 49 53 54 D_UNORDERED_LIST
0540: 20 20 30 78 30 30 30 30 30 31 30 0a 23 64 65 66 0x0000010.#def
0550: 69 6e 65 20 09 4b 49 4e 44 5f 50 41 52 41 47 52 ine .KIND_PARAGR
0560: 41 50 48 20 20 20 20 20 20 20 30 78 30 30 30 30 APH 0x0000
0570: 30 32 30 0a 23 64 65 66 69 6e 65 20 09 4b 49 4e 020.#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 09 4b 49 4e 44 5f 4e 4f 5f 57 49 4b ine .KIND_NO_WIK
05b0: 49 5f 42 4c 4f 43 4b 20 20 20 30 78 30 30 30 30 I_BLOCK 0x0000
05c0: 30 38 30 0a 0a 23 64 65 66 69 6e 65 20 09 4b 49 080..#define .KI
05d0: 4e 44 5f 50 41 52 41 5f 42 52 45 41 4b 20 20 20 ND_PARA_BREAK
05e0: 20 20 20 30 78 30 30 30 30 31 30 30 0a 23 64 65 0x0000100.#de
05f0: 66 69 6e 65 20 09 4b 49 4e 44 5f 45 4e 44 5f 57 fine .KIND_END_W
0600: 49 4b 49 5f 4d 41 52 4b 45 52 20 30 78 30 30 30 IKI_MARKER 0x000
0610: 30 32 30 30 0a 0a 23 64 65 66 69 6e 65 20 4b 49 0200..#define KI
0620: 4e 44 5f 42 4f 4c 44 09 09 09 09 09 09 30 78 30 ND_BOLD......0x0
0630: 30 30 30 34 30 30 0a 23 64 65 66 69 6e 65 20 4b 000400.#define K
0640: 49 4e 44 5f 49 54 41 4c 49 43 09 09 09 09 09 09 IND_ITALIC......
0650: 30 78 30 30 30 30 38 30 30 0a 23 64 65 66 69 6e 0x0000800.#defin
0660: 65 20 4b 49 4e 44 5f 53 55 50 45 52 53 43 52 49 e KIND_SUPERSCRI
0670: 50 54 09 09 09 30 78 30 30 30 31 30 30 30 0a 23 PT...0x0001000.#
0680: 64 65 66 69 6e 65 20 4b 49 4e 44 5f 53 55 42 53 define KIND_SUBS
0690: 43 52 49 50 54 09 09 09 09 30 78 30 30 30 32 30 CRIPT....0x00020
06a0: 30 30 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 00.#define KIND_
06b0: 4d 4f 4e 4f 53 50 41 43 45 44 09 09 09 09 30 78 MONOSPACED....0x
06c0: 30 30 30 34 30 30 30 0a 23 64 65 66 69 6e 65 20 0004000.#define
06d0: 4b 49 4e 44 5f 42 52 45 41 4b 09 09 09 09 09 09 KIND_BREAK......
06e0: 30 78 30 30 30 38 30 30 30 0a 0a 23 64 65 66 69 0x0008000..#defi
06f0: 6e 65 20 4b 49 4e 44 5f 54 41 42 4c 45 5f 52 4f ne KIND_TABLE_RO
0700: 57 09 09 09 09 30 78 30 30 31 30 30 30 30 0a 0a W....0x0010000..
0710: 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 4d 41 52 #define KIND_MAR
0720: 4b 45 52 0a 0a 73 74 72 75 63 74 20 4e 6f 64 65 KER..struct Node
0730: 20 7b 2f 2f 7b 7b 7b 0a 0a 09 63 68 61 72 20 2a {//{{{...char *
0740: 73 74 61 72 74 3b 0a 09 63 68 61 72 20 2a 65 6e start;..char *en
0750: 64 3b 0a 0a 09 69 6e 74 20 6b 69 6e 64 3b 0a 09 d;...int kind;..
0760: 69 6e 74 20 6c 65 76 65 6c 3b 0a 0a 09 4e 6f 64 int level;...Nod
0770: 65 20 2a 70 61 72 65 6e 74 3b 0a 09 4e 6f 64 65 e *parent;..Node
0780: 20 2a 6e 65 78 74 3b 0a 09 4e 6f 64 65 20 2a 63 *next;..Node *c
0790: 68 69 6c 64 72 65 6e 3b 0a 0a 7d 3b 0a 2f 2f 7d hildren;..};.//}
07a0: 7d 7d 0a 73 74 72 75 63 74 20 4e 6f 64 65 50 6f }}.struct NodePo
07b0: 6f 6c 20 7b 2f 2f 7b 7b 7b 0a 09 4e 6f 64 65 50 ol {//{{{..NodeP
07c0: 6f 6f 6c 20 2a 6e 65 78 74 3b 0a 09 4e 6f 64 65 ool *next;..Node
07d0: 20 61 5b 50 4f 4f 4c 5f 43 48 55 4e 4b 5f 53 49 a[POOL_CHUNK_SI
07e0: 5a 45 5d 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 72 ZE];.}.//}}}.str
07f0: 75 63 74 20 50 61 72 73 65 72 20 7b 2f 2f 7b 7b uct Parser {//{{
0800: 7b 0a 0a 09 42 6c 6f 62 20 2a 70 4f 75 74 3b 20 {...Blob *pOut;
0810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0820: 2f 2a 20 4f 75 74 70 75 74 20 61 70 70 65 6e 64 /* Output append
0830: 65 64 20 74 6f 20 74 68 69 73 20 62 6c 6f 62 20 ed to this blob
0840: 2a 2f 0a 09 52 65 6e 64 65 72 65 72 20 2a 72 3b */..Renderer *r;
0850: 0a 0a 09 4e 6f 64 65 50 6f 6f 6c 20 2a 70 6f 6f ...NodePool *poo
0860: 6c 3b 0a 09 69 6e 74 20 6e 46 72 65 65 3b 0a 0a l;..int nFree;..
0870: 20 20 4e 6f 64 65 20 2a 74 68 69 73 3b 0a 09 4e Node *this;..N
0880: 6f 64 65 20 2a 70 72 65 76 69 6f 75 73 3b 0a 09 ode *previous;..
0890: 4e 6f 64 65 20 2a 6c 69 73 74 3b 0a 0a 09 63 68 Node *list;...ch
08a0: 61 72 20 2a 63 75 72 73 6f 72 3b 0a 0a 09 69 6e ar *cursor;...in
08b0: 74 20 6c 69 6e 65 57 61 73 42 6c 61 6e 6b 3b 0a t lineWasBlank;.
08c0: 09 69 6e 74 20 63 68 61 72 43 6f 75 6e 74 3b 0a .int charCount;.
08d0: 0a 09 4e 6f 64 65 20 2a 69 74 65 6d 3b 0a 09 4e ..Node *item;..N
08e0: 6f 64 65 20 2a 69 73 74 61 63 6b 3b 0a 09 63 68 ode *istack;..ch
08f0: 61 72 20 2a 69 63 75 72 73 6f 72 3b 0a 09 63 68 ar *icursor;..ch
0900: 61 72 20 2a 69 65 6e 64 3b 0a 0a 09 69 6e 74 20 ar *iend;...int
0910: 69 6e 4c 69 6e 6b 3b 0a 09 69 6e 74 20 69 6e 54 inLink;..int inT
0920: 61 62 6c 65 3b 0a 09 69 6e 74 20 69 65 73 63 3b able;..int iesc;
0930: 0a 0a 09 42 6c 6f 62 20 2a 69 62 6c 6f 62 3b 0a ...Blob *iblob;.
0940: 0a 0a 0a 0a 7d 3b 0a 2f 2f 7d 7d 7d 0a 0a 2f 2f ....};.//}}}..//
0950: 7d 7d 7d 0a 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e }}}..#endif..con
0960: 73 74 20 69 6e 74 20 4b 49 4e 44 5f 4c 49 53 54 st int KIND_LIST
0970: 20 3d 20 28 4b 49 4e 44 5f 55 4e 4f 52 44 45 52 = (KIND_UNORDER
0980: 45 44 5f 4c 49 53 54 20 7c 20 4b 49 4e 44 5f 4f ED_LIST | KIND_O
0990: 52 44 45 52 45 44 5f 4c 49 53 54 29 3b 0a 63 6f RDERED_LIST);.co
09a0: 6e 73 74 20 69 6e 74 20 4b 49 4e 44 5f 4c 49 53 nst int KIND_LIS
09b0: 54 5f 4f 52 5f 50 41 52 41 47 52 41 50 48 20 3d T_OR_PARAGRAPH =
09c0: 20 28 4b 49 4e 44 5f 50 41 52 41 47 52 41 50 48 (KIND_PARAGRAPH
09d0: 20 7c 20 4b 49 4e 44 5f 55 4e 4f 52 44 45 52 45 | KIND_UNORDERE
09e0: 44 5f 4c 49 53 54 20 7c 20 4b 49 4e 44 5f 4f 52 D_LIST | KIND_OR
09f0: 44 45 52 45 44 5f 4c 49 53 54 29 3b 0a 2f 2f 7d DERED_LIST);.//}
0a00: 7d 7d 0a 0a 2f 2f 7b 7b 7b 20 50 4f 4f 4c 20 4d }}..//{{{ POOL M
0a10: 41 4e 41 47 45 4d 45 4e 54 0a 73 74 61 74 69 63 ANAGEMENT.static
0a20: 20 4e 6f 64 65 20 2a 70 6f 6f 6c 5f 6e 65 77 28 Node *pool_new(
0a30: 50 61 72 73 65 72 20 2a 70 29 7b 0a 0a 09 69 66 Parser *p){...if
0a40: 20 28 20 70 2d 3e 70 6f 6f 6c 20 3d 3d 20 4e 55 ( p->pool == NU
0a50: 4c 4c 20 7c 7c 20 70 2d 3e 6e 46 72 65 65 20 3d LL || p->nFree =
0a60: 3d 20 30 29 7b 0a 0a 09 09 4e 6f 64 65 50 6f 6f = 0){....NodePoo
0a70: 6c 20 2a 74 65 6d 70 20 3d 20 70 2d 3e 70 6f 6f l *temp = p->poo
0a80: 6c 3b 0a 0a 09 09 70 2d 3e 70 6f 6f 6c 20 3d 20 l;....p->pool =
0a90: 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 4e 6f malloc(sizeof(No
0aa0: 64 65 50 6f 6f 6c 29 29 3b 0a 09 09 69 66 28 20 dePool));...if(
0ab0: 70 2d 3e 70 6f 6f 6c 20 3d 3d 20 4e 55 4c 4c 20 p->pool == NULL
0ac0: 29 20 66 6f 73 73 69 6c 5f 70 61 6e 69 63 28 22 ) fossil_panic("
0ad0: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b out of memory");
0ae0: 0a 0a 09 09 70 2d 3e 70 6f 6f 6c 2d 3e 6e 65 78 ....p->pool->nex
0af0: 74 20 3d 20 74 65 6d 70 3b 0a 09 09 70 2d 3e 6e t = temp;...p->n
0b00: 46 72 65 65 20 3d 20 50 4f 4f 4c 5f 43 48 55 4e Free = POOL_CHUN
0b10: 4b 5f 53 49 5a 45 3b 0a 09 7d 0a 09 70 2d 3e 6e K_SIZE;..}..p->n
0b20: 46 72 65 65 20 2d 3d 20 31 3b 0a 09 4e 6f 64 65 Free -= 1;..Node
0b30: 20 2a 6e 6f 64 65 20 3d 20 26 28 70 2d 3e 70 6f *node = &(p->po
0b40: 6f 6c 2d 3e 61 5b 70 2d 3e 6e 46 72 65 65 5d 29 ol->a[p->nFree])
0b50: 3b 0a 09 6d 65 6d 73 65 74 28 6e 6f 64 65 2c 20 ;..memset(node,
0b60: 30 2c 20 73 69 7a 65 6f 66 28 2a 6e 6f 64 65 29 0, sizeof(*node)
0b70: 29 3b 0a 0a 09 72 65 74 75 72 6e 20 6e 6f 64 65 );...return node
0b80: 3b 0a 7d 0a 0a 0a 73 74 61 74 69 63 20 76 6f 69 ;.}...static voi
0b90: 64 20 70 6f 6f 6c 5f 66 72 65 65 28 50 61 72 73 d pool_free(Pars
0ba0: 65 72 20 2a 70 29 7b 0a 0a 09 4e 6f 64 65 50 6f er *p){...NodePo
0bb0: 6f 6c 20 2a 74 65 6d 70 3b 0a 0a 09 77 68 69 6c ol *temp;...whil
0bc0: 65 20 28 70 2d 3e 70 6f 6f 6c 20 21 3d 20 4e 55 e (p->pool != NU
0bd0: 4c 4c 29 7b 0a 09 09 74 65 6d 70 20 3d 20 70 2d LL){...temp = p-
0be0: 3e 70 6f 6f 6c 3b 0a 09 09 70 2d 3e 70 6f 6f 6c >pool;...p->pool
0bf0: 20 3d 20 74 65 6d 70 2d 3e 6e 65 78 74 3b 0a 09 = temp->next;..
0c00: 09 66 72 65 65 28 74 65 6d 70 29 3b 0a 09 7d 0a .free(temp);..}.
0c10: 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 2f 2f 7b 7b 7b 20 .}.//}}}..//{{{
0c20: 55 74 69 6c 69 74 79 20 4d 65 74 68 6f 64 73 0a Utility Methods.
0c30: 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 63 72 .static char *cr
0c40: 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 50 61 72 73 _skipBlanks(Pars
0c50: 65 72 20 2a 70 2c 20 63 68 61 72 2a 20 7a 29 7b er *p, char* z){
0c60: 2f 2f 7b 7b 7b 0a 09 63 68 61 72 20 2a 73 20 3d //{{{..char *s =
0c70: 20 7a 3b 0a 09 77 68 69 6c 65 20 28 7a 5b 30 5d z;..while (z[0]
0c80: 20 3d 3d 20 27 20 27 20 7c 7c 20 7a 5b 30 5d 20 == ' ' || z[0]
0c90: 3d 3d 20 27 5c 74 27 29 20 7a 2b 2b 3b 0a 09 70 == '\t') z++;..p
0ca0: 2d 3e 63 68 61 72 43 6f 75 6e 74 20 3d 20 7a 20 ->charCount = z
0cb0: 2d 20 73 3b 0a 09 72 65 74 75 72 6e 20 7a 3b 0a - s;..return z;.
0cc0: 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 }.//}}}.static i
0cd0: 6e 74 20 63 72 5f 63 6f 75 6e 74 42 6c 61 6e 6b nt cr_countBlank
0ce0: 73 28 50 61 72 73 65 72 20 2a 70 2c 20 63 68 61 s(Parser *p, cha
0cf0: 72 2a 20 7a 29 7b 2f 2f 7b 7b 7b 0a 09 63 72 5f r* z){//{{{..cr_
0d00: 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 7a 29 skipBlanks(p, z)
0d10: 3b 0a 09 72 65 74 75 72 6e 20 70 2d 3e 63 68 61 ;..return p->cha
0d20: 72 43 6f 75 6e 74 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a rCount;.}.//}}}.
0d30: 73 74 61 74 69 63 20 63 68 61 72 20 2a 63 72 5f static char *cr_
0d40: 73 6b 69 70 43 68 61 72 73 28 50 61 72 73 65 72 skipChars(Parser
0d50: 20 2a 70 2c 20 63 68 61 72 20 2a 7a 2c 20 63 68 *p, char *z, ch
0d60: 61 72 20 63 29 7b 2f 2f 7b 7b 7b 0a 09 63 68 61 ar c){//{{{..cha
0d70: 72 20 2a 73 20 3d 20 7a 3b 0a 09 77 68 69 6c 65 r *s = z;..while
0d80: 20 28 7a 5b 30 5d 20 3d 3d 20 63 29 20 7a 2b 2b (z[0] == c) z++
0d90: 3b 0a 09 70 2d 3e 63 68 61 72 43 6f 75 6e 74 20 ;..p->charCount
0da0: 3d 20 7a 20 2d 20 73 3b 0a 09 72 65 74 75 72 6e = z - s;..return
0db0: 20 7a 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 z;.}.//}}}.stat
0dc0: 69 63 20 69 6e 74 20 63 72 5f 63 6f 75 6e 74 43 ic int cr_countC
0dd0: 68 61 72 73 28 50 61 72 73 65 72 20 2a 70 2c 20 hars(Parser *p,
0de0: 63 68 61 72 20 2a 7a 2c 20 63 68 61 72 20 63 29 char *z, char c)
0df0: 7b 2f 2f 7b 7b 7b 0a 09 63 72 5f 73 6b 69 70 43 {//{{{..cr_skipC
0e00: 68 61 72 73 28 70 2c 20 7a 2c 20 63 29 3b 0a 09 hars(p, z, c);..
0e10: 72 65 74 75 72 6e 20 70 2d 3e 63 68 61 72 43 6f return p->charCo
0e20: 75 6e 74 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 unt;.}.//}}}.sta
0e30: 74 69 63 20 63 68 61 72 20 2a 63 72 5f 6e 65 78 tic char *cr_nex
0e40: 74 4c 69 6e 65 28 50 61 72 73 65 72 20 2a 70 2c tLine(Parser *p,
0e50: 20 63 68 61 72 20 2a 7a 29 7b 2f 2f 7b 7b 7b 0a char *z){//{{{.
0e60: 0a 09 70 2d 3e 6c 69 6e 65 57 61 73 42 6c 61 6e ..p->lineWasBlan
0e70: 6b 20 3d 20 31 3b 0a 0a 09 77 68 69 6c 65 20 28 k = 1;...while (
0e80: 31 29 7b 0a 0a 09 09 73 77 69 74 63 68 20 28 7a 1){....switch (z
0e90: 5b 30 5d 29 7b 0a 0a 09 09 09 63 61 73 65 20 27 [0]){.....case '
0ea0: 5c 72 27 3a 0a 09 09 09 09 69 66 20 28 7a 5b 31 \r':.....if (z[1
0eb0: 5d 20 3d 3d 20 27 5c 6e 27 29 20 7b 0a 09 09 09 ] == '\n') {....
0ec0: 09 09 7a 5b 30 5d 20 3d 20 27 20 27 3b 0a 09 09 ..z[0] = ' ';...
0ed0: 09 09 09 72 65 74 75 72 6e 20 7a 20 2b 20 32 3b ...return z + 2;
0ee0: 0a 09 09 09 09 7d 0a 09 09 09 09 7a 5b 30 5d 20 .....}.....z[0]
0ef0: 3d 20 27 5c 6e 27 3b 0a 09 09 09 09 72 65 74 75 = '\n';.....retu
0f00: 72 6e 20 7a 20 2b 20 31 3b 0a 0a 09 09 09 63 61 rn z + 1;.....ca
0f10: 73 65 27 5c 6e 27 3a 0a 09 09 09 09 72 65 74 75 se'\n':.....retu
0f20: 72 6e 20 7a 20 2b 20 31 3b 0a 0a 09 09 09 63 61 rn z + 1;.....ca
0f30: 73 65 20 27 5c 74 27 3a 0a 09 09 09 09 7a 5b 30 se '\t':.....z[0
0f40: 5d 20 3d 20 27 20 27 3b 0a 09 09 09 09 7a 2b 2b ] = ' ';.....z++
0f50: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a 09 09 ;.....break;....
0f60: 09 63 61 73 65 20 27 20 27 3a 0a 09 09 09 09 7a .case ' ':.....z
0f70: 2b 2b 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a ++;.....break;..
0f80: 09 09 09 63 61 73 65 20 27 5c 30 27 3a 0a 09 09 ...case '\0':...
0f90: 09 09 72 65 74 75 72 6e 20 7a 3b 0a 0a 09 09 09 ..return z;.....
0fa0: 64 65 66 61 75 6c 74 3a 0a 09 09 09 09 70 2d 3e default:.....p->
0fb0: 6c 69 6e 65 57 61 73 42 6c 61 6e 6b 20 3d 20 30 lineWasBlank = 0
0fc0: 3b 0a 09 09 09 09 7a 2b 2b 3b 0a 09 09 7d 0a 09 ;.....z++;...}..
0fd0: 7d 0a 7d 0a 2f 2f 7d 7d 7d 0a 2f 2f 7d 7d 7d 0a }.}.//}}}.//}}}.
0fe0: 0a 2f 2f 7b 7b 7b 20 49 4e 4c 49 4e 45 20 50 41 .//{{{ INLINE PA
0ff0: 52 53 45 52 0a 0a 73 74 61 74 69 63 20 69 6e 74 RSER..static int
1000: 20 63 72 5f 69 73 45 73 63 28 50 61 72 73 65 72 cr_isEsc(Parser
1010: 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 09 69 66 20 28 *p){//{{{..if (
1020: 70 2d 3e 69 65 73 63 29 7b 0a 09 09 62 6c 6f 62 p->iesc){...blob
1030: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
1040: 2c 20 70 2d 3e 69 63 75 72 73 6f 72 2c 20 31 29 , p->icursor, 1)
1050: 3b 0a 09 09 70 2d 3e 69 65 73 63 20 3d 20 30 3b ;...p->iesc = 0;
1060: 0a 09 09 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d ...p->icursor +=
1070: 20 31 3b 0a 09 09 72 65 74 75 72 6e 20 31 3b 0a 1;...return 1;.
1080: 09 7d 0a 09 72 65 74 75 72 6e 20 30 3b 0a 7d 0a .}..return 0;.}.
1090: 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 //}}}.static int
10a0: 20 63 72 5f 69 4f 70 65 6e 28 50 61 72 73 65 72 cr_iOpen(Parser
10b0: 20 2a 70 2c 20 69 6e 74 20 6b 69 6e 64 29 7b 2f *p, int kind){/
10c0: 2f 7b 7b 7b 0a 0a 09 73 77 69 74 63 68 20 28 6b /{{{...switch (k
10d0: 69 6e 64 29 7b 0a 0a 09 09 63 61 73 65 20 4b 49 ind){....case KI
10e0: 4e 44 5f 42 4f 4c 44 3a 0a 09 09 09 62 6c 6f 62 ND_BOLD:....blob
10f0: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
1100: 2c 20 22 3c 73 74 72 6f 6e 67 3e 22 2c 20 38 29 , "<strong>", 8)
1110: 3b 0a 09 09 09 72 65 74 75 72 6e 20 31 3b 0a 0a ;....return 1;..
1120: 09 09 63 61 73 65 20 4b 49 4e 44 5f 49 54 41 4c ..case KIND_ITAL
1130: 49 43 3a 0a 09 09 09 62 6c 6f 62 5f 61 70 70 65 IC:....blob_appe
1140: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 65 nd(p->iblob, "<e
1150: 6d 3e 22 2c 20 34 29 3b 0a 09 09 09 72 65 74 75 m>", 4);....retu
1160: 72 6e 20 31 3b 0a 0a 09 09 63 61 73 65 20 4b 49 rn 1;....case KI
1170: 4e 44 5f 53 55 50 45 52 53 43 52 49 50 54 3a 0a ND_SUPERSCRIPT:.
1180: 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 ...blob_append(p
1190: 2d 3e 69 62 6c 6f 62 2c 20 22 3c 73 75 70 3e 22 ->iblob, "<sup>"
11a0: 2c 20 35 29 3b 0a 09 09 09 72 65 74 75 72 6e 20 , 5);....return
11b0: 31 3b 0a 0a 09 09 63 61 73 65 20 4b 49 4e 44 5f 1;....case KIND_
11c0: 53 55 42 53 43 52 49 50 54 3a 0a 09 09 09 62 6c SUBSCRIPT:....bl
11d0: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
11e0: 6f 62 2c 20 22 3c 73 75 62 3e 22 2c 20 35 29 3b ob, "<sub>", 5);
11f0: 0a 09 09 09 72 65 74 75 72 6e 20 31 3b 0a 0a 09 ....return 1;...
1200: 09 63 61 73 65 20 4b 49 4e 44 5f 4d 4f 4e 4f 53 .case KIND_MONOS
1210: 50 41 43 45 44 3a 0a 09 09 09 62 6c 6f 62 5f 61 PACED:....blob_a
1220: 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 ppend(p->iblob,
1230: 22 3c 74 74 3e 22 2c 20 34 29 3b 0a 09 09 09 72 "<tt>", 4);....r
1240: 65 74 75 72 6e 20 31 3b 0a 09 7d 0a 09 72 65 74 eturn 1;..}..ret
1250: 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 urn 0;.}.//}}}.s
1260: 74 61 74 69 63 20 69 6e 74 20 63 72 5f 69 43 6c tatic int cr_iCl
1270: 6f 73 65 28 50 61 72 73 65 72 20 2a 70 2c 20 69 ose(Parser *p, i
1280: 6e 74 20 6b 69 6e 64 29 7b 2f 2f 7b 7b 7b 0a 0a nt kind){//{{{..
1290: 09 73 77 69 74 63 68 20 28 6b 69 6e 64 29 7b 0a .switch (kind){.
12a0: 0a 09 09 63 61 73 65 20 4b 49 4e 44 5f 42 4f 4c ...case KIND_BOL
12b0: 44 3a 0a 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e D:....blob_appen
12c0: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 73 d(p->iblob, "</s
12d0: 74 72 6f 6e 67 3e 22 2c 20 39 29 3b 0a 09 09 09 trong>", 9);....
12e0: 72 65 74 75 72 6e 20 31 3b 0a 0a 09 09 63 61 73 return 1;....cas
12f0: 65 20 4b 49 4e 44 5f 49 54 41 4c 49 43 3a 0a 09 e KIND_ITALIC:..
1300: 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d ..blob_append(p-
1310: 3e 69 62 6c 6f 62 2c 20 22 3c 2f 65 6d 3e 22 2c >iblob, "</em>",
1320: 20 35 29 3b 0a 09 09 09 72 65 74 75 72 6e 20 31 5);....return 1
1330: 3b 0a 0a 09 09 63 61 73 65 20 4b 49 4e 44 5f 53 ;....case KIND_S
1340: 55 50 45 52 53 43 52 49 50 54 3a 0a 09 09 09 62 UPERSCRIPT:....b
1350: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 lob_append(p->ib
1360: 6c 6f 62 2c 20 22 3c 2f 73 75 70 3e 22 2c 20 36 lob, "</sup>", 6
1370: 29 3b 0a 09 09 09 72 65 74 75 72 6e 20 31 3b 0a );....return 1;.
1380: 0a 09 09 63 61 73 65 20 4b 49 4e 44 5f 53 55 42 ...case KIND_SUB
1390: 53 43 52 49 50 54 3a 0a 09 09 09 62 6c 6f 62 5f SCRIPT:....blob_
13a0: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c append(p->iblob,
13b0: 20 22 3c 2f 73 75 62 3e 22 2c 20 36 29 3b 0a 09 "</sub>", 6);..
13c0: 09 09 72 65 74 75 72 6e 20 31 3b 0a 0a 09 09 63 ..return 1;....c
13d0: 61 73 65 20 4b 49 4e 44 5f 4d 4f 4e 4f 53 50 41 ase KIND_MONOSPA
13e0: 43 45 44 3a 0a 09 09 09 62 6c 6f 62 5f 61 70 70 CED:....blob_app
13f0: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c end(p->iblob, "<
1400: 2f 74 74 3e 22 2c 20 35 29 3b 0a 09 09 09 72 65 /tt>", 5);....re
1410: 74 75 72 6e 20 31 3b 0a 09 7d 0a 09 72 65 74 75 turn 1;..}..retu
1420: 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 0a rn 0;.}.//}}}...
1430: 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 5f 69 static void cr_i
1440: 4d 61 72 6b 75 70 28 50 61 72 73 65 72 20 2a 70 Markup(Parser *p
1450: 2c 20 69 6e 74 20 6b 69 6e 64 29 7b 2f 2f 7b 7b , int kind){//{{
1460: 7b 0a 0a 09 69 66 20 28 70 2d 3e 69 65 73 63 29 {...if (p->iesc)
1470: 20 7b 0a 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 {...blob_append
1480: 28 70 2d 3e 69 62 6c 6f 62 2c 20 70 2d 3e 69 63 (p->iblob, p->ic
1490: 75 72 73 6f 72 2c 20 31 29 3b 0a 09 09 70 2d 3e ursor, 1);...p->
14a0: 69 63 75 72 73 6f 72 20 2b 3d 31 3b 0a 09 09 70 icursor +=1;...p
14b0: 2d 3e 69 65 73 63 20 3d 30 3b 0a 09 09 72 65 74 ->iesc =0;...ret
14c0: 75 72 6e 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 2d urn;..}...if (p-
14d0: 3e 69 63 75 72 73 6f 72 5b 31 5d 20 21 3d 20 70 >icursor[1] != p
14e0: 2d 3e 69 63 75 72 73 6f 72 5b 30 5d 29 20 7b 0a ->icursor[0]) {.
14f0: 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d ..blob_append(p-
1500: 3e 69 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 >iblob, p->icurs
1510: 6f 72 2c 20 31 29 3b 0a 09 09 70 2d 3e 69 63 75 or, 1);...p->icu
1520: 72 73 6f 72 20 2b 3d 31 3b 0a 09 09 72 65 74 75 rsor +=1;...retu
1530: 72 6e 3b 0a 09 7d 0a 0a 09 70 2d 3e 69 63 75 72 rn;..}...p->icur
1540: 73 6f 72 20 2b 3d 20 32 3b 0a 0a 09 69 66 20 28 sor += 2;...if (
1550: 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 42 52 45 41 kind & KIND_BREA
1560: 4b 29 20 7b 0a 09 09 09 62 6c 6f 62 5f 61 70 70 K) {....blob_app
1570: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c end(p->iblob, "<
1580: 62 72 20 2f 3e 22 2c 20 36 29 3b 0a 09 09 09 72 br />", 6);....r
1590: 65 74 75 72 6e 3b 0a 09 7d 0a 0a 09 69 66 20 28 eturn;..}...if (
15a0: 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 49 54 41 4c kind & KIND_ITAL
15b0: 49 43 20 26 26 20 70 2d 3e 69 63 75 72 73 6f 72 IC && p->icursor
15c0: 5b 2d 33 5d 20 3d 3d 20 27 3a 27 29 7b 0a 09 09 [-3] == ':'){...
15d0: 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d ..blob_append(p-
15e0: 3e 69 62 6c 6f 62 2c 20 22 2f 2f 22 2c 20 32 29 >iblob, "//", 2)
15f0: 3b 0a 09 09 09 09 72 65 74 75 72 6e 3b 0a 09 7d ;.....return;..}
1600: 0a 0a 09 4e 6f 64 65 20 2a 6e 20 3d 20 70 2d 3e ...Node *n = p->
1610: 69 73 74 61 63 6b 3b 0a 0a 09 69 6e 74 20 66 6f istack;...int fo
1620: 75 6e 64 20 3d 20 30 3b 0a 09 77 68 69 6c 65 20 und = 0;..while
1630: 28 6e 29 20 7b 0a 09 09 69 66 20 28 6e 2d 3e 6b (n) {...if (n->k
1640: 69 6e 64 20 26 20 6b 69 6e 64 29 20 7b 0a 09 09 ind & kind) {...
1650: 09 66 6f 75 6e 64 20 3d 20 31 3b 0a 09 09 09 62 .found = 1;....b
1660: 72 65 61 6b 3b 0a 09 09 7d 0a 09 09 6e 20 3d 20 reak;...}...n =
1670: 6e 2d 3e 6e 65 78 74 3b 0a 09 7d 0a 0a 09 69 66 n->next;..}...if
1680: 20 28 21 66 6f 75 6e 64 29 20 7b 0a 09 09 6e 20 (!found) {...n
1690: 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 3b 0a 09 = pool_new(p);..
16a0: 09 6e 2d 3e 6b 69 6e 64 20 3d 20 6b 69 6e 64 3b .n->kind = kind;
16b0: 0a 09 09 6e 2d 3e 6e 65 78 74 20 3d 20 70 2d 3e ...n->next = p->
16c0: 69 73 74 61 63 6b 3b 0a 09 09 70 2d 3e 69 73 74 istack;...p->ist
16d0: 61 63 6b 20 3d 20 6e 3b 0a 0a 09 09 61 73 73 65 ack = n;....asse
16e0: 72 74 28 63 72 5f 69 4f 70 65 6e 28 70 2c 20 6b rt(cr_iOpen(p, k
16f0: 69 6e 64 29 29 3b 0a 09 09 72 65 74 75 72 6e 3b ind));...return;
1700: 0a 09 7d 3b 0a 0a 09 6e 3d 20 70 2d 3e 69 73 74 ..};...n= p->ist
1710: 61 63 6b 3b 0a 09 77 68 69 6c 65 20 28 6e 29 7b ack;..while (n){
1720: 0a 09 09 70 2d 3e 69 73 74 61 63 6b 20 3d 20 6e ...p->istack = n
1730: 2d 3e 6e 65 78 74 3b 0a 0a 09 09 61 73 73 65 72 ->next;....asser
1740: 74 28 63 72 5f 69 43 6c 6f 73 65 28 70 2c 20 6e t(cr_iClose(p, n
1750: 2d 3e 6b 69 6e 64 29 29 3b 0a 0a 09 09 69 66 20 ->kind));....if
1760: 28 6b 69 6e 64 20 3d 3d 20 6e 2d 3e 6b 69 6e 64 (kind == n->kind
1770: 29 20 72 65 74 75 72 6e 3b 0a 09 09 6e 20 3d 20 ) return;...n =
1780: 70 2d 3e 69 73 74 61 63 6b 3b 0a 09 7d 0a 7d 0a p->istack;..}.}.
1790: 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 //}}}.static int
17a0: 20 63 72 5f 69 4e 6f 57 69 6b 69 28 50 61 72 73 cr_iNoWiki(Pars
17b0: 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 69 er *p){//{{{...i
17c0: 66 20 28 28 70 2d 3e 69 65 6e 64 20 2d 20 70 2d f ((p->iend - p-
17d0: 3e 69 63 75 72 73 6f 72 29 3c 36 29 20 72 65 74 >icursor)<6) ret
17e0: 75 72 6e 20 30 3b 0a 0a 09 69 66 20 28 70 2d 3e urn 0;...if (p->
17f0: 69 63 75 72 73 6f 72 5b 31 5d 21 3d 27 7b 27 20 icursor[1]!='{'
1800: 7c 7c 20 70 2d 3e 69 63 75 72 73 6f 72 5b 32 5d || p->icursor[2]
1810: 21 3d 27 7b 27 29 0a 09 09 72 65 74 75 72 6e 20 !='{')...return
1820: 30 3b 0a 0a 09 63 68 61 72 20 2a 73 20 3d 20 70 0;...char *s = p
1830: 2d 3e 69 63 75 72 73 6f 72 20 2b 20 33 3b 0a 0a ->icursor + 3;..
1840: 09 69 6e 74 20 63 6f 75 6e 74 20 3d 20 70 2d 3e .int count = p->
1850: 69 65 6e 64 20 2d 20 70 2d 3e 69 63 75 72 73 6f iend - p->icurso
1860: 72 20 2d 20 36 3b 0a 09 77 68 69 6c 65 20 28 63 r - 6;..while (c
1870: 6f 75 6e 74 2d 2d 29 7b 0a 09 09 69 66 20 28 73 ount--){...if (s
1880: 5b 30 5d 3d 3d 27 7d 27 20 26 26 20 73 5b 31 5d [0]=='}' && s[1]
1890: 3d 3d 27 7d 27 20 26 26 20 73 5b 32 5d 3d 3d 27 =='}' && s[2]=='
18a0: 7d 27 20 26 26 20 73 5b 33 5d 21 3d 27 7d 27 29 }' && s[3]!='}')
18b0: 7b 0a 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 {....blob_append
18c0: 66 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 74 74 f(p->iblob, "<tt
18d0: 20 73 74 79 6c 65 3d 27 62 61 63 6b 67 72 6f 75 style='backgrou
18e0: 6e 64 3a 79 65 6c 6c 6f 77 27 3e 25 73 3c 2f 74 nd:yellow'>%s</t
18f0: 74 3e 22 2c 20 68 74 6d 6c 69 7a 65 28 70 2d 3e t>", htmlize(p->
1900: 69 63 75 72 73 6f 72 20 2b 20 33 2c 20 73 20 2d icursor + 3, s -
1910: 20 70 2d 3e 69 63 75 72 73 6f 72 2d 33 29 29 3b p->icursor-3));
1920: 0a 09 09 09 70 2d 3e 69 63 75 72 73 6f 72 20 3d ....p->icursor =
1930: 20 73 20 2b 20 33 3b 0a 09 09 09 72 65 74 75 72 s + 3;....retur
1940: 6e 20 31 3b 0a 09 09 7d 0a 09 09 73 2b 2b 3b 0a n 1;...}...s++;.
1950: 09 7d 0a 09 72 65 74 75 72 6e 20 30 3b 0a 7d 0a .}..return 0;.}.
1960: 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e .//}}}.static in
1970: 74 20 63 72 5f 69 49 6d 61 67 65 28 50 61 72 73 t cr_iImage(Pars
1980: 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 69 er *p){//{{{...i
1990: 66 20 28 28 70 2d 3e 69 65 6e 64 20 2d 20 70 2d f ((p->iend - p-
19a0: 3e 69 63 75 72 73 6f 72 29 3c 34 29 20 72 65 74 >icursor)<4) ret
19b0: 75 72 6e 20 30 3b 0a 0a 09 69 66 20 28 70 2d 3e urn 0;...if (p->
19c0: 69 63 75 72 73 6f 72 5b 31 5d 21 3d 27 7b 27 29 icursor[1]!='{')
19d0: 0a 09 09 72 65 74 75 72 6e 20 30 3b 0a 0a 09 63 ...return 0;...c
19e0: 68 61 72 20 2a 73 20 3d 20 70 2d 3e 69 63 75 72 har *s = p->icur
19f0: 73 6f 72 20 2b 20 32 3b 0a 0a 09 69 6e 74 20 63 sor + 2;...int c
1a00: 6f 75 6e 74 20 3d 20 70 2d 3e 69 65 6e 64 20 2d ount = p->iend -
1a10: 20 70 2d 3e 69 63 75 72 73 6f 72 20 2d 20 34 3b p->icursor - 4;
1a20: 0a 09 77 68 69 6c 65 20 28 63 6f 75 6e 74 2d 2d ..while (count--
1a30: 29 7b 0a 09 09 69 66 20 28 73 5b 30 5d 3d 3d 27 ){...if (s[0]=='
1a40: 7d 27 20 26 26 20 73 5b 31 5d 3d 3d 27 7d 27 29 }' && s[1]=='}')
1a50: 7b 0a 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 {....blob_append
1a60: 66 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 73 70 f(p->iblob, "<sp
1a70: 61 6e 20 73 74 79 6c 65 3d 27 63 6f 6c 6f 72 3a an style='color:
1a80: 62 6c 75 65 3b 27 3e 25 73 3c 2f 73 70 61 6e 3e blue;'>%s</span>
1a90: 22 2c 20 68 74 6d 6c 69 7a 65 28 70 2d 3e 69 63 ", htmlize(p->ic
1aa0: 75 72 73 6f 72 2b 32 2c 20 73 20 2d 20 70 2d 3e ursor+2, s - p->
1ab0: 69 63 75 72 73 6f 72 2d 32 29 29 3b 0a 09 09 09 icursor-2));....
1ac0: 70 2d 3e 69 63 75 72 73 6f 72 20 3d 20 73 20 2b p->icursor = s +
1ad0: 20 32 3b 0a 09 09 09 72 65 74 75 72 6e 20 31 3b 2;....return 1;
1ae0: 0a 09 09 7d 0a 09 09 73 2b 2b 3b 0a 09 7d 0a 09 ...}...s++;..}..
1af0: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d return 0;.}.//}}
1b00: 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 5f }.static int cr_
1b10: 69 4d 61 63 72 6f 28 50 61 72 73 65 72 20 2a 70 iMacro(Parser *p
1b20: 29 7b 2f 2f 7b 7b 7b 0a 09 72 65 74 75 72 6e 20 ){//{{{..return
1b30: 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 0;.}.//}}}..stat
1b40: 69 63 20 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 ic void cr_rende
1b50: 72 4c 69 6e 6b 28 50 61 72 73 65 72 20 2a 70 2c rLink(Parser *p,
1b60: 20 63 68 61 72 20 2a 73 2c 20 63 68 61 72 20 2a char *s, char *
1b70: 62 61 72 2c 20 63 68 61 72 20 2a 65 29 7b 2f 2f bar, char *e){//
1b80: 7b 7b 7b 0a 0a 09 69 6e 74 20 74 73 69 7a 65 20 {{{...int tsize
1b90: 3d 20 62 61 72 2d 73 3b 0a 09 69 6e 74 20 64 73 = bar-s;..int ds
1ba0: 69 7a 65 20 3d 20 65 20 2d 20 62 61 72 2d 31 3b ize = e - bar-1;
1bb0: 0a 0a 09 69 66 20 28 74 73 69 7a 65 20 3c 20 31 ...if (tsize < 1
1bc0: 29 20 72 65 74 75 72 6e 3b 0a 09 69 66 20 28 64 ) return;..if (d
1bd0: 73 69 7a 65 20 3c 20 31 29 20 64 73 69 7a 65 20 size < 1) dsize
1be0: 3d 20 30 3b 0a 0a 09 63 68 61 72 20 7a 54 61 72 = 0;...char zTar
1bf0: 67 65 74 5b 74 73 69 7a 65 20 2b 20 31 5d 3b 0a get[tsize + 1];.
1c00: 09 6d 65 6d 63 70 79 28 7a 54 61 72 67 65 74 2c .memcpy(zTarget,
1c10: 20 73 2c 20 74 73 69 7a 65 29 3b 0a 09 7a 54 61 s, tsize);..zTa
1c20: 72 67 65 74 5b 74 73 69 7a 65 5d 20 3d 20 27 5c rget[tsize] = '\
1c30: 30 27 3b 0a 0a 09 63 68 61 72 20 7a 43 6c 6f 73 0';...char zClos
1c40: 65 5b 32 30 5d 3b 0a 0a 09 42 6c 6f 62 20 2a 70 e[20];...Blob *p
1c50: 4f 75 74 20 3d 20 70 2d 3e 72 2d 3e 70 4f 75 74 Out = p->r->pOut
1c60: 3b 0a 0a 09 70 2d 3e 72 2d 3e 70 4f 75 74 20 3d ;...p->r->pOut =
1c70: 20 70 2d 3e 69 62 6c 6f 62 3b 0a 09 77 66 5f 6f p->iblob;..wf_o
1c80: 70 65 6e 48 79 70 65 72 6c 69 6e 6b 28 70 2d 3e penHyperlink(p->
1c90: 72 2c 20 7a 54 61 72 67 65 74 2c 20 7a 43 6c 6f r, zTarget, zClo
1ca0: 73 65 2c 20 73 69 7a 65 6f 66 28 7a 43 6c 6f 73 se, sizeof(zClos
1cb0: 65 29 29 3b 0a 09 70 2d 3e 72 2d 3e 70 4f 75 74 e));..p->r->pOut
1cc0: 20 3d 20 70 4f 75 74 3b 0a 0a 09 69 66 20 28 64 = pOut;...if (d
1cd0: 73 69 7a 65 29 0a 09 09 63 72 5f 70 61 72 73 65 size)...cr_parse
1ce0: 49 6e 6c 69 6e 65 28 70 2c 20 62 61 72 2b 31 2c Inline(p, bar+1,
1cf0: 20 65 29 20 3b 0a 09 65 6c 73 65 0a 09 09 62 6c e) ;..else...bl
1d00: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
1d10: 6f 62 2c 20 68 74 6d 6c 69 7a 65 28 73 2c 20 74 ob, htmlize(s, t
1d20: 73 69 7a 65 29 2c 20 2d 31 29 3b 0a 09 62 6c 6f size), -1);..blo
1d30: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
1d40: 62 2c 20 7a 43 6c 6f 73 65 2c 20 2d 31 29 3b 0a b, zClose, -1);.
1d50: 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 20 }.//}}}..static
1d60: 69 6e 74 20 63 72 5f 69 4c 69 6e 6b 28 50 61 72 int cr_iLink(Par
1d70: 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 ser *p){//{{{...
1d80: 69 66 20 28 70 2d 3e 69 6e 4c 69 6e 6b 29 20 72 if (p->inLink) r
1d90: 65 74 75 72 6e 20 30 3b 0a 09 69 66 20 28 28 70 eturn 0;..if ((p
1da0: 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 63 75 72 ->iend - p->icur
1db0: 73 6f 72 29 3c 33 29 20 72 65 74 75 72 6e 20 30 sor)<3) return 0
1dc0: 3b 0a 0a 09 69 66 20 28 70 2d 3e 69 63 75 72 73 ;...if (p->icurs
1dd0: 6f 72 5b 31 5d 21 3d 27 5b 27 29 20 72 65 74 75 or[1]!='[') retu
1de0: 72 6e 20 30 3b 0a 0a 09 63 68 61 72 20 2a 73 20 rn 0;...char *s
1df0: 3d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2b 20 32 = p->icursor + 2
1e00: 3b 0a 09 63 68 61 72 20 2a 62 61 72 20 3d 20 4e ;..char *bar = N
1e10: 55 4c 4c 3b 0a 0a 09 69 6e 74 20 63 6f 75 6e 74 ULL;...int count
1e20: 20 3d 20 70 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e = p->iend - p->
1e30: 69 63 75 72 73 6f 72 20 2d 33 3b 0a 09 77 68 69 icursor -3;..whi
1e40: 6c 65 20 28 63 6f 75 6e 74 2d 2d 29 7b 0a 09 09 le (count--){...
1e50: 69 66 20 28 73 5b 30 5d 3d 3d 27 5d 27 20 26 26 if (s[0]==']' &&
1e60: 20 73 5b 31 5d 3d 3d 27 5d 27 29 7b 0a 09 09 09 s[1]==']'){....
1e70: 69 66 20 28 21 62 61 72 29 20 62 61 72 20 3d 20 if (!bar) bar =
1e80: 73 3b 0a 09 09 09 70 2d 3e 69 6e 4c 69 6e 6b 20 s;....p->inLink
1e90: 3d 20 31 3b 0a 09 09 09 63 72 5f 72 65 6e 64 65 = 1;....cr_rende
1ea0: 72 4c 69 6e 6b 28 70 2c 20 70 2d 3e 69 63 75 72 rLink(p, p->icur
1eb0: 73 6f 72 2b 32 2c 20 62 61 72 2c 20 73 29 3b 0a sor+2, bar, s);.
1ec0: 09 09 09 70 2d 3e 69 6e 4c 69 6e 6b 20 3d 20 30 ...p->inLink = 0
1ed0: 3b 0a 09 09 09 70 2d 3e 69 63 75 72 73 6f 72 20 ;....p->icursor
1ee0: 3d 20 73 20 2b 20 32 3b 0a 09 09 09 72 65 74 75 = s + 2;....retu
1ef0: 72 6e 20 31 3b 0a 09 09 7d 0a 09 09 69 66 20 28 rn 1;...}...if (
1f00: 21 62 61 72 20 26 26 20 73 5b 30 5d 3d 3d 27 7c !bar && s[0]=='|
1f10: 27 29 20 62 61 72 3d 73 3b 0a 09 09 73 2b 2b 3b ') bar=s;...s++;
1f20: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 30 3b 0a 7d ..}..return 0;.}
1f30: 0a 2f 2f 7d 7d 7d 0a 0a 4c 4f 43 41 4c 20 63 68 .//}}}..LOCAL ch
1f40: 61 72 20 2a 63 72 5f 70 61 72 73 65 49 6e 6c 69 ar *cr_parseInli
1f50: 6e 65 28 50 61 72 73 65 72 20 2a 70 2c 20 63 68 ne(Parser *p, ch
1f60: 61 72 20 2a 73 2c 20 63 68 61 72 20 2a 65 29 7b ar *s, char *e){
1f70: 2f 2f 7b 7b 7b 0a 0a 09 69 6e 74 20 73 61 76 65 //{{{...int save
1f80: 5f 69 65 73 63 20 3d 20 70 2d 3e 69 65 73 63 3b _iesc = p->iesc;
1f90: 0a 09 63 68 61 72 20 2a 73 61 76 65 5f 69 65 6e ..char *save_ien
1fa0: 64 20 3d 20 70 2d 3e 69 65 6e 64 3b 0a 09 4e 6f d = p->iend;..No
1fb0: 64 65 20 2a 73 61 76 65 5f 69 73 74 61 63 6b 20 de *save_istack
1fc0: 3d 20 70 2d 3e 69 73 74 61 63 6b 3b 0a 0a 09 70 = p->istack;...p
1fd0: 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 09 70 2d 3e ->iesc = 0;..p->
1fe0: 69 65 6e 64 20 3d 20 65 3b 0a 09 70 2d 3e 69 73 iend = e;..p->is
1ff0: 74 61 63 6b 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 70 tack = NULL;...p
2000: 2d 3e 69 63 75 72 73 6f 72 20 3d 20 73 3b 0a 0a ->icursor = s;..
2010: 09 63 68 61 72 20 2a 65 6f 66 20 3d 20 4e 55 4c .char *eof = NUL
2020: 4c 3b 0a 09 77 68 69 6c 65 20 28 21 65 6f 66 20 L;..while (!eof
2030: 26 26 20 20 70 2d 3e 69 63 75 72 73 6f 72 20 3c && p->icursor <
2040: 20 70 2d 3e 69 65 6e 64 20 29 7b 0a 0a 09 09 73 p->iend ){....s
2050: 77 69 74 63 68 20 28 2a 70 2d 3e 69 63 75 72 73 witch (*p->icurs
2060: 6f 72 29 20 7b 2f 2f 7b 7b 7b 0a 0a 09 09 09 63 or) {//{{{.....c
2070: 61 73 65 20 27 7e 27 3a 0a 09 09 09 09 69 66 20 ase '~':.....if
2080: 28 70 2d 3e 69 65 73 63 29 20 7b 0a 09 09 09 09 (p->iesc) {.....
2090: 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e .blob_append(p->
20a0: 69 62 6c 6f 62 2c 20 22 7e 22 2c 20 31 29 3b 0a iblob, "~", 1);.
20b0: 09 09 09 09 09 70 2d 3e 69 65 73 63 20 3d 20 30 .....p->iesc = 0
20c0: 3b 0a 09 09 09 09 7d 0a 09 09 09 09 70 2d 3e 69 ;.....}.....p->i
20d0: 65 73 63 20 3d 20 21 70 2d 3e 69 65 73 63 3b 0a esc = !p->iesc;.
20e0: 09 09 09 09 70 2d 3e 69 63 75 72 73 6f 72 2b 3d ....p->icursor+=
20f0: 31 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a 09 1;.....break;...
2100: 09 09 63 61 73 65 20 27 2a 27 3a 0a 09 09 09 09 ..case '*':.....
2110: 63 72 5f 69 4d 61 72 6b 75 70 28 70 2c 20 4b 49 cr_iMarkup(p, KI
2120: 4e 44 5f 42 4f 4c 44 29 3b 0a 09 09 09 09 62 72 ND_BOLD);.....br
2130: 65 61 6b 3b 0a 0a 09 09 09 63 61 73 65 20 27 2f eak;.....case '/
2140: 27 3a 0a 09 09 09 09 63 72 5f 69 4d 61 72 6b 75 ':.....cr_iMarku
2150: 70 28 70 2c 20 4b 49 4e 44 5f 49 54 41 4c 49 43 p(p, KIND_ITALIC
2160: 29 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a 09 );.....break;...
2170: 09 09 63 61 73 65 20 27 5e 27 3a 0a 09 09 09 09 ..case '^':.....
2180: 63 72 5f 69 4d 61 72 6b 75 70 28 70 2c 20 4b 49 cr_iMarkup(p, KI
2190: 4e 44 5f 53 55 50 45 52 53 43 52 49 50 54 29 3b ND_SUPERSCRIPT);
21a0: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a 09 09 09 .....break;.....
21b0: 63 61 73 65 20 27 2c 27 3a 0a 09 09 09 09 63 72 case ',':.....cr
21c0: 5f 69 4d 61 72 6b 75 70 28 70 2c 20 4b 49 4e 44 _iMarkup(p, KIND
21d0: 5f 53 55 42 53 43 52 49 50 54 29 3b 0a 09 09 09 _SUBSCRIPT);....
21e0: 09 62 72 65 61 6b 3b 0a 0a 09 09 09 63 61 73 65 .break;.....case
21f0: 20 27 23 27 3a 0a 09 09 09 09 63 72 5f 69 4d 61 '#':.....cr_iMa
2200: 72 6b 75 70 28 70 2c 20 4b 49 4e 44 5f 4d 4f 4e rkup(p, KIND_MON
2210: 4f 53 50 41 43 45 44 29 3b 0a 09 09 09 09 62 72 OSPACED);.....br
2220: 65 61 6b 3b 0a 0a 09 09 09 63 61 73 65 20 27 5c eak;.....case '\
2230: 5c 27 3a 0a 09 09 09 09 63 72 5f 69 4d 61 72 6b \':.....cr_iMark
2240: 75 70 28 70 2c 20 4b 49 4e 44 5f 42 52 45 41 4b up(p, KIND_BREAK
2250: 29 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a 09 );.....break;...
2260: 09 09 63 61 73 65 20 27 7b 27 3a 0a 09 09 09 09 ..case '{':.....
2270: 69 66 20 28 63 72 5f 69 73 45 73 63 28 70 29 29 if (cr_isEsc(p))
2280: 20 62 72 65 61 6b 3b 0a 09 09 09 09 69 66 20 28 break;.....if (
2290: 63 72 5f 69 4e 6f 57 69 6b 69 28 70 29 29 20 62 cr_iNoWiki(p)) b
22a0: 72 65 61 6b 3b 0a 09 09 09 09 69 66 20 28 63 72 reak;.....if (cr
22b0: 5f 69 49 6d 61 67 65 28 70 29 29 20 62 72 65 61 _iImage(p)) brea
22c0: 6b 3b 0a 09 09 09 09 62 6c 6f 62 5f 61 70 70 65 k;.....blob_appe
22d0: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 70 2d 3e nd(p->iblob, p->
22e0: 69 63 75 72 73 6f 72 2c 20 31 29 3b 0a 09 09 09 icursor, 1);....
22f0: 09 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 31 .p->icursor += 1
2300: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a 09 09 ;.....break;....
2310: 09 63 61 73 65 20 27 5b 27 3a 0a 09 09 09 09 69 .case '[':.....i
2320: 66 20 28 63 72 5f 69 73 45 73 63 28 70 29 29 20 f (cr_isEsc(p))
2330: 62 72 65 61 6b 3b 0a 09 09 09 09 69 66 20 28 63 break;.....if (c
2340: 72 5f 69 4c 69 6e 6b 28 70 29 29 20 62 72 65 61 r_iLink(p)) brea
2350: 6b 3b 0a 09 09 09 09 62 6c 6f 62 5f 61 70 70 65 k;.....blob_appe
2360: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 70 2d 3e nd(p->iblob, p->
2370: 69 63 75 72 73 6f 72 2c 20 31 29 3b 0a 09 09 09 icursor, 1);....
2380: 09 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 31 .p->icursor += 1
2390: 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a 0a 09 ;.....break;....
23a0: 09 09 63 61 73 65 20 27 3c 27 3a 0a 09 09 09 09 ..case '<':.....
23b0: 69 66 20 28 63 72 5f 69 73 45 73 63 28 70 29 29 if (cr_isEsc(p))
23c0: 20 62 72 65 61 6b 3b 0a 09 09 09 09 69 66 20 28 break;.....if (
23d0: 63 72 5f 69 4d 61 63 72 6f 28 70 29 29 20 62 72 cr_iMacro(p)) br
23e0: 65 61 6b 3b 0a 0a 09 09 09 09 62 6c 6f 62 5f 61 eak;......blob_a
23f0: 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 ppend(p->iblob,
2400: 22 26 6c 74 3b 22 2c 20 34 29 3b 0a 09 09 09 09 "<", 4);.....
2410: 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 31 3b p->icursor += 1;
2420: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a 09 09 09 .....break;.....
2430: 63 61 73 65 20 27 3e 27 3a 0a 09 09 09 09 69 66 case '>':.....if
2440: 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a 09 09 09 (p->iesc) {....
2450: 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d ..blob_append(p-
2460: 3e 69 62 6c 6f 62 2c 20 22 7e 22 2c 20 31 29 3b >iblob, "~", 1);
2470: 0a 09 09 09 09 09 70 2d 3e 69 65 73 63 20 3d 20 ......p->iesc =
2480: 30 3b 0a 09 09 09 09 7d 0a 09 09 09 09 62 6c 6f 0;.....}.....blo
2490: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
24a0: 62 2c 20 22 26 67 74 3b 22 2c 20 34 29 3b 0a 09 b, ">", 4);..
24b0: 09 09 09 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d ...p->icursor +=
24c0: 20 31 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 0a 1;.....break;..
24d0: 09 09 09 63 61 73 65 20 27 26 27 3a 0a 09 09 09 ...case '&':....
24e0: 09 69 66 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a .if (p->iesc) {.
24f0: 09 09 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 .....blob_append
2500: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e 22 2c 20 (p->iblob, "~",
2510: 31 29 3b 0a 09 09 09 09 09 70 2d 3e 69 65 73 63 1);......p->iesc
2520: 20 3d 20 30 3b 0a 09 09 09 09 7d 0a 09 09 09 09 = 0;.....}.....
2530: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
2540: 62 6c 6f 62 2c 20 22 26 61 6d 70 3b 22 2c 20 35 blob, "&", 5
2550: 29 3b 0a 09 09 09 09 70 2d 3e 69 63 75 72 73 6f );.....p->icurso
2560: 72 20 2b 3d 20 31 3b 0a 09 09 09 09 62 72 65 61 r += 1;.....brea
2570: 6b 3b 0a 0a 09 09 09 63 61 73 65 20 27 7c 27 3a k;.....case '|':
2580: 0a 09 09 09 09 69 66 20 28 70 2d 3e 69 6e 54 61 .....if (p->inTa
2590: 62 6c 65 29 7b 0a 09 09 09 09 09 69 66 20 28 70 ble){......if (p
25a0: 2d 3e 69 65 73 63 29 20 7b 0a 09 09 09 09 09 09 ->iesc) {.......
25b0: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
25c0: 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72 blob, p->icursor
25d0: 2c 20 31 29 3b 0a 09 09 09 09 09 09 70 2d 3e 69 , 1);.......p->i
25e0: 65 73 63 20 3d 20 30 3b 0a 09 09 09 09 09 09 70 esc = 0;.......p
25f0: 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 31 3b 0a ->icursor += 1;.
2600: 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 ......break;....
2610: 09 09 7d 0a 09 09 09 09 09 65 6f 66 20 3d 20 70 ..}......eof = p
2620: 2d 3e 69 63 75 72 73 6f 72 20 2b 20 31 3b 0a 09 ->icursor + 1;..
2630: 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d ....break;.....}
2640: 0a 09 09 09 09 2f 2f 20 66 61 6c 6c 20 74 68 72 .....// fall thr
2650: 6f 75 67 68 20 74 6f 20 64 65 66 61 75 6c 74 0a ough to default.
2660: 0a 09 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09 ....default:....
2670: 09 69 66 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a .if (p->iesc) {.
2680: 09 09 09 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 .....blob_append
2690: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e 22 2c 20 (p->iblob, "~",
26a0: 31 29 3b 0a 09 09 09 09 09 70 2d 3e 69 65 73 63 1);......p->iesc
26b0: 20 3d 20 30 3b 0a 09 09 09 09 7d 0a 09 09 09 09 = 0;.....}.....
26c0: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 blob_append(p->i
26d0: 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72 blob, p->icursor
26e0: 2c 20 31 29 3b 0a 09 09 09 09 70 2d 3e 69 63 75 , 1);.....p->icu
26f0: 72 73 6f 72 20 2b 3d 31 3b 0a 09 09 7d 2f 2f 7d rsor +=1;...}//}
2700: 7d 7d 0a 0a 09 7d 0a 0a 09 77 68 69 6c 65 20 28 }}...}...while (
2710: 70 2d 3e 69 73 74 61 63 6b 29 7b 0a 09 09 63 72 p->istack){...cr
2720: 5f 69 43 6c 6f 73 65 28 70 2c 20 70 2d 3e 69 73 _iClose(p, p->is
2730: 74 61 63 6b 2d 3e 6b 69 6e 64 29 3b 0a 09 09 70 tack->kind);...p
2740: 2d 3e 69 73 74 61 63 6b 20 3d 20 70 2d 3e 69 73 ->istack = p->is
2750: 74 61 63 6b 2d 3e 6e 65 78 74 3b 0a 09 7d 0a 0a tack->next;..}..
2760: 09 70 2d 3e 69 65 73 63 20 3d 20 73 61 76 65 5f .p->iesc = save_
2770: 69 65 73 63 3b 0a 09 70 2d 3e 69 65 6e 64 20 3d iesc;..p->iend =
2780: 20 73 61 76 65 5f 69 65 6e 64 3b 0a 09 70 2d 3e save_iend;..p->
2790: 69 73 74 61 63 6b 20 3d 20 73 61 76 65 5f 69 73 istack = save_is
27a0: 74 61 63 6b 3b 0a 0a 09 72 65 74 75 72 6e 20 65 tack;...return e
27b0: 6f 66 3b 0a 0a 7d 0a 2f 2f 7d 7d 7d 0a 2f 2f 7d of;..}.//}}}.//}
27c0: 7d 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 }}..static void
27d0: 63 72 5f 72 65 6e 64 65 72 4c 69 73 74 49 74 65 cr_renderListIte
27e0: 6d 28 50 61 72 73 65 72 20 2a 70 2c 20 4e 6f 64 m(Parser *p, Nod
27f0: 65 20 2a 6e 29 7b 2f 2f 7b 7b 7b 0a 0a 0a 09 62 e *n){//{{{....b
2800: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 lob_append(p->ib
2810: 6c 6f 62 2c 20 22 3c 6c 69 3e 22 2c 20 34 29 3b lob, "<li>", 4);
2820: 0a 09 63 72 5f 70 61 72 73 65 49 6e 6c 69 6e 65 ..cr_parseInline
2830: 28 70 2c 20 6e 2d 3e 73 74 61 72 74 2c 20 6e 2d (p, n->start, n-
2840: 3e 65 6e 64 29 3b 0a 0a 09 69 66 20 28 6e 2d 3e >end);...if (n->
2850: 63 68 69 6c 64 72 65 6e 29 7b 0a 0a 09 09 69 6e children){....in
2860: 74 20 6f 72 64 20 3d 20 28 6e 2d 3e 63 68 69 6c t ord = (n->chil
2870: 64 72 65 6e 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e dren->kind & KIN
2880: 44 5f 4f 52 44 45 52 45 44 5f 4c 49 53 54 29 3b D_ORDERED_LIST);
2890: 0a 0a 09 09 69 66 20 28 6f 72 64 29 20 09 62 6c ....if (ord) .bl
28a0: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
28b0: 6f 62 2c 20 22 3c 6f 6c 3e 22 2c 20 34 29 3b 0a ob, "<ol>", 4);.
28c0: 09 09 65 6c 73 65 20 09 09 09 62 6c 6f 62 5f 61 ..else ...blob_a
28d0: 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 ppend(p->iblob,
28e0: 22 3c 75 6c 3e 22 2c 20 34 29 3b 0a 0a 09 09 6e "<ul>", 4);....n
28f0: 20 3d 20 6e 2d 3e 63 68 69 6c 64 72 65 6e 3b 0a = n->children;.
2900: 09 09 77 68 69 6c 65 20 28 6e 29 7b 0a 09 09 09 ..while (n){....
2910: 63 72 5f 72 65 6e 64 65 72 4c 69 73 74 49 74 65 cr_renderListIte
2920: 6d 28 70 2c 20 6e 29 3b 0a 09 09 09 6e 20 3d 20 m(p, n);....n =
2930: 6e 2d 3e 6e 65 78 74 3b 0a 09 09 7d 0a 0a 09 09 n->next;...}....
2940: 69 66 20 28 6f 72 64 29 20 09 62 6c 6f 62 5f 61 if (ord) .blob_a
2950: 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 ppend(p->iblob,
2960: 22 3c 2f 6f 6c 3e 22 2c 20 35 29 3b 0a 09 09 65 "</ol>", 5);...e
2970: 6c 73 65 20 09 09 09 62 6c 6f 62 5f 61 70 70 65 lse ...blob_appe
2980: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f nd(p->iblob, "</
2990: 75 6c 3e 22 2c 20 35 29 3b 0a 09 7d 0a 09 62 6c ul>", 5);..}..bl
29a0: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
29b0: 6f 62 2c 20 22 3c 2f 6c 69 3e 22 2c 20 35 29 3b ob, "</li>", 5);
29c0: 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 .}..static void
29d0: 63 72 5f 72 65 6e 64 65 72 4c 69 73 74 28 50 61 cr_renderList(Pa
29e0: 72 73 65 72 20 2a 70 29 7b 0a 0a 09 4e 6f 64 65 rser *p){...Node
29f0: 20 2a 6e 20 3d 20 70 2d 3e 6c 69 73 74 3b 0a 0a *n = p->list;..
2a00: 09 77 68 69 6c 65 20 28 6e 2d 3e 70 61 72 65 6e .while (n->paren
2a10: 74 20 21 3d 6e 29 20 20 6e 20 3d 20 6e 2d 3e 70 t !=n) n = n->p
2a20: 61 72 65 6e 74 3b 0a 0a 09 69 6e 74 20 6f 72 64 arent;...int ord
2a30: 20 3d 20 28 6e 2d 3e 6b 69 6e 64 20 26 20 4b 49 = (n->kind & KI
2a40: 4e 44 5f 4f 52 44 45 52 45 44 5f 4c 49 53 54 29 ND_ORDERED_LIST)
2a50: 3b 0a 0a 09 69 66 20 28 6f 72 64 29 20 09 62 6c ;...if (ord) .bl
2a60: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
2a70: 6f 62 2c 20 22 5c 6e 5c 6e 3c 6f 6c 3e 22 2c 20 ob, "\n\n<ol>",
2a80: 2d 31 29 3b 0a 09 65 6c 73 65 20 09 09 09 62 6c -1);..else ...bl
2a90: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
2aa0: 6f 62 2c 20 22 5c 6e 5c 6e 3c 75 6c 3e 22 2c 20 ob, "\n\n<ul>",
2ab0: 2d 31 29 3b 0a 0a 09 77 68 69 6c 65 20 28 6e 29 -1);...while (n)
2ac0: 20 7b 0a 09 09 63 72 5f 72 65 6e 64 65 72 4c 69 {...cr_renderLi
2ad0: 73 74 49 74 65 6d 28 70 2c 20 6e 29 3b 0a 09 09 stItem(p, n);...
2ae0: 6e 20 3d 20 6e 2d 3e 6e 65 78 74 3b 0a 09 7d 0a n = n->next;..}.
2af0: 0a 09 69 66 20 28 6f 72 64 29 20 09 62 6c 6f 62 ..if (ord) .blob
2b00: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 _append(p->iblob
2b10: 2c 20 22 3c 2f 6f 6c 3e 22 2c 20 35 29 3b 0a 09 , "</ol>", 5);..
2b20: 65 6c 73 65 20 09 09 09 62 6c 6f 62 5f 61 70 70 else ...blob_app
2b30: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c end(p->iblob, "<
2b40: 2f 75 6c 3e 22 2c 20 35 29 3b 0a 7d 0a 0a 2f 2f /ul>", 5);.}..//
2b50: 7d 7d 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 }}}..static void
2b60: 20 63 72 5f 72 65 6e 64 65 72 54 61 62 6c 65 52 cr_renderTableR
2b70: 6f 77 28 50 61 72 73 65 72 20 2a 70 2c 20 4e 6f ow(Parser *p, No
2b80: 64 65 20 2a 72 6f 77 29 7b 2f 2f 7b 7b 7b 0a 0a de *row){//{{{..
2b90: 09 63 68 61 72 20 2a 73 20 3d 20 72 6f 77 2d 3e .char *s = row->
2ba0: 73 74 61 72 74 3b 0a 09 69 6e 74 20 74 68 3b 0a start;..int th;.
2bb0: 0a 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d ..blob_append(p-
2bc0: 3e 69 62 6c 6f 62 2c 20 22 5c 6e 3c 74 72 3e 22 >iblob, "\n<tr>"
2bd0: 2c 20 2d 31 29 3b 0a 0a 09 77 68 69 6c 65 20 28 , -1);...while (
2be0: 73 20 26 26 20 73 20 3c 20 72 6f 77 2d 3e 65 6e s && s < row->en
2bf0: 64 29 7b 0a 0a 09 09 69 66 20 28 28 74 68 20 3d d){....if ((th =
2c00: 20 2a 73 20 3d 3d 20 27 3d 27 29 29 20 7b 0a 09 *s == '=')) {..
2c10: 09 09 73 2b 2b 3b 0a 09 09 09 62 6c 6f 62 5f 61 ..s++;....blob_a
2c20: 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 ppend(p->iblob,
2c30: 22 3c 74 68 3e 22 2c 20 2d 31 29 3b 0a 09 09 7d "<th>", -1);...}
2c40: 0a 09 09 65 6c 73 65 20 7b 0a 09 09 09 62 6c 6f ...else {....blo
2c50: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f b_append(p->iblo
2c60: 62 2c 20 22 3c 74 64 3e 22 2c 20 2d 31 29 3b 0a b, "<td>", -1);.
2c70: 09 09 7d 0a 0a 09 09 73 20 3d 20 63 72 5f 70 61 ..}....s = cr_pa
2c80: 72 73 65 49 6e 6c 69 6e 65 28 70 2c 20 73 2c 20 rseInline(p, s,
2c90: 72 6f 77 2d 3e 65 6e 64 29 3b 0a 0a 09 09 69 66 row->end);....if
2ca0: 20 28 74 68 29 0a 09 09 09 62 6c 6f 62 5f 61 70 (th)....blob_ap
2cb0: 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 pend(p->iblob, "
2cc0: 3c 2f 74 68 3e 5c 6e 22 2c 20 2d 31 29 3b 0a 09 </th>\n", -1);..
2cd0: 09 65 6c 73 65 0a 09 09 09 62 6c 6f 62 5f 61 70 .else....blob_ap
2ce0: 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 pend(p->iblob, "
2cf0: 3c 2f 74 64 3e 5c 6e 22 2c 20 2d 31 29 3b 0a 0a </td>\n", -1);..
2d00: 09 09 69 66 20 28 21 73 29 20 62 72 65 61 6b 3b ..if (!s) break;
2d10: 0a 09 7d 0a 09 62 6c 6f 62 5f 61 70 70 65 6e 64 ..}..blob_append
2d20: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 74 72 (p->iblob, "</tr
2d30: 3e 22 2c 20 35 29 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a >", 5);.}.//}}}.
2d40: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 5f .static void cr_
2d50: 72 65 6e 64 65 72 54 61 62 6c 65 28 50 61 72 73 renderTable(Pars
2d60: 65 72 20 2a 70 2c 20 4e 6f 64 65 20 2a 6e 29 7b er *p, Node *n){
2d70: 2f 2f 7b 7b 7b 0a 0a 09 4e 6f 64 65 20 2a 72 6f //{{{...Node *ro
2d80: 77 20 3d 20 6e 2d 3e 63 68 69 6c 64 72 65 6e 3b w = n->children;
2d90: 0a 0a 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 ...blob_append(p
2da0: 2d 3e 69 62 6c 6f 62 2c 20 22 3c 74 61 62 6c 65 ->iblob, "<table
2db0: 20 63 6c 61 73 73 3d 27 63 72 65 6f 6c 65 74 61 class='creoleta
2dc0: 62 6c 65 27 3e 22 2c 20 2d 31 29 3b 0a 09 70 2d ble'>", -1);..p-
2dd0: 3e 69 6e 54 61 62 6c 65 20 3d 20 31 3b 0a 09 77 >inTable = 1;..w
2de0: 68 69 6c 65 20 28 72 6f 77 29 7b 0a 0a 09 09 63 hile (row){....c
2df0: 72 5f 72 65 6e 64 65 72 54 61 62 6c 65 52 6f 77 r_renderTableRow
2e00: 28 70 2c 20 72 6f 77 29 3b 0a 09 09 72 6f 77 20 (p, row);...row
2e10: 3d 20 72 6f 77 2d 3e 6e 65 78 74 3b 0a 0a 09 7d = row->next;...}
2e20: 0a 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d ..blob_append(p-
2e30: 3e 69 62 6c 6f 62 2c 20 22 3c 2f 74 61 62 6c 65 >iblob, "</table
2e40: 3e 22 2c 20 2d 31 29 3b 0a 09 70 2d 3e 69 6e 54 >", -1);..p->inT
2e50: 61 62 6c 65 20 3d 20 30 3b 0a 0a 7d 0a 2f 2f 7d able = 0;..}.//}
2e60: 7d 7d 0a 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 }}...static void
2e70: 20 63 72 5f 72 65 6e 64 65 72 28 50 61 72 73 65 cr_render(Parse
2e80: 72 20 2a 70 2c 20 4e 6f 64 65 20 2a 6e 6f 64 65 r *p, Node *node
2e90: 29 7b 2f 2f 7b 7b 7b 0a 0a 09 69 66 20 28 6e 6f ){//{{{...if (no
2ea0: 64 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e 44 5f de->kind & KIND_
2eb0: 50 41 52 41 47 52 41 50 48 29 7b 0a 09 09 62 6c PARAGRAPH){...bl
2ec0: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c ob_append(p->ibl
2ed0: 6f 62 2c 20 09 22 5c 6e 3c 70 3e 22 2c 20 2d 31 ob, ."\n<p>", -1
2ee0: 29 3b 0a 09 09 63 72 5f 70 61 72 73 65 49 6e 6c );...cr_parseInl
2ef0: 69 6e 65 28 70 2c 20 6e 6f 64 65 2d 3e 73 74 61 ine(p, node->sta
2f00: 72 74 2c 20 6e 6f 64 65 2d 3e 65 6e 64 20 29 3b rt, node->end );
2f10: 0a 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 ...blob_append(p
2f20: 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 70 3e 5c 6e ->iblob, "</p>\n
2f30: 22 2c 20 2d 31 09 29 3b 0a 09 7d 0a 0a 09 69 66 ", -1.);..}...if
2f40: 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b (node->kind & K
2f50: 49 4e 44 5f 48 45 41 44 49 4e 47 29 7b 0a 0a 09 IND_HEADING){...
2f60: 09 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 2d .blob_appendf(p-
2f70: 3e 69 62 6c 6f 62 2c 0a 09 09 09 09 22 5c 6e 3c >iblob,....."\n<
2f80: 68 25 64 3e 25 73 3c 2f 68 25 64 3e 5c 6e 22 2c h%d>%s</h%d>\n",
2f90: 0a 09 09 09 09 6e 6f 64 65 2d 3e 6c 65 76 65 6c .....node->level
2fa0: 2c 0a 09 09 09 09 68 74 6d 6c 69 7a 65 28 6e 6f ,.....htmlize(no
2fb0: 64 65 2d 3e 73 74 61 72 74 2c 20 6e 6f 64 65 2d de->start, node-
2fc0: 3e 65 6e 64 20 2d 20 6e 6f 64 65 2d 3e 73 74 61 >end - node->sta
2fd0: 72 74 29 2c 0a 09 09 09 09 6e 6f 64 65 2d 3e 6c rt),.....node->l
2fe0: 65 76 65 6c 0a 09 09 29 3b 0a 09 09 72 65 74 75 evel...);...retu
2ff0: 72 6e 3b 0a 09 7d 0a 0a 09 69 66 20 28 6e 6f 64 rn;..}...if (nod
3000: 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 48 e->kind & KIND_H
3010: 4f 52 49 5a 4f 4e 54 41 4c 5f 52 55 4c 45 29 7b ORIZONTAL_RULE){
3020: 0a 09 09 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 ...blob_append(p
3030: 2d 3e 69 62 6c 6f 62 2c 20 22 3c 68 72 20 2f 3e ->iblob, "<hr />
3040: 22 2c 20 2d 31 29 3b 0a 09 09 72 65 74 75 72 6e ", -1);...return
3050: 3b 0a 09 7d 0a 0a 09 69 66 20 28 6e 6f 64 65 2d ;..}...if (node-
3060: 3e 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 4c 49 53 >kind & KIND_LIS
3070: 54 29 7b 0a 09 09 63 72 5f 72 65 6e 64 65 72 4c T){...cr_renderL
3080: 69 73 74 28 70 29 3b 0a 09 09 70 2d 3e 6c 69 73 ist(p);...p->lis
3090: 74 20 3d 20 4e 55 4c 4c 3b 0a 09 09 72 65 74 75 t = NULL;...retu
30a0: 72 6e 3b 0a 09 7d 0a 0a 09 69 66 20 28 6e 6f 64 rn;..}...if (nod
30b0: 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 54 e->kind & KIND_T
30c0: 41 42 4c 45 29 7b 0a 09 09 63 72 5f 72 65 6e 64 ABLE){...cr_rend
30d0: 65 72 54 61 62 6c 65 28 70 2c 20 6e 6f 64 65 29 erTable(p, node)
30e0: 3b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 0a ;...return;..}..
30f0: 09 69 66 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 .if (node->kind
3100: 26 20 4b 49 4e 44 5f 4e 4f 5f 57 49 4b 49 5f 42 & KIND_NO_WIKI_B
3110: 4c 4f 43 4b 29 7b 0a 09 09 62 6c 6f 62 5f 61 70 LOCK){...blob_ap
3120: 70 65 6e 64 66 28 70 2d 3e 69 62 6c 6f 62 2c 0a pendf(p->iblob,.
3130: 09 09 09 22 5c 6e 3c 62 6c 6f 63 6b 71 75 6f 74 ..."\n<blockquot
3140: 65 20 73 74 79 6c 65 3d 27 62 61 63 6b 67 72 6f e style='backgro
3150: 75 6e 64 3a 6f 6c 64 6c 61 63 65 27 3e 3c 70 72 und:oldlace'><pr
3160: 65 3e 25 73 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 e>%s</pre></bloc
3170: 6b 71 75 6f 74 65 3e 5c 6e 22 2c 0a 09 09 09 09 kquote>\n",.....
3180: 68 74 6d 6c 69 7a 65 28 20 6e 6f 64 65 2d 3e 73 htmlize( node->s
3190: 74 61 72 74 2c 20 6e 6f 64 65 2d 3e 65 6e 64 20 tart, node->end
31a0: 2d 20 6e 6f 64 65 2d 3e 73 74 61 72 74 29 0a 09 - node->start)..
31b0: 09 29 3b 0a 09 7d 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a .);..}.}.//}}}..
31c0: 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 63 72 .static char *cr
31d0: 5f 66 69 6e 64 45 6e 64 4f 66 42 6c 6f 63 6b 28 _findEndOfBlock(
31e0: 50 61 72 73 65 72 20 2a 70 2c 20 63 68 61 72 20 Parser *p, char
31f0: 2a 73 2c 20 63 68 61 72 20 63 29 7b 2f 2f 7b 7b *s, char c){//{{
3200: 7b 0a 0a 09 63 68 61 72 20 2a 65 6e 64 3b 0a 09 {...char *end;..
3210: 77 68 69 6c 65 20 28 73 5b 30 5d 29 7b 0a 0a 09 while (s[0]){...
3220: 09 65 6e 64 20 3d 20 73 3b 0a 09 09 69 66 20 28 .end = s;...if (
3230: 73 5b 30 5d 20 3d 3d 20 63 20 26 26 20 73 5b 30 s[0] == c && s[0
3240: 5d 20 3d 3d 20 63 20 26 26 20 73 5b 30 5d 20 3d ] == c && s[0] =
3250: 3d 20 63 29 20 7b 0a 09 09 09 73 20 3d 20 63 72 = c) {....s = cr
3260: 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73 20 2b _nextLine(p, s +
3270: 20 33 29 3b 0a 09 09 09 69 66 20 28 70 2d 3e 6c 3);....if (p->l
3280: 69 6e 65 57 61 73 42 6c 61 6e 6b 29 20 7b 0a 09 ineWasBlank) {..
3290: 09 09 09 09 70 2d 3e 63 75 72 73 6f 72 20 3d 20 ....p->cursor =
32a0: 73 3b 0a 09 09 09 09 09 72 65 74 75 72 6e 20 65 s;......return e
32b0: 6e 64 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 65 nd;....}...}...e
32c0: 6c 73 65 20 7b 0a 09 09 09 73 20 3d 20 63 72 5f lse {....s = cr_
32d0: 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73 29 3b 0a nextLine(p, s);.
32e0: 09 09 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 30 ..}..}..return 0
32f0: 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 ;.}.//}}}..stati
3300: 63 20 69 6e 74 20 63 72 5f 61 64 64 4c 69 73 74 c int cr_addList
3310: 49 74 65 6d 28 50 61 72 73 65 72 20 2a 70 2c 20 Item(Parser *p,
3320: 4e 6f 64 65 20 2a 6e 29 7b 2f 2f 7b 7b 7b 0a 0a Node *n){//{{{..
3330: 09 6e 2d 3e 70 61 72 65 6e 74 20 3d 20 6e 3b 0a .n->parent = n;.
3340: 09 6e 2d 3e 6e 65 78 74 20 3d 20 6e 2d 3e 63 68 .n->next = n->ch
3350: 69 6c 64 72 65 6e 20 3d 20 4e 55 4c 4c 3b 0a 0a ildren = NULL;..
3360: 09 69 66 20 28 21 70 2d 3e 6c 69 73 74 29 20 7b .if (!p->list) {
3370: 0a 09 09 69 66 20 28 6e 2d 3e 6c 65 76 65 6c 20 ...if (n->level
3380: 21 3d 20 31 29 20 72 65 74 75 72 6e 20 30 3b 0a != 1) return 0;.
3390: 09 09 70 2d 3e 6c 69 73 74 20 3d 20 6e 3b 0a 09 ..p->list = n;..
33a0: 09 72 65 74 75 72 6e 20 31 3b 0a 09 7d 0a 0a 09 .return 1;..}...
33b0: 4e 6f 64 65 20 2a 6c 69 73 74 20 3d 20 70 2d 3e Node *list = p->
33c0: 6c 69 73 74 3b 0a 0a 09 77 68 69 6c 65 20 28 6e list;...while (n
33d0: 2d 3e 6c 65 76 65 6c 20 3c 20 6c 69 73 74 2d 3e ->level < list->
33e0: 6c 65 76 65 6c 29 7b 0a 09 09 6c 69 73 74 20 3d level){...list =
33f0: 20 6c 69 73 74 2d 3e 70 61 72 65 6e 74 3b 0a 09 list->parent;..
3400: 7d 0a 0a 09 69 66 20 28 6e 2d 3e 6c 65 76 65 6c }...if (n->level
3410: 20 3d 3d 20 6c 69 73 74 2d 3e 6c 65 76 65 6c 29 == list->level)
3420: 7b 0a 0a 09 09 69 66 20 28 6e 2d 3e 6b 69 6e 64 {....if (n->kind
3430: 20 21 3d 20 6c 69 73 74 2d 3e 6b 69 6e 64 29 7b != list->kind){
3440: 0a 09 09 09 69 66 20 28 6e 2d 3e 6c 65 76 65 6c ....if (n->level
3450: 3e 31 29 20 72 65 74 75 72 6e 20 30 3b 0a 09 09 >1) return 0;...
3460: 09 63 72 5f 72 65 6e 64 65 72 4c 69 73 74 28 70 .cr_renderList(p
3470: 29 3b 0a 09 09 09 70 2d 3e 6c 69 73 74 20 3d 20 );....p->list =
3480: 6e 3b 0a 09 09 09 72 65 74 75 72 6e 20 31 3b 0a n;....return 1;.
3490: 09 09 7d 0a 09 09 6e 2d 3e 70 61 72 65 6e 74 20 ..}...n->parent
34a0: 3d 20 6c 69 73 74 2d 3e 70 61 72 65 6e 74 3b 0a = list->parent;.
34b0: 09 09 70 2d 3e 6c 69 73 74 20 3d 20 6c 69 73 74 ..p->list = list
34c0: 2d 3e 6e 65 78 74 20 3d 20 6e 3b 0a 09 09 72 65 ->next = n;...re
34d0: 74 75 72 6e 20 31 3b 0a 09 7d 0a 0a 09 69 66 20 turn 1;..}...if
34e0: 28 20 28 6e 2d 3e 6c 65 76 65 6c 20 2d 20 6c 69 ( (n->level - li
34f0: 73 74 2d 3e 6c 65 76 65 6c 29 20 3e 20 31 20 29 st->level) > 1 )
3500: 20 72 65 74 75 72 6e 20 30 3b 0a 09 6e 2d 3e 70 return 0;..n->p
3510: 61 72 65 6e 74 20 3d 20 70 2d 3e 6c 69 73 74 3b arent = p->list;
3520: 0a 09 70 2d 3e 6c 69 73 74 2d 3e 63 68 69 6c 64 ..p->list->child
3530: 72 65 6e 20 3d 20 6e 3b 0a 09 70 2d 3e 6c 69 73 ren = n;..p->lis
3540: 74 20 3d 20 6e 3b 0a 09 72 65 74 75 72 6e 20 31 t = n;..return 1
3550: 3b 0a 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 0a 73 74 61 ;..}.//}}}...sta
3560: 74 69 63 20 69 6e 74 20 69 73 45 6e 64 57 69 6b tic int isEndWik
3570: 69 4d 61 72 6b 65 72 28 50 61 72 73 65 72 20 2a iMarker(Parser *
3580: 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 63 68 61 72 20 p){//{{{...char
3590: 2a 73 20 3d 20 70 2d 3e 63 75 72 73 6f 72 3b 0a *s = p->cursor;.
35a0: 09 69 66 20 28 6d 65 6d 63 6d 70 28 73 2c 20 22 .if (memcmp(s, "
35b0: 3c 3c 66 6f 73 73 69 6c 3e 3e 22 2c 20 31 30 29 <<fossil>>", 10)
35c0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 09 70 2d 3e ) return 0;..p->
35d0: 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 73 3b this->start = s;
35e0: 0a 09 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 ..p->this->kind
35f0: 3d 20 4b 49 4e 44 5f 45 4e 44 5f 57 49 4b 49 5f = KIND_END_WIKI_
3600: 4d 41 52 4b 45 52 3b 0a 09 70 2d 3e 63 75 72 73 MARKER;..p->curs
3610: 6f 72 20 2b 3d 20 31 30 3b 0a 09 72 65 74 75 72 or += 10;..retur
3620: 6e 20 31 3b 0a 7d 0a 2f 2f 2f 7d 7d 7d 0a 73 74 n 1;.}.///}}}.st
3630: 61 74 69 63 20 69 6e 74 20 69 73 4e 6f 57 69 6b atic int isNoWik
3640: 69 42 6c 6f 63 6b 28 50 61 72 73 65 72 20 2a 70 iBlock(Parser *p
3650: 29 7b 2f 2f 7b 7b 7b 0a 0a 09 63 68 61 72 20 2a ){//{{{...char *
3660: 73 20 3d 20 70 2d 3e 63 75 72 73 6f 72 3b 0a 0a s = p->cursor;..
3670: 09 69 66 20 28 73 5b 30 5d 20 21 3d 20 27 7b 27 .if (s[0] != '{'
3680: 29 20 72 65 74 75 72 6e 20 30 3b 20 73 2b 2b 3b ) return 0; s++;
3690: 0a 09 69 66 20 28 73 5b 30 5d 20 21 3d 20 27 7b ..if (s[0] != '{
36a0: 27 29 20 72 65 74 75 72 6e 20 30 3b 20 73 2b 2b ') return 0; s++
36b0: 3b 0a 09 69 66 20 28 73 5b 30 5d 20 21 3d 20 27 ;..if (s[0] != '
36c0: 7b 27 29 20 72 65 74 75 72 6e 20 30 3b 20 73 2b {') return 0; s+
36d0: 2b 3b 0a 0a 09 73 20 3d 20 63 72 5f 6e 65 78 74 +;...s = cr_next
36e0: 4c 69 6e 65 28 70 2c 20 73 29 3b 0a 09 69 66 20 Line(p, s);..if
36f0: 28 21 70 2d 3e 6c 69 6e 65 57 61 73 42 6c 61 6e (!p->lineWasBlan
3700: 6b 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 09 70 k) return 0;...p
3710: 2d 3e 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 ->this->start =
3720: 73 3b 0a 0a 09 73 20 3d 20 63 72 5f 66 69 6e 64 s;...s = cr_find
3730: 45 6e 64 4f 66 42 6c 6f 63 6b 28 70 2c 20 73 2c EndOfBlock(p, s,
3740: 20 27 7d 27 29 3b 0a 0a 09 69 66 20 28 21 73 29 '}');...if (!s)
3750: 20 72 65 74 75 72 6e 20 30 3b 0a 0a 09 2f 2f 20 return 0;...//
3760: 70 2d 3e 63 75 72 73 6f 72 20 77 61 73 20 73 65 p->cursor was se
3770: 74 20 62 79 20 66 69 6e 64 45 6e 64 4f 66 42 6c t by findEndOfBl
3780: 6f 63 6b 0a 09 70 2d 3e 74 68 69 73 2d 3e 6b 69 ock..p->this->ki
3790: 6e 64 20 3d 20 4b 49 4e 44 5f 4e 4f 5f 57 49 4b nd = KIND_NO_WIK
37a0: 49 5f 42 4c 4f 43 4b 3b 0a 09 70 2d 3e 74 68 69 I_BLOCK;..p->thi
37b0: 73 2d 3e 65 6e 64 20 3d 20 73 3b 0a 09 72 65 74 s->end = s;..ret
37c0: 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2f 7d 7d 7d 0a urn 1;.}..//}}}.
37d0: 73 74 61 74 69 63 20 69 6e 74 20 69 73 50 61 72 static int isPar
37e0: 61 42 72 65 61 6b 28 50 61 72 73 65 72 20 2a 70 aBreak(Parser *p
37f0: 29 7b 2f 2f 7b 7b 7b 0a 0a 09 63 68 61 72 20 2a ){//{{{...char *
3800: 73 20 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 s = cr_nextLine(
3810: 70 2c 20 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 09 p, p->cursor);..
3820: 69 66 20 28 21 70 2d 3e 6c 69 6e 65 57 61 73 42 if (!p->lineWasB
3830: 6c 61 6e 6b 29 20 72 65 74 75 72 6e 20 30 3b 0a lank) return 0;.
3840: 0a 09 70 2d 3e 63 75 72 73 6f 72 20 3d 20 73 3b ..p->cursor = s;
3850: 0a 09 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 ..p->this->kind
3860: 3d 20 4b 49 4e 44 5f 50 41 52 41 5f 42 52 45 41 = KIND_PARA_BREA
3870: 4b 3b 0a 09 72 65 74 75 72 6e 20 31 3b 0a 7d 0a K;..return 1;.}.
3880: 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 //}}}.static int
3890: 20 69 73 48 65 61 64 69 6e 67 28 50 61 72 73 65 isHeading(Parse
38a0: 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 63 68 r *p){//{{{...ch
38b0: 61 72 20 2a 73 20 3d 20 63 72 5f 73 6b 69 70 42 ar *s = cr_skipB
38c0: 6c 61 6e 6b 73 28 70 2c 20 70 2d 3e 63 75 72 73 lanks(p, p->curs
38d0: 6f 72 29 3b 0a 0a 09 69 6e 74 20 6c 65 76 65 6c or);...int level
38e0: 20 3d 20 63 72 5f 63 6f 75 6e 74 43 68 61 72 73 = cr_countChars
38f0: 28 70 2c 20 73 2c 20 27 3d 27 29 3b 0a 09 69 66 (p, s, '=');..if
3900: 20 28 21 6c 65 76 65 6c 29 20 72 65 74 75 72 6e (!level) return
3910: 20 30 3b 0a 0a 09 73 20 3d 20 63 72 5f 73 6b 69 0;...s = cr_ski
3920: 70 42 6c 61 6e 6b 73 28 70 2c 20 73 20 2b 20 6c pBlanks(p, s + l
3930: 65 76 65 6c 29 3b 0a 0a 09 70 2d 3e 74 68 69 73 evel);...p->this
3940: 2d 3e 73 74 61 72 74 20 3d 20 73 3b 0a 0a 09 73 ->start = s;...s
3950: 20 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 = cr_nextLine(p
3960: 2c 20 73 29 3b 0a 09 63 68 61 72 20 2a 7a 20 3d , s);..char *z =
3970: 20 73 3b 0a 0a 09 69 66 20 28 73 5b 2d 31 5d 20 s;...if (s[-1]
3980: 3d 3d 20 27 5c 6e 27 29 20 73 2d 2d 3b 0a 09 77 == '\n') s--;..w
3990: 68 69 6c 65 28 73 5b 2d 31 5d 20 3d 3d 20 27 20 hile(s[-1] == '
39a0: 27 20 7c 7c 20 73 5b 2d 31 5d 3d 3d 27 5c 74 27 ' || s[-1]=='\t'
39b0: 29 20 73 2d 2d 3b 0a 09 77 68 69 6c 65 28 73 5b ) s--;..while(s[
39c0: 2d 31 5d 20 3d 3d 20 27 3d 27 20 29 20 73 2d 2d -1] == '=' ) s--
39d0: 3b 0a 09 69 66 20 28 70 2d 3e 74 68 69 73 2d 3e ;..if (p->this->
39e0: 73 74 61 72 74 20 3c 20 73 29 7b 0a 09 09 70 2d start < s){...p-
39f0: 3e 63 75 72 73 6f 72 20 3d 20 7a 3b 0a 09 09 70 >cursor = z;...p
3a00: 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 4b ->this->kind = K
3a10: 49 4e 44 5f 48 45 41 44 49 4e 47 3b 0a 09 09 70 IND_HEADING;...p
3a20: 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d 20 73 3b ->this->end = s;
3a30: 0a 09 09 70 2d 3e 74 68 69 73 2d 3e 6c 65 76 65 ...p->this->leve
3a40: 6c 20 3d 20 6c 65 76 65 6c 3b 0a 09 09 72 65 74 l = level;...ret
3a50: 75 72 6e 20 31 3b 0a 09 7d 0a 09 72 65 74 75 72 urn 1;..}..retur
3a60: 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 n 0;.}.//}}}.sta
3a70: 74 69 63 20 69 6e 74 20 69 73 48 6f 72 69 7a 6f tic int isHorizo
3a80: 6e 74 61 6c 52 75 6c 65 28 50 61 72 73 65 72 20 ntalRule(Parser
3a90: 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 63 68 61 72 *p){//{{{...char
3aa0: 20 2a 73 20 3d 20 63 72 5f 73 6b 69 70 42 6c 61 *s = cr_skipBla
3ab0: 6e 6b 73 28 70 2c 20 70 2d 3e 63 75 72 73 6f 72 nks(p, p->cursor
3ac0: 29 3b 0a 0a 09 69 6e 74 20 6c 65 76 65 6c 20 3d );...int level =
3ad0: 20 63 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 70 cr_countChars(p
3ae0: 2c 20 73 2c 20 27 2d 27 29 3b 0a 0a 09 69 66 20 , s, '-');...if
3af0: 20 28 6c 65 76 65 6c 20 3c 20 34 29 20 72 65 74 (level < 4) ret
3b00: 75 72 6e 20 30 3b 0a 09 73 20 3d 20 63 72 5f 6e urn 0;..s = cr_n
3b10: 65 78 74 4c 69 6e 65 28 70 2c 20 73 20 2b 20 6c extLine(p, s + l
3b20: 65 76 65 6c 29 3b 0a 09 69 66 20 28 21 70 2d 3e evel);..if (!p->
3b30: 6c 69 6e 65 57 61 73 42 6c 61 6e 6b 29 20 72 65 lineWasBlank) re
3b40: 74 75 72 6e 20 30 3b 0a 0a 09 70 2d 3e 63 75 72 turn 0;...p->cur
3b50: 73 6f 72 20 3d 20 73 3b 0a 09 70 2d 3e 74 68 69 sor = s;..p->thi
3b60: 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 48 s->kind = KIND_H
3b70: 4f 52 49 5a 4f 4e 54 41 4c 5f 52 55 4c 45 3b 0a ORIZONTAL_RULE;.
3b80: 0a 09 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 2f 2f ..return 1;.}.//
3b90: 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 69 }}}.static int i
3ba0: 73 4c 69 73 74 49 74 65 6d 28 50 61 72 73 65 72 sListItem(Parser
3bb0: 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 63 68 61 *p){//{{{...cha
3bc0: 72 20 2a 73 20 3d 20 63 72 5f 73 6b 69 70 42 6c r *s = cr_skipBl
3bd0: 61 6e 6b 73 28 70 2c 20 70 2d 3e 63 75 72 73 6f anks(p, p->curso
3be0: 72 29 3b 0a 0a 09 69 6e 74 20 6c 65 76 65 6c 20 r);...int level
3bf0: 3d 20 63 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 = cr_countChars(
3c00: 70 2c 20 73 2c 20 27 23 27 29 3b 0a 09 69 66 20 p, s, '#');..if
3c10: 28 21 6c 65 76 65 6c 29 20 6c 65 76 65 6c 20 3d (!level) level =
3c20: 20 63 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 70 cr_countChars(p
3c30: 2c 20 73 2c 20 27 2a 27 29 3b 0a 0a 09 69 66 20 , s, '*');...if
3c40: 28 20 21 6c 65 76 65 6c 29 20 72 65 74 75 72 6e ( !level) return
3c50: 20 30 3b 0a 0a 09 70 2d 3e 74 68 69 73 2d 3e 6b 0;...p->this->k
3c60: 69 6e 64 20 3d 20 28 73 5b 30 5d 20 3d 3d 20 27 ind = (s[0] == '
3c70: 23 27 29 20 3f 20 4b 49 4e 44 5f 4f 52 44 45 52 #') ? KIND_ORDER
3c80: 45 44 5f 4c 49 53 54 20 3a 20 4b 49 4e 44 5f 55 ED_LIST : KIND_U
3c90: 4e 4f 52 44 45 52 45 44 5f 4c 49 53 54 3b 0a 09 NORDERED_LIST;..
3ca0: 70 2d 3e 74 68 69 73 2d 3e 6c 65 76 65 6c 20 3d p->this->level =
3cb0: 20 6c 65 76 65 6c 3b 0a 0a 09 73 20 3d 20 63 72 level;...s = cr
3cc0: 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 73 _skipBlanks(p, s
3cd0: 20 2b 20 6c 65 76 65 6c 29 3b 0a 09 70 2d 3e 74 + level);..p->t
3ce0: 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 73 3b 0a his->start = s;.
3cf0: 0a 09 73 20 3d 20 63 72 5f 6e 65 78 74 4c 69 6e ..s = cr_nextLin
3d00: 65 28 70 2c 20 73 29 3b 0a 09 69 66 20 28 70 2d e(p, s);..if (p-
3d10: 3e 6c 69 6e 65 57 61 73 42 6c 61 6e 6b 29 20 72 >lineWasBlank) r
3d20: 65 74 75 72 6e 20 30 3b 0a 0a 09 69 66 20 28 63 eturn 0;...if (c
3d30: 72 5f 61 64 64 4c 69 73 74 49 74 65 6d 28 70 2c r_addListItem(p,
3d40: 20 70 2d 3e 74 68 69 73 29 29 7b 0a 09 09 70 2d p->this)){...p-
3d50: 3e 63 75 72 73 6f 72 20 3d 20 70 2d 3e 74 68 69 >cursor = p->thi
3d60: 73 2d 3e 65 6e 64 20 3d 20 73 3b 0a 09 09 72 65 s->end = s;...re
3d70: 74 75 72 6e 20 31 3b 0a 09 7d 0a 09 70 2d 3e 74 turn 1;..}..p->t
3d80: 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 30 3b 0a 09 his->kind = 0;..
3d90: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d return 0;.}.//}}
3da0: 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 69 73 54 }.static int isT
3db0: 61 62 6c 65 28 50 61 72 73 65 72 20 2a 70 29 7b able(Parser *p){
3dc0: 2f 2f 7b 7b 7b 0a 0a 09 70 2d 3e 74 68 69 73 2d //{{{...p->this-
3dd0: 3e 73 74 61 72 74 20 3d 20 70 2d 3e 63 75 72 73 >start = p->curs
3de0: 6f 72 3b 0a 09 63 68 61 72 20 2a 73 20 3d 20 63 or;..char *s = c
3df0: 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 r_skipBlanks(p,
3e00: 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 09 69 66 20 p->cursor);..if
3e10: 28 73 5b 30 5d 20 21 3d 20 27 7c 27 29 20 72 65 (s[0] != '|') re
3e20: 74 75 72 6e 20 30 3b 0a 20 20 73 20 2b 3d 31 3b turn 0;. s +=1;
3e30: 0a 09 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 ..p->this->kind
3e40: 3d 20 4b 49 4e 44 5f 54 41 42 4c 45 3b 0a 0a 0a = KIND_TABLE;...
3e50: 09 2f 2f 70 2d 3e 63 75 72 73 6f 72 20 3d 20 09 .//p->cursor = .
3e60: 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d 20 63 p->this->end = c
3e70: 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73 29 r_nextLine(p, s)
3e80: 3b 0a 09 4e 6f 64 65 20 2a 72 6f 77 3b 0a 09 4e ;..Node *row;..N
3e90: 6f 64 65 20 2a 74 61 69 6c 20 3d 20 4e 55 4c 4c ode *tail = NULL
3ea0: 3b 0a 0a 09 77 68 69 6c 65 20 28 31 29 20 7b 0a ;...while (1) {.
3eb0: 0a 09 09 72 6f 77 20 3d 20 70 6f 6f 6c 5f 6e 65 ...row = pool_ne
3ec0: 77 28 70 29 3b 0a 09 09 72 6f 77 2d 3e 6b 69 6e w(p);...row->kin
3ed0: 64 20 3d 20 4b 49 4e 44 5f 54 41 42 4c 45 5f 52 d = KIND_TABLE_R
3ee0: 4f 57 3b 0a 0a 09 09 69 66 20 28 74 61 69 6c 29 OW;....if (tail)
3ef0: 20 09 74 61 69 6c 20 3d 20 74 61 69 6c 2d 3e 6e .tail = tail->n
3f00: 65 78 74 20 3d 20 72 6f 77 3b 0a 09 09 65 6c 73 ext = row;...els
3f10: 65 20 70 2d 3e 74 68 69 73 2d 3e 63 68 69 6c 64 e p->this->child
3f20: 72 65 6e 20 3d 20 74 61 69 6c 20 3d 20 72 6f 77 ren = tail = row
3f30: 3b 0a 0a 09 09 72 6f 77 2d 3e 73 74 61 72 74 20 ;....row->start
3f40: 3d 20 73 3b 0a 09 09 70 2d 3e 63 75 72 73 6f 72 = s;...p->cursor
3f50: 20 3d 20 73 20 3d 20 09 72 6f 77 2d 3e 65 6e 64 = s = .row->end
3f60: 20 3d 20 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 = p->this->end
3f70: 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c = cr_nextLine(p,
3f80: 20 73 29 3b 0a 0a 09 09 69 66 20 28 72 6f 77 2d s);....if (row-
3f90: 3e 65 6e 64 5b 2d 31 5d 20 3d 3d 20 27 5c 6e 27 >end[-1] == '\n'
3fa0: 29 20 72 6f 77 2d 3e 65 6e 64 20 2d 3d 20 31 3b ) row->end -= 1;
3fb0: 0a 09 09 77 68 69 6c 65 28 72 6f 77 2d 3e 65 6e ...while(row->en
3fc0: 64 5b 2d 31 5d 20 3d 3d 20 27 20 27 20 29 20 72 d[-1] == ' ' ) r
3fd0: 6f 77 2d 3e 65 6e 64 20 2d 3d 20 31 3b 0a 09 09 ow->end -= 1;...
3fe0: 69 66 20 28 72 6f 77 2d 3e 65 6e 64 5b 2d 31 5d if (row->end[-1]
3ff0: 20 3d 3d 20 27 7c 27 29 20 72 6f 77 2d 3e 65 6e == '|') row->en
4000: 64 20 2d 3d 20 31 3b 0a 0a 09 09 69 66 20 28 21 d -= 1;....if (!
4010: 2a 73 29 20 62 72 65 61 6b 3b 0a 0a 09 09 2f 2f *s) break;....//
4020: 20 62 6c 61 6e 6b 73 20 2a 6e 6f 74 2a 20 6e 6f blanks *not* no
4030: 72 6d 61 6c 69 7a 65 64 0a 09 09 73 20 3d 20 63 rmalized...s = c
4040: 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 r_skipBlanks(p,
4050: 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 09 09 69 66 p->cursor);...if
4060: 20 28 73 5b 30 5d 20 21 3d 20 27 7c 27 29 20 62 (s[0] != '|') b
4070: 72 65 61 6b 3b 0a 09 09 73 2b 2b 3b 0a 0a 09 7d reak;...s++;...}
4080: 0a 09 72 65 74 75 72 6e 20 31 3b 0a 0a 7d 3b 0a ..return 1;..};.
4090: 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 //}}}.static int
40a0: 20 69 73 50 61 72 61 67 72 61 70 68 28 50 61 72 isParagraph(Par
40b0: 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 09 ser *p){//{{{...
40c0: 63 68 61 72 20 2a 73 20 3d 20 70 2d 3e 63 75 72 char *s = p->cur
40d0: 73 6f 72 3b 0a 09 70 2d 3e 74 68 69 73 2d 3e 73 sor;..p->this->s
40e0: 74 61 72 74 20 3d 20 73 3b 0a 0a 09 73 20 3d 20 tart = s;...s =
40f0: 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73 cr_nextLine(p, s
4100: 29 3b 0a 09 70 2d 3e 63 75 72 73 6f 72 20 3d 20 );..p->cursor =
4110: 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d 20 73 p->this->end = s
4120: 3b 0a 09 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 ;..p->this->kind
4130: 20 3d 20 4b 49 4e 44 5f 50 41 52 41 47 52 41 50 = KIND_PARAGRAP
4140: 48 3b 0a 09 72 65 74 75 72 6e 20 31 3b 0a 0a 7d H;..return 1;..}
4150: 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 76 6f .//}}}.static vo
4160: 69 64 20 63 72 5f 70 61 72 73 65 28 50 61 72 73 id cr_parse(Pars
4170: 65 72 20 2a 70 2c 20 63 68 61 72 2a 20 7a 29 7b er *p, char* z){
4180: 2f 2f 7b 7b 7b 0a 0a 09 70 2d 3e 70 72 65 76 69 //{{{...p->previ
4190: 6f 75 73 20 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 ous = pool_new(p
41a0: 29 3b 0a 09 70 2d 3e 70 72 65 76 69 6f 75 73 2d );..p->previous-
41b0: 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 50 41 52 >kind = KIND_PAR
41c0: 41 5f 42 52 45 41 4b 3b 0a 0a 09 70 2d 3e 74 68 A_BREAK;...p->th
41d0: 69 73 20 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 is = pool_new(p)
41e0: 3b 0a 09 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64 ;..p->this->kind
41f0: 20 3d 20 4b 49 4e 44 5f 50 41 52 41 5f 42 52 45 = KIND_PARA_BRE
4200: 41 4b 3b 0a 0a 09 70 2d 3e 69 6e 4c 69 6e 6b 20 AK;...p->inLink
4210: 3d 20 30 3b 0a 09 70 2d 3e 69 6e 54 61 62 6c 65 = 0;..p->inTable
4220: 20 3d 20 30 3b 0a 0a 09 70 2d 3e 63 75 72 73 6f = 0;...p->curso
4230: 72 20 3d 20 7a 3b 0a 09 70 2d 3e 6c 69 73 74 20 r = z;..p->list
4240: 3d 20 4e 55 4c 4c 3b 0a 09 70 2d 3e 69 73 74 61 = NULL;..p->ista
4250: 63 6b 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 77 68 69 ck = NULL;...whi
4260: 6c 65 20 28 70 2d 3e 63 75 72 73 6f 72 5b 30 5d le (p->cursor[0]
4270: 29 20 7b 0a 0a 09 09 77 68 69 6c 65 20 28 31 29 ) {....while (1)
4280: 7b 0a 0a 09 09 09 2f 2f 20 6d 75 73 74 20 62 65 {.....// must be
4290: 20 66 69 72 73 74 0a 09 09 09 69 66 20 28 69 73 first....if (is
42a0: 4e 6f 57 69 6b 69 42 6c 6f 63 6b 28 70 29 29 20 NoWikiBlock(p))
42b0: 62 72 65 61 6b 3b 0a 09 09 09 69 66 20 28 69 73 break;....if (is
42c0: 50 61 72 61 42 72 65 61 6b 28 70 29 29 20 09 62 ParaBreak(p)) .b
42d0: 72 65 61 6b 3b 0a 0a 09 09 09 2f 2f 20 6f 72 64 reak;.....// ord
42e0: 65 72 20 6e 6f 74 20 69 6d 70 6f 72 74 61 6e 74 er not important
42f0: 0a 09 09 09 69 66 20 28 69 73 48 65 61 64 69 6e ....if (isHeadin
4300: 67 28 70 29 29 20 62 72 65 61 6b 3b 0a 09 09 09 g(p)) break;....
4310: 69 66 20 28 69 73 48 6f 72 69 7a 6f 6e 74 61 6c if (isHorizontal
4320: 52 75 6c 65 28 70 29 29 20 62 72 65 61 6b 3b 0a Rule(p)) break;.
4330: 09 09 09 69 66 20 28 69 73 4c 69 73 74 49 74 65 ...if (isListIte
4340: 6d 28 70 29 29 20 62 72 65 61 6b 3b 0a 09 09 09 m(p)) break;....
4350: 69 66 20 28 69 73 54 61 62 6c 65 28 70 29 29 20 if (isTable(p))
4360: 62 72 65 61 6b 3b 0a 0a 09 09 09 2f 2f 20 68 65 break;.....// he
4370: 72 65 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63 re for efficienc
4380: 79 3f 0a 09 09 09 69 66 20 28 69 73 45 6e 64 57 y?....if (isEndW
4390: 69 6b 69 4d 61 72 6b 65 72 28 70 29 29 20 62 72 ikiMarker(p)) br
43a0: 65 61 6b 3b 0a 0a 09 09 09 2f 2f 20 6d 75 73 74 eak;.....// must
43b0: 20 62 65 20 6c 61 73 74 0a 09 09 09 69 66 20 28 be last....if (
43c0: 69 73 50 61 72 61 67 72 61 70 68 28 70 29 29 3b isParagraph(p));
43d0: 20 62 72 65 61 6b 3b 0a 0a 09 09 09 2f 2f 20 64 break;.....// d
43e0: 6f 68 21 0a 09 09 20 20 61 73 73 65 72 74 28 30 oh!... assert(0
43f0: 29 3b 0a 09 09 7d 0a 0a 09 09 69 6e 74 20 6b 69 );...}....int ki
4400: 6e 64 20 3d 20 70 2d 3e 74 68 69 73 2d 3e 6b 69 nd = p->this->ki
4410: 6e 64 3b 0a 09 09 69 6e 74 20 70 72 65 76 20 3d nd;...int prev =
4420: 20 70 2d 3e 70 72 65 76 69 6f 75 73 2d 3e 6b 69 p->previous->ki
4430: 6e 64 3b 0a 0a 09 09 69 66 20 28 6b 69 6e 64 20 nd;....if (kind
4440: 26 20 4b 49 4e 44 5f 45 4e 44 5f 57 49 4b 49 5f & KIND_END_WIKI_
4450: 4d 41 52 4b 45 52 29 09 72 65 74 75 72 6e 3b 0a MARKER).return;.
4460: 0a 09 09 69 66 20 28 6b 69 6e 64 20 3d 3d 20 4b ...if (kind == K
4470: 49 4e 44 5f 50 41 52 41 47 52 41 50 48 20 26 26 IND_PARAGRAPH &&
4480: 20 70 72 65 76 20 26 20 4b 49 4e 44 5f 4c 49 53 prev & KIND_LIS
4490: 54 5f 4f 52 5f 50 41 52 41 47 52 41 50 48 29 20 T_OR_PARAGRAPH)
44a0: 7b 0a 09 09 09 09 70 2d 3e 70 72 65 76 69 6f 75 {.....p->previou
44b0: 73 2d 3e 65 6e 64 20 3d 20 70 2d 3e 74 68 69 73 s->end = p->this
44c0: 2d 3e 65 6e 64 3b 0a 09 09 09 09 70 2d 3e 74 68 ->end;.....p->th
44d0: 69 73 20 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 is = pool_new(p)
44e0: 3b 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a ;.....continue;.
44f0: 09 09 7d 0a 0a 09 09 69 66 20 28 20 21 28 6b 69 ..}....if ( !(ki
4500: 6e 64 20 26 20 4b 49 4e 44 5f 4c 49 53 54 20 26 nd & KIND_LIST &
4510: 26 20 70 72 65 76 20 26 20 4b 49 4e 44 5f 4c 49 & prev & KIND_LI
4520: 53 54 29 20 29 0a 09 09 09 63 72 5f 72 65 6e 64 ST) )....cr_rend
4530: 65 72 28 70 2c 20 70 2d 3e 70 72 65 76 69 6f 75 er(p, p->previou
4540: 73 29 3b 0a 0a 09 09 70 2d 3e 70 72 65 76 69 6f s);....p->previo
4550: 75 73 20 3d 20 70 2d 3e 74 68 69 73 3b 0a 09 09 us = p->this;...
4560: 70 2d 3e 74 68 69 73 20 3d 20 70 6f 6f 6c 5f 6e p->this = pool_n
4570: 65 77 28 70 29 3b 0a 0a 09 7d 0a 7d 0a 2f 2f 7d ew(p);...}.}.//}
4580: 7d 7d 0a 0a 63 68 61 72 20 2a 77 69 6b 69 5f 72 }}..char *wiki_r
4590: 65 6e 64 65 72 5f 63 72 65 6f 6c 65 28 52 65 6e ender_creole(Ren
45a0: 64 65 72 65 72 20 2a 72 2c 20 63 68 61 72 20 2a derer *r, char *
45b0: 7a 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 50 61 72 73 z){//{{{.. Pars
45c0: 65 72 20 70 61 72 73 65 72 3b 0a 09 50 61 72 73 er parser;..Pars
45d0: 65 72 20 2a 70 20 3d 20 26 70 61 72 73 65 72 3b er *p = &parser;
45e0: 0a 0a 09 70 2d 3e 72 20 3d 20 72 3b 0a 09 70 2d ...p->r = r;..p-
45f0: 3e 69 62 6c 6f 62 20 3d 20 72 2d 3e 70 4f 75 74 >iblob = r->pOut
4600: 3b 0a 0a 09 70 2d 3e 6e 46 72 65 65 20 3d 20 30 ;...p->nFree = 0
4610: 3b 0a 09 70 2d 3e 70 6f 6f 6c 20 3d 20 4e 55 4c ;..p->pool = NUL
4620: 4c 3b 0a 0a 09 63 72 5f 70 61 72 73 65 28 70 2c L;...cr_parse(p,
4630: 20 7a 29 3b 0a 0a 09 63 72 5f 72 65 6e 64 65 72 z);...cr_render
4640: 28 70 2c 20 70 2d 3e 70 72 65 76 69 6f 75 73 29 (p, p->previous)
4650: 3b 0a 0a 09 70 6f 6f 6c 5f 66 72 65 65 28 70 29 ;...pool_free(p)
4660: 3b 0a 0a 09 72 65 74 75 72 6e 20 70 2d 3e 63 75 ;...return p->cu
4670: 72 73 6f 72 3b 0a 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a rsor;..}.//}}}..
4680: 0a 63 68 61 72 20 2a 77 69 6b 69 5f 72 65 6e 64 .char *wiki_rend
4690: 65 72 5f 6d 61 63 72 6f 28 52 65 6e 64 65 72 65 er_macro(Rendere
46a0: 72 20 2a 70 2c 20 63 68 61 72 20 2a 7a 2c 20 69 r *p, char *z, i
46b0: 6e 74 20 2a 74 6f 6b 65 6e 54 79 70 65 29 7b 0a nt *tokenType){.
46c0: 09 69 66 20 28 21 6d 65 6d 63 6d 70 28 7a 2c 20 .if (!memcmp(z,
46d0: 22 3c 3c 66 6f 73 73 69 6c 3e 3e 22 2c 20 39 29 "<<fossil>>", 9)
46e0: 29 7b 0a 09 09 2a 74 6f 6b 65 6e 54 79 70 65 20 ){...*tokenType
46f0: 3d 20 31 3b 0a 09 09 72 65 74 75 72 6e 20 7a 20 = 1;...return z
4700: 2b 20 31 30 3b 0a 09 7d 0a 09 69 66 20 28 6d 65 + 10;..}..if (me
4710: 6d 63 6d 70 28 7a 2c 20 22 3c 3c 63 72 65 6f 6c mcmp(z, "<<creol
4720: 65 3e 3e 22 2c 20 39 29 29 20 7b 0a 09 09 2a 74 e>>", 9)) {...*t
4730: 6f 6b 65 6e 54 79 70 65 20 3d 20 30 3b 0a 09 09 okenType = 0;...
4740: 72 65 74 75 72 6e 20 7a 3b 0a 09 7d 0a 09 2a 74 return z;..}..*t
4750: 6f 6b 65 6e 54 79 70 65 20 3d 20 31 3b 0a 09 72 okenType = 1;..r
4760: 65 74 75 72 6e 20 77 69 6b 69 5f 72 65 6e 64 65 eturn wiki_rende
4770: 72 5f 63 72 65 6f 6c 65 28 70 2c 20 7a 2b 31 30 r_creole(p, z+10
4780: 29 3b 0a 0a 7d 0a 0a 2f 2a 20 3a 66 6f 6c 64 69 );..}../* :foldi
4790: 6e 67 3d 65 78 70 6c 69 63 69 74 3a 63 6f 6c 6c ng=explicit:coll
47a0: 61 70 73 65 46 6f 6c 64 73 3d 31 3a 74 61 62 53 apseFolds=1:tabS
47b0: 69 7a 65 3d 32 3a 69 6e 64 65 6e 74 53 69 7a 65 ize=2:indentSize
47c0: 3d 32 3a 6e 6f 54 61 62 73 3d 66 61 6c 73 65 3a =2:noTabs=false:
47d0: 20 2a 2f 0a */.