Hex Artifact Content
Not logged in

Artifact f8a37ab2ca7a01bf571791fa61c48f7f1d004728:

File src/creoleparser.c part of check-in [7a39dde24b] - Clean up and merge updates from trunk by robert on 2009-09-26 08:17:33.

0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 32 30 30 39 20 52 6f 62 65 72 74 20  (c) 2009 Robert 
0020: 4c 65 64 67 65 72 0a 2a 2a 0a 2a 2a 20 7b 7b 7b  Ledger.**.** {{{
0030: 20 4c 69 63 65 6e 73 65 0a 2a 2a 0a 2a 2a 20 54   License.**.** T
0040: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66  his program is f
0050: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f  ree software; yo
0060: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75  u can redistribu
0070: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20  te it and/or.** 
0080: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20  modify it under 
0090: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65  the terms of the
00a0: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62   GNU General Pub
00b0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 76  lic.** License v
00c0: 65 72 73 69 6f 6e 20 32 20 61 73 20 70 75 62 6c  ersion 2 as publ
00d0: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65  ished by the Fre
00e0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64  e Software Found
00f0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ation..**.** Thi
0100: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73  s program is dis
0110: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20  tributed in the 
0120: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c  hope that it wil
0130: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20  l be useful,.** 
0140: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20  but WITHOUT ANY 
0150: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75  WARRANTY; withou
0160: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69  t even the impli
0170: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a  ed warranty of.*
0180: 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54  * MERCHANTABILIT
0190: 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52  Y or FITNESS FOR
01a0: 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55   A PARTICULAR PU
01b0: 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 20  RPOSE.  See the 
01c0: 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 50  GNU.** General P
01d0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f  ublic License fo
01e0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a  r more details..
01f0: 2a 2a 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c 64  **.** You should
0200: 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 61   have received a
0210: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e 55   copy of the GNU
0220: 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 0a   General Public.
0230: 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e 67  ** License along
0240: 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72 61   with this libra
0250: 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69 74  ry; if not, writ
0260: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65 65  e to the.** Free
0270: 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61   Software Founda
0280: 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20 54  tion, Inc., 59 T
0290: 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53 75  emple Place - Su
02a0: 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73 74  ite 330,.** Bost
02b0: 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31 33  on, MA  02111-13
02c0: 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20 41  07, USA..**.** A
02d0: 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69 6e  uthor contact in
02e0: 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 20  formation:.**   
02f0: 72 6f 62 65 72 74 40 70 79 74 72 61 73 68 2e 63  robert@pytrash.c
0300: 6f 2e 75 6b 0a 2a 2a 20 20 20 68 74 74 70 3a 2f  o.uk.**   http:/
0310: 2f 70 79 74 72 61 73 68 2e 63 6f 2e 75 6b 0a 2a  /pytrash.co.uk.*
0320: 2a 7d 7d 7d 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  *}}}.***********
0330: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0340: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0350: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0370: 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ****.**.** This 
0380: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 63 6f  file contains co
0390: 64 65 20 74 6f 20 72 65 6e 64 65 72 20 63 72 65  de to render cre
03a0: 6f 6c 65 20 31 2e 30 20 66 6f 72 6d 61 74 65 64  ole 1.0 formated
03b0: 20 74 65 78 74 20 61 73 20 68 74 6d 6c 2e 0a 2a   text as html..*
03c0: 2f 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65  /.#include <asse
03d0: 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 22  rt.h>.#include "
03e0: 63 6f 6e 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75  config.h".#inclu
03f0: 64 65 20 22 63 72 65 6f 6c 65 70 61 72 73 65 72  de "creoleparser
0400: 2e 68 22 0a 0a 23 69 66 20 49 4e 54 45 52 46 41  .h"..#if INTERFA
0410: 43 45 0a 23 64 65 66 69 6e 65 20 48 41 56 45 5f  CE.#define HAVE_
0420: 43 52 45 4f 4c 45 5f 4d 41 43 52 4f 20 31 0a 23  CREOLE_MACRO 1.#
0430: 65 6e 64 69 66 0a 0a 2f 2f 7b 7b 7b 20 4c 4f 43  endif..//{{{ LOC
0440: 41 4c 20 49 4e 54 45 52 46 41 43 45 0a 23 69 66  AL INTERFACE.#if
0450: 20 4c 4f 43 41 4c 5f 49 4e 54 45 52 46 41 43 45   LOCAL_INTERFACE
0460: 0a 0a 23 64 65 66 69 6e 65 20 50 4f 4f 4c 5f 43  ..#define POOL_C
0470: 48 55 4e 4b 5f 53 49 5a 45 20 31 30 30 0a 0a 2f  HUNK_SIZE 100../
0480: 2f 7b 7b 7b 20 4b 49 4e 44 0a 23 64 65 66 69 6e  /{{{ KIND.#defin
0490: 65 20 4b 49 4e 44 5f 52 4f 4f 54 20 20 20 20 20  e KIND_ROOT     
04a0: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 30 31         0x0000001
04b0: 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 48 4f  .#define KIND_HO
04c0: 52 49 5a 4f 4e 54 41 4c 5f 52 55 4c 45 20 30 78  RIZONTAL_RULE 0x
04d0: 30 30 30 30 30 30 32 0a 23 64 65 66 69 6e 65 20  0000002.#define 
04e0: 4b 49 4e 44 5f 48 45 41 44 49 4e 47 20 20 20 20  KIND_HEADING    
04f0: 20 20 20 20 20 30 78 30 30 30 30 30 30 34 0a 23       0x0000004.#
0500: 64 65 66 69 6e 65 20 4b 49 4e 44 5f 4f 52 44 45  define KIND_ORDE
0510: 52 45 44 5f 4c 49 53 54 20 20 20 20 30 78 30 30  RED_LIST    0x00
0520: 30 30 30 30 38 0a 0a 23 64 65 66 69 6e 65 20 4b  00008..#define K
0530: 49 4e 44 5f 55 4e 4f 52 44 45 52 45 44 5f 4c 49  IND_UNORDERED_LI
0540: 53 54 20 20 30 78 30 30 30 30 30 31 30 0a 23 64  ST  0x0000010.#d
0550: 65 66 69 6e 65 20 4b 49 4e 44 5f 50 41 52 41 47  efine KIND_PARAG
0560: 52 41 50 48 20 20 20 20 20 20 20 30 78 30 30 30  RAPH       0x000
0570: 30 30 32 30 0a 23 64 65 66 69 6e 65 20 4b 49 4e  0020.#define KIN
0580: 44 5f 54 41 42 4c 45 20 20 20 20 20 20 20 20 20  D_TABLE         
0590: 20 20 30 78 30 30 30 30 30 34 30 0a 23 64 65 66    0x0000040.#def
05a0: 69 6e 65 20 4b 49 4e 44 5f 4e 4f 5f 57 49 4b 49  ine KIND_NO_WIKI
05b0: 5f 42 4c 4f 43 4b 20 20 20 30 78 30 30 30 30 30  _BLOCK   0x00000
05c0: 38 30 0a 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44  80..#define KIND
05d0: 5f 50 41 52 41 5f 42 52 45 41 4b 20 20 20 20 20  _PARA_BREAK     
05e0: 20 30 78 30 30 30 30 31 30 30 0a 23 64 65 66 69   0x0000100.#defi
05f0: 6e 65 20 4b 49 4e 44 5f 45 4e 44 5f 57 49 4b 49  ne KIND_END_WIKI
0600: 5f 4d 41 52 4b 45 52 20 30 78 30 30 30 30 32 30  _MARKER 0x000020
0610: 30 0a 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f  0..#define KIND_
0620: 42 4f 4c 44 20 20 20 20 20 20 20 20 20 20 20 20  BOLD            
0630: 30 78 30 30 30 30 34 30 30 0a 23 64 65 66 69 6e  0x0000400.#defin
0640: 65 20 4b 49 4e 44 5f 49 54 41 4c 49 43 20 20 20  e KIND_ITALIC   
0650: 20 20 20 20 20 20 20 30 78 30 30 30 30 38 30 30         0x0000800
0660: 0a 23 64 65 66 69 6e 65 20 4b 49 4e 44 5f 53 55  .#define KIND_SU
0670: 50 45 52 53 43 52 49 50 54 20 20 20 20 20 30 78  PERSCRIPT     0x
0680: 30 30 30 31 30 30 30 0a 23 64 65 66 69 6e 65 20  0001000.#define 
0690: 4b 49 4e 44 5f 53 55 42 53 43 52 49 50 54 20 20  KIND_SUBSCRIPT  
06a0: 20 20 20 20 20 30 78 30 30 30 32 30 30 30 0a 23       0x0002000.#
06b0: 64 65 66 69 6e 65 20 4b 49 4e 44 5f 4d 4f 4e 4f  define KIND_MONO
06c0: 53 50 41 43 45 44 20 20 20 20 20 20 30 78 30 30  SPACED      0x00
06d0: 30 34 30 30 30 0a 23 64 65 66 69 6e 65 20 4b 49  04000.#define KI
06e0: 4e 44 5f 42 52 45 41 4b 20 20 20 20 20 20 20 20  ND_BREAK        
06f0: 20 20 20 30 78 30 30 30 38 30 30 30 0a 0a 23 64     0x0008000..#d
0700: 65 66 69 6e 65 20 4b 49 4e 44 5f 54 41 42 4c 45  efine KIND_TABLE
0710: 5f 52 4f 57 20 20 20 20 20 20 20 30 78 30 30 31  _ROW       0x001
0720: 30 30 30 30 0a 2f 2f 7d 7d 7d 0a 2f 2f 7b 7b 7b  0000.//}}}.//{{{
0730: 20 46 4c 41 47 0a 2f 2f 20 6b 65 65 70 20 66 69   FLAG.// keep fi
0740: 72 73 74 20 66 6f 75 72 20 62 69 74 73 20 66 72  rst four bits fr
0750: 65 65 0a 23 64 65 66 69 6e 65 20 46 4c 41 47 5f  ee.#define FLAG_
0760: 43 45 4e 54 45 52 20 20 20 30 78 30 30 30 30 31  CENTER   0x00001
0770: 30 30 0a 2f 2f 7d 7d 7d 0a 73 74 72 75 63 74 20  00.//}}}.struct 
0780: 4e 6f 64 65 20 7b 2f 2f 7b 7b 7b 0a 0a 20 20 63  Node {//{{{..  c
0790: 68 61 72 20 2a 73 74 61 72 74 3b 0a 20 20 63 68  har *start;.  ch
07a0: 61 72 20 2a 65 6e 64 3b 0a 0a 20 20 69 6e 74 20  ar *end;..  int 
07b0: 6b 69 6e 64 3b 0a 20 20 69 6e 74 20 6c 65 76 65  kind;.  int leve
07c0: 6c 3b 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a  l;.  int flags;.
07d0: 0a 20 20 4e 6f 64 65 20 2a 70 61 72 65 6e 74 3b  .  Node *parent;
07e0: 0a 20 20 4e 6f 64 65 20 2a 6e 65 78 74 3b 0a 20  .  Node *next;. 
07f0: 20 4e 6f 64 65 20 2a 63 68 69 6c 64 72 65 6e 3b   Node *children;
0800: 0a 0a 7d 3b 0a 2f 2f 7d 7d 7d 0a 73 74 72 75 63  ..};.//}}}.struc
0810: 74 20 4e 6f 64 65 50 6f 6f 6c 20 7b 2f 2f 7b 7b  t NodePool {//{{
0820: 7b 0a 20 20 4e 6f 64 65 50 6f 6f 6c 20 2a 6e 65  {.  NodePool *ne
0830: 78 74 3b 0a 20 20 4e 6f 64 65 20 61 5b 50 4f 4f  xt;.  Node a[POO
0840: 4c 5f 43 48 55 4e 4b 5f 53 49 5a 45 5d 3b 0a 7d  L_CHUNK_SIZE];.}
0850: 0a 2f 2f 7d 7d 7d 0a 73 74 72 75 63 74 20 50 61  .//}}}.struct Pa
0860: 72 73 65 72 20 7b 2f 2f 7b 7b 7b 0a 0a 20 20 42  rser {//{{{..  B
0870: 6c 6f 62 20 2a 70 4f 75 74 3b 20 20 20 20 20 20  lob *pOut;      
0880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75             /* Ou
0890: 74 70 75 74 20 61 70 70 65 6e 64 65 64 20 74 6f  tput appended to
08a0: 20 74 68 69 73 20 62 6c 6f 62 20 2a 2f 0a 20 20   this blob */.  
08b0: 52 65 6e 64 65 72 65 72 20 2a 72 3b 0a 0a 20 20  Renderer *r;..  
08c0: 4e 6f 64 65 50 6f 6f 6c 20 2a 70 6f 6f 6c 3b 0a  NodePool *pool;.
08d0: 20 20 69 6e 74 20 6e 46 72 65 65 3b 0a 0a 20 20    int nFree;..  
08e0: 4e 6f 64 65 20 2a 74 68 69 73 3b 0a 20 20 4e 6f  Node *this;.  No
08f0: 64 65 20 2a 70 72 65 76 69 6f 75 73 3b 0a 20 20  de *previous;.  
0900: 4e 6f 64 65 20 2a 6c 69 73 74 3b 0a 0a 20 20 63  Node *list;..  c
0910: 68 61 72 20 2a 63 75 72 73 6f 72 3b 0a 0a 20 20  har *cursor;..  
0920: 69 6e 74 20 6c 69 6e 65 57 61 73 42 6c 61 6e 6b  int lineWasBlank
0930: 3b 0a 20 20 69 6e 74 20 63 68 61 72 43 6f 75 6e  ;.  int charCoun
0940: 74 3b 0a 0a 20 20 4e 6f 64 65 20 2a 69 74 65 6d  t;..  Node *item
0950: 3b 0a 20 20 4e 6f 64 65 20 2a 69 73 74 61 63 6b  ;.  Node *istack
0960: 3b 0a 20 20 63 68 61 72 20 2a 69 63 75 72 73 6f  ;.  char *icurso
0970: 72 3b 0a 20 20 63 68 61 72 20 2a 69 65 6e 64 3b  r;.  char *iend;
0980: 0a 0a 20 20 69 6e 74 20 69 6e 4c 69 6e 6b 3b 0a  ..  int inLink;.
0990: 20 20 69 6e 74 20 69 6e 54 61 62 6c 65 3b 0a 20    int inTable;. 
09a0: 20 69 6e 74 20 69 65 73 63 3b 0a 0a 20 20 42 6c   int iesc;..  Bl
09b0: 6f 62 20 2a 69 62 6c 6f 62 3b 0a 0a 0a 0a 0a 7d  ob *iblob;.....}
09c0: 3b 0a 2f 2f 7d 7d 7d 0a 0a 23 65 6e 64 69 66 0a  ;.//}}}..#endif.
09d0: 0a 63 6f 6e 73 74 20 69 6e 74 20 4b 49 4e 44 5f  .const int KIND_
09e0: 4c 49 53 54 20 3d 20 28 4b 49 4e 44 5f 55 4e 4f  LIST = (KIND_UNO
09f0: 52 44 45 52 45 44 5f 4c 49 53 54 20 7c 20 4b 49  RDERED_LIST | KI
0a00: 4e 44 5f 4f 52 44 45 52 45 44 5f 4c 49 53 54 29  ND_ORDERED_LIST)
0a10: 3b 0a 63 6f 6e 73 74 20 69 6e 74 20 4b 49 4e 44  ;.const int KIND
0a20: 5f 4c 49 53 54 5f 4f 52 5f 50 41 52 41 47 52 41  _LIST_OR_PARAGRA
0a30: 50 48 20 3d 20 28 4b 49 4e 44 5f 50 41 52 41 47  PH = (KIND_PARAG
0a40: 52 41 50 48 20 7c 20 4b 49 4e 44 5f 55 4e 4f 52  RAPH | KIND_UNOR
0a50: 44 45 52 45 44 5f 4c 49 53 54 20 7c 20 4b 49 4e  DERED_LIST | KIN
0a60: 44 5f 4f 52 44 45 52 45 44 5f 4c 49 53 54 29 3b  D_ORDERED_LIST);
0a70: 0a 2f 2f 7d 7d 7d 0a 0a 2f 2f 7b 7b 7b 20 50 4f  .//}}}..//{{{ PO
0a80: 4f 4c 20 4d 41 4e 41 47 45 4d 45 4e 54 0a 73 74  OL MANAGEMENT.st
0a90: 61 74 69 63 20 4e 6f 64 65 20 2a 70 6f 6f 6c 5f  atic Node *pool_
0aa0: 6e 65 77 28 50 61 72 73 65 72 20 2a 70 29 7b 0a  new(Parser *p){.
0ab0: 0a 20 20 69 66 20 28 20 70 2d 3e 70 6f 6f 6c 20  .  if ( p->pool 
0ac0: 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 70 2d 3e 6e 46  == NULL || p->nF
0ad0: 72 65 65 20 3d 3d 20 30 29 7b 0a 0a 20 20 20 20  ree == 0){..    
0ae0: 4e 6f 64 65 50 6f 6f 6c 20 2a 74 65 6d 70 20 3d  NodePool *temp =
0af0: 20 70 2d 3e 70 6f 6f 6c 3b 0a 0a 20 20 20 20 70   p->pool;..    p
0b00: 2d 3e 70 6f 6f 6c 20 3d 20 6d 61 6c 6c 6f 63 28  ->pool = malloc(
0b10: 73 69 7a 65 6f 66 28 4e 6f 64 65 50 6f 6f 6c 29  sizeof(NodePool)
0b20: 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 70 6f  );.    if( p->po
0b30: 6f 6c 20 3d 3d 20 4e 55 4c 4c 20 29 20 66 6f 73  ol == NULL ) fos
0b40: 73 69 6c 5f 70 61 6e 69 63 28 22 6f 75 74 20 6f  sil_panic("out o
0b50: 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 0a 20 20 20  f memory");..   
0b60: 20 70 2d 3e 70 6f 6f 6c 2d 3e 6e 65 78 74 20 3d   p->pool->next =
0b70: 20 74 65 6d 70 3b 0a 20 20 20 20 70 2d 3e 6e 46   temp;.    p->nF
0b80: 72 65 65 20 3d 20 50 4f 4f 4c 5f 43 48 55 4e 4b  ree = POOL_CHUNK
0b90: 5f 53 49 5a 45 3b 0a 20 20 7d 0a 20 20 70 2d 3e  _SIZE;.  }.  p->
0ba0: 6e 46 72 65 65 20 2d 3d 20 31 3b 0a 20 20 4e 6f  nFree -= 1;.  No
0bb0: 64 65 20 2a 6e 6f 64 65 20 3d 20 26 28 70 2d 3e  de *node = &(p->
0bc0: 70 6f 6f 6c 2d 3e 61 5b 70 2d 3e 6e 46 72 65 65  pool->a[p->nFree
0bd0: 5d 29 3b 0a 20 20 6d 65 6d 73 65 74 28 6e 6f 64  ]);.  memset(nod
0be0: 65 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 6e 6f  e, 0, sizeof(*no
0bf0: 64 65 29 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20  de));..  return 
0c00: 6e 6f 64 65 3b 0a 7d 0a 0a 0a 73 74 61 74 69 63  node;.}...static
0c10: 20 76 6f 69 64 20 70 6f 6f 6c 5f 66 72 65 65 28   void pool_free(
0c20: 50 61 72 73 65 72 20 2a 70 29 7b 0a 0a 20 20 4e  Parser *p){..  N
0c30: 6f 64 65 50 6f 6f 6c 20 2a 74 65 6d 70 3b 0a 0a  odePool *temp;..
0c40: 20 20 77 68 69 6c 65 20 28 70 2d 3e 70 6f 6f 6c    while (p->pool
0c50: 20 21 3d 20 4e 55 4c 4c 29 7b 0a 20 20 20 20 74   != NULL){.    t
0c60: 65 6d 70 20 3d 20 70 2d 3e 70 6f 6f 6c 3b 0a 20  emp = p->pool;. 
0c70: 20 20 20 70 2d 3e 70 6f 6f 6c 20 3d 20 74 65 6d     p->pool = tem
0c80: 70 2d 3e 6e 65 78 74 3b 0a 20 20 20 20 66 72 65  p->next;.    fre
0c90: 65 28 74 65 6d 70 29 3b 0a 20 20 7d 0a 0a 7d 0a  e(temp);.  }..}.
0ca0: 2f 2f 7d 7d 7d 0a 0a 2f 2f 7b 7b 7b 20 55 74 69  //}}}..//{{{ Uti
0cb0: 6c 69 74 79 20 4d 65 74 68 6f 64 73 0a 0a 73 74  lity Methods..st
0cc0: 61 74 69 63 20 63 68 61 72 20 2a 63 72 5f 73 6b  atic char *cr_sk
0cd0: 69 70 42 6c 61 6e 6b 73 28 50 61 72 73 65 72 20  ipBlanks(Parser 
0ce0: 2a 70 2c 20 63 68 61 72 2a 20 7a 29 7b 2f 2f 7b  *p, char* z){//{
0cf0: 7b 7b 0a 20 20 63 68 61 72 20 2a 73 20 3d 20 7a  {{.  char *s = z
0d00: 3b 0a 20 20 77 68 69 6c 65 20 28 7a 5b 30 5d 20  ;.  while (z[0] 
0d10: 3d 3d 20 27 20 27 20 7c 7c 20 7a 5b 30 5d 20 3d  == ' ' || z[0] =
0d20: 3d 20 27 5c 74 27 29 20 7a 2b 2b 3b 0a 20 20 70  = '\t') z++;.  p
0d30: 2d 3e 63 68 61 72 43 6f 75 6e 74 20 3d 20 7a 20  ->charCount = z 
0d40: 2d 20 73 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b  - s;.  return z;
0d50: 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20  .}.//}}}.static 
0d60: 69 6e 74 20 63 72 5f 63 6f 75 6e 74 42 6c 61 6e  int cr_countBlan
0d70: 6b 73 28 50 61 72 73 65 72 20 2a 70 2c 20 63 68  ks(Parser *p, ch
0d80: 61 72 2a 20 7a 29 7b 2f 2f 7b 7b 7b 0a 20 20 63  ar* z){//{{{.  c
0d90: 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20  r_skipBlanks(p, 
0da0: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e  z);.  return p->
0db0: 63 68 61 72 43 6f 75 6e 74 3b 0a 7d 0a 2f 2f 7d  charCount;.}.//}
0dc0: 7d 7d 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  }}.static char *
0dd0: 63 72 5f 73 6b 69 70 43 68 61 72 73 28 50 61 72  cr_skipChars(Par
0de0: 73 65 72 20 2a 70 2c 20 63 68 61 72 20 2a 7a 2c  ser *p, char *z,
0df0: 20 63 68 61 72 20 63 29 7b 2f 2f 7b 7b 7b 0a 20   char c){//{{{. 
0e00: 20 63 68 61 72 20 2a 73 20 3d 20 7a 3b 0a 20 20   char *s = z;.  
0e10: 77 68 69 6c 65 20 28 7a 5b 30 5d 20 3d 3d 20 63  while (z[0] == c
0e20: 29 20 7a 2b 2b 3b 0a 20 20 70 2d 3e 63 68 61 72  ) z++;.  p->char
0e30: 43 6f 75 6e 74 20 3d 20 7a 20 2d 20 73 3b 0a 20  Count = z - s;. 
0e40: 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 2f 2f 7d   return z;.}.//}
0e50: 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72  }}.static int cr
0e60: 5f 63 6f 75 6e 74 43 68 61 72 73 28 50 61 72 73  _countChars(Pars
0e70: 65 72 20 2a 70 2c 20 63 68 61 72 20 2a 7a 2c 20  er *p, char *z, 
0e80: 63 68 61 72 20 63 29 7b 2f 2f 7b 7b 7b 0a 20 20  char c){//{{{.  
0e90: 63 72 5f 73 6b 69 70 43 68 61 72 73 28 70 2c 20  cr_skipChars(p, 
0ea0: 7a 2c 20 63 29 3b 0a 20 20 72 65 74 75 72 6e 20  z, c);.  return 
0eb0: 70 2d 3e 63 68 61 72 43 6f 75 6e 74 3b 0a 7d 0a  p->charCount;.}.
0ec0: 2f 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 63 68 61  //}}}.static cha
0ed0: 72 20 2a 63 72 5f 6e 65 78 74 4c 69 6e 65 28 50  r *cr_nextLine(P
0ee0: 61 72 73 65 72 20 2a 70 2c 20 63 68 61 72 20 2a  arser *p, char *
0ef0: 7a 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 70 2d 3e 6c  z){//{{{..  p->l
0f00: 69 6e 65 57 61 73 42 6c 61 6e 6b 20 3d 20 31 3b  ineWasBlank = 1;
0f10: 0a 0a 20 20 77 68 69 6c 65 20 28 31 29 7b 0a 0a  ..  while (1){..
0f20: 20 20 20 20 73 77 69 74 63 68 20 28 7a 5b 30 5d      switch (z[0]
0f30: 29 7b 0a 0a 20 20 20 20 20 20 63 61 73 65 20 27  ){..      case '
0f40: 5c 72 27 3a 0a 20 20 20 20 20 20 20 20 69 66 20  \r':.        if 
0f50: 28 7a 5b 31 5d 20 3d 3d 20 27 5c 6e 27 29 20 7b  (z[1] == '\n') {
0f60: 0a 20 20 20 20 20 20 20 20 20 20 7a 5b 30 5d 20  .          z[0] 
0f70: 3d 20 27 20 27 3b 0a 20 20 20 20 20 20 20 20 20  = ' ';.         
0f80: 20 72 65 74 75 72 6e 20 7a 20 2b 20 32 3b 0a 20   return z + 2;. 
0f90: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0fa0: 20 7a 5b 30 5d 20 3d 20 27 5c 6e 27 3b 0a 20 20   z[0] = '\n';.  
0fb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 7a 20 2b        return z +
0fc0: 20 31 3b 0a 0a 20 20 20 20 20 20 63 61 73 65 27   1;..      case'
0fd0: 5c 6e 27 3a 0a 20 20 20 20 20 20 20 20 72 65 74  \n':.        ret
0fe0: 75 72 6e 20 7a 20 2b 20 31 3b 0a 0a 20 20 20 20  urn z + 1;..    
0ff0: 20 20 63 61 73 65 20 27 5c 74 27 3a 0a 20 20 20    case '\t':.   
1000: 20 20 20 20 20 7a 5b 30 5d 20 3d 20 27 20 27 3b       z[0] = ' ';
1010: 0a 20 20 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20  .        z++;.  
1020: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
1030: 20 20 20 20 63 61 73 65 20 27 20 27 3a 0a 20 20      case ' ':.  
1040: 20 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20        z++;.     
1050: 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20     break;..     
1060: 20 63 61 73 65 20 27 5c 30 27 3a 0a 20 20 20 20   case '\0':.    
1070: 20 20 20 20 72 65 74 75 72 6e 20 7a 3b 0a 0a 20      return z;.. 
1080: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20       default:.  
1090: 20 20 20 20 20 20 70 2d 3e 6c 69 6e 65 57 61 73        p->lineWas
10a0: 42 6c 61 6e 6b 20 3d 20 30 3b 0a 20 20 20 20 20  Blank = 0;.     
10b0: 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20     z++;.    }.  
10c0: 7d 0a 7d 0a 2f 2f 7d 7d 7d 0a 2f 2f 7d 7d 7d 0a  }.}.//}}}.//}}}.
10d0: 0a 2f 2f 7b 7b 7b 20 49 4e 4c 49 4e 45 20 50 41  .//{{{ INLINE PA
10e0: 52 53 45 52 0a 0a 73 74 61 74 69 63 20 69 6e 74  RSER..static int
10f0: 20 63 72 5f 69 73 45 73 63 28 50 61 72 73 65 72   cr_isEsc(Parser
1100: 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 20 20 69 66 20   *p){//{{{.  if 
1110: 28 70 2d 3e 69 65 73 63 29 7b 0a 20 20 20 20 62  (p->iesc){.    b
1120: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62  lob_append(p->ib
1130: 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72 2c  lob, p->icursor,
1140: 20 31 29 3b 0a 20 20 20 20 70 2d 3e 69 65 73 63   1);.    p->iesc
1150: 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 69 63 75   = 0;.    p->icu
1160: 72 73 6f 72 20 2b 3d 20 31 3b 0a 20 20 20 20 72  rsor += 1;.    r
1170: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72  eturn 1;.  }.  r
1180: 65 74 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d  eturn 0;.}.//}}}
1190: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 5f 69  .static int cr_i
11a0: 4f 70 65 6e 28 50 61 72 73 65 72 20 2a 70 2c 20  Open(Parser *p, 
11b0: 69 6e 74 20 6b 69 6e 64 29 7b 2f 2f 7b 7b 7b 0a  int kind){//{{{.
11c0: 0a 20 20 73 77 69 74 63 68 20 28 6b 69 6e 64 29  .  switch (kind)
11d0: 7b 0a 0a 20 20 20 20 63 61 73 65 20 4b 49 4e 44  {..    case KIND
11e0: 5f 42 4f 4c 44 3a 0a 20 20 20 20 20 20 62 6c 6f  _BOLD:.      blo
11f0: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f  b_append(p->iblo
1200: 62 2c 20 22 3c 73 74 72 6f 6e 67 3e 22 2c 20 38  b, "<strong>", 8
1210: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
1220: 31 3b 0a 0a 20 20 20 20 63 61 73 65 20 4b 49 4e  1;..    case KIN
1230: 44 5f 49 54 41 4c 49 43 3a 0a 20 20 20 20 20 20  D_ITALIC:.      
1240: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69  blob_append(p->i
1250: 62 6c 6f 62 2c 20 22 3c 65 6d 3e 22 2c 20 34 29  blob, "<em>", 4)
1260: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  ;.      return 1
1270: 3b 0a 0a 20 20 20 20 63 61 73 65 20 4b 49 4e 44  ;..    case KIND
1280: 5f 53 55 50 45 52 53 43 52 49 50 54 3a 0a 20 20  _SUPERSCRIPT:.  
1290: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28      blob_append(
12a0: 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 73 75 70 3e  p->iblob, "<sup>
12b0: 22 2c 20 35 29 3b 0a 20 20 20 20 20 20 72 65 74  ", 5);.      ret
12c0: 75 72 6e 20 31 3b 0a 0a 20 20 20 20 63 61 73 65  urn 1;..    case
12d0: 20 4b 49 4e 44 5f 53 55 42 53 43 52 49 50 54 3a   KIND_SUBSCRIPT:
12e0: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65  .      blob_appe
12f0: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 73  nd(p->iblob, "<s
1300: 75 62 3e 22 2c 20 35 29 3b 0a 20 20 20 20 20 20  ub>", 5);.      
1310: 72 65 74 75 72 6e 20 31 3b 0a 0a 20 20 20 20 63  return 1;..    c
1320: 61 73 65 20 4b 49 4e 44 5f 4d 4f 4e 4f 53 50 41  ase KIND_MONOSPA
1330: 43 45 44 3a 0a 20 20 20 20 20 20 62 6c 6f 62 5f  CED:.      blob_
1340: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c  append(p->iblob,
1350: 20 22 3c 74 74 3e 22 2c 20 34 29 3b 0a 20 20 20   "<tt>", 4);.   
1360: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
1370: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 2f  .  return 0;.}./
1380: 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20  /}}}.static int 
1390: 63 72 5f 69 43 6c 6f 73 65 28 50 61 72 73 65 72  cr_iClose(Parser
13a0: 20 2a 70 2c 20 69 6e 74 20 6b 69 6e 64 29 7b 2f   *p, int kind){/
13b0: 2f 7b 7b 7b 0a 0a 20 20 73 77 69 74 63 68 20 28  /{{{..  switch (
13c0: 6b 69 6e 64 29 7b 0a 0a 20 20 20 20 63 61 73 65  kind){..    case
13d0: 20 4b 49 4e 44 5f 42 4f 4c 44 3a 0a 20 20 20 20   KIND_BOLD:.    
13e0: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d    blob_append(p-
13f0: 3e 69 62 6c 6f 62 2c 20 22 3c 2f 73 74 72 6f 6e  >iblob, "</stron
1400: 67 3e 22 2c 20 39 29 3b 0a 20 20 20 20 20 20 72  g>", 9);.      r
1410: 65 74 75 72 6e 20 31 3b 0a 0a 20 20 20 20 63 61  eturn 1;..    ca
1420: 73 65 20 4b 49 4e 44 5f 49 54 41 4c 49 43 3a 0a  se KIND_ITALIC:.
1430: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e        blob_appen
1440: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 65  d(p->iblob, "</e
1450: 6d 3e 22 2c 20 35 29 3b 0a 20 20 20 20 20 20 72  m>", 5);.      r
1460: 65 74 75 72 6e 20 31 3b 0a 0a 20 20 20 20 63 61  eturn 1;..    ca
1470: 73 65 20 4b 49 4e 44 5f 53 55 50 45 52 53 43 52  se KIND_SUPERSCR
1480: 49 50 54 3a 0a 20 20 20 20 20 20 62 6c 6f 62 5f  IPT:.      blob_
1490: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c  append(p->iblob,
14a0: 20 22 3c 2f 73 75 70 3e 22 2c 20 36 29 3b 0a 20   "</sup>", 6);. 
14b0: 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 0a       return 1;..
14c0: 20 20 20 20 63 61 73 65 20 4b 49 4e 44 5f 53 55      case KIND_SU
14d0: 42 53 43 52 49 50 54 3a 0a 20 20 20 20 20 20 62  BSCRIPT:.      b
14e0: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62  lob_append(p->ib
14f0: 6c 6f 62 2c 20 22 3c 2f 73 75 62 3e 22 2c 20 36  lob, "</sub>", 6
1500: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
1510: 31 3b 0a 0a 20 20 20 20 63 61 73 65 20 4b 49 4e  1;..    case KIN
1520: 44 5f 4d 4f 4e 4f 53 50 41 43 45 44 3a 0a 20 20  D_MONOSPACED:.  
1530: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28      blob_append(
1540: 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 74 74 3e  p->iblob, "</tt>
1550: 22 2c 20 35 29 3b 0a 20 20 20 20 20 20 72 65 74  ", 5);.      ret
1560: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  urn 1;.  }.  ret
1570: 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a  urn 0;.}.//}}}..
1580: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 5f  .static void cr_
1590: 69 4d 61 72 6b 75 70 28 50 61 72 73 65 72 20 2a  iMarkup(Parser *
15a0: 70 2c 20 69 6e 74 20 6b 69 6e 64 29 7b 2f 2f 7b  p, int kind){//{
15b0: 7b 7b 0a 0a 20 20 69 66 20 28 70 2d 3e 69 65 73  {{..  if (p->ies
15c0: 63 29 20 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70  c) {.    blob_ap
15d0: 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 70  pend(p->iblob, p
15e0: 2d 3e 69 63 75 72 73 6f 72 2c 20 31 29 3b 0a 20  ->icursor, 1);. 
15f0: 20 20 20 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d     p->icursor +=
1600: 31 3b 0a 20 20 20 20 70 2d 3e 69 65 73 63 20 3d  1;.    p->iesc =
1610: 30 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  0;.    return;. 
1620: 20 7d 0a 0a 20 20 69 66 20 28 70 2d 3e 69 63 75   }..  if (p->icu
1630: 72 73 6f 72 5b 31 5d 20 21 3d 20 70 2d 3e 69 63  rsor[1] != p->ic
1640: 75 72 73 6f 72 5b 30 5d 29 20 7b 0a 20 20 20 20  ursor[0]) {.    
1650: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69  blob_append(p->i
1660: 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72  blob, p->icursor
1670: 2c 20 31 29 3b 0a 20 20 20 20 70 2d 3e 69 63 75  , 1);.    p->icu
1680: 72 73 6f 72 20 2b 3d 31 3b 0a 20 20 20 20 72 65  rsor +=1;.    re
1690: 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e  turn;.  }..  p->
16a0: 69 63 75 72 73 6f 72 20 2b 3d 20 32 3b 0a 0a 20  icursor += 2;.. 
16b0: 20 69 66 20 28 6b 69 6e 64 20 26 20 4b 49 4e 44   if (kind & KIND
16c0: 5f 42 52 45 41 4b 29 20 7b 0a 20 20 20 20 20 20  _BREAK) {.      
16d0: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69  blob_append(p->i
16e0: 62 6c 6f 62 2c 20 22 3c 62 72 20 2f 3e 22 2c 20  blob, "<br />", 
16f0: 36 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  6);.      return
1700: 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 6b 69 6e  ;.  }..  if (kin
1710: 64 20 26 20 4b 49 4e 44 5f 49 54 41 4c 49 43 20  d & KIND_ITALIC 
1720: 26 26 20 70 2d 3e 69 63 75 72 73 6f 72 5b 2d 33  && p->icursor[-3
1730: 5d 20 3d 3d 20 27 3a 27 29 7b 0a 20 20 20 20 20  ] == ':'){.     
1740: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70     blob_append(p
1750: 2d 3e 69 62 6c 6f 62 2c 20 22 2f 2f 22 2c 20 32  ->iblob, "//", 2
1760: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
1770: 6e 3b 0a 20 20 7d 0a 0a 20 20 4e 6f 64 65 20 2a  n;.  }..  Node *
1780: 6e 20 3d 20 70 2d 3e 69 73 74 61 63 6b 3b 0a 0a  n = p->istack;..
1790: 20 20 69 6e 74 20 66 6f 75 6e 64 20 3d 20 30 3b    int found = 0;
17a0: 0a 20 20 77 68 69 6c 65 20 28 6e 29 20 7b 0a 20  .  while (n) {. 
17b0: 20 20 20 69 66 20 28 6e 2d 3e 6b 69 6e 64 20 26     if (n->kind &
17c0: 20 6b 69 6e 64 29 20 7b 0a 20 20 20 20 20 20 66   kind) {.      f
17d0: 6f 75 6e 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  ound = 1;.      
17e0: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
17f0: 20 6e 20 3d 20 6e 2d 3e 6e 65 78 74 3b 0a 20 20   n = n->next;.  
1800: 7d 0a 0a 20 20 69 66 20 28 21 66 6f 75 6e 64 29  }..  if (!found)
1810: 20 7b 0a 20 20 20 20 6e 20 3d 20 70 6f 6f 6c 5f   {.    n = pool_
1820: 6e 65 77 28 70 29 3b 0a 20 20 20 20 6e 2d 3e 6b  new(p);.    n->k
1830: 69 6e 64 20 3d 20 6b 69 6e 64 3b 0a 20 20 20 20  ind = kind;.    
1840: 6e 2d 3e 6e 65 78 74 20 3d 20 70 2d 3e 69 73 74  n->next = p->ist
1850: 61 63 6b 3b 0a 20 20 20 20 70 2d 3e 69 73 74 61  ack;.    p->ista
1860: 63 6b 20 3d 20 6e 3b 0a 0a 20 20 20 20 61 73 73  ck = n;..    ass
1870: 65 72 74 28 63 72 5f 69 4f 70 65 6e 28 70 2c 20  ert(cr_iOpen(p, 
1880: 6b 69 6e 64 29 29 3b 0a 20 20 20 20 72 65 74 75  kind));.    retu
1890: 72 6e 3b 0a 20 20 7d 3b 0a 0a 20 20 6e 3d 20 70  rn;.  };..  n= p
18a0: 2d 3e 69 73 74 61 63 6b 3b 0a 20 20 77 68 69 6c  ->istack;.  whil
18b0: 65 20 28 6e 29 7b 0a 20 20 20 20 70 2d 3e 69 73  e (n){.    p->is
18c0: 74 61 63 6b 20 3d 20 6e 2d 3e 6e 65 78 74 3b 0a  tack = n->next;.
18d0: 0a 20 20 20 20 61 73 73 65 72 74 28 63 72 5f 69  .    assert(cr_i
18e0: 43 6c 6f 73 65 28 70 2c 20 6e 2d 3e 6b 69 6e 64  Close(p, n->kind
18f0: 29 29 3b 0a 0a 20 20 20 20 69 66 20 28 6b 69 6e  ));..    if (kin
1900: 64 20 3d 3d 20 6e 2d 3e 6b 69 6e 64 29 20 72 65  d == n->kind) re
1910: 74 75 72 6e 3b 0a 20 20 20 20 6e 20 3d 20 70 2d  turn;.    n = p-
1920: 3e 69 73 74 61 63 6b 3b 0a 20 20 7d 0a 7d 0a 2f  >istack;.  }.}./
1930: 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20  /}}}.static int 
1940: 63 72 5f 69 4e 6f 57 69 6b 69 28 50 61 72 73 65  cr_iNoWiki(Parse
1950: 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 69  r *p){//{{{..  i
1960: 66 20 28 28 70 2d 3e 69 65 6e 64 20 2d 20 70 2d  f ((p->iend - p-
1970: 3e 69 63 75 72 73 6f 72 29 3c 36 29 20 72 65 74  >icursor)<6) ret
1980: 75 72 6e 20 30 3b 0a 0a 20 20 69 66 20 28 70 2d  urn 0;..  if (p-
1990: 3e 69 63 75 72 73 6f 72 5b 31 5d 21 3d 27 7b 27  >icursor[1]!='{'
19a0: 20 7c 7c 20 70 2d 3e 69 63 75 72 73 6f 72 5b 32   || p->icursor[2
19b0: 5d 21 3d 27 7b 27 29 0a 20 20 20 20 72 65 74 75  ]!='{').    retu
19c0: 72 6e 20 30 3b 0a 0a 20 20 63 68 61 72 20 2a 73  rn 0;..  char *s
19d0: 20 3d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2b 20   = p->icursor + 
19e0: 33 3b 0a 0a 20 20 69 6e 74 20 63 6f 75 6e 74 20  3;..  int count 
19f0: 3d 20 70 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69  = p->iend - p->i
1a00: 63 75 72 73 6f 72 20 2d 20 36 3b 0a 20 20 77 68  cursor - 6;.  wh
1a10: 69 6c 65 20 28 63 6f 75 6e 74 2d 2d 29 7b 0a 20  ile (count--){. 
1a20: 20 20 20 69 66 20 28 73 5b 30 5d 3d 3d 27 7d 27     if (s[0]=='}'
1a30: 20 26 26 20 73 5b 31 5d 3d 3d 27 7d 27 20 26 26   && s[1]=='}' &&
1a40: 20 73 5b 32 5d 3d 3d 27 7d 27 20 26 26 20 73 5b   s[2]=='}' && s[
1a50: 33 5d 21 3d 27 7d 27 29 7b 0a 20 20 20 20 20 20  3]!='}'){.      
1a60: 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 2d 3e  blob_appendf(p->
1a70: 69 62 6c 6f 62 2c 20 22 3c 74 74 20 73 74 79 6c  iblob, "<tt styl
1a80: 65 3d 27 62 61 63 6b 67 72 6f 75 6e 64 3a 6f 6c  e='background:ol
1a90: 64 6c 61 63 65 27 3e 25 73 3c 2f 74 74 3e 22 2c  dlace'>%s</tt>",
1aa0: 20 68 74 6d 6c 69 7a 65 28 70 2d 3e 69 63 75 72   htmlize(p->icur
1ab0: 73 6f 72 20 2b 20 33 2c 20 73 20 2d 20 70 2d 3e  sor + 3, s - p->
1ac0: 69 63 75 72 73 6f 72 2d 33 29 29 3b 0a 20 20 20  icursor-3));.   
1ad0: 20 20 20 70 2d 3e 69 63 75 72 73 6f 72 20 3d 20     p->icursor = 
1ae0: 73 20 2b 20 33 3b 0a 20 20 20 20 20 20 72 65 74  s + 3;.      ret
1af0: 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20  urn 1;.    }.   
1b00: 20 73 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75   s++;.  }.  retu
1b10: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2f 7d 7d 7d 0a 73  rn 0;.}..//}}}.s
1b20: 74 61 74 69 63 20 69 6e 74 20 63 72 5f 69 49 6d  tatic int cr_iIm
1b30: 61 67 65 28 50 61 72 73 65 72 20 2a 70 29 7b 2f  age(Parser *p){/
1b40: 2f 7b 7b 7b 0a 0a 20 20 69 66 20 28 70 2d 3e 69  /{{{..  if (p->i
1b50: 6e 4c 69 6e 6b 29 20 72 65 74 75 72 6e 20 30 3b  nLink) return 0;
1b60: 0a 20 20 69 66 20 28 28 70 2d 3e 69 65 6e 64 20  .  if ((p->iend 
1b70: 2d 20 70 2d 3e 69 63 75 72 73 6f 72 29 3c 33 29  - p->icursor)<3)
1b80: 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 69 66   return 0;..  if
1b90: 20 28 70 2d 3e 69 63 75 72 73 6f 72 5b 31 5d 21   (p->icursor[1]!
1ba0: 3d 27 7b 27 29 20 72 65 74 75 72 6e 20 30 3b 0a  ='{') return 0;.
1bb0: 0a 20 20 63 68 61 72 20 2a 73 20 3d 20 70 2d 3e  .  char *s = p->
1bc0: 69 63 75 72 73 6f 72 20 2b 20 32 3b 0a 20 20 63  icursor + 2;.  c
1bd0: 68 61 72 20 2a 62 61 72 20 3d 20 4e 55 4c 4c 3b  har *bar = NULL;
1be0: 0a 0a 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20  ..  int count = 
1bf0: 70 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 63 75  p->iend - p->icu
1c00: 72 73 6f 72 20 2d 20 34 3b 0a 20 20 77 68 69 6c  rsor - 4;.  whil
1c10: 65 20 28 63 6f 75 6e 74 2d 2d 29 7b 0a 20 20 20  e (count--){.   
1c20: 20 69 66 20 28 73 5b 30 5d 3d 3d 27 7d 27 20 26   if (s[0]=='}' &
1c30: 26 20 73 5b 31 5d 3d 3d 27 7d 27 29 7b 0a 20 20  & s[1]=='}'){.  
1c40: 20 20 20 20 69 66 20 28 21 62 61 72 29 20 62 61      if (!bar) ba
1c50: 72 20 3d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2b  r = p->icursor +
1c60: 20 32 3b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61   2;.      blob_a
1c70: 70 70 65 6e 64 66 28 70 2d 3e 69 62 6c 6f 62 2c  ppendf(p->iblob,
1c80: 20 22 3c 73 70 61 6e 20 73 74 79 6c 65 3d 27 63   "<span style='c
1c90: 6f 6c 6f 72 3a 67 72 65 65 6e 3b 62 6f 72 64 65  olor:green;borde
1ca0: 72 3a 31 70 78 20 73 6f 6c 69 64 20 67 72 65 65  r:1px solid gree
1cb0: 6e 3b 27 3e 25 73 3c 2f 73 70 61 6e 3e 22 2c 20  n;'>%s</span>", 
1cc0: 68 74 6d 6c 69 7a 65 28 62 61 72 2c 20 73 20 2d  htmlize(bar, s -
1cd0: 20 62 61 72 20 29 29 3b 0a 20 20 20 20 20 20 70   bar ));.      p
1ce0: 2d 3e 69 63 75 72 73 6f 72 20 3d 20 73 20 2b 20  ->icursor = s + 
1cf0: 32 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  2;.      return 
1d00: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20  1;.    }.    if 
1d10: 28 21 62 61 72 20 26 26 20 73 5b 30 5d 3d 3d 27  (!bar && s[0]=='
1d20: 7c 27 29 20 62 61 72 3d 73 2b 31 3b 0a 20 20 20  |') bar=s+1;.   
1d30: 20 73 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75   s++;.  }.  retu
1d40: 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74  rn 0;.}.//}}}.st
1d50: 61 74 69 63 20 69 6e 74 20 63 72 5f 69 4d 61 63  atic int cr_iMac
1d60: 72 6f 28 50 61 72 73 65 72 20 2a 70 29 7b 2f 2f  ro(Parser *p){//
1d70: 7b 7b 7b 0a 0a 20 20 69 66 20 28 70 2d 3e 69 6e  {{{..  if (p->in
1d80: 4c 69 6e 6b 29 20 72 65 74 75 72 6e 20 30 3b 0a  Link) return 0;.
1d90: 20 20 69 66 20 28 28 70 2d 3e 69 65 6e 64 20 2d    if ((p->iend -
1da0: 20 70 2d 3e 69 63 75 72 73 6f 72 29 3c 33 29 20   p->icursor)<3) 
1db0: 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 69 66 20  return 0;..  if 
1dc0: 28 70 2d 3e 69 63 75 72 73 6f 72 5b 31 5d 21 3d  (p->icursor[1]!=
1dd0: 27 3c 27 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a  '<') return 0;..
1de0: 20 20 63 68 61 72 20 2a 73 20 3d 20 70 2d 3e 69    char *s = p->i
1df0: 63 75 72 73 6f 72 20 2b 20 32 3b 0a 0a 20 20 69  cursor + 2;..  i
1e00: 6e 74 20 63 6f 75 6e 74 20 3d 20 70 2d 3e 69 65  nt count = p->ie
1e10: 6e 64 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 20  nd - p->icursor 
1e20: 2d 20 33 3b 0a 20 20 77 68 69 6c 65 20 28 63 6f  - 3;.  while (co
1e30: 75 6e 74 2d 2d 29 7b 0a 20 20 20 20 62 6c 6f 62  unt--){.    blob
1e40: 5f 61 70 70 65 6e 64 66 28 70 2d 3e 69 62 6c 6f  _appendf(p->iblo
1e50: 62 2c 20 22 7c 7e 25 73 7c 22 2c 20 73 2c 32 20  b, "|~%s|", s,2 
1e60: 29 3b 0a 20 20 20 20 69 66 20 28 73 5b 30 5d 3d  );.    if (s[0]=
1e70: 3d 27 3e 27 20 26 26 20 73 5b 31 5d 3d 3d 27 3e  ='>' && s[1]=='>
1e80: 27 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61  '){.      blob_a
1e90: 70 70 65 6e 64 66 28 70 2d 3e 69 62 6c 6f 62 2c  ppendf(p->iblob,
1ea0: 20 22 3c 73 70 61 6e 20 73 74 79 6c 65 3d 27 63   "<span style='c
1eb0: 6f 6c 6f 72 3a 72 65 64 3b 62 6f 72 64 65 72 3a  olor:red;border:
1ec0: 31 70 78 20 73 6f 6c 69 64 20 72 65 64 3b 27 3e  1px solid red;'>
1ed0: 25 73 3c 2f 73 70 61 6e 3e 22 2c 20 68 74 6d 6c  %s</span>", html
1ee0: 69 7a 65 28 70 2d 3e 69 63 75 72 73 6f 72 2c 20  ize(p->icursor, 
1ef0: 73 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2b  s - p->icursor +
1f00: 20 32 29 29 3b 0a 20 20 20 20 20 20 70 2d 3e 69   2));.      p->i
1f10: 63 75 72 73 6f 72 20 3d 20 73 20 2b 20 32 3b 0a  cursor = s + 2;.
1f20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a        return 1;.
1f30: 20 20 20 20 7d 0a 20 20 20 20 73 2b 2b 3b 0a 20      }.    s++;. 
1f40: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 0a   }.  return 0;..
1f50: 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 20  }.//}}}..static 
1f60: 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 72 4c 69  void cr_renderLi
1f70: 6e 6b 28 50 61 72 73 65 72 20 2a 70 2c 20 63 68  nk(Parser *p, ch
1f80: 61 72 20 2a 73 2c 20 63 68 61 72 20 2a 62 61 72  ar *s, char *bar
1f90: 2c 20 63 68 61 72 20 2a 65 29 7b 2f 2f 7b 7b 7b  , char *e){//{{{
1fa0: 0a 0a 20 20 69 6e 74 20 74 73 69 7a 65 20 3d 20  ..  int tsize = 
1fb0: 62 61 72 2d 73 3b 0a 20 20 69 6e 74 20 64 73 69  bar-s;.  int dsi
1fc0: 7a 65 20 3d 20 65 20 2d 20 62 61 72 2d 31 3b 0a  ze = e - bar-1;.
1fd0: 0a 20 20 69 66 20 28 74 73 69 7a 65 20 3c 20 31  .  if (tsize < 1
1fe0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 20 28  ) return;.  if (
1ff0: 64 73 69 7a 65 20 3c 20 31 29 20 64 73 69 7a 65  dsize < 1) dsize
2000: 20 3d 20 30 3b 0a 0a 20 20 63 68 61 72 20 7a 54   = 0;..  char zT
2010: 61 72 67 65 74 5b 74 73 69 7a 65 20 2b 20 31 5d  arget[tsize + 1]
2020: 3b 0a 20 20 6d 65 6d 63 70 79 28 7a 54 61 72 67  ;.  memcpy(zTarg
2030: 65 74 2c 20 73 2c 20 74 73 69 7a 65 29 3b 0a 20  et, s, tsize);. 
2040: 20 7a 54 61 72 67 65 74 5b 74 73 69 7a 65 5d 20   zTarget[tsize] 
2050: 3d 20 27 5c 30 27 3b 0a 0a 20 20 63 68 61 72 20  = '\0';..  char 
2060: 7a 43 6c 6f 73 65 5b 32 30 5d 3b 0a 0a 20 20 42  zClose[20];..  B
2070: 6c 6f 62 20 2a 70 4f 75 74 20 3d 20 70 2d 3e 72  lob *pOut = p->r
2080: 2d 3e 70 4f 75 74 3b 0a 0a 20 20 70 2d 3e 72 2d  ->pOut;..  p->r-
2090: 3e 70 4f 75 74 20 3d 20 70 2d 3e 69 62 6c 6f 62  >pOut = p->iblob
20a0: 3b 0a 20 20 77 66 5f 6f 70 65 6e 48 79 70 65 72  ;.  wf_openHyper
20b0: 6c 69 6e 6b 28 70 2d 3e 72 2c 20 7a 54 61 72 67  link(p->r, zTarg
20c0: 65 74 2c 20 7a 43 6c 6f 73 65 2c 20 73 69 7a 65  et, zClose, size
20d0: 6f 66 28 7a 43 6c 6f 73 65 29 29 3b 0a 20 20 70  of(zClose));.  p
20e0: 2d 3e 72 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74  ->r->pOut = pOut
20f0: 3b 0a 0a 20 20 69 66 20 28 64 73 69 7a 65 29 0a  ;..  if (dsize).
2100: 20 20 20 20 63 72 5f 70 61 72 73 65 49 6e 6c 69      cr_parseInli
2110: 6e 65 28 70 2c 20 62 61 72 2b 31 2c 20 65 29 20  ne(p, bar+1, e) 
2120: 3b 0a 20 20 65 6c 73 65 0a 20 20 20 20 62 6c 6f  ;.  else.    blo
2130: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f  b_append(p->iblo
2140: 62 2c 20 68 74 6d 6c 69 7a 65 28 73 2c 20 74 73  b, htmlize(s, ts
2150: 69 7a 65 29 2c 20 2d 31 29 3b 0a 20 20 62 6c 6f  ize), -1);.  blo
2160: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f  b_append(p->iblo
2170: 62 2c 20 7a 43 6c 6f 73 65 2c 20 2d 31 29 3b 0a  b, zClose, -1);.
2180: 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63 20  }.//}}}..static 
2190: 69 6e 74 20 63 72 5f 69 4c 69 6e 6b 28 50 61 72  int cr_iLink(Par
21a0: 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20  ser *p){//{{{.. 
21b0: 20 69 66 20 28 70 2d 3e 69 6e 4c 69 6e 6b 29 20   if (p->inLink) 
21c0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 20 28  return 0;.  if (
21d0: 28 70 2d 3e 69 65 6e 64 20 2d 20 70 2d 3e 69 63  (p->iend - p->ic
21e0: 75 72 73 6f 72 29 3c 33 29 20 72 65 74 75 72 6e  ursor)<3) return
21f0: 20 30 3b 0a 0a 20 20 69 66 20 28 70 2d 3e 69 63   0;..  if (p->ic
2200: 75 72 73 6f 72 5b 31 5d 21 3d 27 5b 27 29 20 72  ursor[1]!='[') r
2210: 65 74 75 72 6e 20 30 3b 0a 0a 20 20 63 68 61 72  eturn 0;..  char
2220: 20 2a 73 20 3d 20 70 2d 3e 69 63 75 72 73 6f 72   *s = p->icursor
2230: 20 2b 20 32 3b 0a 20 20 63 68 61 72 20 2a 62 61   + 2;.  char *ba
2240: 72 20 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 69 6e 74  r = NULL;..  int
2250: 20 63 6f 75 6e 74 20 3d 20 70 2d 3e 69 65 6e 64   count = p->iend
2260: 20 2d 20 70 2d 3e 69 63 75 72 73 6f 72 20 2d 33   - p->icursor -3
2270: 3b 0a 20 20 77 68 69 6c 65 20 28 63 6f 75 6e 74  ;.  while (count
2280: 2d 2d 29 7b 0a 20 20 20 20 69 66 20 28 73 5b 30  --){.    if (s[0
2290: 5d 3d 3d 27 5d 27 20 26 26 20 73 5b 31 5d 3d 3d  ]==']' && s[1]==
22a0: 27 5d 27 29 7b 0a 20 20 20 20 20 20 69 66 20 28  ']'){.      if (
22b0: 21 62 61 72 29 20 62 61 72 20 3d 20 73 3b 0a 20  !bar) bar = s;. 
22c0: 20 20 20 20 20 70 2d 3e 69 6e 4c 69 6e 6b 20 3d       p->inLink =
22d0: 20 31 3b 0a 20 20 20 20 20 20 63 72 5f 72 65 6e   1;.      cr_ren
22e0: 64 65 72 4c 69 6e 6b 28 70 2c 20 70 2d 3e 69 63  derLink(p, p->ic
22f0: 75 72 73 6f 72 2b 32 2c 20 62 61 72 2c 20 73 29  ursor+2, bar, s)
2300: 3b 0a 20 20 20 20 20 20 70 2d 3e 69 6e 4c 69 6e  ;.      p->inLin
2310: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 2d 3e  k = 0;.      p->
2320: 69 63 75 72 73 6f 72 20 3d 20 73 20 2b 20 32 3b  icursor = s + 2;
2330: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b  .      return 1;
2340: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 21  .    }.    if (!
2350: 62 61 72 20 26 26 20 73 5b 30 5d 3d 3d 27 7c 27  bar && s[0]=='|'
2360: 29 20 62 61 72 3d 73 3b 0a 20 20 20 20 73 2b 2b  ) bar=s;.    s++
2370: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  ;.  }.  return 0
2380: 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 4c 4f 43 41 4c  ;.}.//}}}..LOCAL
2390: 20 63 68 61 72 20 2a 63 72 5f 70 61 72 73 65 49   char *cr_parseI
23a0: 6e 6c 69 6e 65 28 50 61 72 73 65 72 20 2a 70 2c  nline(Parser *p,
23b0: 20 63 68 61 72 20 2a 73 2c 20 63 68 61 72 20 2a   char *s, char *
23c0: 65 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 69 6e 74 20  e){//{{{..  int 
23d0: 73 61 76 65 5f 69 65 73 63 20 3d 20 70 2d 3e 69  save_iesc = p->i
23e0: 65 73 63 3b 0a 20 20 63 68 61 72 20 2a 73 61 76  esc;.  char *sav
23f0: 65 5f 69 65 6e 64 20 3d 20 70 2d 3e 69 65 6e 64  e_iend = p->iend
2400: 3b 0a 20 20 4e 6f 64 65 20 2a 73 61 76 65 5f 69  ;.  Node *save_i
2410: 73 74 61 63 6b 20 3d 20 70 2d 3e 69 73 74 61 63  stack = p->istac
2420: 6b 3b 0a 0a 20 20 70 2d 3e 69 65 73 63 20 3d 20  k;..  p->iesc = 
2430: 30 3b 0a 20 20 70 2d 3e 69 65 6e 64 20 3d 20 65  0;.  p->iend = e
2440: 3b 0a 20 20 70 2d 3e 69 73 74 61 63 6b 20 3d 20  ;.  p->istack = 
2450: 4e 55 4c 4c 3b 0a 0a 20 20 70 2d 3e 69 63 75 72  NULL;..  p->icur
2460: 73 6f 72 20 3d 20 73 3b 0a 0a 20 20 63 68 61 72  sor = s;..  char
2470: 20 2a 65 6f 66 20 3d 20 4e 55 4c 4c 3b 0a 20 20   *eof = NULL;.  
2480: 77 68 69 6c 65 20 28 21 65 6f 66 20 26 26 20 20  while (!eof &&  
2490: 70 2d 3e 69 63 75 72 73 6f 72 20 3c 20 70 2d 3e  p->icursor < p->
24a0: 69 65 6e 64 20 29 7b 0a 0a 20 20 20 20 73 77 69  iend ){..    swi
24b0: 74 63 68 20 28 2a 70 2d 3e 69 63 75 72 73 6f 72  tch (*p->icursor
24c0: 29 20 7b 2f 2f 7b 7b 7b 0a 0a 20 20 20 20 20 20  ) {//{{{..      
24d0: 63 61 73 65 20 27 7e 27 3a 0a 20 20 20 20 20 20  case '~':.      
24e0: 20 20 69 66 20 28 70 2d 3e 69 65 73 63 29 20 7b    if (p->iesc) {
24f0: 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 5f  .          blob_
2500: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c  append(p->iblob,
2510: 20 22 7e 22 2c 20 31 29 3b 0a 20 20 20 20 20 20   "~", 1);.      
2520: 20 20 20 20 70 2d 3e 69 65 73 63 20 3d 20 30 3b      p->iesc = 0;
2530: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
2540: 20 20 20 70 2d 3e 69 65 73 63 20 3d 20 21 70 2d     p->iesc = !p-
2550: 3e 69 65 73 63 3b 0a 20 20 20 20 20 20 20 20 70  >iesc;.        p
2560: 2d 3e 69 63 75 72 73 6f 72 2b 3d 31 3b 0a 20 20  ->icursor+=1;.  
2570: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20        break;..  
2580: 20 20 20 20 63 61 73 65 20 27 2a 27 3a 0a 20 20      case '*':.  
2590: 20 20 20 20 20 20 63 72 5f 69 4d 61 72 6b 75 70        cr_iMarkup
25a0: 28 70 2c 20 4b 49 4e 44 5f 42 4f 4c 44 29 3b 0a  (p, KIND_BOLD);.
25b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
25c0: 20 20 20 20 20 20 63 61 73 65 20 27 2f 27 3a 0a        case '/':.
25d0: 20 20 20 20 20 20 20 20 63 72 5f 69 4d 61 72 6b          cr_iMark
25e0: 75 70 28 70 2c 20 4b 49 4e 44 5f 49 54 41 4c 49  up(p, KIND_ITALI
25f0: 43 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  C);.        brea
2600: 6b 3b 0a 0a 20 20 20 20 20 20 63 61 73 65 20 27  k;..      case '
2610: 5e 27 3a 0a 20 20 20 20 20 20 20 20 63 72 5f 69  ^':.        cr_i
2620: 4d 61 72 6b 75 70 28 70 2c 20 4b 49 4e 44 5f 53  Markup(p, KIND_S
2630: 55 50 45 52 53 43 52 49 50 54 29 3b 0a 20 20 20  UPERSCRIPT);.   
2640: 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20       break;..   
2650: 20 20 20 63 61 73 65 20 27 2c 27 3a 0a 20 20 20     case ',':.   
2660: 20 20 20 20 20 63 72 5f 69 4d 61 72 6b 75 70 28       cr_iMarkup(
2670: 70 2c 20 4b 49 4e 44 5f 53 55 42 53 43 52 49 50  p, KIND_SUBSCRIP
2680: 54 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  T);.        brea
2690: 6b 3b 0a 0a 20 20 20 20 20 20 63 61 73 65 20 27  k;..      case '
26a0: 23 27 3a 0a 20 20 20 20 20 20 20 20 63 72 5f 69  #':.        cr_i
26b0: 4d 61 72 6b 75 70 28 70 2c 20 4b 49 4e 44 5f 4d  Markup(p, KIND_M
26c0: 4f 4e 4f 53 50 41 43 45 44 29 3b 0a 20 20 20 20  ONOSPACED);.    
26d0: 20 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20      break;..    
26e0: 20 20 63 61 73 65 20 27 5c 5c 27 3a 0a 20 20 20    case '\\':.   
26f0: 20 20 20 20 20 63 72 5f 69 4d 61 72 6b 75 70 28       cr_iMarkup(
2700: 70 2c 20 4b 49 4e 44 5f 42 52 45 41 4b 29 3b 0a  p, KIND_BREAK);.
2710: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
2720: 20 20 20 20 20 20 63 61 73 65 20 27 7b 27 3a 0a        case '{':.
2730: 20 20 20 20 20 20 20 20 69 66 20 28 63 72 5f 69          if (cr_i
2740: 73 45 73 63 28 70 29 29 20 62 72 65 61 6b 3b 0a  sEsc(p)) break;.
2750: 20 20 20 20 20 20 20 20 69 66 20 28 63 72 5f 69          if (cr_i
2760: 4e 6f 57 69 6b 69 28 70 29 29 20 62 72 65 61 6b  NoWiki(p)) break
2770: 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 72  ;.        if (cr
2780: 5f 69 49 6d 61 67 65 28 70 29 29 20 62 72 65 61  _iImage(p)) brea
2790: 6b 3b 0a 20 20 20 20 20 20 20 20 62 6c 6f 62 5f  k;.        blob_
27a0: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c  append(p->iblob,
27b0: 20 70 2d 3e 69 63 75 72 73 6f 72 2c 20 31 29 3b   p->icursor, 1);
27c0: 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 63 75 72  .        p->icur
27d0: 73 6f 72 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20  sor += 1;.      
27e0: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20    break;..      
27f0: 63 61 73 65 20 27 5b 27 3a 0a 20 20 20 20 20 20  case '[':.      
2800: 20 20 69 66 20 28 63 72 5f 69 73 45 73 63 28 70    if (cr_isEsc(p
2810: 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  )) break;.      
2820: 20 20 69 66 20 28 63 72 5f 69 4c 69 6e 6b 28 70    if (cr_iLink(p
2830: 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  )) break;.      
2840: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d    blob_append(p-
2850: 3e 69 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73  >iblob, p->icurs
2860: 6f 72 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20  or, 1);.        
2870: 70 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 31 3b  p->icursor += 1;
2880: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
2890: 0a 0a 20 20 20 20 20 20 63 61 73 65 20 27 3c 27  ..      case '<'
28a0: 3a 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 72  :.        if (cr
28b0: 5f 69 73 45 73 63 28 70 29 29 20 62 72 65 61 6b  _isEsc(p)) break
28c0: 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 72  ;.        if (cr
28d0: 5f 69 4d 61 63 72 6f 28 70 29 29 20 62 72 65 61  _iMacro(p)) brea
28e0: 6b 3b 0a 0a 20 20 20 20 20 20 20 20 62 6c 6f 62  k;..        blob
28f0: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62  _append(p->iblob
2900: 2c 20 22 26 6c 74 3b 22 2c 20 34 29 3b 0a 20 20  , "&lt;", 4);.  
2910: 20 20 20 20 20 20 70 2d 3e 69 63 75 72 73 6f 72        p->icursor
2920: 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62   += 1;.        b
2930: 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 63 61 73  reak;..      cas
2940: 65 20 27 3e 27 3a 0a 20 20 20 20 20 20 20 20 69  e '>':.        i
2950: 66 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a 20 20  f (p->iesc) {.  
2960: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70          blob_app
2970: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e  end(p->iblob, "~
2980: 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  ", 1);.         
2990: 20 70 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 20 20   p->iesc = 0;.  
29a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
29b0: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69  blob_append(p->i
29c0: 62 6c 6f 62 2c 20 22 26 67 74 3b 22 2c 20 34 29  blob, "&gt;", 4)
29d0: 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 63 75  ;.        p->icu
29e0: 72 73 6f 72 20 2b 3d 20 31 3b 0a 20 20 20 20 20  rsor += 1;.     
29f0: 20 20 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20     break;..     
2a00: 20 63 61 73 65 20 27 26 27 3a 0a 20 20 20 20 20   case '&':.     
2a10: 20 20 20 69 66 20 28 70 2d 3e 69 65 73 63 29 20     if (p->iesc) 
2a20: 7b 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62  {.          blob
2a30: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62  _append(p->iblob
2a40: 2c 20 22 7e 22 2c 20 31 29 3b 0a 20 20 20 20 20  , "~", 1);.     
2a50: 20 20 20 20 20 70 2d 3e 69 65 73 63 20 3d 20 30       p->iesc = 0
2a60: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
2a70: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28      blob_append(
2a80: 70 2d 3e 69 62 6c 6f 62 2c 20 22 26 61 6d 70 3b  p->iblob, "&amp;
2a90: 22 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20 70  ", 5);.        p
2aa0: 2d 3e 69 63 75 72 73 6f 72 20 2b 3d 20 31 3b 0a  ->icursor += 1;.
2ab0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 0a          break;..
2ac0: 20 20 20 20 20 20 63 61 73 65 20 27 7c 27 3a 0a        case '|':.
2ad0: 20 20 20 20 20 20 20 20 69 66 20 28 70 2d 3e 69          if (p->i
2ae0: 6e 54 61 62 6c 65 29 7b 0a 20 20 20 20 20 20 20  nTable){.       
2af0: 20 20 20 69 66 20 28 70 2d 3e 69 65 73 63 29 20     if (p->iesc) 
2b00: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6c  {.            bl
2b10: 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c  ob_append(p->ibl
2b20: 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72 2c 20  ob, p->icursor, 
2b30: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  1);.            
2b40: 70 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 20 20 20  p->iesc = 0;.   
2b50: 20 20 20 20 20 20 20 20 20 70 2d 3e 69 63 75 72           p->icur
2b60: 73 6f 72 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20  sor += 1;.      
2b70: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2b80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
2b90: 20 20 20 65 6f 66 20 3d 20 70 2d 3e 69 63 75 72     eof = p->icur
2ba0: 73 6f 72 20 2b 20 31 3b 0a 20 20 20 20 20 20 20  sor + 1;.       
2bb0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
2bc0: 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2f 20 66    }.        // f
2bd0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 64  all through to d
2be0: 65 66 61 75 6c 74 0a 0a 20 20 20 20 20 20 64 65  efault..      de
2bf0: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 69  fault:.        i
2c00: 66 20 28 70 2d 3e 69 65 73 63 29 20 7b 0a 20 20  f (p->iesc) {.  
2c10: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70          blob_app
2c20: 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 7e  end(p->iblob, "~
2c30: 22 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  ", 1);.         
2c40: 20 70 2d 3e 69 65 73 63 20 3d 20 30 3b 0a 20 20   p->iesc = 0;.  
2c50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2c60: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69  blob_append(p->i
2c70: 62 6c 6f 62 2c 20 70 2d 3e 69 63 75 72 73 6f 72  blob, p->icursor
2c80: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  , 1);.        p-
2c90: 3e 69 63 75 72 73 6f 72 20 2b 3d 31 3b 0a 20 20  >icursor +=1;.  
2ca0: 20 20 7d 2f 2f 7d 7d 7d 0a 0a 20 20 7d 0a 0a 20    }//}}}..  }.. 
2cb0: 20 77 68 69 6c 65 20 28 70 2d 3e 69 73 74 61 63   while (p->istac
2cc0: 6b 29 7b 0a 20 20 20 20 63 72 5f 69 43 6c 6f 73  k){.    cr_iClos
2cd0: 65 28 70 2c 20 70 2d 3e 69 73 74 61 63 6b 2d 3e  e(p, p->istack->
2ce0: 6b 69 6e 64 29 3b 0a 20 20 20 20 70 2d 3e 69 73  kind);.    p->is
2cf0: 74 61 63 6b 20 3d 20 70 2d 3e 69 73 74 61 63 6b  tack = p->istack
2d00: 2d 3e 6e 65 78 74 3b 0a 20 20 7d 0a 0a 20 20 70  ->next;.  }..  p
2d10: 2d 3e 69 65 73 63 20 3d 20 73 61 76 65 5f 69 65  ->iesc = save_ie
2d20: 73 63 3b 0a 20 20 70 2d 3e 69 65 6e 64 20 3d 20  sc;.  p->iend = 
2d30: 73 61 76 65 5f 69 65 6e 64 3b 0a 20 20 70 2d 3e  save_iend;.  p->
2d40: 69 73 74 61 63 6b 20 3d 20 73 61 76 65 5f 69 73  istack = save_is
2d50: 74 61 63 6b 3b 0a 0a 20 20 72 65 74 75 72 6e 20  tack;..  return 
2d60: 65 6f 66 3b 0a 0a 7d 0a 2f 2f 7d 7d 7d 0a 2f 2f  eof;..}.//}}}.//
2d70: 7d 7d 7d 0a 0a 2f 2f 7b 7b 7b 20 42 4c 4f 43 4b  }}}..//{{{ BLOCK
2d80: 20 50 41 52 53 45 52 0a 0a 73 74 61 74 69 63 20   PARSER..static 
2d90: 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 72 4c 69  void cr_renderLi
2da0: 73 74 49 74 65 6d 28 50 61 72 73 65 72 20 2a 70  stItem(Parser *p
2db0: 2c 20 4e 6f 64 65 20 2a 6e 29 7b 2f 2f 7b 7b 7b  , Node *n){//{{{
2dc0: 0a 0a 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64  ...  blob_append
2dd0: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 6c 69 3e  (p->iblob, "<li>
2de0: 22 2c 20 34 29 3b 0a 20 20 63 72 5f 70 61 72 73  ", 4);.  cr_pars
2df0: 65 49 6e 6c 69 6e 65 28 70 2c 20 6e 2d 3e 73 74  eInline(p, n->st
2e00: 61 72 74 2c 20 6e 2d 3e 65 6e 64 29 3b 0a 0a 20  art, n->end);.. 
2e10: 20 69 66 20 28 6e 2d 3e 63 68 69 6c 64 72 65 6e   if (n->children
2e20: 29 7b 0a 0a 20 20 20 20 69 6e 74 20 6f 72 64 20  ){..    int ord 
2e30: 3d 20 28 6e 2d 3e 63 68 69 6c 64 72 65 6e 2d 3e  = (n->children->
2e40: 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 4f 52 44 45  kind & KIND_ORDE
2e50: 52 45 44 5f 4c 49 53 54 29 3b 0a 0a 20 20 20 20  RED_LIST);..    
2e60: 69 66 20 28 6f 72 64 29 20 20 20 62 6c 6f 62 5f  if (ord)   blob_
2e70: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c  append(p->iblob,
2e80: 20 22 3c 6f 6c 3e 22 2c 20 34 29 3b 0a 20 20 20   "<ol>", 4);.   
2e90: 20 65 6c 73 65 20 20 20 20 20 20 20 62 6c 6f 62   else       blob
2ea0: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62  _append(p->iblob
2eb0: 2c 20 22 3c 75 6c 3e 22 2c 20 34 29 3b 0a 0a 20  , "<ul>", 4);.. 
2ec0: 20 20 20 6e 20 3d 20 6e 2d 3e 63 68 69 6c 64 72     n = n->childr
2ed0: 65 6e 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 6e  en;.    while (n
2ee0: 29 7b 0a 20 20 20 20 20 20 63 72 5f 72 65 6e 64  ){.      cr_rend
2ef0: 65 72 4c 69 73 74 49 74 65 6d 28 70 2c 20 6e 29  erListItem(p, n)
2f00: 3b 0a 20 20 20 20 20 20 6e 20 3d 20 6e 2d 3e 6e  ;.      n = n->n
2f10: 65 78 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ext;.    }..    
2f20: 69 66 20 28 6f 72 64 29 20 20 20 62 6c 6f 62 5f  if (ord)   blob_
2f30: 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c  append(p->iblob,
2f40: 20 22 3c 2f 6f 6c 3e 22 2c 20 35 29 3b 0a 20 20   "</ol>", 5);.  
2f50: 20 20 65 6c 73 65 20 20 20 20 20 20 20 62 6c 6f    else       blo
2f60: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f  b_append(p->iblo
2f70: 62 2c 20 22 3c 2f 75 6c 3e 22 2c 20 35 29 3b 0a  b, "</ul>", 5);.
2f80: 20 20 7d 0a 20 20 62 6c 6f 62 5f 61 70 70 65 6e    }.  blob_appen
2f90: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f 6c  d(p->iblob, "</l
2fa0: 69 3e 22 2c 20 35 29 3b 0a 7d 0a 2f 2f 7d 7d 7d  i>", 5);.}.//}}}
2fb0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 72 5f  .static void cr_
2fc0: 72 65 6e 64 65 72 4c 69 73 74 28 50 61 72 73 65  renderList(Parse
2fd0: 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 4e  r *p){//{{{..  N
2fe0: 6f 64 65 20 2a 6e 20 3d 20 70 2d 3e 6c 69 73 74  ode *n = p->list
2ff0: 3b 0a 0a 20 20 77 68 69 6c 65 20 28 6e 2d 3e 70  ;..  while (n->p
3000: 61 72 65 6e 74 20 21 3d 6e 29 20 20 6e 20 3d 20  arent !=n)  n = 
3010: 6e 2d 3e 70 61 72 65 6e 74 3b 0a 0a 20 20 69 6e  n->parent;..  in
3020: 74 20 6f 72 64 20 3d 20 28 6e 2d 3e 6b 69 6e 64  t ord = (n->kind
3030: 20 26 20 4b 49 4e 44 5f 4f 52 44 45 52 45 44 5f   & KIND_ORDERED_
3040: 4c 49 53 54 29 3b 0a 0a 20 20 69 66 20 28 6f 72  LIST);..  if (or
3050: 64 29 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64  d)   blob_append
3060: 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 5c 6e 5c 6e  (p->iblob, "\n\n
3070: 3c 6f 6c 3e 22 2c 20 2d 31 29 3b 0a 20 20 65 6c  <ol>", -1);.  el
3080: 73 65 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70  se       blob_ap
3090: 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22  pend(p->iblob, "
30a0: 5c 6e 5c 6e 3c 75 6c 3e 22 2c 20 2d 31 29 3b 0a  \n\n<ul>", -1);.
30b0: 0a 20 20 77 68 69 6c 65 20 28 6e 29 20 7b 0a 20  .  while (n) {. 
30c0: 20 20 20 63 72 5f 72 65 6e 64 65 72 4c 69 73 74     cr_renderList
30d0: 49 74 65 6d 28 70 2c 20 6e 29 3b 0a 20 20 20 20  Item(p, n);.    
30e0: 6e 20 3d 20 6e 2d 3e 6e 65 78 74 3b 0a 20 20 7d  n = n->next;.  }
30f0: 0a 0a 20 20 69 66 20 28 6f 72 64 29 20 20 20 62  ..  if (ord)   b
3100: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62  lob_append(p->ib
3110: 6c 6f 62 2c 20 22 3c 2f 6f 6c 3e 22 2c 20 35 29  lob, "</ol>", 5)
3120: 3b 0a 20 20 65 6c 73 65 20 20 20 20 20 20 20 62  ;.  else       b
3130: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62  lob_append(p->ib
3140: 6c 6f 62 2c 20 22 3c 2f 75 6c 3e 22 2c 20 35 29  lob, "</ul>", 5)
3150: 3b 0a 7d 0a 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74  ;.}..//}}}..stat
3160: 69 63 20 76 6f 69 64 20 63 72 5f 72 65 6e 64 65  ic void cr_rende
3170: 72 54 61 62 6c 65 52 6f 77 28 50 61 72 73 65 72  rTableRow(Parser
3180: 20 2a 70 2c 20 4e 6f 64 65 20 2a 72 6f 77 29 7b   *p, Node *row){
3190: 2f 2f 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 73  //{{{..  char *s
31a0: 20 3d 20 72 6f 77 2d 3e 73 74 61 72 74 3b 0a 20   = row->start;. 
31b0: 20 69 6e 74 20 74 68 3b 0a 0a 20 20 62 6c 6f 62   int th;..  blob
31c0: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62  _append(p->iblob
31d0: 2c 20 22 5c 6e 3c 74 72 3e 22 2c 20 2d 31 29 3b  , "\n<tr>", -1);
31e0: 0a 0a 20 20 77 68 69 6c 65 20 28 73 20 26 26 20  ..  while (s && 
31f0: 73 20 3c 20 72 6f 77 2d 3e 65 6e 64 29 7b 0a 0a  s < row->end){..
3200: 20 20 20 20 69 66 20 28 28 74 68 20 3d 20 2a 73      if ((th = *s
3210: 20 3d 3d 20 27 3d 27 29 29 20 7b 0a 20 20 20 20   == '=')) {.    
3220: 20 20 73 2b 2b 3b 0a 20 20 20 20 20 20 62 6c 6f    s++;.      blo
3230: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f  b_append(p->iblo
3240: 62 2c 20 22 3c 74 68 3e 22 2c 20 2d 31 29 3b 0a  b, "<th>", -1);.
3250: 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 7b      }.    else {
3260: 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65  .      blob_appe
3270: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 74  nd(p->iblob, "<t
3280: 64 3e 22 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 0a  d>", -1);.    }.
3290: 0a 20 20 20 20 73 20 3d 20 63 72 5f 70 61 72 73  .    s = cr_pars
32a0: 65 49 6e 6c 69 6e 65 28 70 2c 20 73 2c 20 72 6f  eInline(p, s, ro
32b0: 77 2d 3e 65 6e 64 29 3b 0a 0a 20 20 20 20 69 66  w->end);..    if
32c0: 20 28 74 68 29 0a 20 20 20 20 20 20 62 6c 6f 62   (th).      blob
32d0: 5f 61 70 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62  _append(p->iblob
32e0: 2c 20 22 3c 2f 74 68 3e 5c 6e 22 2c 20 2d 31 29  , "</th>\n", -1)
32f0: 3b 0a 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20  ;.    else.     
3300: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e   blob_append(p->
3310: 69 62 6c 6f 62 2c 20 22 3c 2f 74 64 3e 5c 6e 22  iblob, "</td>\n"
3320: 2c 20 2d 31 29 3b 0a 0a 20 20 20 20 69 66 20 28  , -1);..    if (
3330: 21 73 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20  !s) break;.  }. 
3340: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e   blob_append(p->
3350: 69 62 6c 6f 62 2c 20 22 3c 2f 74 72 3e 22 2c 20  iblob, "</tr>", 
3360: 35 29 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73 74 61 74  5);.}.//}}}.stat
3370: 69 63 20 76 6f 69 64 20 63 72 5f 72 65 6e 64 65  ic void cr_rende
3380: 72 54 61 62 6c 65 28 50 61 72 73 65 72 20 2a 70  rTable(Parser *p
3390: 2c 20 4e 6f 64 65 20 2a 6e 29 7b 2f 2f 7b 7b 7b  , Node *n){//{{{
33a0: 0a 0a 20 20 4e 6f 64 65 20 2a 72 6f 77 20 3d 20  ..  Node *row = 
33b0: 6e 2d 3e 63 68 69 6c 64 72 65 6e 3b 0a 0a 20 20  n->children;..  
33c0: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69  blob_append(p->i
33d0: 62 6c 6f 62 2c 20 22 3c 74 61 62 6c 65 20 63 6c  blob, "<table cl
33e0: 61 73 73 3d 27 63 72 65 6f 6c 65 74 61 62 6c 65  ass='creoletable
33f0: 27 3e 22 2c 20 2d 31 29 3b 0a 20 20 70 2d 3e 69  '>", -1);.  p->i
3400: 6e 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 77 68  nTable = 1;.  wh
3410: 69 6c 65 20 28 72 6f 77 29 7b 0a 0a 20 20 20 20  ile (row){..    
3420: 63 72 5f 72 65 6e 64 65 72 54 61 62 6c 65 52 6f  cr_renderTableRo
3430: 77 28 70 2c 20 72 6f 77 29 3b 0a 20 20 20 20 72  w(p, row);.    r
3440: 6f 77 20 3d 20 72 6f 77 2d 3e 6e 65 78 74 3b 0a  ow = row->next;.
3450: 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f 61 70 70 65  .  }.  blob_appe
3460: 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c 2f  nd(p->iblob, "</
3470: 74 61 62 6c 65 3e 22 2c 20 2d 31 29 3b 0a 20 20  table>", -1);.  
3480: 70 2d 3e 69 6e 54 61 62 6c 65 20 3d 20 30 3b 0a  p->inTable = 0;.
3490: 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74 61 74 69 63  .}.//}}}..static
34a0: 20 76 6f 69 64 20 63 72 5f 72 65 6e 64 65 72 28   void cr_render(
34b0: 50 61 72 73 65 72 20 2a 70 2c 20 4e 6f 64 65 20  Parser *p, Node 
34c0: 2a 6e 6f 64 65 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20  *node){//{{{..  
34d0: 69 66 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 26  if (node->kind &
34e0: 20 4b 49 4e 44 5f 50 41 52 41 47 52 41 50 48 29   KIND_PARAGRAPH)
34f0: 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e  {.    blob_appen
3500: 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 20 20 22 5c  d(p->iblob,   "\
3510: 6e 3c 70 3e 22 2c 20 2d 31 29 3b 0a 20 20 20 20  n<p>", -1);.    
3520: 63 72 5f 70 61 72 73 65 49 6e 6c 69 6e 65 28 70  cr_parseInline(p
3530: 2c 20 6e 6f 64 65 2d 3e 73 74 61 72 74 2c 20 6e  , node->start, n
3540: 6f 64 65 2d 3e 65 6e 64 20 29 3b 0a 20 20 20 20  ode->end );.    
3550: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 69  blob_append(p->i
3560: 62 6c 6f 62 2c 20 22 3c 2f 70 3e 5c 6e 22 2c 20  blob, "</p>\n", 
3570: 2d 31 20 20 29 3b 0a 20 20 7d 0a 0a 20 20 69 66  -1  );.  }..  if
3580: 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b   (node->kind & K
3590: 49 4e 44 5f 48 45 41 44 49 4e 47 29 7b 0a 20 20  IND_HEADING){.  
35a0: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70    blob_appendf(p
35b0: 2d 3e 69 62 6c 6f 62 2c 0a 20 20 20 20 20 20 20  ->iblob,.       
35c0: 20 22 5c 6e 3c 68 25 64 20 25 73 3e 22 2c 0a 20   "\n<h%d %s>",. 
35d0: 20 20 20 20 20 20 20 6e 6f 64 65 2d 3e 6c 65 76         node->lev
35e0: 65 6c 2c 0a 20 20 20 20 20 20 20 20 28 6e 6f 64  el,.        (nod
35f0: 65 2d 3e 66 6c 61 67 73 20 26 20 46 4c 41 47 5f  e->flags & FLAG_
3600: 43 45 4e 54 45 52 29 20 3f 20 22 20 73 74 79 6c  CENTER) ? " styl
3610: 65 3d 27 74 65 78 74 2d 61 6c 69 67 6e 3a 63 65  e='text-align:ce
3620: 6e 74 65 72 3b 27 22 20 3a 20 22 22 0a 20 20 20  nter;'" : "".   
3630: 20 29 3b 0a 20 20 20 20 63 72 5f 70 61 72 73 65   );.    cr_parse
3640: 49 6e 6c 69 6e 65 28 70 2c 20 6e 6f 64 65 2d 3e  Inline(p, node->
3650: 73 74 61 72 74 2c 20 6e 6f 64 65 2d 3e 65 6e 64  start, node->end
3660: 29 3b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 70 65  );.    blob_appe
3670: 6e 64 66 28 70 2d 3e 69 62 6c 6f 62 2c 20 22 3c  ndf(p->iblob, "<
3680: 2f 68 25 64 3e 5c 6e 22 2c 20 6e 6f 64 65 2d 3e  /h%d>\n", node->
3690: 6c 65 76 65 6c 20 20 29 3b 0a 20 20 20 20 72 65  level  );.    re
36a0: 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20 20 69 66 20  turn;.  }..  if 
36b0: 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b 49  (node->kind & KI
36c0: 4e 44 5f 48 4f 52 49 5a 4f 4e 54 41 4c 5f 52 55  ND_HORIZONTAL_RU
36d0: 4c 45 29 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70  LE){.    blob_ap
36e0: 70 65 6e 64 28 70 2d 3e 69 62 6c 6f 62 2c 20 22  pend(p->iblob, "
36f0: 3c 68 72 20 2f 3e 22 2c 20 2d 31 29 3b 0a 20 20  <hr />", -1);.  
3700: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20    return;.  }.. 
3710: 20 69 66 20 28 6e 6f 64 65 2d 3e 6b 69 6e 64 20   if (node->kind 
3720: 26 20 4b 49 4e 44 5f 4c 49 53 54 29 7b 0a 20 20  & KIND_LIST){.  
3730: 20 20 63 72 5f 72 65 6e 64 65 72 4c 69 73 74 28    cr_renderList(
3740: 70 29 3b 0a 20 20 20 20 70 2d 3e 6c 69 73 74 20  p);.    p->list 
3750: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 72 65 74 75  = NULL;.    retu
3760: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 6e  rn;.  }..  if (n
3770: 6f 64 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e 44  ode->kind & KIND
3780: 5f 54 41 42 4c 45 29 7b 0a 20 20 20 20 63 72 5f  _TABLE){.    cr_
3790: 72 65 6e 64 65 72 54 61 62 6c 65 28 70 2c 20 6e  renderTable(p, n
37a0: 6f 64 65 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  ode);.    return
37b0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 6e 6f 64  ;.  }..  if (nod
37c0: 65 2d 3e 6b 69 6e 64 20 26 20 4b 49 4e 44 5f 4e  e->kind & KIND_N
37d0: 4f 5f 57 49 4b 49 5f 42 4c 4f 43 4b 29 7b 0a 20  O_WIKI_BLOCK){. 
37e0: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28     blob_appendf(
37f0: 70 2d 3e 69 62 6c 6f 62 2c 0a 20 20 20 20 20 20  p->iblob,.      
3800: 22 5c 6e 3c 62 6c 6f 63 6b 71 75 6f 74 65 20 73  "\n<blockquote s
3810: 74 79 6c 65 3d 27 62 61 63 6b 67 72 6f 75 6e 64  tyle='background
3820: 3a 6f 6c 64 6c 61 63 65 27 3e 3c 70 72 65 3e 25  :oldlace'><pre>%
3830: 73 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  s</pre></blockqu
3840: 6f 74 65 3e 5c 6e 22 2c 0a 20 20 20 20 20 20 20  ote>\n",.       
3850: 20 68 74 6d 6c 69 7a 65 28 20 6e 6f 64 65 2d 3e   htmlize( node->
3860: 73 74 61 72 74 2c 20 6e 6f 64 65 2d 3e 65 6e 64  start, node->end
3870: 20 2d 20 6e 6f 64 65 2d 3e 73 74 61 72 74 29 0a   - node->start).
3880: 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 0a 2f 2f 7d      );.  }.}.//}
3890: 7d 7d 0a 0a 73 74 61 74 69 63 20 63 68 61 72 20  }}..static char 
38a0: 2a 63 72 5f 66 69 6e 64 45 6e 64 4f 66 42 6c 6f  *cr_findEndOfBlo
38b0: 63 6b 28 50 61 72 73 65 72 20 2a 70 2c 20 63 68  ck(Parser *p, ch
38c0: 61 72 20 2a 73 2c 20 63 68 61 72 20 63 29 7b 2f  ar *s, char c){/
38d0: 2f 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 65 6e  /{{{..  char *en
38e0: 64 3b 0a 20 20 77 68 69 6c 65 20 28 73 5b 30 5d  d;.  while (s[0]
38f0: 29 7b 0a 0a 20 20 20 20 65 6e 64 20 3d 20 73 3b  ){..    end = s;
3900: 0a 20 20 20 20 69 66 20 28 73 5b 30 5d 20 3d 3d  .    if (s[0] ==
3910: 20 63 20 26 26 20 73 5b 30 5d 20 3d 3d 20 63 20   c && s[0] == c 
3920: 26 26 20 73 5b 30 5d 20 3d 3d 20 63 29 20 7b 0a  && s[0] == c) {.
3930: 20 20 20 20 20 20 73 20 3d 20 63 72 5f 6e 65 78        s = cr_nex
3940: 74 4c 69 6e 65 28 70 2c 20 73 20 2b 20 33 29 3b  tLine(p, s + 3);
3950: 0a 20 20 20 20 20 20 69 66 20 28 70 2d 3e 6c 69  .      if (p->li
3960: 6e 65 57 61 73 42 6c 61 6e 6b 29 20 7b 0a 20 20  neWasBlank) {.  
3970: 20 20 20 20 20 20 20 20 70 2d 3e 63 75 72 73 6f          p->curso
3980: 72 20 3d 20 73 3b 0a 20 20 20 20 20 20 20 20 20  r = s;.         
3990: 20 72 65 74 75 72 6e 20 65 6e 64 3b 0a 20 20 20   return end;.   
39a0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 65     }.    }.    e
39b0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 73 20 3d 20  lse {.      s = 
39c0: 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c 20 73  cr_nextLine(p, s
39d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
39e0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d  eturn 0;.}.//}}}
39f0: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 72 5f 61  .static int cr_a
3a00: 64 64 4c 69 73 74 49 74 65 6d 28 50 61 72 73 65  ddListItem(Parse
3a10: 72 20 2a 70 2c 20 4e 6f 64 65 20 2a 6e 29 7b 2f  r *p, Node *n){/
3a20: 2f 7b 7b 7b 0a 0a 20 20 6e 2d 3e 70 61 72 65 6e  /{{{..  n->paren
3a30: 74 20 3d 20 6e 3b 0a 20 20 6e 2d 3e 6e 65 78 74  t = n;.  n->next
3a40: 20 3d 20 6e 2d 3e 63 68 69 6c 64 72 65 6e 20 3d   = n->children =
3a50: 20 4e 55 4c 4c 3b 0a 0a 20 20 69 66 20 28 21 70   NULL;..  if (!p
3a60: 2d 3e 6c 69 73 74 29 20 7b 0a 20 20 20 20 69 66  ->list) {.    if
3a70: 20 28 6e 2d 3e 6c 65 76 65 6c 20 21 3d 20 31 29   (n->level != 1)
3a80: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 70   return 0;.    p
3a90: 2d 3e 6c 69 73 74 20 3d 20 6e 3b 0a 20 20 20 20  ->list = n;.    
3aa0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 0a 20  return 1;.  }.. 
3ab0: 20 4e 6f 64 65 20 2a 6c 69 73 74 20 3d 20 70 2d   Node *list = p-
3ac0: 3e 6c 69 73 74 3b 0a 0a 20 20 77 68 69 6c 65 20  >list;..  while 
3ad0: 28 6e 2d 3e 6c 65 76 65 6c 20 3c 20 6c 69 73 74  (n->level < list
3ae0: 2d 3e 6c 65 76 65 6c 29 7b 0a 20 20 20 20 6c 69  ->level){.    li
3af0: 73 74 20 3d 20 6c 69 73 74 2d 3e 70 61 72 65 6e  st = list->paren
3b00: 74 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 6e 2d  t;.  }..  if (n-
3b10: 3e 6c 65 76 65 6c 20 3d 3d 20 6c 69 73 74 2d 3e  >level == list->
3b20: 6c 65 76 65 6c 29 7b 0a 0a 20 20 20 20 69 66 20  level){..    if 
3b30: 28 6e 2d 3e 6b 69 6e 64 20 21 3d 20 6c 69 73 74  (n->kind != list
3b40: 2d 3e 6b 69 6e 64 29 7b 0a 20 20 20 20 20 20 69  ->kind){.      i
3b50: 66 20 28 6e 2d 3e 6c 65 76 65 6c 3e 31 29 20 72  f (n->level>1) r
3b60: 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 20 20 63  eturn 0;.      c
3b70: 72 5f 72 65 6e 64 65 72 4c 69 73 74 28 70 29 3b  r_renderList(p);
3b80: 0a 20 20 20 20 20 20 70 2d 3e 6c 69 73 74 20 3d  .      p->list =
3b90: 20 6e 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   n;.      return
3ba0: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 2d   1;.    }.    n-
3bb0: 3e 70 61 72 65 6e 74 20 3d 20 6c 69 73 74 2d 3e  >parent = list->
3bc0: 70 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6c  parent;.    p->l
3bd0: 69 73 74 20 3d 20 6c 69 73 74 2d 3e 6e 65 78 74  ist = list->next
3be0: 20 3d 20 6e 3b 0a 20 20 20 20 72 65 74 75 72 6e   = n;.    return
3bf0: 20 31 3b 0a 20 20 7d 0a 0a 20 20 69 66 20 28 20   1;.  }..  if ( 
3c00: 28 6e 2d 3e 6c 65 76 65 6c 20 2d 20 6c 69 73 74  (n->level - list
3c10: 2d 3e 6c 65 76 65 6c 29 20 3e 20 31 20 29 20 72  ->level) > 1 ) r
3c20: 65 74 75 72 6e 20 30 3b 0a 20 20 6e 2d 3e 70 61  eturn 0;.  n->pa
3c30: 72 65 6e 74 20 3d 20 70 2d 3e 6c 69 73 74 3b 0a  rent = p->list;.
3c40: 20 20 70 2d 3e 6c 69 73 74 2d 3e 63 68 69 6c 64    p->list->child
3c50: 72 65 6e 20 3d 20 6e 3b 0a 20 20 70 2d 3e 6c 69  ren = n;.  p->li
3c60: 73 74 20 3d 20 6e 3b 0a 20 20 72 65 74 75 72 6e  st = n;.  return
3c70: 20 31 3b 0a 0a 7d 0a 2f 2f 7d 7d 7d 0a 0a 73 74   1;..}.//}}}..st
3c80: 61 74 69 63 20 69 6e 74 20 69 73 45 6e 64 57 69  atic int isEndWi
3c90: 6b 69 4d 61 72 6b 65 72 28 50 61 72 73 65 72 20  kiMarker(Parser 
3ca0: 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 63 68 61  *p){//{{{..  cha
3cb0: 72 20 2a 73 20 3d 20 70 2d 3e 63 75 72 73 6f 72  r *s = p->cursor
3cc0: 3b 0a 20 20 69 66 20 28 6d 65 6d 63 6d 70 28 73  ;.  if (memcmp(s
3cd0: 2c 20 22 3c 3c 66 6f 73 73 69 6c 3e 3e 22 2c 20  , "<<fossil>>", 
3ce0: 31 30 29 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  10)) return 0;. 
3cf0: 20 70 2d 3e 74 68 69 73 2d 3e 73 74 61 72 74 20   p->this->start 
3d00: 3d 20 73 3b 0a 20 20 70 2d 3e 74 68 69 73 2d 3e  = s;.  p->this->
3d10: 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 45 4e 44 5f  kind = KIND_END_
3d20: 57 49 4b 49 5f 4d 41 52 4b 45 52 3b 0a 20 20 70  WIKI_MARKER;.  p
3d30: 2d 3e 63 75 72 73 6f 72 20 2b 3d 20 31 30 3b 0a  ->cursor += 10;.
3d40: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 2f 2f    return 1;.}.//
3d50: 2f 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20  /}}}.static int 
3d60: 69 73 4e 6f 57 69 6b 69 42 6c 6f 63 6b 28 50 61  isNoWikiBlock(Pa
3d70: 72 73 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a  rser *p){//{{{..
3d80: 20 20 63 68 61 72 20 2a 73 20 3d 20 70 2d 3e 63    char *s = p->c
3d90: 75 72 73 6f 72 3b 0a 0a 20 20 69 66 20 28 73 5b  ursor;..  if (s[
3da0: 30 5d 20 21 3d 20 27 7b 27 29 20 72 65 74 75 72  0] != '{') retur
3db0: 6e 20 30 3b 20 73 2b 2b 3b 0a 20 20 69 66 20 28  n 0; s++;.  if (
3dc0: 73 5b 30 5d 20 21 3d 20 27 7b 27 29 20 72 65 74  s[0] != '{') ret
3dd0: 75 72 6e 20 30 3b 20 73 2b 2b 3b 0a 20 20 69 66  urn 0; s++;.  if
3de0: 20 28 73 5b 30 5d 20 21 3d 20 27 7b 27 29 20 72   (s[0] != '{') r
3df0: 65 74 75 72 6e 20 30 3b 20 73 2b 2b 3b 0a 0a 20  eturn 0; s++;.. 
3e00: 20 73 20 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65   s = cr_nextLine
3e10: 28 70 2c 20 73 29 3b 0a 20 20 69 66 20 28 21 70  (p, s);.  if (!p
3e20: 2d 3e 6c 69 6e 65 57 61 73 42 6c 61 6e 6b 29 20  ->lineWasBlank) 
3e30: 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 70 2d 3e  return 0;..  p->
3e40: 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 73 3b  this->start = s;
3e50: 0a 0a 20 20 73 20 3d 20 63 72 5f 66 69 6e 64 45  ..  s = cr_findE
3e60: 6e 64 4f 66 42 6c 6f 63 6b 28 70 2c 20 73 2c 20  ndOfBlock(p, s, 
3e70: 27 7d 27 29 3b 0a 0a 20 20 69 66 20 28 21 73 29  '}');..  if (!s)
3e80: 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 2f 2f   return 0;..  //
3e90: 20 70 2d 3e 63 75 72 73 6f 72 20 77 61 73 20 73   p->cursor was s
3ea0: 65 74 20 62 79 20 66 69 6e 64 45 6e 64 4f 66 42  et by findEndOfB
3eb0: 6c 6f 63 6b 0a 20 20 70 2d 3e 74 68 69 73 2d 3e  lock.  p->this->
3ec0: 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 4e 4f 5f 57  kind = KIND_NO_W
3ed0: 49 4b 49 5f 42 4c 4f 43 4b 3b 0a 20 20 70 2d 3e  IKI_BLOCK;.  p->
3ee0: 74 68 69 73 2d 3e 65 6e 64 20 3d 20 73 3b 0a 20  this->end = s;. 
3ef0: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2f   return 1;.}..//
3f00: 7d 7d 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 69  }}}.static int i
3f10: 73 50 61 72 61 42 72 65 61 6b 28 50 61 72 73 65  sParaBreak(Parse
3f20: 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20 63  r *p){//{{{..  c
3f30: 68 61 72 20 2a 73 20 3d 20 63 72 5f 6e 65 78 74  har *s = cr_next
3f40: 4c 69 6e 65 28 70 2c 20 70 2d 3e 63 75 72 73 6f  Line(p, p->curso
3f50: 72 29 3b 0a 20 20 69 66 20 28 21 70 2d 3e 6c 69  r);.  if (!p->li
3f60: 6e 65 57 61 73 42 6c 61 6e 6b 29 20 72 65 74 75  neWasBlank) retu
3f70: 72 6e 20 30 3b 0a 0a 20 20 70 2d 3e 63 75 72 73  rn 0;..  p->curs
3f80: 6f 72 20 3d 20 73 3b 0a 20 20 70 2d 3e 74 68 69  or = s;.  p->thi
3f90: 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e 44 5f 50  s->kind = KIND_P
3fa0: 41 52 41 5f 42 52 45 41 4b 3b 0a 20 20 72 65 74  ARA_BREAK;.  ret
3fb0: 75 72 6e 20 31 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73  urn 1;.}.//}}}.s
3fc0: 74 61 74 69 63 20 69 6e 74 20 69 73 48 65 61 64  tatic int isHead
3fd0: 69 6e 67 28 50 61 72 73 65 72 20 2a 70 29 7b 2f  ing(Parser *p){/
3fe0: 2f 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 73 20  /{{{..  char *s 
3ff0: 3d 20 63 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28  = cr_skipBlanks(
4000: 70 2c 20 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 0a  p, p->cursor);..
4010: 20 20 69 6e 74 20 66 6c 61 67 73 20 3d 20 30 3b    int flags = 0;
4020: 0a 20 20 69 6e 74 20 6c 65 76 65 6c 20 3d 20 63  .  int level = c
4030: 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 70 2c 20  r_countChars(p, 
4040: 73 2c 20 27 3d 27 29 3b 0a 20 20 69 66 20 28 21  s, '=');.  if (!
4050: 6c 65 76 65 6c 29 20 72 65 74 75 72 6e 20 30 3b  level) return 0;
4060: 0a 0a 20 20 73 20 2b 3d 20 6c 65 76 65 6c 3b 0a  ..  s += level;.
4070: 0a 20 20 69 66 20 28 73 5b 30 5d 20 3d 3d 20 27  .  if (s[0] == '
4080: 3c 27 20 26 26 20 73 5b 31 5d 20 3d 3d 20 27 3e  <' && s[1] == '>
4090: 27 29 20 7b 0a 20 20 20 20 66 6c 61 67 73 20 7c  ') {.    flags |
40a0: 3d 20 46 4c 41 47 5f 43 45 4e 54 45 52 3b 0a 20  = FLAG_CENTER;. 
40b0: 20 20 20 73 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20     s += 2;.  }. 
40c0: 20 73 20 3d 20 63 72 5f 73 6b 69 70 42 6c 61 6e   s = cr_skipBlan
40d0: 6b 73 28 70 2c 20 73 29 3b 0a 0a 20 20 70 2d 3e  ks(p, s);..  p->
40e0: 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 73 3b  this->start = s;
40f0: 0a 0a 20 20 73 20 3d 20 63 72 5f 6e 65 78 74 4c  ..  s = cr_nextL
4100: 69 6e 65 28 70 2c 20 73 29 3b 0a 20 20 63 68 61  ine(p, s);.  cha
4110: 72 20 2a 7a 20 3d 20 73 3b 0a 0a 20 20 69 66 20  r *z = s;..  if 
4120: 28 73 5b 2d 31 5d 20 3d 3d 20 27 5c 6e 27 29 20  (s[-1] == '\n') 
4130: 73 2d 2d 3b 0a 20 20 77 68 69 6c 65 28 73 5b 2d  s--;.  while(s[-
4140: 31 5d 20 3d 3d 20 27 20 27 20 7c 7c 20 73 5b 2d  1] == ' ' || s[-
4150: 31 5d 3d 3d 27 5c 74 27 29 20 73 2d 2d 3b 0a 20  1]=='\t') s--;. 
4160: 20 77 68 69 6c 65 28 73 5b 2d 31 5d 20 3d 3d 20   while(s[-1] == 
4170: 27 3d 27 20 29 20 73 2d 2d 3b 0a 20 20 69 66 20  '=' ) s--;.  if 
4180: 28 70 2d 3e 74 68 69 73 2d 3e 73 74 61 72 74 20  (p->this->start 
4190: 3c 20 73 29 7b 0a 20 20 20 20 70 2d 3e 63 75 72  < s){.    p->cur
41a0: 73 6f 72 20 3d 20 7a 3b 0a 20 20 20 20 70 2d 3e  sor = z;.    p->
41b0: 74 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49 4e  this->kind = KIN
41c0: 44 5f 48 45 41 44 49 4e 47 3b 0a 20 20 20 20 70  D_HEADING;.    p
41d0: 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d 20 73 3b  ->this->end = s;
41e0: 0a 20 20 20 20 70 2d 3e 74 68 69 73 2d 3e 6c 65  .    p->this->le
41f0: 76 65 6c 20 3d 20 6c 65 76 65 6c 3b 0a 20 20 20  vel = level;.   
4200: 20 70 2d 3e 74 68 69 73 2d 3e 66 6c 61 67 73 20   p->this->flags 
4210: 7c 3d 20 66 6c 61 67 73 3b 0a 20 20 20 20 72 65  |= flags;.    re
4220: 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65  turn 1;.  }.  re
4230: 74 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a  turn 0;.}.//}}}.
4240: 73 74 61 74 69 63 20 69 6e 74 20 69 73 48 6f 72  static int isHor
4250: 69 7a 6f 6e 74 61 6c 52 75 6c 65 28 50 61 72 73  izontalRule(Pars
4260: 65 72 20 2a 70 29 7b 2f 2f 7b 7b 7b 0a 0a 20 20  er *p){//{{{..  
4270: 63 68 61 72 20 2a 73 20 3d 20 63 72 5f 73 6b 69  char *s = cr_ski
4280: 70 42 6c 61 6e 6b 73 28 70 2c 20 70 2d 3e 63 75  pBlanks(p, p->cu
4290: 72 73 6f 72 29 3b 0a 0a 20 20 69 6e 74 20 6c 65  rsor);..  int le
42a0: 76 65 6c 20 3d 20 63 72 5f 63 6f 75 6e 74 43 68  vel = cr_countCh
42b0: 61 72 73 28 70 2c 20 73 2c 20 27 2d 27 29 3b 0a  ars(p, s, '-');.
42c0: 0a 20 20 69 66 20 20 28 6c 65 76 65 6c 20 3c 20  .  if  (level < 
42d0: 34 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 73  4) return 0;.  s
42e0: 20 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70   = cr_nextLine(p
42f0: 2c 20 73 20 2b 20 6c 65 76 65 6c 29 3b 0a 20 20  , s + level);.  
4300: 69 66 20 28 21 70 2d 3e 6c 69 6e 65 57 61 73 42  if (!p->lineWasB
4310: 6c 61 6e 6b 29 20 72 65 74 75 72 6e 20 30 3b 0a  lank) return 0;.
4320: 0a 20 20 70 2d 3e 63 75 72 73 6f 72 20 3d 20 73  .  p->cursor = s
4330: 3b 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e  ;.  p->this->kin
4340: 64 20 3d 20 4b 49 4e 44 5f 48 4f 52 49 5a 4f 4e  d = KIND_HORIZON
4350: 54 41 4c 5f 52 55 4c 45 3b 0a 0a 20 20 72 65 74  TAL_RULE;..  ret
4360: 75 72 6e 20 31 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73  urn 1;.}.//}}}.s
4370: 74 61 74 69 63 20 69 6e 74 20 69 73 4c 69 73 74  tatic int isList
4380: 49 74 65 6d 28 50 61 72 73 65 72 20 2a 70 29 7b  Item(Parser *p){
4390: 2f 2f 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 73  //{{{..  char *s
43a0: 20 3d 20 63 72 5f 73 6b 69 70 42 6c 61 6e 6b 73   = cr_skipBlanks
43b0: 28 70 2c 20 70 2d 3e 63 75 72 73 6f 72 29 3b 0a  (p, p->cursor);.
43c0: 0a 20 20 69 6e 74 20 6c 65 76 65 6c 20 3d 20 63  .  int level = c
43d0: 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 70 2c 20  r_countChars(p, 
43e0: 73 2c 20 27 23 27 29 3b 0a 20 20 69 66 20 28 21  s, '#');.  if (!
43f0: 6c 65 76 65 6c 29 20 6c 65 76 65 6c 20 3d 20 63  level) level = c
4400: 72 5f 63 6f 75 6e 74 43 68 61 72 73 28 70 2c 20  r_countChars(p, 
4410: 73 2c 20 27 2a 27 29 3b 0a 0a 20 20 69 66 20 28  s, '*');..  if (
4420: 20 21 6c 65 76 65 6c 29 20 72 65 74 75 72 6e 20   !level) return 
4430: 30 3b 0a 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 6b  0;..  p->this->k
4440: 69 6e 64 20 3d 20 28 73 5b 30 5d 20 3d 3d 20 27  ind = (s[0] == '
4450: 23 27 29 20 3f 20 4b 49 4e 44 5f 4f 52 44 45 52  #') ? KIND_ORDER
4460: 45 44 5f 4c 49 53 54 20 3a 20 4b 49 4e 44 5f 55  ED_LIST : KIND_U
4470: 4e 4f 52 44 45 52 45 44 5f 4c 49 53 54 3b 0a 20  NORDERED_LIST;. 
4480: 20 70 2d 3e 74 68 69 73 2d 3e 6c 65 76 65 6c 20   p->this->level 
4490: 3d 20 6c 65 76 65 6c 3b 0a 0a 20 20 73 20 3d 20  = level;..  s = 
44a0: 63 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c  cr_skipBlanks(p,
44b0: 20 73 20 2b 20 6c 65 76 65 6c 29 3b 0a 20 20 70   s + level);.  p
44c0: 2d 3e 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20  ->this->start = 
44d0: 73 3b 0a 0a 20 20 73 20 3d 20 63 72 5f 6e 65 78  s;..  s = cr_nex
44e0: 74 4c 69 6e 65 28 70 2c 20 73 29 3b 0a 20 20 69  tLine(p, s);.  i
44f0: 66 20 28 70 2d 3e 6c 69 6e 65 57 61 73 42 6c 61  f (p->lineWasBla
4500: 6e 6b 29 20 72 65 74 75 72 6e 20 30 3b 0a 0a 20  nk) return 0;.. 
4510: 20 69 66 20 28 63 72 5f 61 64 64 4c 69 73 74 49   if (cr_addListI
4520: 74 65 6d 28 70 2c 20 70 2d 3e 74 68 69 73 29 29  tem(p, p->this))
4530: 7b 0a 20 20 20 20 70 2d 3e 63 75 72 73 6f 72 20  {.    p->cursor 
4540: 3d 20 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20 3d  = p->this->end =
4550: 20 73 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31   s;.    return 1
4560: 3b 0a 20 20 7d 0a 20 20 70 2d 3e 74 68 69 73 2d  ;.  }.  p->this-
4570: 3e 6b 69 6e 64 20 3d 20 30 3b 0a 20 20 72 65 74  >kind = 0;.  ret
4580: 75 72 6e 20 30 3b 0a 7d 0a 2f 2f 7d 7d 7d 0a 73  urn 0;.}.//}}}.s
4590: 74 61 74 69 63 20 69 6e 74 20 69 73 54 61 62 6c  tatic int isTabl
45a0: 65 28 50 61 72 73 65 72 20 2a 70 29 7b 2f 2f 7b  e(Parser *p){//{
45b0: 7b 7b 0a 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 73  {{..  p->this->s
45c0: 74 61 72 74 20 3d 20 70 2d 3e 63 75 72 73 6f 72  tart = p->cursor
45d0: 3b 0a 20 20 63 68 61 72 20 2a 73 20 3d 20 63 72  ;.  char *s = cr
45e0: 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20 70  _skipBlanks(p, p
45f0: 2d 3e 63 75 72 73 6f 72 29 3b 0a 20 20 69 66 20  ->cursor);.  if 
4600: 28 73 5b 30 5d 20 21 3d 20 27 7c 27 29 20 72 65  (s[0] != '|') re
4610: 74 75 72 6e 20 30 3b 0a 20 20 73 20 2b 3d 31 3b  turn 0;.  s +=1;
4620: 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64  .  p->this->kind
4630: 20 3d 20 4b 49 4e 44 5f 54 41 42 4c 45 3b 0a 0a   = KIND_TABLE;..
4640: 0a 20 20 2f 2f 70 2d 3e 63 75 72 73 6f 72 20 3d  .  //p->cursor =
4650: 20 20 20 70 2d 3e 74 68 69 73 2d 3e 65 6e 64 20     p->this->end 
4660: 3d 20 63 72 5f 6e 65 78 74 4c 69 6e 65 28 70 2c  = cr_nextLine(p,
4670: 20 73 29 3b 0a 20 20 4e 6f 64 65 20 2a 72 6f 77   s);.  Node *row
4680: 3b 0a 20 20 4e 6f 64 65 20 2a 74 61 69 6c 20 3d  ;.  Node *tail =
4690: 20 4e 55 4c 4c 3b 0a 0a 20 20 77 68 69 6c 65 20   NULL;..  while 
46a0: 28 31 29 20 7b 0a 0a 20 20 20 20 72 6f 77 20 3d  (1) {..    row =
46b0: 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 3b 0a 20 20   pool_new(p);.  
46c0: 20 20 72 6f 77 2d 3e 6b 69 6e 64 20 3d 20 4b 49    row->kind = KI
46d0: 4e 44 5f 54 41 42 4c 45 5f 52 4f 57 3b 0a 0a 20  ND_TABLE_ROW;.. 
46e0: 20 20 20 69 66 20 28 74 61 69 6c 29 20 20 20 74     if (tail)   t
46f0: 61 69 6c 20 3d 20 74 61 69 6c 2d 3e 6e 65 78 74  ail = tail->next
4700: 20 3d 20 72 6f 77 3b 0a 20 20 20 20 65 6c 73 65   = row;.    else
4710: 20 70 2d 3e 74 68 69 73 2d 3e 63 68 69 6c 64 72   p->this->childr
4720: 65 6e 20 3d 20 74 61 69 6c 20 3d 20 72 6f 77 3b  en = tail = row;
4730: 0a 0a 20 20 20 20 72 6f 77 2d 3e 73 74 61 72 74  ..    row->start
4740: 20 3d 20 73 3b 0a 20 20 20 20 70 2d 3e 63 75 72   = s;.    p->cur
4750: 73 6f 72 20 3d 20 73 20 3d 20 20 20 72 6f 77 2d  sor = s =   row-
4760: 3e 65 6e 64 20 3d 20 70 2d 3e 74 68 69 73 2d 3e  >end = p->this->
4770: 65 6e 64 20 3d 20 63 72 5f 6e 65 78 74 4c 69 6e  end = cr_nextLin
4780: 65 28 70 2c 20 73 29 3b 0a 0a 20 20 20 20 69 66  e(p, s);..    if
4790: 20 28 72 6f 77 2d 3e 65 6e 64 5b 2d 31 5d 20 3d   (row->end[-1] =
47a0: 3d 20 27 5c 6e 27 29 20 72 6f 77 2d 3e 65 6e 64  = '\n') row->end
47b0: 20 2d 3d 20 31 3b 0a 20 20 20 20 77 68 69 6c 65   -= 1;.    while
47c0: 28 72 6f 77 2d 3e 65 6e 64 5b 2d 31 5d 20 3d 3d  (row->end[-1] ==
47d0: 20 27 20 27 20 29 20 72 6f 77 2d 3e 65 6e 64 20   ' ' ) row->end 
47e0: 2d 3d 20 31 3b 0a 20 20 20 20 69 66 20 28 72 6f  -= 1;.    if (ro
47f0: 77 2d 3e 65 6e 64 5b 2d 31 5d 20 3d 3d 20 27 7c  w->end[-1] == '|
4800: 27 29 20 72 6f 77 2d 3e 65 6e 64 20 2d 3d 20 31  ') row->end -= 1
4810: 3b 0a 0a 20 20 20 20 69 66 20 28 21 2a 73 29 20  ;..    if (!*s) 
4820: 62 72 65 61 6b 3b 0a 0a 20 20 20 20 2f 2f 20 62  break;..    // b
4830: 6c 61 6e 6b 73 20 2a 6e 6f 74 2a 20 6e 6f 72 6d  lanks *not* norm
4840: 61 6c 69 7a 65 64 0a 20 20 20 20 73 20 3d 20 63  alized.    s = c
4850: 72 5f 73 6b 69 70 42 6c 61 6e 6b 73 28 70 2c 20  r_skipBlanks(p, 
4860: 70 2d 3e 63 75 72 73 6f 72 29 3b 0a 20 20 20 20  p->cursor);.    
4870: 69 66 20 28 73 5b 30 5d 20 21 3d 20 27 7c 27 29  if (s[0] != '|')
4880: 20 62 72 65 61 6b 3b 0a 20 20 20 20 73 2b 2b 3b   break;.    s++;
4890: 0a 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31  ..  }.  return 1
48a0: 3b 0a 0a 7d 3b 0a 2f 2f 7d 7d 7d 0a 73 74 61 74  ;..};.//}}}.stat
48b0: 69 63 20 69 6e 74 20 69 73 50 61 72 61 67 72 61  ic int isParagra
48c0: 70 68 28 50 61 72 73 65 72 20 2a 70 29 7b 2f 2f  ph(Parser *p){//
48d0: 7b 7b 7b 0a 0a 20 20 63 68 61 72 20 2a 73 20 3d  {{{..  char *s =
48e0: 20 70 2d 3e 63 75 72 73 6f 72 3b 0a 20 20 70 2d   p->cursor;.  p-
48f0: 3e 74 68 69 73 2d 3e 73 74 61 72 74 20 3d 20 73  >this->start = s
4900: 3b 0a 0a 20 20 73 20 3d 20 63 72 5f 6e 65 78 74  ;..  s = cr_next
4910: 4c 69 6e 65 28 70 2c 20 73 29 3b 0a 20 20 70 2d  Line(p, s);.  p-
4920: 3e 63 75 72 73 6f 72 20 3d 20 70 2d 3e 74 68 69  >cursor = p->thi
4930: 73 2d 3e 65 6e 64 20 3d 20 73 3b 0a 20 20 70 2d  s->end = s;.  p-
4940: 3e 74 68 69 73 2d 3e 6b 69 6e 64 20 3d 20 4b 49  >this->kind = KI
4950: 4e 44 5f 50 41 52 41 47 52 41 50 48 3b 0a 20 20  ND_PARAGRAPH;.  
4960: 72 65 74 75 72 6e 20 31 3b 0a 0a 7d 0a 2f 2f 7d  return 1;..}.//}
4970: 7d 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63  }}.static void c
4980: 72 5f 70 61 72 73 65 28 50 61 72 73 65 72 20 2a  r_parse(Parser *
4990: 70 2c 20 63 68 61 72 2a 20 7a 29 7b 2f 2f 7b 7b  p, char* z){//{{
49a0: 7b 0a 0a 20 20 70 2d 3e 70 72 65 76 69 6f 75 73  {..  p->previous
49b0: 20 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 3b 0a   = pool_new(p);.
49c0: 20 20 70 2d 3e 70 72 65 76 69 6f 75 73 2d 3e 6b    p->previous->k
49d0: 69 6e 64 20 3d 20 4b 49 4e 44 5f 50 41 52 41 5f  ind = KIND_PARA_
49e0: 42 52 45 41 4b 3b 0a 0a 20 20 70 2d 3e 74 68 69  BREAK;..  p->thi
49f0: 73 20 3d 20 70 6f 6f 6c 5f 6e 65 77 28 70 29 3b  s = pool_new(p);
4a00: 0a 20 20 70 2d 3e 74 68 69 73 2d 3e 6b 69 6e 64  .  p->this->kind
4a10: 20 3d 20 4b 49 4e 44 5f 50 41 52 41 5f 42 52 45   = KIND_PARA_BRE
4a20: 41 4b 3b 0a 0a 20 20 70 2d 3e 69 6e 4c 69 6e 6b  AK;..  p->inLink
4a30: 20 3d 20 30 3b 0a 20 20 70 2d 3e 69 6e 54 61 62   = 0;.  p->inTab
4a40: 6c 65 20 3d 20 30 3b 0a 0a 20 20 70 2d 3e 63 75  le = 0;..  p->cu
4a50: 72 73 6f 72 20 3d 20 7a 3b 0a 20 20 70 2d 3e 6c  rsor = z;.  p->l
4a60: 69 73 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20 70 2d  ist = NULL;.  p-
4a70: 3e 69 73 74 61 63 6b 20 3d 20 4e 55 4c 4c 3b 0a  >istack = NULL;.
4a80: 0a 20 20 77 68 69 6c 65 20 28 70 2d 3e 63 75 72  .  while (p->cur
4a90: 73 6f 72 5b 30 5d 29 20 7b 0a 0a 20 20 20 20 77  sor[0]) {..    w
4aa0: 68 69 6c 65 20 28 31 29 7b 0a 0a 20 20 20 20 20  hile (1){..     
4ab0: 20 2f 2f 20 6d 75 73 74 20 62 65 20 66 69 72 73   // must be firs
4ac0: 74 0a 20 20 20 20 20 20 69 66 20 28 69 73 4e 6f  t.      if (isNo
4ad0: 57 69 6b 69 42 6c 6f 63 6b 28 70 29 29 20 62 72  WikiBlock(p)) br
4ae0: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 20 28 69  eak;.      if (i
4af0: 73 50 61 72 61 42 72 65 61 6b 28 70 29 29 20 20  sParaBreak(p))  
4b00: 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 2f   break;..      /
4b10: 2f 20 6f 72 64 65 72 20 6e 6f 74 20 69 6d 70 6f  / order not impo
4b20: 72 74 61 6e 74 0a 20 20 20 20 20 20 69 66 20 28  rtant.      if (
4b30: 69 73 48 65 61 64 69 6e 67 28 70 29 29 20 62 72  isHeading(p)) br
4b40: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 20 28 69  eak;.      if (i
4b50: 73 48 6f 72 69 7a 6f 6e 74 61 6c 52 75 6c 65 28  sHorizontalRule(
4b60: 70 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  p)) break;.     
4b70: 20 69 66 20 28 69 73 4c 69 73 74 49 74 65 6d 28   if (isListItem(
4b80: 70 29 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  p)) break;.     
4b90: 20 69 66 20 28 69 73 54 61 62 6c 65 28 70 29 29   if (isTable(p))
4ba0: 20 62 72 65 61 6b 3b 0a 0a 20 20 20 20 20 20 2f   break;..      /
4bb0: 2f 20 68 65 72 65 20 66 6f 72 20 65 66 66 69 63  / here for effic
4bc0: 69 65 6e 63 79 3f 0a 20 20 20 20 20 20 69 66 20  iency?.      if 
4bd0: 28 69 73 45 6e 64 57 69 6b 69 4d 61 72 6b 65 72  (isEndWikiMarker
4be0: 28 70 29 29 20 62 72 65 61 6b 3b 0a 0a 20 20 20  (p)) break;..   
4bf0: 20 20 20 2f 2f 20 6d 75 73 74 20 62 65 20 6c 61     // must be la
4c00: 73 74 0a 20 20 20 20 20 20 69 66 20 28 69 73 50  st.      if (isP
4c10: 61 72 61 67 72 61 70 68 28 70 29 29 3b 20 62 72  aragraph(p)); br
4c20: 65 61 6b 3b 0a 0a 20 20 20 20 20 20 2f 2f 20 64  eak;..      // d
4c30: 6f 68 21 0a 20 20 20 20 20 20 61 73 73 65 72 74  oh!.      assert
4c40: 28 30 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  (0);.    }..    
4c50: 69 6e 74 20 6b 69 6e 64 20 3d 20 70 2d 3e 74 68  int kind = p->th
4c60: 69 73 2d 3e 6b 69 6e 64 3b 0a 20 20 20 20 69 6e  is->kind;.    in
4c70: 74 20 70 72 65 76 20 3d 20 70 2d 3e 70 72 65 76  t prev = p->prev
4c80: 69 6f 75 73 2d 3e 6b 69 6e 64 3b 0a 0a 20 20 20  ious->kind;..   
4c90: 20 69 66 20 28 6b 69 6e 64 20 26 20 4b 49 4e 44   if (kind & KIND
4ca0: 5f 45 4e 44 5f 57 49 4b 49 5f 4d 41 52 4b 45 52  _END_WIKI_MARKER
4cb0: 29 20 20 72 65 74 75 72 6e 3b 0a 0a 20 20 20 20  )  return;..    
4cc0: 69 66 20 28 6b 69 6e 64 20 3d 3d 20 4b 49 4e 44  if (kind == KIND
4cd0: 5f 50 41 52 41 47 52 41 50 48 20 26 26 20 70 72  _PARAGRAPH && pr
4ce0: 65 76 20 26 20 4b 49 4e 44 5f 4c 49 53 54 5f 4f  ev & KIND_LIST_O
4cf0: 52 5f 50 41 52 41 47 52 41 50 48 29 20 7b 0a 20  R_PARAGRAPH) {. 
4d00: 20 20 20 20 20 20 20 70 2d 3e 70 72 65 76 69 6f         p->previo
4d10: 75 73 2d 3e 65 6e 64 20 3d 20 70 2d 3e 74 68 69  us->end = p->thi
4d20: 73 2d 3e 65 6e 64 3b 0a 20 20 20 20 20 20 20 20  s->end;.        
4d30: 70 2d 3e 74 68 69 73 20 3d 20 70 6f 6f 6c 5f 6e  p->this = pool_n
4d40: 65 77 28 70 29 3b 0a 20 20 20 20 20 20 20 20 63  ew(p);.        c
4d50: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 7d 0a 0a  ontinue;.    }..
4d60: 20 20 20 20 69 66 20 28 20 21 28 6b 69 6e 64 20      if ( !(kind 
4d70: 26 20 4b 49 4e 44 5f 4c 49 53 54 20 26 26 20 70  & KIND_LIST && p
4d80: 72 65 76 20 26 20 4b 49 4e 44 5f 4c 49 53 54 29  rev & KIND_LIST)
4d90: 20 29 0a 20 20 20 20 20 20 63 72 5f 72 65 6e 64   ).      cr_rend
4da0: 65 72 28 70 2c 20 70 2d 3e 70 72 65 76 69 6f 75  er(p, p->previou
4db0: 73 29 3b 0a 0a 20 20 20 20 70 2d 3e 70 72 65 76  s);..    p->prev
4dc0: 69 6f 75 73 20 3d 20 70 2d 3e 74 68 69 73 3b 0a  ious = p->this;.
4dd0: 20 20 20 20 70 2d 3e 74 68 69 73 20 3d 20 70 6f      p->this = po
4de0: 6f 6c 5f 6e 65 77 28 70 29 3b 0a 0a 20 20 7d 0a  ol_new(p);..  }.
4df0: 7d 0a 2f 2f 7d 7d 7d 0a 0a 2f 2f 7d 7d 7d 0a 0a  }.//}}}..//}}}..
4e00: 63 68 61 72 20 2a 77 69 6b 69 5f 72 65 6e 64 65  char *wiki_rende
4e10: 72 5f 63 72 65 6f 6c 65 28 52 65 6e 64 65 72 65  r_creole(Rendere
4e20: 72 20 2a 72 2c 20 63 68 61 72 20 2a 7a 29 7b 0a  r *r, char *z){.
4e30: 0a 20 20 50 61 72 73 65 72 20 70 61 72 73 65 72  .  Parser parser
4e40: 3b 0a 20 20 50 61 72 73 65 72 20 2a 70 20 3d 20  ;.  Parser *p = 
4e50: 26 70 61 72 73 65 72 3b 0a 0a 20 20 70 2d 3e 72  &parser;..  p->r
4e60: 20 3d 20 72 3b 0a 20 20 70 2d 3e 69 62 6c 6f 62   = r;.  p->iblob
4e70: 20 3d 20 72 2d 3e 70 4f 75 74 3b 0a 0a 20 20 70   = r->pOut;..  p
4e80: 2d 3e 6e 46 72 65 65 20 3d 20 30 3b 0a 20 20 70  ->nFree = 0;.  p
4e90: 2d 3e 70 6f 6f 6c 20 3d 20 4e 55 4c 4c 3b 0a 0a  ->pool = NULL;..
4ea0: 20 20 63 72 5f 70 61 72 73 65 28 70 2c 20 7a 29    cr_parse(p, z)
4eb0: 3b 0a 0a 20 20 63 72 5f 72 65 6e 64 65 72 28 70  ;..  cr_render(p
4ec0: 2c 20 70 2d 3e 70 72 65 76 69 6f 75 73 29 3b 0a  , p->previous);.
4ed0: 0a 20 20 70 6f 6f 6c 5f 66 72 65 65 28 70 29 3b  .  pool_free(p);
4ee0: 0a 0a 20 20 72 65 74 75 72 6e 20 70 2d 3e 63 75  ..  return p->cu
4ef0: 72 73 6f 72 3b 0a 0a 7d 0a 0a                    rsor;..}..