Hex Artifact Content
Not logged in

Artifact 2c19d7097f936a79b7422edf030524f15ec89887:

File src/creoleparser.c part of check-in [b877d2cfcd] - Whoops - forgot to add the parser! by robert on 2009-05-08 10:04:59.

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