Hex Artifact Content
Not logged in

Artifact 803615829f509613a0c28b2c6be183212e867068:

File src/creoleparser.c part of check-in [26af399a5c] - mods to creole parser and add some default style for creole tables. by robert on 2009-05-09 06:19:39.

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