Hex Artifact Content
Not logged in

Artifact e5d7a584f027d6b59b9b56ce020547b22eac038b:

File src/creoleparser.c part of check-in [cacb8db398] - Minor fixes to creole by robert on 2009-09-26 14:33:22.

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