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 37 20 44 2e 20 52 69 63 68 (c) 2007 D. Rich
0020: 61 72 64 20 48 69 70 70 0a 2a 2a 0a 2a 2a 20 54 ard Hipp.**.** T
0030: 68 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 his program is f
0040: 72 65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f ree software; yo
0050: 75 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 u can redistribu
0060: 74 65 20 69 74 20 61 6e 64 2f 6f 72 0a 2a 2a 20 te it and/or.**
0070: 6d 6f 64 69 66 79 20 69 74 20 75 6e 64 65 72 20 modify it under
0080: 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 the terms of the
0090: 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 GNU General Pub
00a0: 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e 73 65 20 76 lic.** License v
00b0: 65 72 73 69 6f 6e 20 32 20 61 73 20 70 75 62 6c ersion 2 as publ
00c0: 69 73 68 65 64 20 62 79 20 74 68 65 20 46 72 65 ished by the Fre
00d0: 65 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 e Software Found
00e0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 ation..**.** Thi
00f0: 73 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 s program is dis
0100: 74 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 tributed in the
0110: 68 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c hope that it wil
0120: 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a 2a 2a 20 l be useful,.**
0130: 62 75 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 but WITHOUT ANY
0140: 57 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 WARRANTY; withou
0150: 74 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 t even the impli
0160: 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 2a ed warranty of.*
0170: 2a 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 * MERCHANTABILIT
0180: 59 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 Y or FITNESS FOR
0190: 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 A PARTICULAR PU
01a0: 52 50 4f 53 45 2e 20 20 53 65 65 20 74 68 65 20 RPOSE. See the
01b0: 47 4e 55 0a 2a 2a 20 47 65 6e 65 72 61 6c 20 50 GNU.** General P
01c0: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f ublic License fo
01d0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a r more details..
01e0: 2a 2a 0a 2a 2a 20 59 6f 75 20 73 68 6f 75 6c 64 **.** You should
01f0: 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 61 have received a
0200: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 47 4e 55 copy of the GNU
0210: 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 0a General Public.
0220: 2a 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e 67 ** License along
0230: 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72 61 with this libra
0240: 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69 74 ry; if not, writ
0250: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 46 72 65 65 e to the.** Free
0260: 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61 Software Founda
0270: 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 39 20 54 tion, Inc., 59 T
0280: 65 6d 70 6c 65 20 50 6c 61 63 65 20 2d 20 53 75 emple Place - Su
0290: 69 74 65 20 33 33 30 2c 0a 2a 2a 20 42 6f 73 74 ite 330,.** Bost
02a0: 6f 6e 2c 20 4d 41 20 20 30 32 31 31 31 2d 31 33 on, MA 02111-13
02b0: 30 37 2c 20 55 53 41 2e 0a 2a 2a 0a 2a 2a 20 41 07, USA..**.** A
02c0: 75 74 68 6f 72 20 63 6f 6e 74 61 63 74 20 69 6e uthor contact in
02d0: 66 6f 72 6d 61 74 69 6f 6e 3a 0a 2a 2a 20 20 20 formation:.**
02e0: 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 0a 2a 2a drh@hwaci.com.**
02f0: 20 20 20 68 74 74 70 3a 2f 2f 77 77 77 2e 68 77 http://www.hw
0300: 61 63 69 2e 63 6f 6d 2f 64 72 68 2f 0a 2a 2a 0a aci.com/drh/.**.
0310: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ****************
0320: 2a 2a 2a 2a 2a 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 0a ***************.
0360: 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 **.** This file
0370: 63 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 74 6f contains code to
0380: 20 64 6f 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f do formatting o
0390: 66 20 77 69 6b 69 20 74 65 78 74 2e 0a 2a 2f 0a f wiki text..*/.
03a0: 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 #include <assert
03b0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f .h>.#include "co
03c0: 6e 66 69 67 2e 68 22 0a 23 69 6e 63 6c 75 64 65 nfig.h".#include
03d0: 20 22 77 69 6b 69 66 6f 72 6d 61 74 2e 68 22 0a "wikiformat.h".
03e0: 0a 23 69 66 20 49 4e 54 45 52 46 41 43 45 0a 2f .#if INTERFACE./
03f0: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 77 69 6b *.** Allowed wik
0400: 69 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e i transformation
0410: 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2f 0a 23 operations.*/.#
0420: 64 65 66 69 6e 65 20 57 49 4b 49 5f 4e 4f 46 4f define WIKI_NOFO
0430: 4c 4c 4f 57 20 20 20 20 20 20 20 30 78 30 30 31 LLOW 0x001
0440: 0a 23 64 65 66 69 6e 65 20 57 49 4b 49 5f 48 54 .#define WIKI_HT
0450: 4d 4c 20 20 20 20 20 20 20 20 20 20 20 30 78 30 ML 0x0
0460: 30 32 0a 23 64 65 66 69 6e 65 20 57 49 4b 49 5f 02.#define WIKI_
0470: 49 4e 4c 49 4e 45 20 20 20 20 20 20 20 20 20 30 INLINE 0
0480: 78 30 30 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 x004 /* Do not
0490: 73 75 72 72 6f 75 6e 64 20 77 69 74 68 20 3c 70 surround with <p
04a0: 3e 2e 2e 3c 2f 70 3e 20 2a 2f 0a 23 64 65 66 69 >..</p> */.#defi
04b0: 6e 65 20 57 49 4b 49 5f 4e 4f 42 4c 4f 43 4b 20 ne WIKI_NOBLOCK
04c0: 20 20 20 20 20 20 20 30 78 30 30 38 20 20 2f 2a 0x008 /*
04d0: 20 4e 6f 20 62 6c 6f 63 6b 20 6d 61 72 6b 75 70 No block markup
04e0: 20 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a of any kind */.
04f0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54 #endif.../*.** T
0500: 68 65 73 65 20 61 72 65 20 74 68 65 20 6f 6e 6c hese are the onl
0510: 79 20 6d 61 72 6b 75 70 20 61 74 74 72 69 62 75 y markup attribu
0520: 74 65 73 20 61 6c 6c 6f 77 65 64 2e 0a 2a 2f 0a tes allowed..*/.
0530: 23 64 65 66 69 6e 65 20 41 54 54 52 5f 41 4c 49 #define ATTR_ALI
0540: 47 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 GN
0550: 31 0a 23 64 65 66 69 6e 65 20 41 54 54 52 5f 41 1.#define ATTR_A
0560: 4c 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 LT
0570: 20 20 32 0a 23 64 65 66 69 6e 65 20 41 54 54 52 2.#define ATTR
0580: 5f 42 47 43 4f 4c 4f 52 20 20 20 20 20 20 20 20 _BGCOLOR
0590: 20 20 20 20 33 0a 23 64 65 66 69 6e 65 20 41 54 3.#define AT
05a0: 54 52 5f 42 4f 52 44 45 52 20 20 20 20 20 20 20 TR_BORDER
05b0: 20 20 20 20 20 20 34 0a 23 64 65 66 69 6e 65 20 4.#define
05c0: 41 54 54 52 5f 43 45 4c 4c 50 41 44 44 49 4e 47 ATTR_CELLPADDING
05d0: 20 20 20 20 20 20 20 20 35 0a 23 64 65 66 69 6e 5.#defin
05e0: 65 20 41 54 54 52 5f 43 45 4c 4c 53 50 41 43 49 e ATTR_CELLSPACI
05f0: 4e 47 20 20 20 20 20 20 20 20 36 0a 23 64 65 66 NG 6.#def
0600: 69 6e 65 20 41 54 54 52 5f 43 4c 45 41 52 20 20 ine ATTR_CLEAR
0610: 20 20 20 20 20 20 20 20 20 20 20 20 37 0a 23 64 7.#d
0620: 65 66 69 6e 65 20 41 54 54 52 5f 43 4f 4c 4f 52 efine ATTR_COLOR
0630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 38 0a 8.
0640: 23 64 65 66 69 6e 65 20 41 54 54 52 5f 43 4f 4c #define ATTR_COL
0650: 53 50 41 4e 20 20 20 20 20 20 20 20 20 20 20 20 SPAN
0660: 39 0a 23 64 65 66 69 6e 65 20 41 54 54 52 5f 43 9.#define ATTR_C
0670: 4f 4d 50 41 43 54 20 20 20 20 20 20 20 20 20 20 OMPACT
0680: 20 20 31 30 0a 23 64 65 66 69 6e 65 20 41 54 54 10.#define ATT
0690: 52 5f 46 41 43 45 20 20 20 20 20 20 20 20 20 20 R_FACE
06a0: 20 20 20 20 20 31 31 0a 23 64 65 66 69 6e 65 20 11.#define
06b0: 41 54 54 52 5f 48 45 49 47 48 54 20 20 20 20 20 ATTR_HEIGHT
06c0: 20 20 20 20 20 20 20 20 31 32 0a 23 64 65 66 69 12.#defi
06d0: 6e 65 20 41 54 54 52 5f 48 52 45 46 20 20 20 20 ne ATTR_HREF
06e0: 20 20 20 20 20 20 20 20 20 20 20 31 33 0a 23 64 13.#d
06f0: 65 66 69 6e 65 20 41 54 54 52 5f 48 53 50 41 43 efine ATTR_HSPAC
0700: 45 20 20 20 20 20 20 20 20 20 20 20 20 20 31 34 E 14
0710: 0a 23 64 65 66 69 6e 65 20 41 54 54 52 5f 49 44 .#define ATTR_ID
0720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0730: 20 31 35 0a 23 64 65 66 69 6e 65 20 41 54 54 52 15.#define ATTR
0740: 5f 4e 41 4d 45 20 20 20 20 20 20 20 20 20 20 20 _NAME
0750: 20 20 20 20 31 36 0a 23 64 65 66 69 6e 65 20 41 16.#define A
0760: 54 54 52 5f 52 4f 57 53 50 41 4e 20 20 20 20 20 TTR_ROWSPAN
0770: 20 20 20 20 20 20 20 31 37 0a 23 64 65 66 69 6e 17.#defin
0780: 65 20 41 54 54 52 5f 53 49 5a 45 20 20 20 20 20 e ATTR_SIZE
0790: 20 20 20 20 20 20 20 20 20 20 31 38 0a 23 64 65 18.#de
07a0: 66 69 6e 65 20 41 54 54 52 5f 53 52 43 20 20 20 fine ATTR_SRC
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 39 0a 19.
07c0: 23 64 65 66 69 6e 65 20 41 54 54 52 5f 53 54 41 #define ATTR_STA
07d0: 52 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 RT
07e0: 32 30 0a 23 64 65 66 69 6e 65 20 41 54 54 52 5f 20.#define ATTR_
07f0: 54 59 50 45 20 20 20 20 20 20 20 20 20 20 20 20 TYPE
0800: 20 20 20 32 31 0a 23 64 65 66 69 6e 65 20 41 54 21.#define AT
0810: 54 52 5f 56 41 4c 49 47 4e 20 20 20 20 20 20 20 TR_VALIGN
0820: 20 20 20 20 20 20 32 32 0a 23 64 65 66 69 6e 65 22.#define
0830: 20 41 54 54 52 5f 56 41 4c 55 45 20 20 20 20 20 ATTR_VALUE
0840: 20 20 20 20 20 20 20 20 20 32 33 0a 23 64 65 66 23.#def
0850: 69 6e 65 20 41 54 54 52 5f 56 53 50 41 43 45 20 ine ATTR_VSPACE
0860: 20 20 20 20 20 20 20 20 20 20 20 20 32 34 0a 23 24.#
0870: 64 65 66 69 6e 65 20 41 54 54 52 5f 57 49 44 54 define ATTR_WIDT
0880: 48 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 H 2
0890: 35 0a 23 64 65 66 69 6e 65 20 41 4d 53 4b 5f 41 5.#define AMSK_A
08a0: 4c 49 47 4e 20 20 20 20 20 20 20 20 20 20 20 20 LIGN
08b0: 20 20 30 78 30 30 30 30 30 30 31 0a 23 64 65 66 0x0000001.#def
08c0: 69 6e 65 20 41 4d 53 4b 5f 41 4c 54 20 20 20 20 ine AMSK_ALT
08d0: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 0x00
08e0: 30 30 30 30 32 0a 23 64 65 66 69 6e 65 20 41 4d 00002.#define AM
08f0: 53 4b 5f 42 47 43 4f 4c 4f 52 20 20 20 20 20 20 SK_BGCOLOR
0900: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 34 0a 0x0000004.
0910: 23 64 65 66 69 6e 65 20 41 4d 53 4b 5f 42 4f 52 #define AMSK_BOR
0920: 44 45 52 20 20 20 20 20 20 20 20 20 20 20 20 20 DER
0930: 30 78 30 30 30 30 30 30 38 0a 23 64 65 66 69 6e 0x0000008.#defin
0940: 65 20 41 4d 53 4b 5f 43 45 4c 4c 50 41 44 44 49 e AMSK_CELLPADDI
0950: 4e 47 20 20 20 20 20 20 20 20 30 78 30 30 30 30 NG 0x0000
0960: 30 31 30 0a 23 64 65 66 69 6e 65 20 41 4d 53 4b 010.#define AMSK
0970: 5f 43 45 4c 4c 53 50 41 43 49 4e 47 20 20 20 20 _CELLSPACING
0980: 20 20 20 20 30 78 30 30 30 30 30 32 30 0a 23 64 0x0000020.#d
0990: 65 66 69 6e 65 20 41 4d 53 4b 5f 43 4c 45 41 52 efine AMSK_CLEAR
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 0x
09b0: 30 30 30 30 30 34 30 0a 23 64 65 66 69 6e 65 20 0000040.#define
09c0: 41 4d 53 4b 5f 43 4f 4c 4f 52 20 20 20 20 20 20 AMSK_COLOR
09d0: 20 20 20 20 20 20 20 20 30 78 30 30 30 30 30 38 0x000008
09e0: 30 0a 23 64 65 66 69 6e 65 20 41 4d 53 4b 5f 43 0.#define AMSK_C
09f0: 4f 4c 53 50 41 4e 20 20 20 20 20 20 20 20 20 20 OLSPAN
0a00: 20 20 30 78 30 30 30 30 31 30 30 0a 23 64 65 66 0x0000100.#def
0a10: 69 6e 65 20 41 4d 53 4b 5f 43 4f 4d 50 41 43 54 ine AMSK_COMPACT
0a20: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 0x00
0a30: 30 30 32 30 30 0a 23 64 65 66 69 6e 65 20 41 4d 00200.#define AM
0a40: 53 4b 5f 46 41 43 45 20 20 20 20 20 20 20 20 20 SK_FACE
0a50: 20 20 20 20 20 20 30 78 30 30 30 30 34 30 30 0a 0x0000400.
0a60: 23 64 65 66 69 6e 65 20 41 4d 53 4b 5f 48 45 49 #define AMSK_HEI
0a70: 47 48 54 20 20 20 20 20 20 20 20 20 20 20 20 20 GHT
0a80: 30 78 30 30 30 30 38 30 30 0a 23 64 65 66 69 6e 0x0000800.#defin
0a90: 65 20 41 4d 53 4b 5f 48 52 45 46 20 20 20 20 20 e AMSK_HREF
0aa0: 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 0x0001
0ab0: 30 30 30 0a 23 64 65 66 69 6e 65 20 41 4d 53 4b 000.#define AMSK
0ac0: 5f 48 53 50 41 43 45 20 20 20 20 20 20 20 20 20 _HSPACE
0ad0: 20 20 20 20 30 78 30 30 30 32 30 30 30 0a 23 64 0x0002000.#d
0ae0: 65 66 69 6e 65 20 41 4d 53 4b 5f 49 44 20 20 20 efine AMSK_ID
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 0x
0b00: 30 30 30 34 30 30 30 0a 23 64 65 66 69 6e 65 20 0004000.#define
0b10: 41 4d 53 4b 5f 4e 41 4d 45 20 20 20 20 20 20 20 AMSK_NAME
0b20: 20 20 20 20 20 20 20 20 30 78 30 30 30 38 30 30 0x000800
0b30: 30 0a 23 64 65 66 69 6e 65 20 41 4d 53 4b 5f 52 0.#define AMSK_R
0b40: 4f 57 53 50 41 4e 20 20 20 20 20 20 20 20 20 20 OWSPAN
0b50: 20 20 30 78 30 30 31 30 30 30 30 0a 23 64 65 66 0x0010000.#def
0b60: 69 6e 65 20 41 4d 53 4b 5f 53 49 5a 45 20 20 20 ine AMSK_SIZE
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 0x00
0b80: 32 30 30 30 30 0a 23 64 65 66 69 6e 65 20 41 4d 20000.#define AM
0b90: 53 4b 5f 53 52 43 20 20 20 20 20 20 20 20 20 20 SK_SRC
0ba0: 20 20 20 20 20 20 30 78 30 30 34 30 30 30 30 0a 0x0040000.
0bb0: 23 64 65 66 69 6e 65 20 41 4d 53 4b 5f 53 54 41 #define AMSK_STA
0bc0: 52 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 RT
0bd0: 30 78 30 30 38 30 30 30 30 0a 23 64 65 66 69 6e 0x0080000.#defin
0be0: 65 20 41 4d 53 4b 5f 54 59 50 45 20 20 20 20 20 e AMSK_TYPE
0bf0: 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30 0x0100
0c00: 30 30 30 0a 23 64 65 66 69 6e 65 20 41 4d 53 4b 000.#define AMSK
0c10: 5f 56 41 4c 49 47 4e 20 20 20 20 20 20 20 20 20 _VALIGN
0c20: 20 20 20 20 30 78 30 32 30 30 30 30 30 0a 23 64 0x0200000.#d
0c30: 65 66 69 6e 65 20 41 4d 53 4b 5f 56 41 4c 55 45 efine AMSK_VALUE
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 0x
0c50: 30 34 30 30 30 30 30 0a 23 64 65 66 69 6e 65 20 0400000.#define
0c60: 41 4d 53 4b 5f 56 53 50 41 43 45 20 20 20 20 20 AMSK_VSPACE
0c70: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 0x080000
0c80: 30 0a 23 64 65 66 69 6e 65 20 41 4d 53 4b 5f 57 0.#define AMSK_W
0c90: 49 44 54 48 20 20 20 20 20 20 20 20 20 20 20 20 IDTH
0ca0: 20 20 30 78 31 30 30 30 30 30 30 0a 0a 73 74 61 0x1000000..sta
0cb0: 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 tic const struct
0cc0: 20 41 6c 6c 6f 77 65 64 41 74 74 72 69 62 75 74 AllowedAttribut
0cd0: 65 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 e {. const char
0ce0: 20 2a 7a 4e 61 6d 65 3b 0a 20 20 75 6e 73 69 67 *zName;. unsig
0cf0: 6e 65 64 20 69 6e 74 20 69 4d 61 73 6b 3b 0a 7d ned int iMask;.}
0d00: 20 61 41 74 74 72 69 62 75 74 65 5b 5d 20 3d 20 aAttribute[] =
0d10: 7b 0a 20 20 7b 20 30 2c 20 30 20 7d 2c 0a 20 20 {. { 0, 0 },.
0d20: 7b 20 22 61 6c 69 67 6e 22 2c 20 20 20 20 20 20 { "align",
0d30: 20 20 20 41 4d 53 4b 5f 41 4c 49 47 4e 2c 20 20 AMSK_ALIGN,
0d40: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 },. { "
0d50: 61 6c 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 alt",
0d60: 41 4d 53 4b 5f 41 4c 54 2c 20 20 20 20 20 20 20 AMSK_ALT,
0d70: 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 62 67 63 },. { "bgc
0d80: 6f 6c 6f 72 22 2c 20 20 20 20 20 20 20 41 4d 53 olor", AMS
0d90: 4b 5f 42 47 43 4f 4c 4f 52 2c 20 20 20 20 20 20 K_BGCOLOR,
0da0: 20 20 7d 2c 0a 20 20 7b 20 22 62 6f 72 64 65 72 },. { "border
0db0: 22 2c 20 20 20 20 20 20 20 20 41 4d 53 4b 5f 42 ", AMSK_B
0dc0: 4f 52 44 45 52 2c 20 20 20 20 20 20 20 20 20 7d ORDER, }
0dd0: 2c 0a 20 20 7b 20 22 63 65 6c 6c 70 61 64 64 69 ,. { "cellpaddi
0de0: 6e 67 22 2c 20 20 20 41 4d 53 4b 5f 43 45 4c 4c ng", AMSK_CELL
0df0: 50 41 44 44 49 4e 47 2c 20 20 20 20 7d 2c 0a 20 PADDING, },.
0e00: 20 7b 20 22 63 65 6c 6c 73 70 61 63 69 6e 67 22 { "cellspacing"
0e10: 2c 20 20 20 41 4d 53 4b 5f 43 45 4c 4c 53 50 41 , AMSK_CELLSPA
0e20: 43 49 4e 47 2c 20 20 20 20 7d 2c 0a 20 20 7b 20 CING, },. {
0e30: 22 63 6c 65 61 72 22 2c 20 20 20 20 20 20 20 20 "clear",
0e40: 20 41 4d 53 4b 5f 43 4c 45 41 52 2c 20 20 20 20 AMSK_CLEAR,
0e50: 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 63 6f },. { "co
0e60: 6c 6f 72 22 2c 20 20 20 20 20 20 20 20 20 41 4d lor", AM
0e70: 53 4b 5f 43 4f 4c 4f 52 2c 20 20 20 20 20 20 20 SK_COLOR,
0e80: 20 20 20 7d 2c 0a 20 20 7b 20 22 63 6f 6c 73 70 },. { "colsp
0e90: 61 6e 22 2c 20 20 20 20 20 20 20 41 4d 53 4b 5f an", AMSK_
0ea0: 43 4f 4c 53 50 41 4e 2c 20 20 20 20 20 20 20 20 COLSPAN,
0eb0: 7d 2c 0a 20 20 7b 20 22 63 6f 6d 70 61 63 74 22 },. { "compact"
0ec0: 2c 20 20 20 20 20 20 20 41 4d 53 4b 5f 43 4f 4d , AMSK_COM
0ed0: 50 41 43 54 2c 20 20 20 20 20 20 20 20 7d 2c 0a PACT, },.
0ee0: 20 20 7b 20 22 66 61 63 65 22 2c 20 20 20 20 20 { "face",
0ef0: 20 20 20 20 20 41 4d 53 4b 5f 46 41 43 45 2c 20 AMSK_FACE,
0f00: 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b },. {
0f10: 20 22 68 65 69 67 68 74 22 2c 20 20 20 20 20 20 "height",
0f20: 20 20 41 4d 53 4b 5f 48 45 49 47 48 54 2c 20 20 AMSK_HEIGHT,
0f30: 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 68 },. { "h
0f40: 72 65 66 22 2c 20 20 20 20 20 20 20 20 20 20 41 ref", A
0f50: 4d 53 4b 5f 48 52 45 46 2c 20 20 20 20 20 20 20 MSK_HREF,
0f60: 20 20 20 20 7d 2c 0a 20 20 7b 20 22 68 73 70 61 },. { "hspa
0f70: 63 65 22 2c 20 20 20 20 20 20 20 20 41 4d 53 4b ce", AMSK
0f80: 5f 48 53 50 41 43 45 2c 20 20 20 20 20 20 20 20 _HSPACE,
0f90: 20 7d 2c 0a 20 20 7b 20 22 69 64 22 2c 20 20 20 },. { "id",
0fa0: 20 20 20 20 20 20 20 20 20 41 4d 53 4b 5f 49 44 AMSK_ID
0fb0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c , },
0fc0: 0a 20 20 7b 20 22 6e 61 6d 65 22 2c 20 20 20 20 . { "name",
0fd0: 20 20 20 20 20 20 41 4d 53 4b 5f 4e 41 4d 45 2c AMSK_NAME,
0fe0: 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 },.
0ff0: 7b 20 22 72 6f 77 73 70 61 6e 22 2c 20 20 20 20 { "rowspan",
1000: 20 20 20 41 4d 53 4b 5f 52 4f 57 53 50 41 4e 2c AMSK_ROWSPAN,
1010: 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 },. { "
1020: 73 69 7a 65 22 2c 20 20 20 20 20 20 20 20 20 20 size",
1030: 41 4d 53 4b 5f 53 49 5a 45 2c 20 20 20 20 20 20 AMSK_SIZE,
1040: 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 73 72 63 },. { "src
1050: 22 2c 20 20 20 20 20 20 20 20 20 20 20 41 4d 53 ", AMS
1060: 4b 5f 53 52 43 2c 20 20 20 20 20 20 20 20 20 20 K_SRC,
1070: 20 20 7d 2c 0a 20 20 7b 20 22 73 74 61 72 74 22 },. { "start"
1080: 2c 20 20 20 20 20 20 20 20 20 41 4d 53 4b 5f 53 , AMSK_S
1090: 54 41 52 54 2c 20 20 20 20 20 20 20 20 20 20 7d TART, }
10a0: 2c 0a 20 20 7b 20 22 74 79 70 65 22 2c 20 20 20 ,. { "type",
10b0: 20 20 20 20 20 20 20 41 4d 53 4b 5f 54 59 50 45 AMSK_TYPE
10c0: 2c 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 , },.
10d0: 20 7b 20 22 76 61 6c 69 67 6e 22 2c 20 20 20 20 { "valign",
10e0: 20 20 20 20 41 4d 53 4b 5f 56 41 4c 49 47 4e 2c AMSK_VALIGN,
10f0: 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 },. {
1100: 22 76 61 6c 75 65 22 2c 20 20 20 20 20 20 20 20 "value",
1110: 20 41 4d 53 4b 5f 56 41 4c 55 45 2c 20 20 20 20 AMSK_VALUE,
1120: 20 20 20 20 20 20 7d 2c 0a 20 20 7b 20 22 76 73 },. { "vs
1130: 70 61 63 65 22 2c 20 20 20 20 20 20 20 20 41 4d pace", AM
1140: 53 4b 5f 56 53 50 41 43 45 2c 20 20 20 20 20 20 SK_VSPACE,
1150: 20 20 20 7d 2c 0a 20 20 7b 20 22 77 69 64 74 68 },. { "width
1160: 22 2c 20 20 20 20 20 20 20 20 20 41 4d 53 4b 5f ", AMSK_
1170: 57 49 44 54 48 2c 20 20 20 20 20 20 20 20 20 20 WIDTH,
1180: 7d 2c 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 55 73 65 },.};../*.** Use
1190: 20 62 69 6e 61 72 79 20 73 65 61 72 63 68 20 74 binary search t
11a0: 6f 20 6c 6f 63 61 74 65 20 61 20 74 61 67 20 69 o locate a tag i
11b0: 6e 20 74 68 65 20 61 41 74 74 72 69 62 75 74 65 n the aAttribute
11c0: 5b 5d 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 [] table..*/.sta
11d0: 74 69 63 20 69 6e 74 20 66 69 6e 64 41 74 74 72 tic int findAttr
11e0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b (const char *z){
11f0: 0a 20 20 69 6e 74 20 69 2c 20 63 2c 20 66 69 72 . int i, c, fir
1200: 73 74 2c 20 6c 61 73 74 3b 0a 20 20 66 69 72 73 st, last;. firs
1210: 74 20 3d 20 31 3b 0a 20 20 6c 61 73 74 20 3d 20 t = 1;. last =
1220: 73 69 7a 65 6f 66 28 61 41 74 74 72 69 62 75 74 sizeof(aAttribut
1230: 65 29 2f 73 69 7a 65 6f 66 28 61 41 74 74 72 69 e)/sizeof(aAttri
1240: 62 75 74 65 5b 30 5d 29 20 2d 20 31 3b 0a 20 20 bute[0]) - 1;.
1250: 77 68 69 6c 65 28 20 66 69 72 73 74 3c 3d 6c 61 while( first<=la
1260: 73 74 20 29 7b 0a 20 20 20 20 69 20 3d 20 28 66 st ){. i = (f
1270: 69 72 73 74 2b 6c 61 73 74 29 2f 32 3b 0a 20 20 irst+last)/2;.
1280: 20 20 63 20 3d 20 73 74 72 63 6d 70 28 61 41 74 c = strcmp(aAt
1290: 74 72 69 62 75 74 65 5b 69 5d 2e 7a 4e 61 6d 65 tribute[i].zName
12a0: 2c 20 7a 29 3b 0a 20 20 20 20 69 66 28 20 63 3d , z);. if( c=
12b0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 =0 ){. retu
12c0: 72 6e 20 69 3b 0a 20 20 20 20 7d 65 6c 73 65 20 rn i;. }else
12d0: 69 66 28 20 63 3c 30 20 29 7b 0a 20 20 20 20 20 if( c<0 ){.
12e0: 20 66 69 72 73 74 20 3d 20 69 2b 31 3b 0a 20 20 first = i+1;.
12f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c }else{. l
1300: 61 73 74 20 3d 20 69 2d 31 3b 0a 20 20 20 20 7d ast = i-1;. }
1310: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b . }. return 0;
1320: 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f .}..../*.** Allo
1330: 77 65 64 20 6d 61 72 6b 75 70 2e 0a 2a 2a 0a 2a wed markup..**.*
1340: 2a 20 45 78 63 65 70 74 20 66 6f 72 20 4d 41 52 * Except for MAR
1350: 4b 55 50 5f 49 4e 56 41 4c 49 44 2c 20 74 68 69 KUP_INVALID, thi
1360: 73 20 6d 75 73 74 20 61 6c 6c 20 62 65 20 69 6e s must all be in
1370: 20 61 6c 70 68 61 62 65 74 69 63 61 6c 20 6f 72 alphabetical or
1380: 64 65 72 0a 2a 2a 20 61 6e 64 20 69 6e 20 6e 75 der.** and in nu
1390: 6d 65 72 69 63 61 6c 20 73 65 71 75 65 6e 63 65 merical sequence
13a0: 2e 20 20 54 68 65 20 66 69 72 73 74 20 6d 61 72 . The first mar
13b0: 6b 75 70 20 74 79 70 65 20 6d 75 73 74 20 62 65 kup type must be
13c0: 20 7a 65 72 6f 2e 0a 2a 2a 20 54 68 65 20 76 61 zero..** The va
13d0: 6c 75 65 20 66 6f 72 20 4d 41 52 4b 55 50 5f 58 lue for MARKUP_X
13e0: 59 5a 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f YZ must correspo
13f0: 6e 64 20 74 6f 20 74 68 65 20 3c 78 79 7a 3e 20 nd to the <xyz>
1400: 65 6e 74 72 79 0a 2a 2a 20 69 6e 20 61 41 6c 6c entry.** in aAll
1410: 6f 77 65 64 4d 61 72 6b 75 70 5b 5d 2e 0a 2a 2f owedMarkup[]..*/
1420: 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f .#define MARKUP_
1430: 49 4e 56 41 4c 49 44 20 20 20 20 20 20 20 20 20 INVALID
1440: 20 20 30 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 0.#define MARK
1450: 55 50 5f 41 20 20 20 20 20 20 20 20 20 20 20 20 UP_A
1460: 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 4d 1.#define M
1470: 41 52 4b 55 50 5f 41 44 44 52 45 53 53 20 20 20 ARKUP_ADDRESS
1480: 20 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 2.#defin
1490: 65 20 4d 41 52 4b 55 50 5f 42 20 20 20 20 20 20 e MARKUP_B
14a0: 20 20 20 20 20 20 20 20 20 20 20 33 0a 23 64 65 3.#de
14b0: 66 69 6e 65 20 4d 41 52 4b 55 50 5f 42 49 47 20 fine MARKUP_BIG
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 34 0a 4.
14d0: 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f 42 #define MARKUP_B
14e0: 4c 4f 43 4b 51 55 4f 54 45 20 20 20 20 20 20 20 LOCKQUOTE
14f0: 20 35 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 5.#define MARKU
1500: 50 5f 42 52 20 20 20 20 20 20 20 20 20 20 20 20 P_BR
1510: 20 20 20 20 36 0a 23 64 65 66 69 6e 65 20 4d 41 6.#define MA
1520: 52 4b 55 50 5f 43 45 4e 54 45 52 20 20 20 20 20 RKUP_CENTER
1530: 20 20 20 20 20 20 20 37 0a 23 64 65 66 69 6e 65 7.#define
1540: 20 4d 41 52 4b 55 50 5f 43 49 54 45 20 20 20 20 MARKUP_CITE
1550: 20 20 20 20 20 20 20 20 20 20 38 0a 23 64 65 66 8.#def
1560: 69 6e 65 20 4d 41 52 4b 55 50 5f 43 4f 44 45 20 ine MARKUP_CODE
1570: 20 20 20 20 20 20 20 20 20 20 20 20 20 39 0a 23 9.#
1580: 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f 44 44 define MARKUP_DD
1590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 1
15a0: 30 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 0.#define MARKUP
15b0: 5f 44 46 4e 20 20 20 20 20 20 20 20 20 20 20 20 _DFN
15c0: 20 20 31 31 0a 23 64 65 66 69 6e 65 20 4d 41 52 11.#define MAR
15d0: 4b 55 50 5f 44 49 56 20 20 20 20 20 20 20 20 20 KUP_DIV
15e0: 20 20 20 20 20 31 32 0a 23 64 65 66 69 6e 65 20 12.#define
15f0: 4d 41 52 4b 55 50 5f 44 4c 20 20 20 20 20 20 20 MARKUP_DL
1600: 20 20 20 20 20 20 20 20 31 33 0a 23 64 65 66 69 13.#defi
1610: 6e 65 20 4d 41 52 4b 55 50 5f 44 54 20 20 20 20 ne MARKUP_DT
1620: 20 20 20 20 20 20 20 20 20 20 20 31 34 0a 23 64 14.#d
1630: 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f 45 4d 20 efine MARKUP_EM
1640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 35 15
1650: 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f .#define MARKUP_
1660: 46 4f 4e 54 20 20 20 20 20 20 20 20 20 20 20 20 FONT
1670: 20 31 36 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 16.#define MARK
1680: 55 50 5f 48 31 20 20 20 20 20 20 20 20 20 20 20 UP_H1
1690: 20 20 20 20 31 37 0a 23 64 65 66 69 6e 65 20 4d 17.#define M
16a0: 41 52 4b 55 50 5f 48 32 20 20 20 20 20 20 20 20 ARKUP_H2
16b0: 20 20 20 20 20 20 20 31 38 0a 23 64 65 66 69 6e 18.#defin
16c0: 65 20 4d 41 52 4b 55 50 5f 48 33 20 20 20 20 20 e MARKUP_H3
16d0: 20 20 20 20 20 20 20 20 20 20 31 39 0a 23 64 65 19.#de
16e0: 66 69 6e 65 20 4d 41 52 4b 55 50 5f 48 34 20 20 fine MARKUP_H4
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30 0a 20.
1700: 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f 48 #define MARKUP_H
1710: 35 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5
1720: 32 31 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 21.#define MARKU
1730: 50 5f 48 36 20 20 20 20 20 20 20 20 20 20 20 20 P_H6
1740: 20 20 20 32 32 0a 23 64 65 66 69 6e 65 20 4d 41 22.#define MA
1750: 52 4b 55 50 5f 48 52 20 20 20 20 20 20 20 20 20 RKUP_HR
1760: 20 20 20 20 20 20 32 33 0a 23 64 65 66 69 6e 65 23.#define
1770: 20 4d 41 52 4b 55 50 5f 49 20 20 20 20 20 20 20 MARKUP_I
1780: 20 20 20 20 20 20 20 20 20 32 34 0a 23 64 65 66 24.#def
1790: 69 6e 65 20 4d 41 52 4b 55 50 5f 49 4d 47 20 20 ine MARKUP_IMG
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 32 35 0a 23 25.#
17b0: 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f 4b 42 define MARKUP_KB
17c0: 44 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 D 2
17d0: 36 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 6.#define MARKUP
17e0: 5f 4c 49 20 20 20 20 20 20 20 20 20 20 20 20 20 _LI
17f0: 20 20 32 37 0a 23 64 65 66 69 6e 65 20 4d 41 52 27.#define MAR
1800: 4b 55 50 5f 4e 4f 42 52 20 20 20 20 20 20 20 20 KUP_NOBR
1810: 20 20 20 20 20 32 38 0a 23 64 65 66 69 6e 65 20 28.#define
1820: 4d 41 52 4b 55 50 5f 4e 4f 57 49 4b 49 20 20 20 MARKUP_NOWIKI
1830: 20 20 20 20 20 20 20 20 32 39 0a 23 64 65 66 69 29.#defi
1840: 6e 65 20 4d 41 52 4b 55 50 5f 4f 4c 20 20 20 20 ne MARKUP_OL
1850: 20 20 20 20 20 20 20 20 20 20 20 33 30 0a 23 64 30.#d
1860: 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f 50 20 20 efine MARKUP_P
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 31 31
1880: 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f .#define MARKUP_
1890: 50 52 45 20 20 20 20 20 20 20 20 20 20 20 20 20 PRE
18a0: 20 33 32 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 32.#define MARK
18b0: 55 50 5f 53 20 20 20 20 20 20 20 20 20 20 20 20 UP_S
18c0: 20 20 20 20 33 33 0a 23 64 65 66 69 6e 65 20 4d 33.#define M
18d0: 41 52 4b 55 50 5f 53 41 4d 50 20 20 20 20 20 20 ARKUP_SAMP
18e0: 20 20 20 20 20 20 20 33 34 0a 23 64 65 66 69 6e 34.#defin
18f0: 65 20 4d 41 52 4b 55 50 5f 53 4d 41 4c 4c 20 20 e MARKUP_SMALL
1900: 20 20 20 20 20 20 20 20 20 20 33 35 0a 23 64 65 35.#de
1910: 66 69 6e 65 20 4d 41 52 4b 55 50 5f 53 50 41 4e fine MARKUP_SPAN
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 33 36 0a 36.
1930: 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f 53 #define MARKUP_S
1940: 54 52 49 4b 45 20 20 20 20 20 20 20 20 20 20 20 TRIKE
1950: 33 37 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 37.#define MARKU
1960: 50 5f 53 54 52 4f 4e 47 20 20 20 20 20 20 20 20 P_STRONG
1970: 20 20 20 33 38 0a 23 64 65 66 69 6e 65 20 4d 41 38.#define MA
1980: 52 4b 55 50 5f 53 55 42 20 20 20 20 20 20 20 20 RKUP_SUB
1990: 20 20 20 20 20 20 33 39 0a 23 64 65 66 69 6e 65 39.#define
19a0: 20 4d 41 52 4b 55 50 5f 53 55 50 20 20 20 20 20 MARKUP_SUP
19b0: 20 20 20 20 20 20 20 20 20 34 30 0a 23 64 65 66 40.#def
19c0: 69 6e 65 20 4d 41 52 4b 55 50 5f 54 41 42 4c 45 ine MARKUP_TABLE
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 34 31 0a 23 41.#
19e0: 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f 54 44 define MARKUP_TD
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 34 4
1a00: 32 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 2.#define MARKUP
1a10: 5f 54 48 20 20 20 20 20 20 20 20 20 20 20 20 20 _TH
1a20: 20 20 34 33 0a 23 64 65 66 69 6e 65 20 4d 41 52 43.#define MAR
1a30: 4b 55 50 5f 54 52 20 20 20 20 20 20 20 20 20 20 KUP_TR
1a40: 20 20 20 20 20 34 34 0a 23 64 65 66 69 6e 65 20 44.#define
1a50: 4d 41 52 4b 55 50 5f 54 54 20 20 20 20 20 20 20 MARKUP_TT
1a60: 20 20 20 20 20 20 20 20 34 35 0a 23 64 65 66 69 45.#defi
1a70: 6e 65 20 4d 41 52 4b 55 50 5f 55 20 20 20 20 20 ne MARKUP_U
1a80: 20 20 20 20 20 20 20 20 20 20 20 34 36 0a 23 64 46.#d
1a90: 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f 55 4c 20 efine MARKUP_UL
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 34 37 47
1ab0: 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 55 50 5f .#define MARKUP_
1ac0: 56 41 52 20 20 20 20 20 20 20 20 20 20 20 20 20 VAR
1ad0: 20 34 38 0a 23 64 65 66 69 6e 65 20 4d 41 52 4b 48.#define MARK
1ae0: 55 50 5f 56 45 52 42 41 54 49 4d 20 20 20 20 20 UP_VERBATIM
1af0: 20 20 20 20 34 39 0a 0a 2f 2a 0a 2a 2a 20 54 68 49../*.** Th
1b00: 65 20 76 61 72 69 6f 75 73 20 6d 61 72 6b 75 70 e various markup
1b10: 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f is divided into
1b20: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 the following t
1b30: 79 70 65 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 ypes:.*/.#define
1b40: 20 4d 55 54 59 50 45 5f 53 49 4e 47 4c 45 20 20 MUTYPE_SINGLE
1b50: 20 20 20 20 30 78 30 30 30 31 20 20 20 2f 2a 20 0x0001 /*
1b60: 3c 69 6d 67 3e 2c 20 3c 62 72 3e 2c 20 6f 72 20 <img>, <br>, or
1b70: 3c 68 72 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 <hr> */.#define
1b80: 4d 55 54 59 50 45 5f 42 4c 4f 43 4b 20 20 20 20 MUTYPE_BLOCK
1b90: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 46 0x0002 /* F
1ba0: 6f 72 6d 73 20 61 20 6e 65 77 20 70 61 72 61 67 orms a new parag
1bb0: 72 61 70 68 2e 20 65 78 3a 20 3c 70 3e 2c 20 3c raph. ex: <p>, <
1bc0: 68 32 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d h2> */.#define M
1bd0: 55 54 59 50 45 5f 46 4f 4e 54 20 20 20 20 20 20 UTYPE_FONT
1be0: 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 46 6f 0x0004 /* Fo
1bf0: 6e 74 20 63 68 61 6e 67 65 73 2e 20 65 78 3a 20 nt changes. ex:
1c00: 3c 62 3e 2c 20 3c 66 6f 6e 74 3e 2c 20 3c 73 75 <b>, <font>, <su
1c10: 62 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 55 b> */.#define MU
1c20: 54 59 50 45 5f 4c 49 53 54 20 20 20 20 20 20 20 TYPE_LIST
1c30: 20 30 78 30 30 31 30 20 20 20 2f 2a 20 4c 69 73 0x0010 /* Lis
1c40: 74 73 2e 20 20 3c 6f 6c 3e 2c 20 3c 75 6c 3e 2c ts. <ol>, <ul>,
1c50: 20 6f 72 20 3c 64 6c 3e 20 2a 2f 0a 23 64 65 66 or <dl> */.#def
1c60: 69 6e 65 20 4d 55 54 59 50 45 5f 4c 49 20 20 20 ine MUTYPE_LI
1c70: 20 20 20 20 20 20 20 30 78 30 30 32 30 20 20 20 0x0020
1c80: 2f 2a 20 4c 69 73 74 20 69 74 65 6d 73 2e 20 20 /* List items.
1c90: 3c 6c 69 3e 2c 20 3c 64 64 3e 2c 20 3c 64 74 3e <li>, <dd>, <dt>
1ca0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 55 54 59 */.#define MUTY
1cb0: 50 45 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30 PE_TABLE 0
1cc0: 78 30 30 34 30 20 20 20 2f 2a 20 3c 74 61 62 6c x0040 /* <tabl
1cd0: 65 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 55 e> */.#define MU
1ce0: 54 59 50 45 5f 54 52 20 20 20 20 20 20 20 20 20 TYPE_TR
1cf0: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 3c 74 72 0x0080 /* <tr
1d00: 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 55 54 > */.#define MUT
1d10: 59 50 45 5f 54 44 20 20 20 20 20 20 20 20 20 20 YPE_TD
1d20: 30 78 30 31 30 30 20 20 20 2f 2a 20 3c 74 64 3e 0x0100 /* <td>
1d30: 20 6f 72 20 3c 74 68 3e 20 2a 2f 0a 23 64 65 66 or <th> */.#def
1d40: 69 6e 65 20 4d 55 54 59 50 45 5f 53 50 45 43 49 ine MUTYPE_SPECI
1d50: 41 4c 20 20 20 20 20 30 78 30 32 30 30 20 20 20 AL 0x0200
1d60: 2f 2a 20 3c 6e 6f 77 69 6b 69 3e 20 6f 72 20 3c /* <nowiki> or <
1d70: 76 65 72 62 61 74 69 6d 3e 20 2a 2f 0a 23 64 65 verbatim> */.#de
1d80: 66 69 6e 65 20 4d 55 54 59 50 45 5f 48 59 50 45 fine MUTYPE_HYPE
1d90: 52 4c 49 4e 4b 20 20 20 30 78 30 34 30 30 20 20 RLINK 0x0400
1da0: 20 2f 2a 20 3c 61 3e 20 2a 2f 0a 0a 2f 2a 0a 2a /* <a> */../*.*
1db0: 2a 20 54 68 65 73 65 20 6d 61 72 6b 75 70 20 74 * These markup t
1dc0: 79 70 65 73 20 6d 75 73 74 20 68 61 76 65 20 61 ypes must have a
1dd0: 6e 20 65 6e 64 20 74 61 67 2e 0a 2a 2f 0a 23 64 n end tag..*/.#d
1de0: 65 66 69 6e 65 20 4d 55 54 59 50 45 5f 53 54 41 efine MUTYPE_STA
1df0: 43 4b 20 20 28 4d 55 54 59 50 45 5f 42 4c 4f 43 CK (MUTYPE_BLOC
1e00: 4b 20 7c 20 4d 55 54 59 50 45 5f 46 4f 4e 54 20 K | MUTYPE_FONT
1e10: 7c 20 4d 55 54 59 50 45 5f 4c 49 53 54 20 7c 20 | MUTYPE_LIST |
1e20: 4d 55 54 59 50 45 5f 54 41 42 4c 45 29 0a 0a 2f MUTYPE_TABLE)../
1e30: 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 72 6b 75 70 *.** This markup
1e40: 20 74 79 70 65 73 20 61 72 65 20 61 6c 6c 6f 77 types are allow
1e50: 65 64 20 66 6f 72 20 22 69 6e 6c 69 6e 65 22 20 ed for "inline"
1e60: 74 65 78 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 text..*/.#define
1e70: 20 4d 55 54 59 50 45 5f 49 4e 4c 49 4e 45 20 28 MUTYPE_INLINE (
1e80: 4d 55 54 59 50 45 5f 46 4f 4e 54 20 7c 20 4d 55 MUTYPE_FONT | MU
1e90: 54 59 50 45 5f 48 59 50 45 52 4c 49 4e 4b 29 0a TYPE_HYPERLINK).
1ea0: 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 .static const st
1eb0: 72 75 63 74 20 41 6c 6c 6f 77 65 64 4d 61 72 6b ruct AllowedMark
1ec0: 75 70 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 up {. const cha
1ed0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 r *zName;
1ee0: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d /* Name of the m
1ef0: 61 72 6b 75 70 20 2a 2f 0a 20 20 63 68 61 72 20 arkup */. char
1f00: 69 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 iCode;
1f10: 20 20 20 20 2f 2a 20 54 68 65 20 4d 41 52 4b 55 /* The MARKU
1f20: 50 5f 2a 20 63 6f 64 65 20 2a 2f 0a 20 20 73 68 P_* code */. sh
1f30: 6f 72 74 20 69 6e 74 20 69 54 79 70 65 3b 20 20 ort int iType;
1f40: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4d 55 /* The MU
1f50: 54 59 50 45 5f 2a 20 63 6f 64 65 20 2a 2f 0a 20 TYPE_* code */.
1f60: 20 69 6e 74 20 61 6c 6c 6f 77 65 64 41 74 74 72 int allowedAttr
1f70: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c ; /* All
1f80: 6f 77 65 64 20 61 74 74 72 69 62 75 74 65 73 20 owed attributes
1f90: 6f 6e 20 74 68 69 73 20 6d 61 72 6b 75 70 20 2a on this markup *
1fa0: 2f 0a 7d 20 61 4d 61 72 6b 75 70 5b 5d 20 3d 20 /.} aMarkup[] =
1fb0: 7b 0a 20 7b 20 30 2c 20 20 20 20 20 20 20 20 20 {. { 0,
1fc0: 20 20 20 20 20 20 4d 41 52 4b 55 50 5f 49 4e 56 MARKUP_INV
1fd0: 41 4c 49 44 2c 20 20 20 20 20 20 30 2c 20 20 20 ALID, 0,
1fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ff0: 20 30 20 20 7d 2c 0a 20 7b 20 22 61 22 2c 20 20 0 },. { "a",
2000: 20 20 20 20 20 20 20 20 20 20 20 4d 41 52 4b 55 MARKU
2010: 50 5f 41 2c 20 20 20 20 20 20 20 20 20 20 20 20 P_A,
2020: 4d 55 54 59 50 45 5f 48 59 50 45 52 4c 49 4e 4b MUTYPE_HYPERLINK
2030: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.
2040: 20 20 20 20 20 20 41 4d 53 4b 5f 48 52 45 46 7c AMSK_HREF|
2050: 41 4d 53 4b 5f 4e 41 4d 45 20 7d 2c 0a 20 7b 20 AMSK_NAME },. {
2060: 22 61 64 64 72 65 73 73 22 2c 20 20 20 20 20 20 "address",
2070: 20 4d 41 52 4b 55 50 5f 41 44 44 52 45 53 53 2c MARKUP_ADDRESS,
2080: 20 20 20 20 20 20 4d 55 54 59 50 45 5f 42 4c 4f MUTYPE_BLO
2090: 43 4b 2c 20 20 20 20 20 20 20 20 20 30 20 20 7d CK, 0 }
20a0: 2c 0a 20 7b 20 22 62 22 2c 20 20 20 20 20 20 20 ,. { "b",
20b0: 20 20 20 20 20 20 4d 41 52 4b 55 50 5f 42 2c 20 MARKUP_B,
20c0: 20 20 20 20 20 20 20 20 20 20 20 4d 55 54 59 50 MUTYP
20d0: 45 5f 46 4f 4e 54 2c 20 20 20 20 20 20 20 20 20 E_FONT,
20e0: 20 30 20 20 7d 2c 0a 20 7b 20 22 62 69 67 22 2c 0 },. { "big",
20f0: 20 20 20 20 20 20 20 20 20 20 20 4d 41 52 4b 55 MARKU
2100: 50 5f 42 49 47 2c 20 20 20 20 20 20 20 20 20 20 P_BIG,
2110: 4d 55 54 59 50 45 5f 46 4f 4e 54 2c 20 20 20 20 MUTYPE_FONT,
2120: 20 20 20 20 20 20 30 20 20 7d 2c 0a 20 7b 20 22 0 },. { "
2130: 62 6c 6f 63 6b 71 75 6f 74 65 22 2c 20 20 20 20 blockquote",
2140: 4d 41 52 4b 55 50 5f 42 4c 4f 43 4b 51 55 4f 54 MARKUP_BLOCKQUOT
2150: 45 2c 20 20 20 4d 55 54 59 50 45 5f 42 4c 4f 43 E, MUTYPE_BLOC
2160: 4b 2c 20 20 20 20 20 20 20 20 20 30 20 20 7d 2c K, 0 },
2170: 0a 20 7b 20 22 62 72 22 2c 20 20 20 20 20 20 20 . { "br",
2180: 20 20 20 20 20 4d 41 52 4b 55 50 5f 42 52 2c 20 MARKUP_BR,
2190: 20 20 20 20 20 20 20 20 20 20 4d 55 54 59 50 45 MUTYPE
21a0: 5f 53 49 4e 47 4c 45 2c 20 20 20 20 20 20 20 20 _SINGLE,
21b0: 41 4d 53 4b 5f 43 4c 45 41 52 20 20 7d 2c 0a 20 AMSK_CLEAR },.
21c0: 7b 20 22 63 65 6e 74 65 72 22 2c 20 20 20 20 20 { "center",
21d0: 20 20 20 4d 41 52 4b 55 50 5f 43 45 4e 54 45 52 MARKUP_CENTER
21e0: 2c 20 20 20 20 20 20 20 4d 55 54 59 50 45 5f 42 , MUTYPE_B
21f0: 4c 4f 43 4b 2c 20 20 20 20 20 20 20 20 20 30 20 LOCK, 0
2200: 20 7d 2c 0a 20 7b 20 22 63 69 74 65 22 2c 20 20 },. { "cite",
2210: 20 20 20 20 20 20 20 20 4d 41 52 4b 55 50 5f 43 MARKUP_C
2220: 49 54 45 2c 20 20 20 20 20 20 20 20 20 4d 55 54 ITE, MUT
2230: 59 50 45 5f 46 4f 4e 54 2c 20 20 20 20 20 20 20 YPE_FONT,
2240: 20 20 20 30 20 20 7d 2c 0a 20 7b 20 22 63 6f 64 0 },. { "cod
2250: 65 22 2c 20 20 20 20 20 20 20 20 20 20 4d 41 52 e", MAR
2260: 4b 55 50 5f 43 4f 44 45 2c 20 20 20 20 20 20 20 KUP_CODE,
2270: 20 20 4d 55 54 59 50 45 5f 46 4f 4e 54 2c 20 20 MUTYPE_FONT,
2280: 20 20 20 20 20 20 20 20 30 20 20 7d 2c 0a 20 7b 0 },. {
2290: 20 22 64 64 22 2c 20 20 20 20 20 20 20 20 20 20 "dd",
22a0: 20 20 4d 41 52 4b 55 50 5f 44 44 2c 20 20 20 20 MARKUP_DD,
22b0: 20 20 20 20 20 20 20 4d 55 54 59 50 45 5f 4c 49 MUTYPE_LI
22c0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 30 20 20 , 0
22d0: 7d 2c 0a 20 7b 20 22 64 66 6e 22 2c 20 20 20 20 },. { "dfn",
22e0: 20 20 20 20 20 20 20 4d 41 52 4b 55 50 5f 44 46 MARKUP_DF
22f0: 4e 2c 20 20 20 20 20 20 20 20 20 20 4d 55 54 59 N, MUTY
2300: 50 45 5f 46 4f 4e 54 2c 20 20 20 20 20 20 20 20 PE_FONT,
2310: 20 20 30 20 20 7d 2c 0a 20 7b 20 22 64 69 76 22 0 },. { "div"
2320: 2c 20 20 20 20 20 20 20 20 20 20 20 4d 41 52 4b , MARK
2330: 55 50 5f 44 49 56 2c 20 20 20 20 20 20 20 20 20 UP_DIV,
2340: 20 4d 55 54 59 50 45 5f 42 4c 4f 43 4b 2c 20 20 MUTYPE_BLOCK,
2350: 20 20 20 20 20 20 20 41 4d 53 4b 5f 49 44 20 20 AMSK_ID
2360: 20 20 20 20 7d 2c 0a 20 7b 20 22 64 6c 22 2c 20 },. { "dl",
2370: 20 20 20 20 20 20 20 20 20 20 20 4d 41 52 4b 55 MARKU
2380: 50 5f 44 4c 2c 20 20 20 20 20 20 20 20 20 20 20 P_DL,
2390: 4d 55 54 59 50 45 5f 4c 49 53 54 2c 20 20 20 20 MUTYPE_LIST,
23a0: 20 20 20 20 20 20 41 4d 53 4b 5f 43 4f 4d 50 41 AMSK_COMPA
23b0: 43 54 20 7d 2c 0a 20 7b 20 22 64 74 22 2c 20 20 CT },. { "dt",
23c0: 20 20 20 20 20 20 20 20 20 20 4d 41 52 4b 55 50 MARKUP
23d0: 5f 44 54 2c 20 20 20 20 20 20 20 20 20 20 20 4d _DT, M
23e0: 55 54 59 50 45 5f 4c 49 2c 20 20 20 20 20 20 20 UTYPE_LI,
23f0: 20 20 20 20 20 30 20 20 7d 2c 0a 20 7b 20 22 65 0 },. { "e
2400: 6d 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 4d m", M
2410: 41 52 4b 55 50 5f 45 4d 2c 20 20 20 20 20 20 20 ARKUP_EM,
2420: 20 20 20 20 4d 55 54 59 50 45 5f 46 4f 4e 54 2c MUTYPE_FONT,
2430: 20 20 20 20 20 20 20 20 20 20 30 20 20 7d 2c 0a 0 },.
2440: 20 7b 20 22 66 6f 6e 74 22 2c 20 20 20 20 20 20 { "font",
2450: 20 20 20 20 4d 41 52 4b 55 50 5f 46 4f 4e 54 2c MARKUP_FONT,
2460: 20 20 20 20 20 20 20 20 20 4d 55 54 59 50 45 5f MUTYPE_
2470: 46 4f 4e 54 2c 0a 20 20 20 20 20 20 20 20 20 20 FONT,.
2480: 20 20 20 20 20 20 20 20 20 20 41 4d 53 4b 5f 43 AMSK_C
2490: 4f 4c 4f 52 7c 41 4d 53 4b 5f 46 41 43 45 7c 41 OLOR|AMSK_FACE|A
24a0: 4d 53 4b 5f 53 49 5a 45 20 20 20 7d 2c 0a 20 7b MSK_SIZE },. {
24b0: 20 22 68 31 22 2c 20 20 20 20 20 20 20 20 20 20 "h1",
24c0: 20 20 4d 41 52 4b 55 50 5f 48 31 2c 20 20 20 20 MARKUP_H1,
24d0: 20 20 20 20 20 20 20 4d 55 54 59 50 45 5f 42 4c MUTYPE_BL
24e0: 4f 43 4b 2c 20 20 20 20 20 20 20 20 20 41 4d 53 OCK, AMS
24f0: 4b 5f 41 4c 49 47 4e 20 20 7d 2c 0a 20 7b 20 22 K_ALIGN },. { "
2500: 68 32 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 h2",
2510: 4d 41 52 4b 55 50 5f 48 32 2c 20 20 20 20 20 20 MARKUP_H2,
2520: 20 20 20 20 20 4d 55 54 59 50 45 5f 42 4c 4f 43 MUTYPE_BLOC
2530: 4b 2c 20 20 20 20 20 20 20 20 20 41 4d 53 4b 5f K, AMSK_
2540: 41 4c 49 47 4e 20 20 7d 2c 0a 20 7b 20 22 68 33 ALIGN },. { "h3
2550: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 4d 41 ", MA
2560: 52 4b 55 50 5f 48 33 2c 20 20 20 20 20 20 20 20 RKUP_H3,
2570: 20 20 20 4d 55 54 59 50 45 5f 42 4c 4f 43 4b 2c MUTYPE_BLOCK,
2580: 20 20 20 20 20 20 20 20 20 41 4d 53 4b 5f 41 4c AMSK_AL
2590: 49 47 4e 20 20 7d 2c 0a 20 7b 20 22 68 34 22 2c IGN },. { "h4",
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 41 52 4b MARK
25b0: 55 50 5f 48 34 2c 20 20 20 20 20 20 20 20 20 20 UP_H4,
25c0: 20 4d 55 54 59 50 45 5f 42 4c 4f 43 4b 2c 20 20 MUTYPE_BLOCK,
25d0: 20 20 20 20 20 20 20 41 4d 53 4b 5f 41 4c 49 47 AMSK_ALIG
25e0: 4e 20 20 7d 2c 0a 20 7b 20 22 68 35 22 2c 20 20 N },. { "h5",
25f0: 20 20 20 20 20 20 20 20 20 20 4d 41 52 4b 55 50 MARKUP
2600: 5f 48 35 2c 20 20 20 20 20 20 20 20 20 20 20 4d _H5, M
2610: 55 54 59 50 45 5f 42 4c 4f 43 4b 2c 20 20 20 20 UTYPE_BLOCK,
2620: 20 20 20 20 20 41 4d 53 4b 5f 41 4c 49 47 4e 20 AMSK_ALIGN
2630: 20 7d 2c 0a 20 7b 20 22 68 36 22 2c 20 20 20 20 },. { "h6",
2640: 20 20 20 20 20 20 20 20 4d 41 52 4b 55 50 5f 48 MARKUP_H
2650: 36 2c 20 20 20 20 20 20 20 20 20 20 20 4d 55 54 6, MUT
2660: 59 50 45 5f 42 4c 4f 43 4b 2c 20 20 20 20 20 20 YPE_BLOCK,
2670: 20 20 20 41 4d 53 4b 5f 41 4c 49 47 4e 20 20 7d AMSK_ALIGN }
2680: 2c 0a 20 7b 20 22 68 72 22 2c 20 20 20 20 20 20 ,. { "hr",
2690: 20 20 20 20 20 20 4d 41 52 4b 55 50 5f 48 52 2c MARKUP_HR,
26a0: 20 20 20 20 20 20 20 20 20 20 20 4d 55 54 59 50 MUTYP
26b0: 45 5f 53 49 4e 47 4c 45 2c 0a 20 20 20 20 20 20 E_SINGLE,.
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4d AM
26d0: 53 4b 5f 41 4c 49 47 4e 7c 41 4d 53 4b 5f 43 4f SK_ALIGN|AMSK_CO
26e0: 4c 4f 52 7c 41 4d 53 4b 5f 53 49 5a 45 7c 41 4d LOR|AMSK_SIZE|AM
26f0: 53 4b 5f 57 49 44 54 48 20 20 7d 2c 0a 20 7b 20 SK_WIDTH },. {
2700: 22 69 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 "i",
2710: 20 4d 41 52 4b 55 50 5f 49 2c 20 20 20 20 20 20 MARKUP_I,
2720: 20 20 20 20 20 20 4d 55 54 59 50 45 5f 46 4f 4e MUTYPE_FON
2730: 54 2c 20 20 20 20 20 20 20 20 20 20 30 20 20 7d T, 0 }
2740: 2c 0a 20 7b 20 22 69 6d 67 22 2c 20 20 20 20 20 ,. { "img",
2750: 20 20 20 20 20 20 4d 41 52 4b 55 50 5f 49 4d 47 MARKUP_IMG
2760: 2c 20 20 20 20 20 20 20 20 20 20 4d 55 54 59 50 , MUTYP
2770: 45 5f 53 49 4e 47 4c 45 2c 0a 20 20 20 20 20 20 E_SINGLE,.
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4d AM
2790: 53 4b 5f 41 4c 49 47 4e 7c 41 4d 53 4b 5f 41 4c SK_ALIGN|AMSK_AL
27a0: 54 7c 41 4d 53 4b 5f 42 4f 52 44 45 52 7c 41 4d T|AMSK_BORDER|AM
27b0: 53 4b 5f 48 45 49 47 48 54 7c 0a 20 20 20 20 20 SK_HEIGHT|.
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 A
27d0: 4d 53 4b 5f 48 53 50 41 43 45 7c 41 4d 53 4b 5f MSK_HSPACE|AMSK_
27e0: 53 52 43 7c 41 4d 53 4b 5f 56 53 50 41 43 45 7c SRC|AMSK_VSPACE|
27f0: 41 4d 53 4b 5f 57 49 44 54 48 20 20 7d 2c 0a 20 AMSK_WIDTH },.
2800: 7b 20 22 6b 62 64 22 2c 20 20 20 20 20 20 20 20 { "kbd",
2810: 20 20 20 4d 41 52 4b 55 50 5f 4b 42 44 2c 20 20 MARKUP_KBD,
2820: 20 20 20 20 20 20 20 20 4d 55 54 59 50 45 5f 46 MUTYPE_F
2830: 4f 4e 54 2c 20 20 20 20 20 20 20 20 20 20 30 20 ONT, 0
2840: 20 7d 2c 0a 20 7b 20 22 6c 69 22 2c 20 20 20 20 },. { "li",
2850: 20 20 20 20 20 20 20 20 4d 41 52 4b 55 50 5f 4c MARKUP_L
2860: 49 2c 20 20 20 20 20 20 20 20 20 20 20 4d 55 54 I, MUT
2870: 59 50 45 5f 4c 49 2c 0a 20 20 20 20 20 20 20 20 YPE_LI,.
2880: 20 20 20 20 20 20 20 20 20 20 20 20 41 4d 53 4b AMSK
2890: 5f 54 59 50 45 7c 41 4d 53 4b 5f 56 41 4c 55 45 _TYPE|AMSK_VALUE
28a0: 20 20 7d 2c 0a 20 7b 20 22 6e 6f 62 72 22 2c 20 },. { "nobr",
28b0: 20 20 20 20 20 20 20 20 20 4d 41 52 4b 55 50 5f MARKUP_
28c0: 4e 4f 42 52 2c 20 20 20 20 20 20 20 20 20 4d 55 NOBR, MU
28d0: 54 59 50 45 5f 46 4f 4e 54 2c 20 20 20 20 20 20 TYPE_FONT,
28e0: 20 20 20 20 30 20 20 7d 2c 0a 20 7b 20 22 6e 6f 0 },. { "no
28f0: 77 69 6b 69 22 2c 20 20 20 20 20 20 20 20 4d 41 wiki", MA
2900: 52 4b 55 50 5f 4e 4f 57 49 4b 49 2c 20 20 20 20 RKUP_NOWIKI,
2910: 20 20 20 4d 55 54 59 50 45 5f 53 50 45 43 49 41 MUTYPE_SPECIA
2920: 4c 2c 20 20 20 20 20 20 20 30 20 20 7d 2c 0a 20 L, 0 },.
2930: 7b 20 22 6f 6c 22 2c 20 20 20 20 20 20 20 20 20 { "ol",
2940: 20 20 20 4d 41 52 4b 55 50 5f 4f 4c 2c 20 20 20 MARKUP_OL,
2950: 20 20 20 20 20 20 20 20 4d 55 54 59 50 45 5f 4c MUTYPE_L
2960: 49 53 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20 IST,.
2970: 20 20 20 20 20 20 20 20 20 41 4d 53 4b 5f 53 54 AMSK_ST
2980: 41 52 54 7c 41 4d 53 4b 5f 54 59 50 45 7c 41 4d ART|AMSK_TYPE|AM
2990: 53 4b 5f 43 4f 4d 50 41 43 54 20 20 7d 2c 0a 20 SK_COMPACT },.
29a0: 7b 20 22 70 22 2c 20 20 20 20 20 20 20 20 20 20 { "p",
29b0: 20 20 20 4d 41 52 4b 55 50 5f 50 2c 20 20 20 20 MARKUP_P,
29c0: 20 20 20 20 20 20 20 20 4d 55 54 59 50 45 5f 42 MUTYPE_B
29d0: 4c 4f 43 4b 2c 20 20 20 20 20 20 20 20 20 41 4d LOCK, AM
29e0: 53 4b 5f 41 4c 49 47 4e 20 20 7d 2c 0a 20 7b 20 SK_ALIGN },. {
29f0: 22 70 72 65 22 2c 20 20 20 20 20 20 20 20 20 20 "pre",
2a00: 20 4d 41 52 4b 55 50 5f 50 52 45 2c 20 20 20 20 MARKUP_PRE,
2a10: 20 20 20 20 20 20 4d 55 54 59 50 45 5f 42 4c 4f MUTYPE_BLO
2a20: 43 4b 2c 20 20 20 20 20 20 20 20 20 30 20 20 7d CK, 0 }
2a30: 2c 0a 20 7b 20 22 73 22 2c 20 20 20 20 20 20 20 ,. { "s",
2a40: 20 20 20 20 20 20 4d 41 52 4b 55 50 5f 53 2c 20 MARKUP_S,
2a50: 20 20 20 20 20 20 20 20 20 20 20 4d 55 54 59 50 MUTYP
2a60: 45 5f 46 4f 4e 54 2c 20 20 20 20 20 20 20 20 20 E_FONT,
2a70: 20 30 20 20 7d 2c 0a 20 7b 20 22 73 61 6d 70 22 0 },. { "samp"
2a80: 2c 20 20 20 20 20 20 20 20 20 20 4d 41 52 4b 55 , MARKU
2a90: 50 5f 53 41 4d 50 2c 20 20 20 20 20 20 20 20 20 P_SAMP,
2aa0: 4d 55 54 59 50 45 5f 46 4f 4e 54 2c 20 20 20 20 MUTYPE_FONT,
2ab0: 20 20 20 20 20 20 30 20 20 7d 2c 0a 20 7b 20 22 0 },. { "
2ac0: 73 6d 61 6c 6c 22 2c 20 20 20 20 20 20 20 20 20 small",
2ad0: 4d 41 52 4b 55 50 5f 53 4d 41 4c 4c 2c 20 20 20 MARKUP_SMALL,
2ae0: 20 20 20 20 20 4d 55 54 59 50 45 5f 46 4f 4e 54 MUTYPE_FONT
2af0: 2c 20 20 20 20 20 20 20 20 20 20 30 20 20 7d 2c , 0 },
2b00: 0a 20 7b 20 22 73 70 61 6e 22 2c 20 20 20 20 20 . { "span",
2b10: 20 20 20 20 20 4d 41 52 4b 55 50 5f 53 50 41 4e MARKUP_SPAN
2b20: 2c 20 20 20 20 20 20 20 20 20 4d 55 54 59 50 45 , MUTYPE
2b30: 5f 46 4f 4e 54 2c 20 20 20 20 20 20 20 20 20 20 _FONT,
2b40: 30 20 20 7d 2c 0a 20 7b 20 22 73 74 72 69 6b 65 0 },. { "strike
2b50: 22 2c 20 20 20 20 20 20 20 20 4d 41 52 4b 55 50 ", MARKUP
2b60: 5f 53 54 52 49 4b 45 2c 20 20 20 20 20 20 20 4d _STRIKE, M
2b70: 55 54 59 50 45 5f 46 4f 4e 54 2c 20 20 20 20 20 UTYPE_FONT,
2b80: 20 20 20 20 20 30 20 20 7d 2c 0a 20 7b 20 22 73 0 },. { "s
2b90: 74 72 6f 6e 67 22 2c 20 20 20 20 20 20 20 20 4d trong", M
2ba0: 41 52 4b 55 50 5f 53 54 52 4f 4e 47 2c 20 20 20 ARKUP_STRONG,
2bb0: 20 20 20 20 4d 55 54 59 50 45 5f 46 4f 4e 54 2c MUTYPE_FONT,
2bc0: 20 20 20 20 20 20 20 20 20 20 30 20 20 7d 2c 0a 0 },.
2bd0: 20 7b 20 22 73 75 62 22 2c 20 20 20 20 20 20 20 { "sub",
2be0: 20 20 20 20 4d 41 52 4b 55 50 5f 53 55 42 2c 20 MARKUP_SUB,
2bf0: 20 20 20 20 20 20 20 20 20 4d 55 54 59 50 45 5f MUTYPE_
2c00: 46 4f 4e 54 2c 20 20 20 20 20 20 20 20 20 20 30 FONT, 0
2c10: 20 20 7d 2c 0a 20 7b 20 22 73 75 70 22 2c 20 20 },. { "sup",
2c20: 20 20 20 20 20 20 20 20 20 4d 41 52 4b 55 50 5f MARKUP_
2c30: 53 55 50 2c 20 20 20 20 20 20 20 20 20 20 4d 55 SUP, MU
2c40: 54 59 50 45 5f 46 4f 4e 54 2c 20 20 20 20 20 20 TYPE_FONT,
2c50: 20 20 20 20 30 20 20 7d 2c 0a 20 7b 20 22 74 61 0 },. { "ta
2c60: 62 6c 65 22 2c 20 20 20 20 20 20 20 20 20 4d 41 ble", MA
2c70: 52 4b 55 50 5f 54 41 42 4c 45 2c 20 20 20 20 20 RKUP_TABLE,
2c80: 20 20 20 4d 55 54 59 50 45 5f 54 41 42 4c 45 2c MUTYPE_TABLE,
2c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2ca0: 20 20 20 20 20 41 4d 53 4b 5f 41 4c 49 47 4e 7c AMSK_ALIGN|
2cb0: 41 4d 53 4b 5f 42 47 43 4f 4c 4f 52 7c 41 4d 53 AMSK_BGCOLOR|AMS
2cc0: 4b 5f 42 4f 52 44 45 52 7c 41 4d 53 4b 5f 43 45 K_BORDER|AMSK_CE
2cd0: 4c 4c 50 41 44 44 49 4e 47 7c 0a 20 20 20 20 20 LLPADDING|.
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 A
2cf0: 4d 53 4b 5f 43 45 4c 4c 53 50 41 43 49 4e 47 7c MSK_CELLSPACING|
2d00: 41 4d 53 4b 5f 48 53 50 41 43 45 7c 41 4d 53 4b AMSK_HSPACE|AMSK
2d10: 5f 56 53 50 41 43 45 20 20 7d 2c 0a 20 7b 20 22 _VSPACE },. { "
2d20: 74 64 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 td",
2d30: 4d 41 52 4b 55 50 5f 54 44 2c 20 20 20 20 20 20 MARKUP_TD,
2d40: 20 20 20 20 20 4d 55 54 59 50 45 5f 54 44 2c 0a MUTYPE_TD,.
2d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d60: 20 20 20 20 41 4d 53 4b 5f 41 4c 49 47 4e 7c 41 AMSK_ALIGN|A
2d70: 4d 53 4b 5f 42 47 43 4f 4c 4f 52 7c 41 4d 53 4b MSK_BGCOLOR|AMSK
2d80: 5f 43 4f 4c 53 50 41 4e 7c 0a 20 20 20 20 20 20 _COLSPAN|.
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4d AM
2da0: 53 4b 5f 52 4f 57 53 50 41 4e 7c 41 4d 53 4b 5f SK_ROWSPAN|AMSK_
2db0: 56 41 4c 49 47 4e 20 20 7d 2c 0a 20 7b 20 22 74 VALIGN },. { "t
2dc0: 68 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 4d h", M
2dd0: 41 52 4b 55 50 5f 54 48 2c 20 20 20 20 20 20 20 ARKUP_TH,
2de0: 20 20 20 20 4d 55 54 59 50 45 5f 54 44 2c 0a 20 MUTYPE_TD,.
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e00: 20 20 20 41 4d 53 4b 5f 41 4c 49 47 4e 7c 41 4d AMSK_ALIGN|AM
2e10: 53 4b 5f 42 47 43 4f 4c 4f 52 7c 41 4d 53 4b 5f SK_BGCOLOR|AMSK_
2e20: 43 4f 4c 53 50 41 4e 7c 0a 20 20 20 20 20 20 20 COLSPAN|.
2e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4d 53 AMS
2e40: 4b 5f 52 4f 57 53 50 41 4e 7c 41 4d 53 4b 5f 56 K_ROWSPAN|AMSK_V
2e50: 41 4c 49 47 4e 20 20 7d 2c 0a 20 7b 20 22 74 72 ALIGN },. { "tr
2e60: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 4d 41 ", MA
2e70: 52 4b 55 50 5f 54 52 2c 20 20 20 20 20 20 20 20 RKUP_TR,
2e80: 20 20 20 4d 55 54 59 50 45 5f 54 52 2c 0a 20 20 MUTYPE_TR,.
2e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ea0: 20 20 41 4d 53 4b 5f 41 4c 49 47 4e 7c 41 4d 53 AMSK_ALIGN|AMS
2eb0: 4b 5f 42 47 43 4f 4c 4f 52 7c 7c 41 4d 53 4b 5f K_BGCOLOR||AMSK_
2ec0: 56 41 4c 49 47 4e 20 20 7d 2c 0a 20 7b 20 22 74 VALIGN },. { "t
2ed0: 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 4d t", M
2ee0: 41 52 4b 55 50 5f 54 54 2c 20 20 20 20 20 20 20 ARKUP_TT,
2ef0: 20 20 20 20 4d 55 54 59 50 45 5f 46 4f 4e 54 2c MUTYPE_FONT,
2f00: 20 20 20 20 20 20 20 20 20 20 30 20 20 7d 2c 0a 0 },.
2f10: 20 7b 20 22 75 22 2c 20 20 20 20 20 20 20 20 20 { "u",
2f20: 20 20 20 20 4d 41 52 4b 55 50 5f 55 2c 20 20 20 MARKUP_U,
2f30: 20 20 20 20 20 20 20 20 20 4d 55 54 59 50 45 5f MUTYPE_
2f40: 46 4f 4e 54 2c 20 20 20 20 20 20 20 20 20 20 30 FONT, 0
2f50: 20 20 7d 2c 0a 20 7b 20 22 75 6c 22 2c 20 20 20 },. { "ul",
2f60: 20 20 20 20 20 20 20 20 20 4d 41 52 4b 55 50 5f MARKUP_
2f70: 55 4c 2c 20 20 20 20 20 20 20 20 20 20 20 4d 55 UL, MU
2f80: 54 59 50 45 5f 4c 49 53 54 2c 0a 20 20 20 20 20 TYPE_LIST,.
2f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 A
2fa0: 4d 53 4b 5f 54 59 50 45 7c 41 4d 53 4b 5f 43 4f MSK_TYPE|AMSK_CO
2fb0: 4d 50 41 43 54 20 20 7d 2c 0a 20 7b 20 22 76 61 MPACT },. { "va
2fc0: 72 22 2c 20 20 20 20 20 20 20 20 20 20 20 4d 41 r", MA
2fd0: 52 4b 55 50 5f 56 41 52 2c 20 20 20 20 20 20 20 RKUP_VAR,
2fe0: 20 20 20 4d 55 54 59 50 45 5f 46 4f 4e 54 2c 20 MUTYPE_FONT,
2ff0: 20 20 20 20 20 20 20 20 20 30 20 20 7d 2c 0a 20 0 },.
3000: 7b 20 22 76 65 72 62 61 74 69 6d 22 2c 20 20 20 { "verbatim",
3010: 20 20 20 4d 41 52 4b 55 50 5f 56 45 52 42 41 54 MARKUP_VERBAT
3020: 49 4d 2c 20 20 20 20 20 4d 55 54 59 50 45 5f 53 IM, MUTYPE_S
3030: 50 45 43 49 41 4c 2c 20 20 20 20 20 20 20 41 4d PECIAL, AM
3040: 53 4b 5f 49 44 20 7d 2c 0a 7d 3b 0a 0a 2f 2a 0a SK_ID },.};../*.
3050: 2a 2a 20 55 73 65 20 62 69 6e 61 72 79 20 73 65 ** Use binary se
3060: 61 72 63 68 20 74 6f 20 6c 6f 63 61 74 65 20 61 arch to locate a
3070: 20 74 61 67 20 69 6e 20 74 68 65 20 61 4d 61 72 tag in the aMar
3080: 6b 75 70 5b 5d 20 74 61 62 6c 65 2e 0a 2a 2f 0a kup[] table..*/.
3090: 73 74 61 74 69 63 20 69 6e 74 20 66 69 6e 64 54 static int findT
30a0: 61 67 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a ag(const char *z
30b0: 29 7b 0a 20 20 69 6e 74 20 69 2c 20 63 2c 20 66 ){. int i, c, f
30c0: 69 72 73 74 2c 20 6c 61 73 74 3b 0a 20 20 66 69 irst, last;. fi
30d0: 72 73 74 20 3d 20 31 3b 0a 20 20 6c 61 73 74 20 rst = 1;. last
30e0: 3d 20 73 69 7a 65 6f 66 28 61 4d 61 72 6b 75 70 = sizeof(aMarkup
30f0: 29 2f 73 69 7a 65 6f 66 28 61 4d 61 72 6b 75 70 )/sizeof(aMarkup
3100: 5b 30 5d 29 20 2d 20 31 3b 0a 20 20 77 68 69 6c [0]) - 1;. whil
3110: 65 28 20 66 69 72 73 74 3c 3d 6c 61 73 74 20 29 e( first<=last )
3120: 7b 0a 20 20 20 20 69 20 3d 20 28 66 69 72 73 74 {. i = (first
3130: 2b 6c 61 73 74 29 2f 32 3b 0a 20 20 20 20 63 20 +last)/2;. c
3140: 3d 20 73 74 72 63 6d 70 28 61 4d 61 72 6b 75 70 = strcmp(aMarkup
3150: 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 29 3b 0a 20 [i].zName, z);.
3160: 20 20 20 69 66 28 20 63 3d 3d 30 20 29 7b 0a 20 if( c==0 ){.
3170: 20 20 20 20 20 61 73 73 65 72 74 28 20 61 4d 61 assert( aMa
3180: 72 6b 75 70 5b 69 5d 2e 69 43 6f 64 65 3d 3d 69 rkup[i].iCode==i
3190: 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e );. return
31a0: 20 69 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 i;. }else if
31b0: 28 20 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 66 ( c<0 ){. f
31c0: 69 72 73 74 20 3d 20 69 2b 31 3b 0a 20 20 20 20 irst = i+1;.
31d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c 61 73 }else{. las
31e0: 74 20 3d 20 69 2d 31 3b 0a 20 20 20 20 7d 0a 20 t = i-1;. }.
31f0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 4d 41 52 4b }. return MARK
3200: 55 50 5f 49 4e 56 41 4c 49 44 3b 0a 7d 0a 0a 2f UP_INVALID;.}../
3210: 2a 0a 2a 2a 20 54 6f 6b 65 6e 20 74 79 70 65 73 *.** Token types
3220: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 4f 4b 45 .*/.#define TOKE
3230: 4e 5f 4d 41 52 4b 55 50 20 20 20 20 20 20 20 20 N_MARKUP
3240: 31 20 20 20 20 2f 2a 20 3c 2e 2e 2e 3e 20 2a 2f 1 /* <...> */
3250: 0a 23 64 65 66 69 6e 65 20 54 4f 4b 45 4e 5f 43 .#define TOKEN_C
3260: 48 41 52 41 43 54 45 52 20 20 20 20 20 32 20 20 HARACTER 2
3270: 20 20 2f 2a 20 22 26 22 20 6f 72 20 22 3c 22 20 /* "&" or "<"
3280: 6e 6f 74 20 70 61 72 74 20 6f 66 20 6d 61 72 6b not part of mark
3290: 75 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 4f up */.#define TO
32a0: 4b 45 4e 5f 4c 49 4e 4b 20 20 20 20 20 20 20 20 KEN_LINK
32b0: 20 20 33 20 20 20 20 2f 2a 20 5b 2e 2e 2e 5d 20 3 /* [...]
32c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 4f 4b 45 4e */.#define TOKEN
32d0: 5f 50 41 52 41 47 52 41 50 48 20 20 20 20 20 34 _PARAGRAPH 4
32e0: 20 20 20 20 2f 2a 20 62 6c 61 6e 6b 20 6c 69 6e /* blank lin
32f0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 4f es */.#define TO
3300: 4b 45 4e 5f 4e 45 57 4c 49 4e 45 20 20 20 20 20 KEN_NEWLINE
3310: 20 20 35 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 5 /* A sing
3320: 6c 65 20 22 5c 6e 22 20 2a 2f 0a 23 64 65 66 69 le "\n" */.#defi
3330: 6e 65 20 54 4f 4b 45 4e 5f 42 55 4c 4c 45 54 20 ne TOKEN_BULLET
3340: 20 20 20 20 20 20 20 36 20 20 20 20 2f 2a 20 20 6 /*
3350: 22 20 20 2a 20 20 22 20 2a 2f 0a 23 64 65 66 69 " * " */.#defi
3360: 6e 65 20 54 4f 4b 45 4e 5f 45 4e 55 4d 20 20 20 ne TOKEN_ENUM
3370: 20 20 20 20 20 20 20 37 20 20 20 20 2f 2a 20 20 7 /*
3380: 22 20 20 5c 28 3f 5c 64 2b 5b 2e 29 5d 3f 20 20 " \(?\d+[.)]?
3390: 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 4f 4b " */.#define TOK
33a0: 45 4e 5f 49 4e 44 45 4e 54 20 20 20 20 20 20 20 EN_INDENT
33b0: 20 38 20 20 20 20 2f 2a 20 20 22 20 20 20 22 20 8 /* " "
33c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 4f 4b 45 4e */.#define TOKEN
33d0: 5f 43 4f 4d 4d 45 4e 54 20 20 20 20 20 20 20 39 _COMMENT 9
33e0: 20 20 20 20 2f 2a 20 3c 21 2d 2d 20 2d 2d 3e 20 /* <!-- -->
33f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 54 4f 4b 45 4e */.#define TOKEN
3400: 5f 54 45 58 54 20 20 20 20 20 20 20 20 20 31 30 _TEXT 10
3410: 20 20 20 20 2f 2a 20 4e 6f 6e 65 20 6f 66 20 74 /* None of t
3420: 68 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a he above */../*.
3430: 2a 2a 20 53 74 61 74 65 20 66 6c 61 67 73 0a 2a ** State flags.*
3440: 2f 0a 23 64 65 66 69 6e 65 20 41 54 5f 4e 45 57 /.#define AT_NEW
3450: 4c 49 4e 45 20 20 20 20 20 20 20 20 20 20 30 78 LINE 0x
3460: 30 30 31 20 20 2f 2a 20 41 74 20 73 74 61 72 74 001 /* At start
3470: 20 6f 66 20 61 20 6c 69 6e 65 20 2a 2f 0a 23 64 of a line */.#d
3480: 65 66 69 6e 65 20 41 54 5f 50 41 52 41 47 52 41 efine AT_PARAGRA
3490: 50 48 20 20 20 20 20 20 20 20 30 78 30 30 32 20 PH 0x002
34a0: 20 2f 2a 20 41 74 20 73 74 61 72 74 20 6f 66 20 /* At start of
34b0: 61 20 70 61 72 61 67 72 61 70 68 20 2a 2f 0a 23 a paragraph */.#
34c0: 64 65 66 69 6e 65 20 41 4c 4c 4f 57 5f 57 49 4b define ALLOW_WIK
34d0: 49 20 20 20 20 20 20 20 20 20 20 30 78 30 30 34 I 0x004
34e0: 20 20 2f 2a 20 41 6c 6c 6f 77 20 77 69 6b 69 20 /* Allow wiki
34f0: 6d 61 72 6b 75 70 20 2a 2f 0a 23 64 65 66 69 6e markup */.#defin
3500: 65 20 46 4f 4e 54 5f 4d 41 52 4b 55 50 5f 4f 4e e FONT_MARKUP_ON
3510: 4c 59 20 20 20 20 30 78 30 30 38 20 20 2f 2a 20 LY 0x008 /*
3520: 4f 6e 6c 79 20 61 6c 6c 6f 77 20 4d 55 54 59 50 Only allow MUTYP
3530: 45 5f 46 4f 4e 54 20 6d 61 72 6b 75 70 20 2a 2f E_FONT markup */
3540: 0a 23 64 65 66 69 6e 65 20 49 4e 4c 49 4e 45 5f .#define INLINE_
3550: 4d 41 52 4b 55 50 5f 4f 4e 4c 59 20 20 30 78 30 MARKUP_ONLY 0x0
3560: 31 30 20 20 2f 2a 20 41 6c 6c 6f 77 20 6f 6e 6c 10 /* Allow onl
3570: 79 20 22 69 6e 6c 69 6e 65 22 20 6d 61 72 6b 75 y "inline" marku
3580: 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f p */.#define IN_
3590: 4c 49 53 54 20 20 20 20 20 20 20 20 20 20 20 20 LIST
35a0: 20 30 78 30 32 30 20 20 2f 2a 20 57 69 74 68 69 0x020 /* Withi
35b0: 6e 20 77 69 6b 69 20 3c 75 6c 3e 20 6f 72 20 3c n wiki <ul> or <
35c0: 6f 6c 3e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 75 ol> */../*.** Cu
35d0: 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 74 rrent state of t
35e0: 68 65 20 72 65 6e 64 65 72 69 6e 67 20 65 6e 67 he rendering eng
35f0: 69 6e 65 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 ine.*/.typedef s
3600: 74 72 75 63 74 20 52 65 6e 64 65 72 65 72 20 52 truct Renderer R
3610: 65 6e 64 65 72 65 72 3b 0a 73 74 72 75 63 74 20 enderer;.struct
3620: 52 65 6e 64 65 72 65 72 20 7b 0a 20 20 42 6c 6f Renderer {. Blo
3630: 62 20 2a 70 4f 75 74 3b 20 20 20 20 20 20 20 20 b *pOut;
3640: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 /* Outp
3650: 75 74 20 61 70 70 65 6e 64 65 64 20 74 6f 20 74 ut appended to t
3660: 68 69 73 20 62 6c 6f 62 20 2a 2f 0a 20 20 69 6e his blob */. in
3670: 74 20 73 74 61 74 65 3b 20 20 20 20 20 20 20 20 t state;
3680: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 /* Fla
3690: 67 20 74 68 61 74 20 67 6f 76 65 72 6e 20 72 65 g that govern re
36a0: 6e 64 65 72 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 ndering */. int
36b0: 20 77 69 6b 69 4c 69 73 74 3b 20 20 20 20 20 20 wikiList;
36c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 /* Curr
36d0: 65 6e 74 20 77 69 6b 69 20 6c 69 73 74 20 74 79 ent wiki list ty
36e0: 70 65 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 56 65 pe */. int inVe
36f0: 72 62 61 74 69 6d 3b 20 20 20 20 20 20 20 20 20 rbatim;
3700: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 6e 20 3c /* True in <
3710: 76 65 72 62 61 74 69 6d 3e 20 6d 6f 64 65 20 2a verbatim> mode *
3720: 2f 0a 20 20 69 6e 74 20 70 72 65 56 65 72 62 53 /. int preVerbS
3730: 74 61 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 tate;
3740: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 73 74 61 74 /* Value of stat
3750: 65 20 70 72 69 6f 72 20 74 6f 20 76 65 72 62 61 e prior to verba
3760: 74 69 6d 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6e tim */. int wan
3770: 74 41 75 74 6f 50 61 72 61 67 72 61 70 68 3b 20 tAutoParagraph;
3780: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 /* True if
3790: 61 20 3c 70 3e 20 69 73 20 64 65 73 69 72 65 64 a <p> is desired
37a0: 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 41 75 74 6f */. int inAuto
37b0: 50 61 72 61 67 72 61 70 68 3b 20 20 20 20 20 20 Paragraph;
37c0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77 69 74 /* True if wit
37d0: 68 69 6e 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 hin an automatic
37e0: 20 70 61 72 61 67 72 61 70 68 20 2a 2f 0a 20 20 paragraph */.
37f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 65 72 const char *zVer
3800: 62 61 74 69 6d 49 64 3b 20 20 20 20 2f 2a 20 54 batimId; /* T
3810: 68 65 20 69 64 3d 20 61 74 74 72 69 62 75 74 65 he id= attribute
3820: 20 6f 66 20 3c 76 65 72 62 61 74 69 6d 3e 20 2a of <verbatim> *
3830: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 63 6b 3b 20 /. int nStack;
3840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3850: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 /* Number of ele
3860: 6d 65 6e 74 73 20 6f 6e 20 74 68 65 20 73 74 61 ments on the sta
3870: 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c ck */. int nAll
3880: 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 oc;
3890: 20 20 20 20 2f 2a 20 53 70 61 63 65 20 61 6c 6c /* Space all
38a0: 6f 63 61 74 65 64 20 66 6f 72 20 61 53 74 61 63 ocated for aStac
38b0: 6b 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 53 k */. struct sS
38c0: 74 61 63 6b 20 7b 0a 20 20 20 20 73 68 6f 72 74 tack {. short
38d0: 20 69 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 iCode;
38e0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 72 6b 75 /* Marku
38f0: 70 20 63 6f 64 65 20 2a 2f 0a 20 20 20 20 73 68 p code */. sh
3900: 6f 72 74 20 61 6c 6c 6f 77 57 69 6b 69 3b 20 20 ort allowWiki;
3910: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 4c /* AL
3920: 4c 4f 57 5f 57 49 4b 49 20 69 66 20 77 69 6b 69 LOW_WIKI if wiki
3930: 20 61 6c 6c 6f 77 65 64 20 62 65 66 6f 72 65 20 allowed before
3940: 74 61 67 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 tag */. const
3950: 20 63 68 61 72 20 2a 7a 49 64 3b 20 20 20 20 20 char *zId;
3960: 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 61 74 /* ID at
3970: 74 72 69 62 75 74 65 20 6f 72 20 4e 55 4c 4c 20 tribute or NULL
3980: 2a 2f 0a 20 20 7d 20 2a 61 53 74 61 63 6b 3b 0a */. } *aStack;.
3990: 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 7a 20 70 6f 69 };.../*.** z poi
39a0: 6e 74 73 20 74 6f 20 61 20 22 3c 22 20 63 68 61 nts to a "<" cha
39b0: 72 61 63 74 65 72 2e 20 20 43 68 65 63 6b 20 74 racter. Check t
39c0: 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 o see if this is
39d0: 20 74 68 65 20 73 74 61 72 74 20 6f 66 0a 2a 2a the start of.**
39e0: 20 61 20 76 61 6c 69 64 20 6d 61 72 6b 75 70 2e a valid markup.
39f0: 20 20 49 66 20 69 74 20 69 73 2c 20 72 65 74 75 If it is, retu
3a00: 72 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d rn the total num
3a10: 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 ber of character
3a20: 73 20 69 6e 0a 2a 2a 20 74 68 65 20 6d 61 72 6b s in.** the mark
3a30: 75 70 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 up including the
3a40: 20 69 6e 69 74 69 61 6c 20 22 3c 22 20 61 6e 64 initial "<" and
3a50: 20 74 68 65 20 74 65 72 6d 69 6e 61 74 69 6e 67 the terminating
3a60: 20 22 3e 22 2e 20 20 49 66 0a 2a 2a 20 69 74 20 ">". If.** it
3a70: 69 73 20 6e 6f 74 20 77 65 6c 6c 2d 66 6f 72 6d is not well-form
3a80: 65 64 20 6d 61 72 6b 75 70 2c 20 72 65 74 75 72 ed markup, retur
3a90: 6e 20 30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 n 0..*/.static i
3aa0: 6e 74 20 6d 61 72 6b 75 70 4c 65 6e 67 74 68 28 nt markupLength(
3ab0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a const char *z){.
3ac0: 20 20 69 6e 74 20 6e 20 3d 20 31 3b 0a 20 20 69 int n = 1;. i
3ad0: 6e 74 20 69 6e 70 61 72 65 6e 20 3d 20 30 3b 0a nt inparen = 0;.
3ae0: 0a 20 20 2f 2f 20 69 73 20 61 20 63 6f 6d 6d 65 . // is a comme
3af0: 6e 74 20 2d 20 69 66 20 76 61 6c 69 64 20 72 65 nt - if valid re
3b00: 74 75 72 6e 20 6e 20 65 6c 73 65 20 72 65 74 75 turn n else retu
3b10: 72 6e 20 30 0a 20 20 69 66 28 20 7a 5b 6e 5d 3d rn 0. if( z[n]=
3b20: 3d 27 21 27 20 29 7b 0a 20 20 20 20 6e 2b 2b 3b ='!' ){. n++;
3b30: 0a 20 20 20 20 69 66 20 28 7a 5b 6e 5d 21 3d 27 . if (z[n]!='
3b40: 2d 27 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 -') return 0;.
3b50: 20 20 6e 2b 2b 3b 0a 20 20 20 20 69 66 20 28 7a n++;. if (z
3b60: 5b 6e 5d 21 3d 27 2d 27 29 20 72 65 74 75 72 6e [n]!='-') return
3b70: 20 30 3b 0a 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 0;. n++;.
3b80: 20 77 68 69 6c 65 20 28 7a 5b 6e 5d 29 7b 0a 20 while (z[n]){.
3b90: 20 20 20 20 20 77 68 69 6c 65 20 28 7a 5b 6e 5d while (z[n]
3ba0: 20 26 26 20 7a 5b 6e 5d 21 3d 27 3e 27 29 20 6e && z[n]!='>') n
3bb0: 2b 2b 3b 0a 20 20 20 20 20 20 69 66 20 28 21 7a ++;. if (!z
3bc0: 5b 6e 5d 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 [n]) return 0;.
3bd0: 20 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 20 n++;.
3be0: 69 66 28 6e 3e 33 20 26 26 20 7a 5b 6e 2d 33 5d if(n>3 && z[n-3]
3bf0: 3d 3d 27 2d 27 20 26 26 20 7a 5b 6e 2d 32 5d 3d =='-' && z[n-2]=
3c00: 3d 27 2d 27 29 0a 20 20 20 20 20 20 20 20 72 65 ='-'). re
3c10: 74 75 72 6e 20 28 6e 3e 37 29 20 3f 20 6e 20 3a turn (n>7) ? n :
3c20: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 0;. }. re
3c30: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 0a 20 20 69 turn 0;. }.. i
3c40: 66 28 20 7a 5b 6e 5d 3d 3d 27 2f 27 20 29 7b 20 f( z[n]=='/' ){
3c50: 6e 2b 2b 3b 20 7d 0a 20 20 69 66 28 20 21 69 73 n++; }. if( !is
3c60: 61 6c 70 68 61 28 7a 5b 6e 5d 29 20 29 20 72 65 alpha(z[n]) ) re
3c70: 74 75 72 6e 20 30 3b 0a 20 20 77 68 69 6c 65 28 turn 0;. while(
3c80: 20 69 73 61 6c 6e 75 6d 28 7a 5b 6e 5d 29 20 29 isalnum(z[n]) )
3c90: 7b 20 6e 2b 2b 3b 20 7d 0a 20 20 69 66 28 20 7a { n++; }. if( z
3ca0: 5b 6e 5d 21 3d 27 3e 27 20 26 26 20 21 69 73 73 [n]!='>' && !iss
3cb0: 70 61 63 65 28 7a 5b 6e 5d 29 20 29 20 72 65 74 pace(z[n]) ) ret
3cc0: 75 72 6e 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 urn 0;. while(
3cd0: 7a 5b 6e 5d 20 26 26 20 28 7a 5b 6e 5d 21 3d 27 z[n] && (z[n]!='
3ce0: 3e 27 20 7c 7c 20 69 6e 70 61 72 65 6e 29 20 29 >' || inparen) )
3cf0: 7b 0a 20 20 20 20 69 66 28 20 7a 5b 6e 5d 3d 3d {. if( z[n]==
3d00: 27 22 27 20 29 7b 0a 20 20 20 20 20 20 69 6e 70 '"' ){. inp
3d10: 61 72 65 6e 20 3d 20 21 69 6e 70 61 72 65 6e 3b aren = !inparen;
3d20: 0a 20 20 20 20 7d 0a 20 20 20 20 6e 2b 2b 3b 0a . }. n++;.
3d30: 20 20 7d 0a 20 20 69 66 28 20 7a 5b 6e 5d 21 3d }. if( z[n]!=
3d40: 27 3e 27 20 29 20 72 65 74 75 72 6e 20 30 3b 0a '>' ) return 0;.
3d50: 20 20 72 65 74 75 72 6e 20 6e 2b 31 3b 0a 7d 0a return n+1;.}.
3d60: 0a 2f 2a 0a 2a 2a 20 7a 20 70 6f 69 6e 74 73 20 ./*.** z points
3d70: 74 6f 20 61 20 22 5c 6e 22 20 63 68 61 72 61 63 to a "\n" charac
3d80: 74 65 72 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 ter. Check to s
3d90: 65 65 20 69 66 20 74 68 69 73 20 6e 65 77 6c 69 ee if this newli
3da0: 6e 65 20 69 73 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 ne is.** followe
3db0: 64 20 62 79 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 d by one or more
3dc0: 20 62 6c 61 6e 6b 20 6c 69 6e 65 73 2e 20 20 49 blank lines. I
3dd0: 66 20 69 74 20 69 73 2c 20 72 65 74 75 72 6e 20 f it is, return
3de0: 74 68 65 20 6e 75 6d 62 65 72 0a 2a 2a 20 6f 66 the number.** of
3df0: 20 63 68 61 72 61 63 74 65 72 73 20 74 68 72 6f characters thro
3e00: 75 67 68 20 74 68 65 20 63 6c 6f 73 69 6e 67 20 ugh the closing
3e10: 22 5c 6e 22 2e 20 20 49 66 20 6e 6f 74 2c 20 72 "\n". If not, r
3e20: 65 74 75 72 6e 20 30 2e 0a 2a 2f 0a 73 74 61 74 eturn 0..*/.stat
3e30: 69 63 20 69 6e 74 20 70 61 72 61 67 72 61 70 68 ic int paragraph
3e40: 42 72 65 61 6b 4c 65 6e 67 74 68 28 63 6f 6e 73 BreakLength(cons
3e50: 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e t char *z){. in
3e60: 74 20 69 2c 20 6e 3b 0a 20 20 69 6e 74 20 6e 4e t i, n;. int nN
3e70: 65 77 6c 69 6e 65 20 3d 20 31 3b 0a 20 20 66 6f ewline = 1;. fo
3e80: 72 28 69 3d 31 2c 20 6e 3d 30 3b 20 69 73 73 70 r(i=1, n=0; issp
3e90: 61 63 65 28 7a 5b 69 5d 29 3b 20 69 2b 2b 29 7b ace(z[i]); i++){
3ea0: 0a 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 . if( z[i]=='
3eb0: 5c 6e 27 20 29 7b 0a 20 20 20 20 20 20 6e 4e 65 \n' ){. nNe
3ec0: 77 6c 69 6e 65 2b 2b 3b 0a 20 20 20 20 20 20 6e wline++;. n
3ed0: 20 3d 20 69 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a = i;. }. }.
3ee0: 20 20 69 66 28 20 6e 4e 65 77 6c 69 6e 65 3e 3d if( nNewline>=
3ef0: 32 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 2 ){. return
3f00: 6e 2b 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 n+1;. }else{.
3f10: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a return 0;. }.
3f20: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 }../*.** Return
3f30: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 the number of ch
3f40: 61 72 61 63 74 65 72 73 20 75 6e 74 69 6c 20 74 aracters until t
3f50: 68 65 20 6e 65 78 74 20 22 69 6e 74 65 72 65 73 he next "interes
3f60: 74 69 6e 67 22 0a 2a 2a 20 63 68 61 72 61 63 74 ting".** charact
3f70: 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 ers..**.** Inter
3f80: 65 73 74 69 6e 67 20 63 68 61 72 61 63 74 65 72 esting character
3f90: 73 20 61 72 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 s are:.**.**
3fa0: 20 20 3c 0a 2a 2a 20 20 20 20 20 20 26 0a 2a 2a <.** &.**
3fb0: 20 20 20 20 20 20 5c 6e 0a 2a 2a 20 20 20 20 20 \n.**
3fc0: 20 5b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 5b 22 [.**.** The "["
3fd0: 20 61 6e 64 20 22 5c 6e 22 20 61 72 65 20 6f 6e and "\n" are on
3fe0: 6c 79 20 63 6f 6e 73 69 64 65 72 65 64 20 69 6e ly considered in
3ff0: 74 65 72 65 73 74 69 6e 67 20 69 66 20 74 68 65 teresting if the
4000: 20 22 75 73 65 57 69 6b 69 22 0a 2a 2a 20 66 6c "useWiki".** fl
4010: 61 67 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 ag is set..*/.st
4020: 61 74 69 63 20 69 6e 74 20 74 65 78 74 4c 65 6e atic int textLen
4030: 67 74 68 28 63 6f 6e 73 74 20 63 68 61 72 20 2a gth(const char *
4040: 7a 2c 20 69 6e 74 20 75 73 65 57 69 6b 69 29 7b z, int useWiki){
4050: 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 . int n = 0;.
4060: 69 6e 74 20 63 3b 0a 20 20 77 68 69 6c 65 28 20 int c;. while(
4070: 28 63 20 3d 20 7a 5b 30 5d 29 21 3d 30 20 26 26 (c = z[0])!=0 &&
4080: 20 63 21 3d 27 3c 27 20 26 26 20 63 21 3d 27 26 c!='<' && c!='&
4090: 27 20 26 26 0a 20 20 20 20 20 20 20 20 20 20 20 ' &&.
40a0: 20 20 20 20 28 75 73 65 57 69 6b 69 3d 3d 30 20 (useWiki==0
40b0: 7c 7c 20 28 63 21 3d 27 5b 27 20 26 26 20 63 21 || (c!='[' && c!
40c0: 3d 27 5c 6e 27 29 29 20 29 7b 0a 20 20 20 20 6e ='\n')) ){. n
40d0: 2b 2b 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d ++;. z++;. }
40e0: 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 0a . return n;.}..
40f0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 /*.** Return tru
4100: 65 20 69 66 20 7a 5b 5d 20 62 65 67 69 6e 73 20 e if z[] begins
4110: 77 69 74 68 20 61 6e 20 48 54 4d 4c 20 63 68 61 with an HTML cha
4120: 72 61 63 74 65 72 20 65 6c 65 6d 65 6e 74 2e 0a racter element..
4130: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 73 */.static int is
4140: 45 6c 65 6d 65 6e 74 28 63 6f 6e 73 74 20 63 68 Element(const ch
4150: 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b ar *z){. int i;
4160: 0a 20 20 61 73 73 65 72 74 28 20 7a 5b 30 5d 3d . assert( z[0]=
4170: 3d 27 26 27 20 29 3b 0a 20 20 69 66 28 20 7a 5b ='&' );. if( z[
4180: 31 5d 3d 3d 27 23 27 20 29 7b 0a 20 20 20 20 66 1]=='#' ){. f
4190: 6f 72 28 69 3d 32 3b 20 69 73 64 69 67 69 74 28 or(i=2; isdigit(
41a0: 7a 5b 69 5d 29 3b 20 69 2b 2b 29 7b 7d 0a 20 20 z[i]); i++){}.
41b0: 20 20 72 65 74 75 72 6e 20 69 3e 32 20 26 26 20 return i>2 &&
41c0: 7a 5b 69 5d 3d 3d 27 3b 27 3b 0a 20 20 7d 65 6c z[i]==';';. }el
41d0: 73 65 7b 0a 20 20 20 20 66 6f 72 28 69 3d 31 3b se{. for(i=1;
41e0: 20 69 73 61 6c 70 68 61 28 7a 5b 69 5d 29 3b 20 isalpha(z[i]);
41f0: 69 2b 2b 29 7b 7d 0a 20 20 20 20 72 65 74 75 72 i++){}. retur
4200: 6e 20 69 3e 31 20 26 26 20 7a 5b 69 5d 3d 3d 27 n i>1 && z[i]=='
4210: 3b 27 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a ;';. }.}../*.**
4220: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 Check to see if
4230: 20 74 68 65 20 7a 5b 5d 20 73 74 72 69 6e 67 20 the z[] string
4240: 69 73 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 is the beginning
4250: 20 6f 66 20 61 20 77 69 6b 69 20 62 75 6c 6c 65 of a wiki bulle
4260: 74 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 2c 20 t..** If it is,
4270: 72 65 74 75 72 6e 20 74 68 65 20 6c 65 6e 67 74 return the lengt
4280: 68 20 6f 66 20 74 68 65 20 62 75 6c 6c 65 74 20 h of the bullet
4290: 74 65 78 74 2e 20 20 4f 74 68 65 72 77 69 73 65 text. Otherwise
42a0: 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2f 0a 73 74 return 0..*/.st
42b0: 61 74 69 63 20 69 6e 74 20 62 75 6c 6c 65 74 4c atic int bulletL
42c0: 65 6e 67 74 68 28 63 6f 6e 73 74 20 63 68 61 72 ength(const char
42d0: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6e *z){. int i, n
42e0: 3b 0a 20 20 6e 20 3d 20 30 3b 0a 20 20 69 20 3d ;. n = 0;. i =
42f0: 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 7a 5b 6e 0;. while( z[n
4300: 5d 3d 3d 27 20 27 20 7c 7c 20 7a 5b 6e 5d 3d 3d ]==' ' || z[n]==
4310: 27 5c 74 27 20 29 7b 0a 20 20 20 20 69 66 28 20 '\t' ){. if(
4320: 7a 5b 6e 5d 3d 3d 27 5c 74 27 20 29 20 69 2b 2b z[n]=='\t' ) i++
4330: 3b 0a 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 6e ;. i++;. n
4340: 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 3c ++;. }. if( i<
4350: 32 20 7c 7c 20 7a 5b 6e 5d 21 3d 27 2a 27 20 29 2 || z[n]!='*' )
4360: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 6e 2b 2b return 0;. n++
4370: 3b 0a 20 20 69 20 3d 20 30 3b 0a 20 20 77 68 69 ;. i = 0;. whi
4380: 6c 65 28 20 7a 5b 6e 5d 3d 3d 27 20 27 20 7c 7c le( z[n]==' ' ||
4390: 20 7a 5b 6e 5d 3d 3d 27 5c 74 27 20 29 7b 0a 20 z[n]=='\t' ){.
43a0: 20 20 20 69 66 28 20 7a 5b 6e 5d 3d 3d 27 5c 74 if( z[n]=='\t
43b0: 27 20 29 20 69 2b 2b 3b 0a 20 20 20 20 69 2b 2b ' ) i++;. i++
43c0: 3b 0a 20 20 20 20 6e 2b 2b 3b 0a 20 20 7d 0a 20 ;. n++;. }.
43d0: 20 69 66 28 20 69 3c 32 20 7c 7c 20 69 73 73 70 if( i<2 || issp
43e0: 61 63 65 28 7a 5b 6e 5d 29 20 29 20 72 65 74 75 ace(z[n]) ) retu
43f0: 72 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 6e rn 0;. return n
4400: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b ;.}../*.** Check
4410: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 7a to see if the z
4420: 5b 5d 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 [] string is the
4430: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61 20 beginning of a
4440: 65 6e 75 6d 65 72 61 74 69 6f 6e 20 76 61 6c 75 enumeration valu
4450: 65 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 2c 20 e..** If it is,
4460: 72 65 74 75 72 6e 20 74 68 65 20 6c 65 6e 67 74 return the lengt
4470: 68 20 6f 66 20 74 68 65 20 62 75 6c 6c 65 74 20 h of the bullet
4480: 74 65 78 74 2e 20 20 4f 74 68 65 72 77 69 73 65 text. Otherwise
4490: 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2a 0a 2a 2a return 0..**.**
44a0: 20 53 79 6e 74 61 78 3a 0a 2a 2a 20 20 20 20 2a Syntax:.** *
44b0: 20 20 61 20 74 61 62 20 6f 72 20 74 77 6f 20 6f a tab or two o
44c0: 72 20 6d 6f 72 65 20 73 70 61 63 65 73 0a 2a 2a r more spaces.**
44d0: 20 20 20 20 2a 20 20 6f 6e 65 20 6f 72 20 6d 6f * one or mo
44e0: 72 65 20 64 69 67 69 74 73 0a 2a 2a 20 20 20 20 re digits.**
44f0: 2a 20 20 6f 70 74 69 6f 6e 61 6c 20 22 2e 22 0a * optional ".".
4500: 2a 2a 20 20 20 20 2a 20 20 61 6e 6f 74 68 65 72 ** * another
4510: 20 74 61 62 20 6f 72 20 74 77 6f 20 6f 72 65 20 tab or two ore
4520: 6d 6f 72 65 20 73 70 61 63 65 73 2e 0a 2a 2a 0a more spaces..**.
4530: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65 6e */.static int en
4540: 75 6d 4c 65 6e 67 74 68 28 63 6f 6e 73 74 20 63 umLength(const c
4550: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 har *z){. int i
4560: 2c 20 6e 3b 0a 20 20 6e 20 3d 20 30 3b 0a 20 20 , n;. n = 0;.
4570: 69 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 i = 0;. while(
4580: 7a 5b 6e 5d 3d 3d 27 20 27 20 7c 7c 20 7a 5b 6e z[n]==' ' || z[n
4590: 5d 3d 3d 27 5c 74 27 20 29 7b 0a 20 20 20 20 69 ]=='\t' ){. i
45a0: 66 28 20 7a 5b 6e 5d 3d 3d 27 5c 74 27 20 29 20 f( z[n]=='\t' )
45b0: 69 2b 2b 3b 0a 20 20 20 20 69 2b 2b 3b 0a 20 20 i++;. i++;.
45c0: 20 20 6e 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 n++;. }. if(
45d0: 20 69 3c 32 20 29 20 72 65 74 75 72 6e 20 30 3b i<2 ) return 0;
45e0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 73 64 69 . for(i=0; isdi
45f0: 67 69 74 28 7a 5b 6e 5d 29 3b 20 69 2b 2b 2c 20 git(z[n]); i++,
4600: 6e 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 69 3d 3d n++){}. if( i==
4610: 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 0 ) return 0;.
4620: 69 66 28 20 7a 5b 6e 5d 3d 3d 27 2e 27 20 29 7b if( z[n]=='.' ){
4630: 0a 20 20 20 20 6e 2b 2b 3b 0a 20 20 7d 0a 20 20 . n++;. }.
4640: 69 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 i = 0;. while(
4650: 7a 5b 6e 5d 3d 3d 27 20 27 20 7c 7c 20 7a 5b 6e z[n]==' ' || z[n
4660: 5d 3d 3d 27 5c 74 27 20 29 7b 0a 20 20 20 20 69 ]=='\t' ){. i
4670: 66 28 20 7a 5b 6e 5d 3d 3d 27 5c 74 27 20 29 20 f( z[n]=='\t' )
4680: 69 2b 2b 3b 0a 20 20 20 20 69 2b 2b 3b 0a 20 20 i++;. i++;.
4690: 20 20 6e 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 n++;. }. if(
46a0: 20 69 3c 32 20 7c 7c 20 69 73 73 70 61 63 65 28 i<2 || isspace(
46b0: 7a 5b 6e 5d 29 20 29 20 72 65 74 75 72 6e 20 30 z[n]) ) return 0
46c0: 3b 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a ;. return n;.}.
46d0: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 ./*.** Check to
46e0: 73 65 65 20 69 66 20 74 68 65 20 7a 5b 5d 20 73 see if the z[] s
46f0: 74 72 69 6e 67 20 69 73 20 74 68 65 20 62 65 67 tring is the beg
4700: 69 6e 6e 69 6e 67 20 6f 66 20 61 6e 20 69 6e 64 inning of an ind
4710: 65 6e 74 65 64 0a 2a 2a 20 70 61 72 61 67 72 61 ented.** paragra
4720: 70 68 2e 20 20 49 66 20 69 74 20 69 73 2c 20 72 ph. If it is, r
4730: 65 74 75 72 6e 20 74 68 65 20 6c 65 6e 67 74 68 eturn the length
4740: 20 6f 66 20 74 68 65 20 69 6e 64 65 6e 74 2e 20 of the indent.
4750: 20 4f 74 68 65 72 77 69 73 65 0a 2a 2a 20 72 65 Otherwise.** re
4760: 74 75 72 6e 20 30 2e 0a 2a 2f 0a 73 74 61 74 69 turn 0..*/.stati
4770: 63 20 69 6e 74 20 69 6e 64 65 6e 74 4c 65 6e 67 c int indentLeng
4780: 74 68 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a th(const char *z
4790: 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 ){. int i, n;.
47a0: 20 6e 20 3d 20 30 3b 0a 20 20 69 20 3d 20 30 3b n = 0;. i = 0;
47b0: 0a 20 20 77 68 69 6c 65 28 20 7a 5b 6e 5d 3d 3d . while( z[n]==
47c0: 27 20 27 20 7c 7c 20 7a 5b 6e 5d 3d 3d 27 5c 74 ' ' || z[n]=='\t
47d0: 27 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 5b 6e ' ){. if( z[n
47e0: 5d 3d 3d 27 5c 74 27 20 29 20 69 2b 2b 3b 0a 20 ]=='\t' ) i++;.
47f0: 20 20 20 69 2b 2b 3b 0a 20 20 20 20 6e 2b 2b 3b i++;. n++;
4800: 0a 20 20 7d 0a 20 20 69 66 28 20 69 3c 32 20 7c . }. if( i<2 |
4810: 7c 20 69 73 73 70 61 63 65 28 7a 5b 6e 5d 29 20 | isspace(z[n])
4820: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 ) return 0;. re
4830: 74 75 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a turn n;.}../*.**
4840: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 Check to see if
4850: 20 74 68 65 20 7a 5b 5d 20 73 74 72 69 6e 67 20 the z[] string
4860: 69 73 20 61 20 77 69 6b 69 20 68 79 70 65 72 6c is a wiki hyperl
4870: 69 6e 6b 2e 20 20 49 66 20 69 74 20 69 73 2c 0a ink. If it is,.
4880: 2a 2a 20 72 65 74 75 72 6e 20 74 68 65 20 6c 65 ** return the le
4890: 6e 67 74 68 20 6f 66 20 74 68 65 20 68 79 70 65 ngth of the hype
48a0: 72 6c 69 6e 6b 2e 20 20 4f 74 68 65 72 77 69 73 rlink. Otherwis
48b0: 65 20 72 65 74 75 72 6e 20 30 2e 0a 2a 2f 0a 73 e return 0..*/.s
48c0: 74 61 74 69 63 20 69 6e 74 20 6c 69 6e 6b 4c 65 tatic int linkLe
48d0: 6e 67 74 68 28 63 6f 6e 73 74 20 63 68 61 72 20 ngth(const char
48e0: 2a 7a 29 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 *z){. int n;.
48f0: 61 73 73 65 72 74 28 20 7a 5b 30 5d 3d 3d 27 5b assert( z[0]=='[
4900: 27 20 29 3b 0a 20 20 66 6f 72 28 6e 3d 30 3b 20 ' );. for(n=0;
4910: 7a 5b 6e 5d 20 26 26 20 7a 5b 6e 5d 21 3d 27 5d z[n] && z[n]!=']
4920: 27 3b 20 6e 2b 2b 29 7b 7d 0a 20 20 69 66 28 20 '; n++){}. if(
4930: 7a 5b 6e 5d 3d 3d 27 5d 27 20 29 7b 0a 20 20 20 z[n]==']' ){.
4940: 20 72 65 74 75 72 6e 20 6e 2b 31 3b 0a 20 20 7d return n+1;. }
4950: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e else{. return
4960: 20 30 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 0;. }.}.../*.*
4970: 2a 20 7a 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 * z points to th
4980: 65 20 73 74 61 72 74 20 6f 66 20 61 20 74 6f 6b e start of a tok
4990: 65 6e 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 en. Return the
49a0: 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 63 68 61 number of.** cha
49b0: 72 61 63 74 65 72 73 20 69 6e 20 74 68 61 74 20 racters in that
49c0: 74 6f 6b 65 6e 2e 20 20 57 72 69 74 65 20 74 68 token. Write th
49d0: 65 20 74 6f 6b 65 6e 20 74 79 70 65 20 69 6e 74 e token type int
49e0: 6f 20 2a 70 54 6f 6b 65 6e 54 79 70 65 2e 0a 2a o *pTokenType..*
49f0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 6e 65 78 /.static int nex
4a00: 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 63 68 61 tToken(const cha
4a10: 72 20 2a 7a 2c 20 52 65 6e 64 65 72 65 72 20 2a r *z, Renderer *
4a20: 70 2c 20 69 6e 74 20 2a 70 54 6f 6b 65 6e 54 79 p, int *pTokenTy
4a30: 70 65 29 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 pe){. int n;.
4a40: 69 66 28 20 7a 5b 30 5d 3d 3d 27 3c 27 20 29 7b if( z[0]=='<' ){
4a50: 0a 20 20 20 20 6e 20 3d 20 6d 61 72 6b 75 70 4c . n = markupL
4a60: 65 6e 67 74 68 28 7a 29 3b 0a 0a 20 20 20 20 69 ength(z);.. i
4a70: 66 28 20 6e 3e 31 20 29 7b 0a 20 20 20 20 20 20 f( n>1 ){.
4a80: 69 66 20 28 7a 5b 31 5d 3d 3d 27 21 27 29 7b 0a if (z[1]=='!'){.
4a90: 20 20 20 20 20 20 20 20 2a 70 54 6f 6b 65 6e 54 *pTokenT
4aa0: 79 70 65 20 3d 20 54 4f 4b 45 4e 5f 43 4f 4d 4d ype = TOKEN_COMM
4ab0: 45 4e 54 3b 0a 20 20 20 20 20 20 20 20 72 65 74 ENT;. ret
4ac0: 75 72 6e 20 6e 3b 0a 20 20 20 20 20 20 7d 20 65 urn n;. } e
4ad0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 2a 70 lse {. *p
4ae0: 54 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4f 4b 45 TokenType = TOKE
4af0: 4e 5f 4d 41 52 4b 55 50 3b 0a 20 20 20 20 20 20 N_MARKUP;.
4b00: 20 20 72 65 74 75 72 6e 20 6e 3b 0a 20 20 20 20 return n;.
4b10: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 }. }else{.
4b20: 20 20 20 20 20 2a 70 54 6f 6b 65 6e 54 79 70 65 *pTokenType
4b30: 20 3d 20 54 4f 4b 45 4e 5f 43 48 41 52 41 43 54 = TOKEN_CHARACT
4b40: 45 52 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e ER;. return
4b50: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 1;. }. }.
4b60: 69 66 28 20 7a 5b 30 5d 3d 3d 27 26 27 20 26 26 if( z[0]=='&' &&
4b70: 20 28 70 2d 3e 69 6e 56 65 72 62 61 74 69 6d 20 (p->inVerbatim
4b80: 7c 7c 20 21 69 73 45 6c 65 6d 65 6e 74 28 7a 29 || !isElement(z)
4b90: 29 20 29 7b 0a 20 20 20 20 2a 70 54 6f 6b 65 6e ) ){. *pToken
4ba0: 54 79 70 65 20 3d 20 54 4f 4b 45 4e 5f 43 48 41 Type = TOKEN_CHA
4bb0: 52 41 43 54 45 52 3b 0a 20 20 20 20 72 65 74 75 RACTER;. retu
4bc0: 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 rn 1;. }. if(
4bd0: 28 70 2d 3e 73 74 61 74 65 20 26 20 41 4c 4c 4f (p->state & ALLO
4be0: 57 5f 57 49 4b 49 29 21 3d 30 20 29 7b 0a 20 20 W_WIKI)!=0 ){.
4bf0: 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 5c 6e 27 if( z[0]=='\n'
4c00: 20 29 7b 0a 20 20 20 20 20 20 6e 20 3d 20 70 61 ){. n = pa
4c10: 72 61 67 72 61 70 68 42 72 65 61 6b 4c 65 6e 67 ragraphBreakLeng
4c20: 74 68 28 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 th(z);. if(
4c30: 20 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 n>0 ){.
4c40: 2a 70 54 6f 6b 65 6e 54 79 70 65 20 3d 20 54 4f *pTokenType = TO
4c50: 4b 45 4e 5f 50 41 52 41 47 52 41 50 48 3b 0a 20 KEN_PARAGRAPH;.
4c60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b return n;
4c70: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 . }else if(
4c80: 20 69 73 73 70 61 63 65 28 7a 5b 31 5d 29 20 29 isspace(z[1]) )
4c90: 7b 0a 20 20 20 20 20 20 20 20 2a 70 54 6f 6b 65 {. *pToke
4ca0: 6e 54 79 70 65 20 3d 20 54 4f 4b 45 4e 5f 4e 45 nType = TOKEN_NE
4cb0: 57 4c 49 4e 45 3b 0a 20 20 20 20 20 20 20 20 72 WLINE;. r
4cc0: 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 20 20 7d eturn 1;. }
4cd0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 . }. if( (
4ce0: 70 2d 3e 73 74 61 74 65 20 26 20 41 54 5f 4e 45 p->state & AT_NE
4cf0: 57 4c 49 4e 45 29 21 3d 30 20 26 26 20 69 73 73 WLINE)!=0 && iss
4d00: 70 61 63 65 28 7a 5b 30 5d 29 20 29 7b 0a 20 20 pace(z[0]) ){.
4d10: 20 20 20 20 6e 20 3d 20 62 75 6c 6c 65 74 4c 65 n = bulletLe
4d20: 6e 67 74 68 28 7a 29 3b 0a 20 20 20 20 20 20 69 ngth(z);. i
4d30: 66 28 20 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 f( n>0 ){.
4d40: 20 20 2a 70 54 6f 6b 65 6e 54 79 70 65 20 3d 20 *pTokenType =
4d50: 54 4f 4b 45 4e 5f 42 55 4c 4c 45 54 3b 0a 20 20 TOKEN_BULLET;.
4d60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0a return n;.
4d70: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 20 }. n
4d80: 3d 20 65 6e 75 6d 4c 65 6e 67 74 68 28 7a 29 3b = enumLength(z);
4d90: 0a 20 20 20 20 20 20 69 66 28 20 6e 3e 30 20 29 . if( n>0 )
4da0: 7b 0a 20 20 20 20 20 20 20 20 2a 70 54 6f 6b 65 {. *pToke
4db0: 6e 54 79 70 65 20 3d 20 54 4f 4b 45 4e 5f 45 4e nType = TOKEN_EN
4dc0: 55 4d 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 UM;. retu
4dd0: 72 6e 20 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 rn n;. }.
4de0: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 2d 3e }. if( (p->
4df0: 73 74 61 74 65 20 26 20 41 54 5f 50 41 52 41 47 state & AT_PARAG
4e00: 52 41 50 48 29 21 3d 30 20 26 26 20 69 73 73 70 RAPH)!=0 && issp
4e10: 61 63 65 28 7a 5b 30 5d 29 20 29 7b 0a 20 20 20 ace(z[0]) ){.
4e20: 20 20 20 6e 20 3d 20 69 6e 64 65 6e 74 4c 65 6e n = indentLen
4e30: 67 74 68 28 7a 29 3b 0a 20 20 20 20 20 20 69 66 gth(z);. if
4e40: 28 20 6e 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 ( n>0 ){.
4e50: 20 2a 70 54 6f 6b 65 6e 54 79 70 65 20 3d 20 54 *pTokenType = T
4e60: 4f 4b 45 4e 5f 49 4e 44 45 4e 54 3b 0a 20 20 20 OKEN_INDENT;.
4e70: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0a 20 return n;.
4e80: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 }. }.
4e90: 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 5b 27 20 26 if( z[0]=='[' &
4ea0: 26 20 28 6e 20 3d 20 6c 69 6e 6b 4c 65 6e 67 74 & (n = linkLengt
4eb0: 68 28 7a 29 29 3e 30 20 29 7b 0a 20 20 20 20 20 h(z))>0 ){.
4ec0: 20 2a 70 54 6f 6b 65 6e 54 79 70 65 20 3d 20 54 *pTokenType = T
4ed0: 4f 4b 45 4e 5f 4c 49 4e 4b 3b 0a 20 20 20 20 20 OKEN_LINK;.
4ee0: 20 72 65 74 75 72 6e 20 6e 3b 0a 20 20 20 20 7d return n;. }
4ef0: 0a 20 20 7d 0a 20 20 2a 70 54 6f 6b 65 6e 54 79 . }. *pTokenTy
4f00: 70 65 20 3d 20 54 4f 4b 45 4e 5f 54 45 58 54 3b pe = TOKEN_TEXT;
4f10: 0a 20 20 72 65 74 75 72 6e 20 31 20 2b 20 74 65 . return 1 + te
4f20: 78 74 4c 65 6e 67 74 68 28 7a 2b 31 2c 20 70 2d xtLength(z+1, p-
4f30: 3e 73 74 61 74 65 20 26 20 41 4c 4c 4f 57 5f 57 >state & ALLOW_W
4f40: 49 4b 49 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 IKI);.}../*.** A
4f50: 20 73 69 6e 67 6c 65 20 6d 61 72 6b 75 70 20 69 single markup i
4f60: 73 20 70 61 72 73 65 64 20 69 6e 74 6f 20 61 6e s parsed into an
4f70: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 instance of the
4f80: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 following.** st
4f90: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 74 79 70 65 ructure..*/.type
4fa0: 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 def struct Parse
4fb0: 64 4d 61 72 6b 75 70 20 50 61 72 73 65 64 4d 61 dMarkup ParsedMa
4fc0: 72 6b 75 70 3b 0a 73 74 72 75 63 74 20 50 61 72 rkup;.struct Par
4fd0: 73 65 64 4d 61 72 6b 75 70 20 7b 0a 20 20 75 6e sedMarkup {. un
4fe0: 73 69 67 6e 65 64 20 63 68 61 72 20 65 6e 64 54 signed char endT
4ff0: 61 67 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 ag; /* True if
5000: 20 3c 2f 2e 2e 2e 3e 20 69 6e 73 74 65 61 64 20 </...> instead
5010: 6f 66 20 3c 2e 2e 2e 3e 20 2a 2f 0a 20 20 75 6e of <...> */. un
5020: 73 69 67 6e 65 64 20 63 68 61 72 20 69 43 6f 64 signed char iCod
5030: 65 3b 20 20 20 20 2f 2a 20 4d 41 52 4b 55 50 5f e; /* MARKUP_
5040: 2a 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 * */. unsigned
5050: 63 68 61 72 20 6e 41 74 74 72 3b 20 20 20 20 2f char nAttr; /
5060: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 74 74 72 * Number of attr
5070: 69 62 75 74 65 73 20 2a 2f 0a 20 20 75 6e 73 69 ibutes */. unsi
5080: 67 6e 65 64 20 73 68 6f 72 74 20 69 54 79 70 65 gned short iType
5090: 3b 20 20 20 2f 2a 20 4d 55 54 59 50 45 5f 2a 20 ; /* MUTYPE_*
50a0: 2a 2f 0a 20 20 73 74 72 75 63 74 20 7b 0a 20 20 */. struct {.
50b0: 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 unsigned char
50c0: 69 41 43 6f 64 65 3b 20 20 20 20 2f 2a 20 41 54 iACode; /* AT
50d0: 54 52 5f 2a 20 2a 2f 0a 20 20 20 20 63 68 61 72 TR_* */. char
50e0: 20 2a 7a 56 61 6c 75 65 3b 20 20 20 20 20 20 20 *zValue;
50f0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 /* Argument
5100: 20 74 6f 20 74 68 69 73 20 61 74 74 72 69 62 75 to this attribu
5110: 74 65 2e 20 20 4d 69 67 68 74 20 62 65 20 4e 55 te. Might be NU
5120: 4c 4c 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 63 LL */. char c
5130: 54 65 72 6d 3b 20 20 20 20 20 20 20 20 20 20 20 Term;
5140: 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 61 /* Original a
5150: 72 67 75 6d 65 6e 74 20 74 65 72 6d 69 6e 61 74 rgument terminat
5160: 69 6f 6e 20 63 68 61 72 61 63 74 65 72 20 2a 2f ion character */
5170: 0a 20 20 7d 20 61 41 74 74 72 5b 31 30 5d 3b 0a . } aAttr[10];.
5180: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 7a 5b 5d 20 69 73 };../*.** z[] is
5190: 20 61 6e 20 48 54 4d 4c 20 6d 61 72 6b 75 70 20 an HTML markup
51a0: 65 6c 65 6d 65 6e 74 20 2d 20 73 6f 6d 65 74 68 element - someth
51b0: 69 6e 67 20 74 68 61 74 20 62 65 67 69 6e 73 20 ing that begins
51c0: 77 69 74 68 20 27 3c 27 2e 0a 2a 2a 20 50 61 72 with '<'..** Par
51d0: 73 65 20 74 68 69 73 20 65 6c 65 6d 65 6e 74 20 se this element
51e0: 69 6e 74 6f 20 74 68 65 20 70 20 73 74 72 75 63 into the p struc
51f0: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 ture..**.** The
5200: 63 6f 6e 74 65 6e 74 20 6f 66 20 7a 5b 5d 20 6d content of z[] m
5210: 69 67 68 74 20 62 65 20 6d 6f 64 69 66 69 65 64 ight be modified
5220: 20 62 79 20 63 6f 6e 76 65 72 74 69 6e 67 20 63 by converting c
5230: 68 61 72 61 63 74 65 72 73 0a 2a 2a 20 74 6f 20 haracters.** to
5240: 6c 6f 77 65 72 63 61 73 65 20 61 6e 64 20 62 79 lowercase and by
5250: 20 69 6e 73 65 72 74 69 6e 67 20 73 6f 6d 65 20 inserting some
5260: 22 5c 30 30 30 22 20 63 68 61 72 61 63 74 65 72 "\000" character
5270: 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 s..*/.static voi
5280: 64 20 70 61 72 73 65 4d 61 72 6b 75 70 28 50 61 d parseMarkup(Pa
5290: 72 73 65 64 4d 61 72 6b 75 70 20 2a 70 2c 20 63 rsedMarkup *p, c
52a0: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 har *z){. int i
52b0: 2c 20 6a 2c 20 63 3b 0a 20 20 69 6e 74 20 69 41 , j, c;. int iA
52c0: 43 6f 64 65 3b 0a 20 20 63 68 61 72 20 2a 7a 56 Code;. char *zV
52d0: 61 6c 75 65 3b 0a 20 20 69 6e 74 20 73 65 65 6e alue;. int seen
52e0: 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 54 61 = 0;. char zTa
52f0: 67 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 7a g[100];.. if( z
5300: 5b 31 5d 3d 3d 27 2f 27 20 29 7b 0a 20 20 20 20 [1]=='/' ){.
5310: 70 2d 3e 65 6e 64 54 61 67 20 3d 20 31 3b 0a 20 p->endTag = 1;.
5320: 20 20 20 69 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 i = 2;. }els
5330: 65 7b 0a 20 20 20 20 70 2d 3e 65 6e 64 54 61 67 e{. p->endTag
5340: 20 3d 20 30 3b 0a 20 20 20 20 69 20 3d 20 31 3b = 0;. i = 1;
5350: 0a 20 20 7d 0a 20 20 6a 20 3d 20 30 3b 0a 20 20 . }. j = 0;.
5360: 77 68 69 6c 65 28 20 69 73 61 6c 6e 75 6d 28 7a while( isalnum(z
5370: 5b 69 5d 29 20 29 7b 0a 20 20 20 20 69 66 28 20 [i]) ){. if(
5380: 6a 3c 73 69 7a 65 6f 66 28 7a 54 61 67 29 2d 31 j<sizeof(zTag)-1
5390: 20 29 20 7a 54 61 67 5b 6a 2b 2b 5d 20 3d 20 74 ) zTag[j++] = t
53a0: 6f 6c 6f 77 65 72 28 7a 5b 69 5d 29 3b 0a 20 20 olower(z[i]);.
53b0: 20 20 69 2b 2b 3b 0a 20 20 7d 0a 20 20 7a 54 61 i++;. }. zTa
53c0: 67 5b 6a 5d 20 3d 20 30 3b 0a 20 20 70 2d 3e 69 g[j] = 0;. p->i
53d0: 43 6f 64 65 20 3d 20 66 69 6e 64 54 61 67 28 7a Code = findTag(z
53e0: 54 61 67 29 3b 0a 20 20 70 2d 3e 69 54 79 70 65 Tag);. p->iType
53f0: 20 3d 20 61 4d 61 72 6b 75 70 5b 70 2d 3e 69 43 = aMarkup[p->iC
5400: 6f 64 65 5d 2e 69 54 79 70 65 3b 0a 20 20 70 2d ode].iType;. p-
5410: 3e 6e 41 74 74 72 20 3d 20 30 3b 0a 20 20 77 68 >nAttr = 0;. wh
5420: 69 6c 65 28 20 69 73 73 70 61 63 65 28 7a 5b 69 ile( isspace(z[i
5430: 5d 29 20 29 7b 20 69 2b 2b 3b 20 7d 0a 20 20 77 ]) ){ i++; }. w
5440: 68 69 6c 65 28 20 70 2d 3e 6e 41 74 74 72 3c 38 hile( p->nAttr<8
5450: 20 26 26 20 69 73 61 6c 70 68 61 28 7a 5b 69 5d && isalpha(z[i]
5460: 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 61 74 74 ) ){. int att
5470: 72 4f 6b 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 rOk; /* True
5480: 74 6f 20 70 72 65 73 65 72 76 65 72 20 61 74 74 to preserver att
5490: 72 69 62 75 74 65 2e 20 20 46 61 6c 73 65 20 74 ribute. False t
54a0: 6f 20 69 67 6e 6f 72 65 20 69 74 20 2a 2f 0a 20 o ignore it */.
54b0: 20 20 20 6a 20 3d 20 30 3b 0a 20 20 20 20 77 68 j = 0;. wh
54c0: 69 6c 65 28 20 69 73 61 6c 6e 75 6d 28 7a 5b 69 ile( isalnum(z[i
54d0: 5d 29 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 ]) ){. if(
54e0: 6a 3c 73 69 7a 65 6f 66 28 7a 54 61 67 29 2d 31 j<sizeof(zTag)-1
54f0: 20 29 20 7a 54 61 67 5b 6a 2b 2b 5d 20 3d 20 74 ) zTag[j++] = t
5500: 6f 6c 6f 77 65 72 28 7a 5b 69 5d 29 3b 0a 20 20 olower(z[i]);.
5510: 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 7d 0a 20 i++;. }.
5520: 20 20 20 7a 54 61 67 5b 6a 5d 20 3d 20 30 3b 0a zTag[j] = 0;.
5530: 20 20 20 20 70 2d 3e 61 41 74 74 72 5b 70 2d 3e p->aAttr[p->
5540: 6e 41 74 74 72 5d 2e 69 41 43 6f 64 65 20 3d 20 nAttr].iACode =
5550: 69 41 43 6f 64 65 20 3d 20 66 69 6e 64 41 74 74 iACode = findAtt
5560: 72 28 7a 54 61 67 29 3b 0a 20 20 20 20 61 74 74 r(zTag);. att
5570: 72 4f 6b 20 3d 20 69 41 43 6f 64 65 21 3d 30 20 rOk = iACode!=0
5580: 26 26 20 28 73 65 65 6e 20 26 20 61 41 74 74 72 && (seen & aAttr
5590: 69 62 75 74 65 5b 69 41 43 6f 64 65 5d 2e 69 4d ibute[iACode].iM
55a0: 61 73 6b 29 3d 3d 30 3b 0a 20 20 20 20 77 68 69 ask)==0;. whi
55b0: 6c 65 28 20 69 73 73 70 61 63 65 28 7a 5b 69 5d le( isspace(z[i]
55c0: 29 20 29 7b 20 7a 2b 2b 3b 20 7d 0a 20 20 20 20 ) ){ z++; }.
55d0: 69 66 28 20 7a 5b 69 5d 21 3d 27 3d 27 20 29 7b if( z[i]!='=' ){
55e0: 0a 20 20 20 20 20 20 70 2d 3e 61 41 74 74 72 5b . p->aAttr[
55f0: 70 2d 3e 6e 41 74 74 72 5d 2e 7a 56 61 6c 75 65 p->nAttr].zValue
5600: 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 2d 3e 61 = 0;. p->a
5610: 41 74 74 72 5b 70 2d 3e 6e 41 74 74 72 5d 2e 63 Attr[p->nAttr].c
5620: 54 65 72 6d 20 3d 20 30 3b 0a 20 20 20 20 20 20 Term = 0;.
5630: 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 c = 0;. }else
5640: 7b 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 {. i++;.
5650: 20 20 20 77 68 69 6c 65 28 20 69 73 73 70 61 63 while( isspac
5660: 65 28 7a 5b 69 5d 29 20 29 7b 20 7a 2b 2b 3b 20 e(z[i]) ){ z++;
5670: 7d 0a 20 20 20 20 20 20 69 66 28 20 7a 5b 69 5d }. if( z[i]
5680: 3d 3d 27 22 27 20 29 7b 0a 20 20 20 20 20 20 20 =='"' ){.
5690: 20 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7a 56 i++;. zV
56a0: 61 6c 75 65 20 3d 20 26 7a 5b 69 5d 3b 0a 20 20 alue = &z[i];.
56b0: 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a 5b 69 while( z[i
56c0: 5d 20 26 26 20 7a 5b 69 5d 21 3d 27 22 27 20 29 ] && z[i]!='"' )
56d0: 7b 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 20 20 7d { i++; }. }
56e0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 56 else{. zV
56f0: 61 6c 75 65 20 3d 20 26 7a 5b 69 5d 3b 0a 20 20 alue = &z[i];.
5700: 20 20 20 20 20 20 77 68 69 6c 65 28 20 21 69 73 while( !is
5710: 73 70 61 63 65 28 7a 5b 69 5d 29 20 26 26 20 7a space(z[i]) && z
5720: 5b 69 5d 21 3d 27 3e 27 20 29 7b 20 7a 2b 2b 3b [i]!='>' ){ z++;
5730: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 }. }.
5740: 20 69 66 28 20 61 74 74 72 4f 6b 20 29 7b 0a 20 if( attrOk ){.
5750: 20 20 20 20 20 20 20 70 2d 3e 61 41 74 74 72 5b p->aAttr[
5760: 70 2d 3e 6e 41 74 74 72 5d 2e 7a 56 61 6c 75 65 p->nAttr].zValue
5770: 20 3d 20 7a 56 61 6c 75 65 3b 0a 20 20 20 20 20 = zValue;.
5780: 20 20 20 70 2d 3e 61 41 74 74 72 5b 70 2d 3e 6e p->aAttr[p->n
5790: 41 74 74 72 5d 2e 63 54 65 72 6d 20 3d 20 63 20 Attr].cTerm = c
57a0: 3d 20 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 = z[i];.
57b0: 7a 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 z[i] = 0;.
57c0: 7d 0a 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 }. i++;.
57d0: 20 7d 0a 20 20 20 20 69 66 28 20 61 74 74 72 4f }. if( attrO
57e0: 6b 20 29 7b 0a 20 20 20 20 20 20 73 65 65 6e 20 k ){. seen
57f0: 7c 3d 20 61 41 74 74 72 69 62 75 74 65 5b 69 41 |= aAttribute[iA
5800: 43 6f 64 65 5d 2e 69 4d 61 73 6b 3b 0a 20 20 20 Code].iMask;.
5810: 20 20 20 70 2d 3e 6e 41 74 74 72 2b 2b 3b 0a 20 p->nAttr++;.
5820: 20 20 20 7d 0a 20 20 20 20 77 68 69 6c 65 28 20 }. while(
5830: 69 73 73 70 61 63 65 28 7a 5b 69 5d 29 20 29 7b isspace(z[i]) ){
5840: 20 69 2b 2b 3b 20 7d 0a 20 20 20 20 69 66 28 20 i++; }. if(
5850: 7a 5b 69 5d 3d 3d 27 3e 27 20 7c 7c 20 28 7a 5b z[i]=='>' || (z[
5860: 69 5d 3d 3d 27 2f 27 20 26 26 20 7a 5b 69 2b 31 i]=='/' && z[i+1
5870: 5d 3d 3d 27 3e 27 29 20 29 20 62 72 65 61 6b 3b ]=='>') ) break;
5880: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 . }.}../*.** Re
5890: 6e 64 65 72 20 6d 61 72 6b 75 70 20 6f 6e 20 74 nder markup on t
58a0: 68 65 20 67 69 76 65 6e 20 62 6c 6f 62 2e 0a 2a he given blob..*
58b0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 /.static void re
58c0: 6e 64 65 72 4d 61 72 6b 75 70 28 42 6c 6f 62 20 nderMarkup(Blob
58d0: 2a 70 4f 75 74 2c 20 50 61 72 73 65 64 4d 61 72 *pOut, ParsedMar
58e0: 6b 75 70 20 2a 70 29 7b 0a 20 20 69 6e 74 20 69 kup *p){. int i
58f0: 3b 0a 20 20 69 66 28 20 70 2d 3e 65 6e 64 54 61 ;. if( p->endTa
5900: 67 20 29 7b 0a 20 20 20 20 62 6c 6f 62 5f 61 70 g ){. blob_ap
5910: 70 65 6e 64 66 28 70 4f 75 74 2c 20 22 3c 2f 25 pendf(pOut, "</%
5920: 73 3e 22 2c 20 61 4d 61 72 6b 75 70 5b 70 2d 3e s>", aMarkup[p->
5930: 69 43 6f 64 65 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 iCode].zName);.
5940: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 6c 6f 62 }else{. blob
5950: 5f 61 70 70 65 6e 64 66 28 70 4f 75 74 2c 20 22 _appendf(pOut, "
5960: 3c 25 73 22 2c 20 61 4d 61 72 6b 75 70 5b 70 2d <%s", aMarkup[p-
5970: 3e 69 43 6f 64 65 5d 2e 7a 4e 61 6d 65 29 3b 0a >iCode].zName);.
5980: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 for(i=0; i<p
5990: 2d 3e 6e 41 74 74 72 3b 20 69 2b 2b 29 7b 0a 20 ->nAttr; i++){.
59a0: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 blob_append
59b0: 66 28 70 4f 75 74 2c 20 22 20 25 73 22 2c 20 61 f(pOut, " %s", a
59c0: 41 74 74 72 69 62 75 74 65 5b 70 2d 3e 61 41 74 Attribute[p->aAt
59d0: 74 72 5b 69 5d 2e 69 41 43 6f 64 65 5d 2e 7a 4e tr[i].iACode].zN
59e0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 ame);. if(
59f0: 70 2d 3e 61 41 74 74 72 5b 69 5d 2e 7a 56 61 6c p->aAttr[i].zVal
5a00: 75 65 20 29 7b 0a 20 20 20 20 20 20 20 20 62 6c ue ){. bl
5a10: 6f 62 5f 61 70 70 65 6e 64 66 28 70 4f 75 74 2c ob_appendf(pOut,
5a20: 20 22 3d 5c 22 25 73 5c 22 22 2c 20 70 2d 3e 61 "=\"%s\"", p->a
5a30: 41 74 74 72 5b 69 5d 2e 7a 56 61 6c 75 65 29 3b Attr[i].zValue);
5a40: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 . }. }.
5a50: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 blob_append(p
5a60: 4f 75 74 2c 20 22 3e 22 2c 20 31 29 3b 0a 20 20 Out, ">", 1);.
5a70: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 }.}../*.** When
5a80: 74 68 65 20 6d 61 72 6b 75 70 20 77 61 73 20 70 the markup was p
5a90: 61 72 73 65 64 2c 20 73 6f 6d 65 20 22 5c 30 30 arsed, some "\00
5aa0: 30 22 20 6d 61 79 20 68 61 76 65 20 62 65 65 6e 0" may have been
5ab0: 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68 inserted..** Th
5ac0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 73 74 6f is routine resto
5ad0: 72 65 73 20 74 6f 20 74 68 6f 73 65 20 22 5c 30 res to those "\0
5ae0: 30 30 22 20 76 61 6c 75 65 73 20 62 61 63 6b 20 00" values back
5af0: 74 6f 20 74 68 65 69 72 0a 2a 2a 20 6f 72 69 67 to their.** orig
5b00: 69 6e 61 6c 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2f inal content..*/
5b10: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 75 6e 70 .static void unp
5b20: 61 72 73 65 4d 61 72 6b 75 70 28 50 61 72 73 65 arseMarkup(Parse
5b30: 64 4d 61 72 6b 75 70 20 2a 70 29 7b 0a 20 20 69 dMarkup *p){. i
5b40: 6e 74 20 69 2c 20 6e 3b 0a 20 20 66 6f 72 28 69 nt i, n;. for(i
5b50: 3d 30 3b 20 69 3c 70 2d 3e 6e 41 74 74 72 3b 20 =0; i<p->nAttr;
5b60: 69 2b 2b 29 7b 0a 20 20 20 20 63 68 61 72 20 2a i++){. char *
5b70: 7a 20 3d 20 70 2d 3e 61 41 74 74 72 5b 69 5d 2e z = p->aAttr[i].
5b80: 7a 56 61 6c 75 65 3b 0a 20 20 20 20 69 66 28 20 zValue;. if(
5b90: 7a 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b z==0 ) continue;
5ba0: 0a 20 20 20 20 6e 20 3d 20 73 74 72 6c 65 6e 28 . n = strlen(
5bb0: 7a 29 3b 0a 20 20 20 20 7a 5b 6e 5d 20 3d 20 70 z);. z[n] = p
5bc0: 2d 3e 61 41 74 74 72 5b 69 5d 2e 63 54 65 72 6d ->aAttr[i].cTerm
5bd0: 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 ;. }.}../*.** R
5be0: 65 74 75 72 6e 20 74 68 65 20 49 44 20 61 74 74 eturn the ID att
5bf0: 72 69 62 75 74 65 20 66 6f 72 20 6d 61 72 6b 75 ribute for marku
5c00: 70 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 20 p. Return NULL
5c10: 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 0a 2a if there is no.*
5c20: 2a 20 49 44 20 61 74 74 72 69 62 75 74 65 2e 0a * ID attribute..
5c30: 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 */.static const
5c40: 63 68 61 72 20 2a 6d 61 72 6b 75 70 49 64 28 50 char *markupId(P
5c50: 61 72 73 65 64 4d 61 72 6b 75 70 20 2a 70 29 7b arsedMarkup *p){
5c60: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 . int i;. for(
5c70: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 41 74 74 72 3b i=0; i<p->nAttr;
5c80: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 70 i++){. if( p
5c90: 2d 3e 61 41 74 74 72 5b 69 5d 2e 69 41 43 6f 64 ->aAttr[i].iACod
5ca0: 65 3d 3d 41 54 54 52 5f 49 44 20 29 7b 0a 20 20 e==ATTR_ID ){.
5cb0: 20 20 20 20 72 65 74 75 72 6e 20 70 2d 3e 61 41 return p->aA
5cc0: 74 74 72 5b 69 5d 2e 7a 56 61 6c 75 65 3b 0a 20 ttr[i].zValue;.
5cd0: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 }. }. retur
5ce0: 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 6f n 0;.}../*.** Po
5cf0: 70 20 61 20 73 69 6e 67 6c 65 20 65 6c 65 6d 65 p a single eleme
5d00: 6e 74 20 6f 66 66 20 6f 66 20 74 68 65 20 73 74 nt off of the st
5d10: 61 63 6b 2e 20 20 41 73 20 74 68 65 20 65 6c 65 ack. As the ele
5d20: 6d 65 6e 74 20 69 73 20 70 6f 70 70 65 64 2c 0a ment is popped,.
5d30: 2a 2a 20 6f 75 74 70 75 74 20 69 74 73 20 65 6e ** output its en
5d40: 64 20 74 61 67 20 69 66 20 69 74 20 69 73 20 6e d tag if it is n
5d50: 6f 74 20 61 20 3c 2f 64 69 76 3e 20 74 61 67 2e ot a </div> tag.
5d60: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 .*/.static void
5d70: 70 6f 70 53 74 61 63 6b 28 52 65 6e 64 65 72 65 popStack(Rendere
5d80: 72 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e r *p){. if( p->
5d90: 6e 53 74 61 63 6b 20 29 7b 0a 20 20 20 20 69 6e nStack ){. in
5da0: 74 20 69 43 6f 64 65 3b 0a 20 20 20 20 70 2d 3e t iCode;. p->
5db0: 6e 53 74 61 63 6b 2d 2d 3b 0a 20 20 20 20 69 43 nStack--;. iC
5dc0: 6f 64 65 20 3d 20 70 2d 3e 61 53 74 61 63 6b 5b ode = p->aStack[
5dd0: 70 2d 3e 6e 53 74 61 63 6b 5d 2e 69 43 6f 64 65 p->nStack].iCode
5de0: 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 64 65 21 ;. if( iCode!
5df0: 3d 4d 41 52 4b 55 50 5f 44 49 56 20 29 7b 0a 20 =MARKUP_DIV ){.
5e00: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 blob_append
5e10: 66 28 70 2d 3e 70 4f 75 74 2c 20 22 3c 2f 25 73 f(p->pOut, "</%s
5e20: 3e 22 2c 20 61 4d 61 72 6b 75 70 5b 69 43 6f 64 >", aMarkup[iCod
5e30: 65 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 7d e].zName);. }
5e40: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 75 . }.}../*.** Pu
5e50: 73 68 20 61 20 6e 65 77 20 6d 61 72 6b 75 70 20 sh a new markup
5e60: 76 61 6c 75 65 20 6f 6e 74 6f 20 74 68 65 20 73 value onto the s
5e70: 74 61 63 6b 2e 20 20 45 6e 6c 61 72 67 65 20 74 tack. Enlarge t
5e80: 68 65 20 73 74 61 63 6b 0a 2a 2a 20 69 66 20 6e he stack.** if n
5e90: 65 63 65 73 73 61 72 79 2e 0a 2a 2f 0a 73 74 61 ecessary..*/.sta
5ea0: 74 69 63 20 76 6f 69 64 20 70 75 73 68 53 74 61 tic void pushSta
5eb0: 63 6b 57 69 74 68 49 64 28 52 65 6e 64 65 72 65 ckWithId(Rendere
5ec0: 72 20 2a 70 2c 20 69 6e 74 20 65 6c 65 6d 2c 20 r *p, int elem,
5ed0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 64 2c const char *zId,
5ee0: 20 69 6e 74 20 77 29 7b 0a 20 20 69 66 28 20 70 int w){. if( p
5ef0: 2d 3e 6e 53 74 61 63 6b 3e 3d 70 2d 3e 6e 41 6c ->nStack>=p->nAl
5f00: 6c 6f 63 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 41 loc ){. p->nA
5f10: 6c 6c 6f 63 20 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 lloc = p->nAlloc
5f20: 2a 32 20 2b 20 31 30 30 3b 0a 20 20 20 20 70 2d *2 + 100;. p-
5f30: 3e 61 53 74 61 63 6b 20 3d 20 72 65 61 6c 6c 6f >aStack = reallo
5f40: 63 28 70 2d 3e 61 53 74 61 63 6b 2c 20 70 2d 3e c(p->aStack, p->
5f50: 6e 41 6c 6c 6f 63 2a 73 69 7a 65 6f 66 28 70 2d nAlloc*sizeof(p-
5f60: 3e 61 53 74 61 63 6b 5b 30 5d 29 29 3b 0a 20 20 >aStack[0]));.
5f70: 20 20 69 66 28 20 70 2d 3e 61 53 74 61 63 6b 3d if( p->aStack=
5f80: 3d 30 20 29 7b 0a 20 20 20 20 20 20 66 6f 73 73 =0 ){. foss
5f90: 69 6c 5f 70 61 6e 69 63 28 22 6f 75 74 20 6f 66 il_panic("out of
5fa0: 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20 20 20 7d memory");. }
5fb0: 0a 20 20 7d 0a 20 20 70 2d 3e 61 53 74 61 63 6b . }. p->aStack
5fc0: 5b 70 2d 3e 6e 53 74 61 63 6b 5d 2e 69 43 6f 64 [p->nStack].iCod
5fd0: 65 20 3d 20 65 6c 65 6d 3b 0a 20 20 70 2d 3e 61 e = elem;. p->a
5fe0: 53 74 61 63 6b 5b 70 2d 3e 6e 53 74 61 63 6b 5d Stack[p->nStack]
5ff0: 2e 7a 49 64 20 3d 20 7a 49 64 3b 0a 20 20 70 2d .zId = zId;. p-
6000: 3e 61 53 74 61 63 6b 5b 70 2d 3e 6e 53 74 61 63 >aStack[p->nStac
6010: 6b 5d 2e 61 6c 6c 6f 77 57 69 6b 69 20 3d 20 77 k].allowWiki = w
6020: 3b 0a 20 20 70 2d 3e 6e 53 74 61 63 6b 2b 2b 3b ;. p->nStack++;
6030: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 .}.static void p
6040: 75 73 68 53 74 61 63 6b 28 52 65 6e 64 65 72 65 ushStack(Rendere
6050: 72 20 2a 70 2c 20 69 6e 74 20 65 6c 65 6d 29 7b r *p, int elem){
6060: 0a 20 20 70 75 73 68 53 74 61 63 6b 57 69 74 68 . pushStackWith
6070: 49 64 28 70 2c 20 65 6c 65 6d 2c 20 30 2c 20 30 Id(p, elem, 0, 0
6080: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 6f 70 20 );.}../*.** Pop
6090: 74 68 65 20 73 74 61 63 6b 20 75 6e 74 69 6c 20 the stack until
60a0: 74 68 65 20 74 6f 70 2d 6d 6f 73 74 20 69 54 61 the top-most iTa
60b0: 67 20 65 6c 65 6d 65 6e 74 20 69 73 20 72 65 6d g element is rem
60c0: 6f 76 65 64 2e 0a 2a 2a 20 49 66 20 74 68 65 72 oved..** If ther
60d0: 65 20 69 73 20 6e 6f 20 69 54 61 67 20 65 6c 65 e is no iTag ele
60e0: 6d 65 6e 74 20 6f 6e 20 74 68 65 20 73 74 61 63 ment on the stac
60f0: 6b 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a k, this routine.
6100: 2a 2a 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a ** is a no-op..*
6110: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70 6f /.static void po
6120: 70 53 74 61 63 6b 54 6f 54 61 67 28 52 65 6e 64 pStackToTag(Rend
6130: 65 72 65 72 20 2a 70 2c 20 69 6e 74 20 69 54 61 erer *p, int iTa
6140: 67 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 g){. int i;. f
6150: 6f 72 28 69 3d 70 2d 3e 6e 53 74 61 63 6b 2d 31 or(i=p->nStack-1
6160: 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 7b 0a 20 20 ; i>=0; i--){.
6170: 20 20 69 66 28 20 70 2d 3e 61 53 74 61 63 6b 5b if( p->aStack[
6180: 69 5d 2e 69 43 6f 64 65 21 3d 69 54 61 67 20 29 i].iCode!=iTag )
6190: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 69 continue;. i
61a0: 66 28 20 70 2d 3e 61 53 74 61 63 6b 5b 69 5d 2e f( p->aStack[i].
61b0: 7a 49 64 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a zId ) continue;.
61c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 break;. }.
61d0: 20 69 66 28 20 69 3c 30 20 29 20 72 65 74 75 72 if( i<0 ) retur
61e0: 6e 3b 0a 20 20 77 68 69 6c 65 28 20 70 2d 3e 6e n;. while( p->n
61f0: 53 74 61 63 6b 3e 69 20 29 7b 0a 20 20 20 20 70 Stack>i ){. p
6200: 6f 70 53 74 61 63 6b 28 70 29 3b 0a 20 20 7d 0a opStack(p);. }.
6210: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 }../*.** Attempt
6220: 20 74 6f 20 66 69 6e 64 20 61 20 66 69 6e 64 20 to find a find
6230: 61 20 74 61 67 20 6f 66 20 74 79 70 65 20 69 54 a tag of type iT
6240: 61 67 20 77 69 74 68 20 69 64 20 7a 49 64 2e 20 ag with id zId.
6250: 20 52 65 74 75 72 6e 20 2d 31 0a 2a 2a 20 69 66 Return -1.** if
6260: 20 6e 6f 74 20 66 6f 75 6e 64 2e 20 20 49 66 20 not found. If
6270: 66 6f 75 6e 64 2c 20 72 65 74 75 72 6e 20 69 74 found, return it
6280: 73 20 73 74 61 63 6b 20 6c 65 76 65 6c 2e 0a 2a s stack level..*
6290: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 66 69 6e /.static int fin
62a0: 64 54 61 67 57 69 74 68 49 64 28 52 65 6e 64 65 dTagWithId(Rende
62b0: 72 65 72 20 2a 70 2c 20 69 6e 74 20 69 54 61 67 rer *p, int iTag
62c0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 , const char *zI
62d0: 64 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61 d){. int i;. a
62e0: 73 73 65 72 74 28 20 7a 49 64 21 3d 30 20 29 3b ssert( zId!=0 );
62f0: 0a 20 20 66 6f 72 28 69 3d 70 2d 3e 6e 53 74 61 . for(i=p->nSta
6300: 63 6b 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 ck-1; i>=0; i--)
6310: 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 53 74 {. if( p->aSt
6320: 61 63 6b 5b 69 5d 2e 69 43 6f 64 65 21 3d 69 54 ack[i].iCode!=iT
6330: 61 67 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 ag ) continue;.
6340: 20 20 20 69 66 28 20 70 2d 3e 61 53 74 61 63 6b if( p->aStack
6350: 5b 69 5d 2e 7a 49 64 3d 3d 30 20 29 20 63 6f 6e [i].zId==0 ) con
6360: 74 69 6e 75 65 3b 0a 20 20 20 20 69 66 28 20 73 tinue;. if( s
6370: 74 72 63 6d 70 28 7a 49 64 2c 20 70 2d 3e 61 53 trcmp(zId, p->aS
6380: 74 61 63 6b 5b 69 5d 2e 7a 49 64 29 21 3d 30 20 tack[i].zId)!=0
6390: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 ) continue;.
63a0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 break;. }. ret
63b0: 75 72 6e 20 69 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 urn i;.}../*.**
63c0: 50 6f 70 20 74 68 65 20 73 74 61 63 6b 20 75 6e Pop the stack un
63d0: 74 69 6c 20 74 68 65 20 74 6f 70 2d 6d 6f 73 74 til the top-most
63e0: 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 element of the
63f0: 73 74 61 63 6b 0a 2a 2a 20 69 73 20 61 6e 20 65 stack.** is an e
6400: 6c 65 6d 65 6e 74 20 74 68 61 74 20 6d 61 74 63 lement that matc
6410: 68 65 73 20 74 68 65 20 74 79 70 65 20 69 6e 20 hes the type in
6420: 69 4d 61 73 6b 2e 20 20 52 65 74 75 72 6e 0a 2a iMask. Return.*
6430: 2a 20 63 6f 64 65 20 6f 66 20 74 68 65 20 6d 61 * code of the ma
6440: 72 6b 75 70 20 65 6c 65 6d 65 6e 74 20 74 68 61 rkup element tha
6450: 74 20 69 73 20 6f 6e 20 6c 65 66 74 20 6f 6e 20 t is on left on
6460: 74 6f 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b top of the stack
6470: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 73 74 61 63 ..** If the stac
6480: 6b 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 k does not have
6490: 61 6e 20 65 6c 65 6d 65 6e 74 0a 2a 2a 20 74 68 an element.** th
64a0: 61 74 20 6d 61 74 63 68 65 73 20 69 4d 61 73 6b at matches iMask
64b0: 2c 20 74 68 65 6e 20 6c 65 61 76 65 20 74 68 65 , then leave the
64c0: 20 73 74 61 63 6b 20 75 6e 63 68 61 6e 67 65 64 stack unchanged
64d0: 20 61 6e 64 0a 2a 2a 20 72 65 74 75 72 6e 20 66 and.** return f
64e0: 61 6c 73 65 20 28 4d 41 52 4b 55 50 5f 49 4e 56 alse (MARKUP_INV
64f0: 41 4c 49 44 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 ALID)..*/.static
6500: 20 69 6e 74 20 62 61 63 6b 75 70 54 6f 54 79 70 int backupToTyp
6510: 65 28 52 65 6e 64 65 72 65 72 20 2a 70 2c 20 69 e(Renderer *p, i
6520: 6e 74 20 69 4d 61 73 6b 29 7b 0a 20 20 69 6e 74 nt iMask){. int
6530: 20 69 3b 0a 20 20 66 6f 72 28 69 3d 70 2d 3e 6e i;. for(i=p->n
6540: 53 74 61 63 6b 2d 31 3b 20 69 3e 3d 30 3b 20 69 Stack-1; i>=0; i
6550: 2d 2d 29 7b 0a 20 20 20 20 69 66 28 20 61 4d 61 --){. if( aMa
6560: 72 6b 75 70 5b 70 2d 3e 61 53 74 61 63 6b 5b 69 rkup[p->aStack[i
6570: 5d 2e 69 43 6f 64 65 5d 2e 69 54 79 70 65 20 26 ].iCode].iType &
6580: 20 69 4d 61 73 6b 20 29 20 62 72 65 61 6b 3b 0a iMask ) break;.
6590: 20 20 7d 0a 20 20 69 66 28 20 69 3c 30 20 29 20 }. if( i<0 )
65a0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 69 2b 2b 3b return 0;. i++;
65b0: 0a 20 20 77 68 69 6c 65 28 20 70 2d 3e 6e 53 74 . while( p->nSt
65c0: 61 63 6b 3e 69 20 29 7b 0a 20 20 20 20 70 6f 70 ack>i ){. pop
65d0: 53 74 61 63 6b 28 70 29 3b 0a 20 20 7d 0a 20 20 Stack(p);. }.
65e0: 72 65 74 75 72 6e 20 70 2d 3e 61 53 74 61 63 6b return p->aStack
65f0: 5b 69 2d 31 5d 2e 69 43 6f 64 65 3b 0a 7d 0a 0a [i-1].iCode;.}..
6600: 2f 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 6e 65 /*.** Begin a ne
6610: 77 20 70 61 72 61 67 72 61 70 68 20 69 66 20 74 w paragraph if t
6620: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 hat something th
6630: 61 74 20 69 73 20 6e 65 65 64 65 64 2e 0a 2a 2f at is needed..*/
6640: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 74 61 .static void sta
6650: 72 74 41 75 74 6f 50 61 72 61 67 72 61 70 68 28 rtAutoParagraph(
6660: 52 65 6e 64 65 72 65 72 20 2a 70 29 7b 0a 20 20 Renderer *p){.
6670: 69 66 28 20 70 2d 3e 77 61 6e 74 41 75 74 6f 50 if( p->wantAutoP
6680: 61 72 61 67 72 61 70 68 3d 3d 30 20 29 20 72 65 aragraph==0 ) re
6690: 74 75 72 6e 3b 0a 20 20 62 6c 6f 62 5f 61 70 70 turn;. blob_app
66a0: 65 6e 64 66 28 70 2d 3e 70 4f 75 74 2c 20 22 3c endf(p->pOut, "<
66b0: 70 3e 22 2c 20 2d 31 29 3b 0a 20 20 70 75 73 68 p>", -1);. push
66c0: 53 74 61 63 6b 28 70 2c 20 4d 41 52 4b 55 50 5f Stack(p, MARKUP_
66d0: 50 29 3b 0a 20 20 70 2d 3e 77 61 6e 74 41 75 74 P);. p->wantAut
66e0: 6f 50 61 72 61 67 72 61 70 68 20 3d 20 30 3b 0a oParagraph = 0;.
66f0: 20 20 70 2d 3e 69 6e 41 75 74 6f 50 61 72 61 67 p->inAutoParag
6700: 72 61 70 68 20 3d 20 31 3b 0a 7d 0a 0a 2f 2a 0a raph = 1;.}../*.
6710: 2a 2a 20 45 6e 64 20 61 20 70 61 72 61 67 72 61 ** End a paragra
6720: 70 68 20 69 66 20 77 65 20 61 72 65 20 69 6e 20 ph if we are in
6730: 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 one..*/.static v
6740: 6f 69 64 20 65 6e 64 41 75 74 6f 50 61 72 61 67 oid endAutoParag
6750: 72 61 70 68 28 52 65 6e 64 65 72 65 72 20 2a 70 raph(Renderer *p
6760: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 69 6e 41 75 ){. if( p->inAu
6770: 74 6f 50 61 72 61 67 72 61 70 68 20 29 7b 0a 20 toParagraph ){.
6780: 20 20 20 70 6f 70 53 74 61 63 6b 54 6f 54 61 67 popStackToTag
6790: 28 70 2c 20 4d 41 52 4b 55 50 5f 50 29 3b 0a 20 (p, MARKUP_P);.
67a0: 20 20 20 70 2d 3e 69 6e 41 75 74 6f 50 61 72 61 p->inAutoPara
67b0: 67 72 61 70 68 20 3d 20 30 3b 0a 20 20 7d 0a 7d graph = 0;. }.}
67c0: 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69 ../*.** If the i
67d0: 6e 70 75 74 20 73 74 72 69 6e 67 20 63 6f 72 72 nput string corr
67e0: 65 73 70 6f 6e 64 73 20 74 6f 20 61 6e 20 65 78 esponds to an ex
67f0: 69 73 74 69 6e 67 20 62 61 73 65 6c 69 6e 65 2c isting baseline,
6800: 0a 2a 2a 20 72 65 74 75 72 6e 20 74 72 75 65 2e .** return true.
6810: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 .*/.static int i
6820: 73 5f 76 61 6c 69 64 5f 75 75 69 64 28 63 6f 6e s_valid_uuid(con
6830: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 st char *z){. i
6840: 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 nt n = strlen(z)
6850: 3b 0a 20 20 69 66 28 20 6e 3c 34 20 7c 7c 20 6e ;. if( n<4 || n
6860: 3e 55 55 49 44 5f 53 49 5a 45 20 29 20 72 65 74 >UUID_SIZE ) ret
6870: 75 72 6e 20 30 3b 0a 20 20 69 66 28 20 21 76 61 urn 0;. if( !va
6880: 6c 69 64 61 74 65 31 36 28 7a 2c 20 6e 29 20 29 lidate16(z, n) )
6890: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 return 0;. ret
68a0: 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 urn 1;.}../*.**
68b0: 7a 54 61 72 67 65 74 20 69 73 20 67 75 61 72 61 zTarget is guara
68c0: 6e 74 65 65 64 20 74 6f 20 62 65 20 61 20 55 55 nteed to be a UU
68d0: 49 44 2e 20 20 49 74 20 6d 69 67 68 74 20 62 65 ID. It might be
68e0: 20 74 68 65 20 55 55 49 44 20 6f 66 20 61 20 74 the UUID of a t
68f0: 69 63 6b 65 74 2e 0a 2a 2a 20 49 66 20 69 74 20 icket..** If it
6900: 69 73 2c 20 73 74 6f 72 65 20 69 6e 20 2a 70 43 is, store in *pC
6910: 6c 6f 73 65 64 20 61 20 74 72 75 65 20 6f 72 20 losed a true or
6920: 66 61 6c 73 65 20 64 65 70 65 6e 64 69 6e 67 20 false depending
6930: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f on whether or no
6940: 74 0a 2a 2a 20 74 68 65 20 74 69 63 6b 65 74 20 t.** the ticket
6950: 69 73 20 63 6c 6f 73 65 64 20 61 6e 64 20 72 65 is closed and re
6960: 74 75 72 6e 20 74 72 75 65 2e 20 49 66 20 7a 54 turn true. If zT
6970: 61 72 67 65 74 0a 2a 2a 20 69 73 20 6e 6f 74 20 arget.** is not
6980: 74 68 65 20 55 55 49 44 20 6f 66 20 61 20 74 69 the UUID of a ti
6990: 63 6b 65 74 2c 20 72 65 74 75 72 6e 20 66 61 6c cket, return fal
69a0: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e se..*/.static in
69b0: 74 20 69 73 5f 74 69 63 6b 65 74 28 0a 20 20 63 t is_ticket(. c
69c0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 72 67 onst char *zTarg
69d0: 65 74 2c 20 20 20 20 2f 2a 20 54 69 63 6b 65 74 et, /* Ticket
69e0: 20 55 55 49 44 20 2a 2f 0a 20 20 69 6e 74 20 2a UUID */. int *
69f0: 70 43 6c 6f 73 65 64 20 20 20 20 20 20 20 20 20 pClosed
6a00: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 /* True if th
6a10: 65 20 74 69 63 6b 65 74 20 69 73 20 63 6c 6f 73 e ticket is clos
6a20: 65 64 20 2a 2f 0a 29 7b 0a 20 20 73 74 61 74 69 ed */.){. stati
6a30: 63 20 53 74 6d 74 20 71 3b 0a 20 20 73 74 61 74 c Stmt q;. stat
6a40: 69 63 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b ic int once = 1;
6a50: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 . int n;. int
6a60: 72 63 3b 0a 20 20 63 68 61 72 20 7a 4c 6f 77 65 rc;. char zLowe
6a70: 72 5b 55 55 49 44 5f 53 49 5a 45 2b 31 5d 3b 0a r[UUID_SIZE+1];.
6a80: 20 20 63 68 61 72 20 7a 55 70 70 65 72 5b 55 55 char zUpper[UU
6a90: 49 44 5f 53 49 5a 45 2b 31 5d 3b 0a 20 20 6e 20 ID_SIZE+1];. n
6aa0: 3d 20 73 74 72 6c 65 6e 28 7a 54 61 72 67 65 74 = strlen(zTarget
6ab0: 29 3b 0a 20 20 6d 65 6d 63 70 79 28 7a 4c 6f 77 );. memcpy(zLow
6ac0: 65 72 2c 20 7a 54 61 72 67 65 74 2c 20 6e 2b 31 er, zTarget, n+1
6ad0: 29 3b 0a 20 20 63 61 6e 6f 6e 69 63 61 6c 31 36 );. canonical16
6ae0: 28 7a 4c 6f 77 65 72 2c 20 6e 2b 31 29 3b 0a 20 (zLower, n+1);.
6af0: 20 6d 65 6d 63 70 79 28 7a 55 70 70 65 72 2c 20 memcpy(zUpper,
6b00: 7a 4c 6f 77 65 72 2c 20 6e 2b 31 29 3b 0a 20 20 zLower, n+1);.
6b10: 7a 55 70 70 65 72 5b 6e 2d 31 5d 2b 2b 3b 0a 20 zUpper[n-1]++;.
6b20: 20 69 66 28 20 6f 6e 63 65 20 29 7b 0a 20 20 20 if( once ){.
6b30: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6c const char *zCl
6b40: 6f 73 65 64 45 78 70 72 20 3d 20 64 62 5f 67 65 osedExpr = db_ge
6b50: 74 28 22 74 69 63 6b 65 74 2d 63 6c 6f 73 65 64 t("ticket-closed
6b60: 2d 65 78 70 72 22 2c 20 22 73 74 61 74 75 73 3d -expr", "status=
6b70: 27 43 6c 6f 73 65 64 27 22 29 3b 0a 20 20 20 20 'Closed'");.
6b80: 64 62 5f 73 74 61 74 69 63 5f 70 72 65 70 61 72 db_static_prepar
6b90: 65 28 26 71 2c 0a 20 20 20 20 20 20 22 53 45 4c e(&q,. "SEL
6ba0: 45 43 54 20 25 73 20 46 52 4f 4d 20 74 69 63 6b ECT %s FROM tick
6bb0: 65 74 20 22 0a 20 20 20 20 20 20 22 20 57 48 45 et ". " WHE
6bc0: 52 45 20 74 6b 74 5f 75 75 69 64 3e 3d 3a 6c 77 RE tkt_uuid>=:lw
6bd0: 72 20 41 4e 44 20 74 6b 74 5f 75 75 69 64 3c 3a r AND tkt_uuid<:
6be0: 75 70 72 22 2c 0a 20 20 20 20 20 20 7a 43 6c 6f upr",. zClo
6bf0: 73 65 64 45 78 70 72 0a 20 20 20 20 29 3b 0a 20 sedExpr. );.
6c00: 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 7d once = 0;. }
6c10: 0a 20 20 64 62 5f 62 69 6e 64 5f 74 65 78 74 28 . db_bind_text(
6c20: 26 71 2c 20 22 3a 6c 77 72 22 2c 20 7a 4c 6f 77 &q, ":lwr", zLow
6c30: 65 72 29 3b 0a 20 20 64 62 5f 62 69 6e 64 5f 74 er);. db_bind_t
6c40: 65 78 74 28 26 71 2c 20 22 3a 75 70 72 22 2c 20 ext(&q, ":upr",
6c50: 7a 55 70 70 65 72 29 3b 0a 20 20 69 66 28 20 64 zUpper);. if( d
6c60: 62 5f 73 74 65 70 28 26 71 29 3d 3d 53 51 4c 49 b_step(&q)==SQLI
6c70: 54 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 72 63 TE_ROW ){. rc
6c80: 20 3d 20 31 3b 0a 20 20 20 20 2a 70 43 6c 6f 73 = 1;. *pClos
6c90: 65 64 20 3d 20 64 62 5f 63 6f 6c 75 6d 6e 5f 69 ed = db_column_i
6ca0: 6e 74 28 26 71 2c 20 30 29 3b 0a 20 20 7d 65 6c nt(&q, 0);. }el
6cb0: 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 30 3b 0a se{. rc = 0;.
6cc0: 20 20 7d 0a 20 20 64 62 5f 72 65 73 65 74 28 26 }. db_reset(&
6cd0: 71 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b q);. return rc;
6ce0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 73 6f 6c 76 .}../*.** Resolv
6cf0: 65 20 61 20 68 79 70 65 72 6c 69 6e 6b 2e 20 20 e a hyperlink.
6d00: 54 68 65 20 7a 54 61 72 67 65 74 20 61 72 67 75 The zTarget argu
6d10: 6d 65 6e 74 20 69 73 20 74 68 65 20 63 6f 6e 74 ment is the cont
6d20: 65 6e 74 20 6f 66 20 74 68 65 20 5b 2e 2e 2e 5d ent of the [...]
6d30: 0a 2a 2a 20 69 6e 20 74 68 65 20 77 69 6b 69 2e .** in the wiki.
6d40: 20 20 41 70 70 65 6e 64 20 74 6f 20 74 68 65 20 Append to the
6d50: 6f 75 74 70 75 74 20 73 74 72 69 6e 67 20 77 68 output string wh
6d60: 61 74 65 76 65 72 20 74 65 78 74 20 69 73 20 61 atever text is a
6d70: 70 70 72 6f 70 72 61 74 65 0a 2a 2a 20 66 6f 72 pproprate.** for
6d80: 20 6f 70 65 6e 69 6e 67 20 74 68 65 20 68 79 70 opening the hyp
6d90: 65 72 6c 69 6e 6b 2e 20 20 57 72 69 74 65 20 69 erlink. Write i
6da0: 6e 74 6f 20 7a 43 6c 6f 73 65 5b 30 2e 2e 2e 6e nto zClose[0...n
6db0: 43 6c 6f 73 65 2d 31 5d 20 74 65 78 74 20 74 68 Close-1] text th
6dc0: 61 74 20 77 69 6c 6c 0a 2a 2a 20 63 6c 6f 73 65 at will.** close
6dd0: 20 74 68 65 20 6d 61 72 6b 75 70 2e 0a 2a 2a 0a the markup..**.
6de0: 2a 2a 20 41 63 74 75 61 6c 6c 79 2c 20 74 68 69 ** Actually, thi
6df0: 73 20 72 6f 75 74 69 6e 65 20 6d 69 67 68 74 20 s routine might
6e00: 6f 72 20 6d 69 67 68 74 20 6e 6f 74 20 61 70 70 or might not app
6e10: 65 6e 64 20 74 68 65 20 68 79 70 65 72 6c 69 6e end the hyperlin
6e20: 6b 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 k, depending.**
6e30: 6f 6e 20 63 75 72 72 65 6e 74 20 72 65 6e 64 65 on current rende
6e40: 72 69 6e 67 20 72 75 6c 65 73 3a 20 73 70 65 63 ring rules: spec
6e50: 69 66 69 63 61 6c 6c 79 20 64 6f 65 73 20 74 68 ifically does th
6e60: 65 20 63 75 72 72 65 6e 74 20 75 73 65 72 20 68 e current user h
6e70: 61 76 65 0a 2a 2a 20 22 48 69 73 74 6f 72 79 22 ave.** "History"
6e80: 20 70 65 72 6d 69 73 73 69 6f 6e 2e 0a 2a 2f 0a permission..*/.
6e90: 73 74 61 74 69 63 20 76 6f 69 64 20 6f 70 65 6e static void open
6ea0: 48 79 70 65 72 6c 69 6e 6b 28 0a 20 20 52 65 6e Hyperlink(. Ren
6eb0: 64 65 72 65 72 20 2a 70 2c 20 20 20 20 20 20 20 derer *p,
6ec0: 20 20 20 20 20 2f 2a 20 52 65 6e 64 65 72 69 6e /* Renderin
6ed0: 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 g context */. c
6ee0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 72 67 onst char *zTarg
6ef0: 65 74 2c 20 20 20 20 2f 2a 20 48 79 70 65 72 6c et, /* Hyperl
6f00: 69 6e 6b 20 74 72 61 67 65 74 3b 20 74 65 78 74 ink traget; text
6f10: 20 77 69 74 68 69 6e 20 5b 2e 2e 2e 5d 20 2a 2f within [...] */
6f20: 0a 20 20 63 68 61 72 20 2a 7a 43 6c 6f 73 65 2c . char *zClose,
6f30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 /* Wr
6f40: 69 74 65 20 68 79 70 65 72 6c 69 6e 6b 20 63 6c ite hyperlink cl
6f50: 6f 73 69 6e 67 20 74 65 78 74 20 68 65 72 65 20 osing text here
6f60: 2a 2f 0a 20 20 69 6e 74 20 6e 43 6c 6f 73 65 20 */. int nClose
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
6f80: 42 79 74 65 73 20 61 76 61 69 6c 61 62 6c 65 20 Bytes available
6f90: 69 6e 20 7a 43 6c 6f 73 65 5b 5d 20 2a 2f 0a 29 in zClose[] */.)
6fa0: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a {. const char *
6fb0: 7a 54 65 72 6d 20 3d 20 22 3c 2f 61 3e 22 3b 0a zTerm = "</a>";.
6fc0: 20 20 61 73 73 65 72 74 28 20 6e 43 6c 6f 73 65 assert( nClose
6fd0: 3e 31 30 20 29 3b 0a 0a 20 20 69 66 28 20 73 74 >10 );.. if( st
6fe0: 72 6e 63 6d 70 28 7a 54 61 72 67 65 74 2c 20 22 rncmp(zTarget, "
6ff0: 68 74 74 70 3a 22 2c 20 35 29 3d 3d 30 0a 20 20 http:", 5)==0.
7000: 20 7c 7c 20 73 74 72 6e 63 6d 70 28 7a 54 61 72 || strncmp(zTar
7010: 67 65 74 2c 20 22 68 74 74 70 73 3a 22 2c 20 36 get, "https:", 6
7020: 29 3d 3d 30 0a 20 20 20 7c 7c 20 73 74 72 6e 63 )==0. || strnc
7030: 6d 70 28 7a 54 61 72 67 65 74 2c 20 22 66 74 70 mp(zTarget, "ftp
7040: 3a 22 2c 20 34 29 3d 3d 30 0a 20 20 20 7c 7c 20 :", 4)==0. ||
7050: 73 74 72 6e 63 6d 70 28 7a 54 61 72 67 65 74 2c strncmp(zTarget,
7060: 20 22 6d 61 69 6c 74 6f 3a 22 2c 20 37 29 3d 3d "mailto:", 7)==
7070: 30 0a 20 20 29 7b 0a 20 20 20 20 62 6c 6f 62 5f 0. ){. blob_
7080: 61 70 70 65 6e 64 66 28 70 2d 3e 70 4f 75 74 2c appendf(p->pOut,
7090: 20 22 3c 61 20 68 72 65 66 3d 5c 22 25 73 5c 22 "<a href=\"%s\"
70a0: 3e 22 2c 20 7a 54 61 72 67 65 74 29 3b 0a 20 20 >", zTarget);.
70b0: 7d 65 6c 73 65 20 69 66 28 20 7a 54 61 72 67 65 }else if( zTarge
70c0: 74 5b 30 5d 3d 3d 27 2f 27 20 29 7b 0a 20 20 20 t[0]=='/' ){.
70d0: 20 69 66 28 20 31 20 2f 2a 20 67 2e 6f 6b 48 69 if( 1 /* g.okHi
70e0: 73 74 6f 72 79 20 2a 2f 20 29 7b 0a 20 20 20 20 story */ ){.
70f0: 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 70 blob_appendf(p
7100: 2d 3e 70 4f 75 74 2c 20 22 3c 61 20 68 72 65 66 ->pOut, "<a href
7110: 3d 5c 22 25 73 25 68 5c 22 3e 22 2c 20 67 2e 7a =\"%s%h\">", g.z
7120: 42 61 73 65 55 52 4c 2c 20 7a 54 61 72 67 65 74 BaseURL, zTarget
7130: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 );. }else{.
7140: 20 20 20 20 7a 54 65 72 6d 20 3d 20 22 22 3b 0a zTerm = "";.
7150: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 }. }else if
7160: 28 20 7a 54 61 72 67 65 74 5b 30 5d 3d 3d 27 2e ( zTarget[0]=='.
7170: 27 20 29 7b 0a 20 20 20 20 69 66 28 20 31 20 2f ' ){. if( 1 /
7180: 2a 20 67 2e 6f 6b 48 69 73 74 6f 72 79 20 2a 2f * g.okHistory */
7190: 20 29 7b 0a 20 20 20 20 20 20 62 6c 6f 62 5f 61 ){. blob_a
71a0: 70 70 65 6e 64 66 28 70 2d 3e 70 4f 75 74 2c 20 ppendf(p->pOut,
71b0: 22 3c 61 20 68 72 65 66 3d 5c 22 25 68 5c 22 3e "<a href=\"%h\">
71c0: 22 2c 20 7a 54 61 72 67 65 74 29 3b 0a 20 20 20 ", zTarget);.
71d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 }else{. zT
71e0: 65 72 6d 20 3d 20 22 22 3b 0a 20 20 20 20 7d 0a erm = "";. }.
71f0: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 73 5f 76 }else if( is_v
7200: 61 6c 69 64 5f 75 75 69 64 28 7a 54 61 72 67 65 alid_uuid(zTarge
7210: 74 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 73 t) ){. int is
7220: 43 6c 6f 73 65 64 3b 0a 20 20 20 20 69 66 28 20 Closed;. if(
7230: 69 73 5f 74 69 63 6b 65 74 28 7a 54 61 72 67 65 is_ticket(zTarge
7240: 74 2c 20 26 69 73 43 6c 6f 73 65 64 29 20 29 7b t, &isClosed) ){
7250: 0a 20 20 20 20 20 20 2f 2a 20 53 70 65 63 69 61 . /* Specia
7260: 6c 20 64 69 73 70 6c 61 79 20 70 72 6f 63 65 73 l display proces
7270: 73 69 6e 67 20 66 6f 72 20 74 69 63 6b 65 74 73 sing for tickets
7280: 2e 20 20 44 69 73 70 6c 61 79 20 74 68 65 20 68 . Display the h
7290: 79 70 65 72 6c 69 6e 6b 0a 20 20 20 20 20 20 2a yperlink. *
72a0: 2a 20 61 73 20 63 72 6f 73 73 65 64 20 6f 75 74 * as crossed out
72b0: 20 69 66 20 74 68 65 20 74 69 63 6b 65 74 20 69 if the ticket i
72c0: 73 20 63 6c 6f 73 65 64 2e 0a 20 20 20 20 20 20 s closed..
72d0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 69 73 43 */. if( isC
72e0: 6c 6f 73 65 64 20 29 7b 0a 20 20 20 20 20 20 20 losed ){.
72f0: 20 69 66 28 20 67 2e 6f 6b 48 69 73 74 6f 72 79 if( g.okHistory
7300: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 62 6c ){. bl
7310: 6f 62 5f 61 70 70 65 6e 64 66 28 70 2d 3e 70 4f ob_appendf(p->pO
7320: 75 74 2c 22 3c 61 20 68 72 65 66 3d 5c 22 25 73 ut,"<a href=\"%s
7330: 2f 69 6e 66 6f 2f 25 73 5c 22 3e 3c 73 3e 22 2c /info/%s\"><s>",
7340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 . g
7350: 2e 7a 42 61 73 65 55 52 4c 2c 20 7a 54 61 72 67 .zBaseURL, zTarg
7360: 65 74 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a et. );.
7370: 20 20 20 20 20 20 20 20 20 20 7a 54 65 72 6d 20 zTerm
7380: 3d 20 22 3c 2f 73 3e 3c 2f 61 3e 22 3b 0a 20 20 = "</s></a>";.
7390: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 }else{.
73a0: 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 blob_appe
73b0: 6e 64 66 28 70 2d 3e 70 4f 75 74 2c 22 3c 73 3e ndf(p->pOut,"<s>
73c0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 54 ");. zT
73d0: 65 72 6d 20 3d 20 22 3c 2f 73 3e 22 3b 0a 20 20 erm = "</s>";.
73e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 }. }e
73f0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 66 28 lse{. if(
7400: 20 67 2e 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a g.okHistory ){.
7410: 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 blob_a
7420: 70 70 65 6e 64 66 28 70 2d 3e 70 4f 75 74 2c 22 ppendf(p->pOut,"
7430: 3c 61 20 68 72 65 66 3d 5c 22 25 73 2f 69 6e 66 <a href=\"%s/inf
7440: 6f 2f 25 73 5c 22 3e 22 2c 0a 20 20 20 20 20 20 o/%s\">",.
7450: 20 20 20 20 20 20 20 20 67 2e 7a 42 61 73 65 55 g.zBaseU
7460: 52 4c 2c 20 7a 54 61 72 67 65 74 0a 20 20 20 20 RL, zTarget.
7470: 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 20 );.
7480: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 }else{.
7490: 20 20 7a 54 65 72 6d 20 3d 20 22 22 3b 0a 20 20 zTerm = "";.
74a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a }. }.
74b0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 67 2e }else if( g.
74c0: 6f 6b 48 69 73 74 6f 72 79 20 29 7b 0a 20 20 20 okHistory ){.
74d0: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 28 blob_appendf(
74e0: 70 2d 3e 70 4f 75 74 2c 20 22 3c 61 20 68 72 65 p->pOut, "<a hre
74f0: 66 3d 5c 22 25 73 2f 69 6e 66 6f 2f 25 73 5c 22 f=\"%s/info/%s\"
7500: 3e 22 2c 20 67 2e 7a 42 61 73 65 55 52 4c 2c 20 >", g.zBaseURL,
7510: 7a 54 61 72 67 65 74 29 3b 0a 20 20 20 20 7d 0a zTarget);. }.
7520: 20 20 7d 65 6c 73 65 20 69 66 28 20 77 69 6b 69 }else if( wiki
7530: 5f 6e 61 6d 65 5f 69 73 5f 77 65 6c 6c 66 6f 72 _name_is_wellfor
7540: 6d 65 64 28 7a 54 61 72 67 65 74 29 20 29 7b 0a med(zTarget) ){.
7550: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 66 blob_appendf
7560: 28 70 2d 3e 70 4f 75 74 2c 20 22 3c 61 20 68 72 (p->pOut, "<a hr
7570: 65 66 3d 5c 22 25 73 2f 77 69 6b 69 3f 6e 61 6d ef=\"%s/wiki?nam
7580: 65 3d 25 54 5c 22 3e 22 2c 20 67 2e 7a 42 61 73 e=%T\">", g.zBas
7590: 65 55 52 4c 2c 20 7a 54 61 72 67 65 74 29 3b 0a eURL, zTarget);.
75a0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 6c 6f }else{. blo
75b0: 62 5f 61 70 70 65 6e 64 66 28 70 2d 3e 70 4f 75 b_appendf(p->pOu
75c0: 74 2c 20 22 5b 62 61 64 2d 6c 69 6e 6b 3a 20 25 t, "[bad-link: %
75d0: 68 5d 22 2c 20 7a 54 61 72 67 65 74 29 3b 0a 20 h]", zTarget);.
75e0: 20 20 20 7a 54 65 72 6d 20 3d 20 22 22 3b 0a 20 zTerm = "";.
75f0: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 73 74 72 }. assert( str
7600: 6c 65 6e 28 7a 54 65 72 6d 29 3c 6e 43 6c 6f 73 len(zTerm)<nClos
7610: 65 20 29 3b 0a 20 20 73 74 72 63 70 79 28 7a 43 e );. strcpy(zC
7620: 6c 6f 73 65 2c 20 7a 54 65 72 6d 29 3b 0a 7d 0a lose, zTerm);.}.
7630: 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 ./*.** Check to
7640: 73 65 65 20 69 66 20 74 68 65 20 67 69 76 65 6e see if the given
7650: 20 70 61 72 73 65 64 20 6d 61 72 6b 75 70 20 69 parsed markup i
7660: 73 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a s the correct.**
7670: 20 3c 2f 76 65 72 62 61 74 69 6d 3e 20 74 61 67 </verbatim> tag
7680: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 ..*/.static int
7690: 65 6e 64 56 65 72 62 61 74 69 6d 28 52 65 6e 64 endVerbatim(Rend
76a0: 65 72 65 72 20 2a 70 2c 20 50 61 72 73 65 64 4d erer *p, ParsedM
76b0: 61 72 6b 75 70 20 2a 70 4d 61 72 6b 75 70 29 7b arkup *pMarkup){
76c0: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 61 73 . char *z;. as
76d0: 73 65 72 74 28 20 70 2d 3e 69 6e 56 65 72 62 61 sert( p->inVerba
76e0: 74 69 6d 20 29 3b 0a 20 20 69 66 28 20 70 4d 61 tim );. if( pMa
76f0: 72 6b 75 70 2d 3e 69 43 6f 64 65 21 3d 4d 41 52 rkup->iCode!=MAR
7700: 4b 55 50 5f 56 45 52 42 41 54 49 4d 20 29 20 72 KUP_VERBATIM ) r
7710: 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 28 20 21 eturn 0;. if( !
7720: 70 4d 61 72 6b 75 70 2d 3e 65 6e 64 54 61 67 20 pMarkup->endTag
7730: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 69 66 ) return 0;. if
7740: 28 20 70 2d 3e 7a 56 65 72 62 61 74 69 6d 49 64 ( p->zVerbatimId
7750: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a ==0 ) return 1;.
7760: 20 20 69 66 28 20 70 4d 61 72 6b 75 70 2d 3e 6e if( pMarkup->n
7770: 41 74 74 72 21 3d 31 20 29 20 72 65 74 75 72 6e Attr!=1 ) return
7780: 20 30 3b 0a 20 20 7a 20 3d 20 70 4d 61 72 6b 75 0;. z = pMarku
7790: 70 2d 3e 61 41 74 74 72 5b 30 5d 2e 7a 56 61 6c p->aAttr[0].zVal
77a0: 75 65 3b 0a 20 20 72 65 74 75 72 6e 20 73 74 72 ue;. return str
77b0: 63 6d 70 28 7a 2c 20 70 2d 3e 7a 56 65 72 62 61 cmp(z, p->zVerba
77c0: 74 69 6d 49 64 29 3d 3d 30 3b 0a 7d 0a 0a 2f 2a timId)==0;.}../*
77d0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 4d .** Return the M
77e0: 55 54 59 50 45 20 66 6f 72 20 74 68 65 20 74 6f UTYPE for the to
77f0: 70 20 6f 66 20 74 68 65 20 73 74 61 63 6b 2e 0a p of the stack..
7800: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 74 */.static int st
7810: 61 63 6b 54 6f 70 54 79 70 65 28 52 65 6e 64 65 ackTopType(Rende
7820: 72 65 72 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 rer *p){. if( p
7830: 2d 3e 6e 53 74 61 63 6b 3c 3d 30 20 29 20 72 65 ->nStack<=0 ) re
7840: 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e turn 0;. return
7850: 20 61 4d 61 72 6b 75 70 5b 70 2d 3e 61 53 74 61 aMarkup[p->aSta
7860: 63 6b 5b 70 2d 3e 6e 53 74 61 63 6b 2d 31 5d 2e ck[p->nStack-1].
7870: 69 43 6f 64 65 5d 2e 69 54 79 70 65 3b 0a 7d 0a iCode].iType;.}.
7880: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 ./*.** Convert t
7890: 68 65 20 77 69 6b 69 20 69 6e 20 7a 5b 5d 20 69 he wiki in z[] i
78a0: 6e 74 6f 20 68 74 6d 6c 20 69 6e 20 74 68 65 20 nto html in the
78b0: 72 65 6e 64 65 72 65 72 20 70 2e 20 20 54 68 65 renderer p. The
78c0: 0a 2a 2a 20 72 65 6e 64 65 72 65 72 20 68 61 73 .** renderer has
78d0: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e already been in
78e0: 69 74 69 61 6c 69 7a 65 64 2e 0a 2a 2a 0a 2a 2a itialized..**.**
78f0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 This routine wi
7900: 6c 6c 20 70 72 6f 62 61 62 6c 79 20 6d 6f 64 69 ll probably modi
7910: 66 79 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f fy the content o
7920: 66 20 7a 5b 5d 2e 0a 2a 2f 0a 73 74 61 74 69 63 f z[]..*/.static
7930: 20 76 6f 69 64 20 77 69 6b 69 5f 72 65 6e 64 65 void wiki_rende
7940: 72 28 52 65 6e 64 65 72 65 72 20 2a 70 2c 20 63 r(Renderer *p, c
7950: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 74 har *z){. int t
7960: 6f 6b 65 6e 54 79 70 65 3b 0a 20 20 50 61 72 73 okenType;. Pars
7970: 65 64 4d 61 72 6b 75 70 20 6d 61 72 6b 75 70 3b edMarkup markup;
7980: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 . int n;. int
7990: 69 6e 6c 69 6e 65 4f 6e 6c 79 20 3d 20 28 70 2d inlineOnly = (p-
79a0: 3e 73 74 61 74 65 20 26 20 49 4e 4c 49 4e 45 5f >state & INLINE_
79b0: 4d 41 52 4b 55 50 5f 4f 4e 4c 59 29 21 3d 30 3b MARKUP_ONLY)!=0;
79c0: 0a 0a 20 20 77 68 69 6c 65 28 20 7a 5b 30 5d 20 .. while( z[0]
79d0: 29 7b 0a 20 20 20 20 6e 20 3d 20 6e 65 78 74 54 ){. n = nextT
79e0: 6f 6b 65 6e 28 7a 2c 20 70 2c 20 26 74 6f 6b 65 oken(z, p, &toke
79f0: 6e 54 79 70 65 29 3b 0a 20 20 20 20 70 2d 3e 73 nType);. p->s
7a00: 74 61 74 65 20 26 3d 20 7e 28 41 54 5f 4e 45 57 tate &= ~(AT_NEW
7a10: 4c 49 4e 45 7c 41 54 5f 50 41 52 41 47 52 41 50 LINE|AT_PARAGRAP
7a20: 48 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 H);. switch(
7a30: 74 6f 6b 65 6e 54 79 70 65 20 29 7b 0a 0a 20 20 tokenType ){..
7a40: 20 20 20 20 63 61 73 65 20 54 4f 4b 45 4e 5f 43 case TOKEN_C
7a50: 4f 4d 4d 45 4e 54 3a 20 7b 0a 20 20 20 20 20 20 OMMENT: {.
7a60: 20 20 69 66 20 28 70 2d 3e 69 6e 56 65 72 62 61 if (p->inVerba
7a70: 74 69 6d 29 7b 0a 20 20 20 20 20 20 20 20 20 20 tim){.
7a80: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 70 blob_append(p->p
7a90: 4f 75 74 2c 20 68 74 6d 6c 69 7a 65 28 7a 2c 20 Out, htmlize(z,
7aa0: 6e 29 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 n), -1);.
7ab0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 } else {.
7ac0: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 blob_append(
7ad0: 70 2d 3e 70 4f 75 74 2c 20 7a 2c 20 6e 29 3b 0a p->pOut, z, n);.
7ae0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
7af0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d break;. }
7b00: 0a 20 20 20 20 20 20 63 61 73 65 20 54 4f 4b 45 . case TOKE
7b10: 4e 5f 50 41 52 41 47 52 41 50 48 3a 20 7b 0a 20 N_PARAGRAPH: {.
7b20: 20 20 20 20 20 20 20 69 66 28 20 69 6e 6c 69 6e if( inlin
7b30: 65 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 20 20 20 eOnly ){.
7b40: 20 20 20 2f 2a 20 62 6c 6f 62 5f 61 70 70 65 6e /* blob_appen
7b50: 64 28 70 2d 3e 70 4f 75 74 2c 20 22 20 26 70 61 d(p->pOut, " &pa
7b60: 72 61 3b 20 22 2c 20 2d 31 29 3b 20 2a 2f 0a 20 ra; ", -1); */.
7b70: 20 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 blob_ap
7b80: 70 65 6e 64 28 70 2d 3e 70 4f 75 74 2c 20 22 20 pend(p->pOut, "
7b90: 26 6e 62 73 70 3b 26 6e 62 73 70 3b 20 22 2c 20 ",
7ba0: 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c -1);. }el
7bb0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 se{. if
7bc0: 28 20 70 2d 3e 77 69 6b 69 4c 69 73 74 20 29 7b ( p->wikiList ){
7bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 6f 70 . pop
7be0: 53 74 61 63 6b 54 6f 54 61 67 28 70 2c 20 70 2d StackToTag(p, p-
7bf0: 3e 77 69 6b 69 4c 69 73 74 29 3b 0a 20 20 20 20 >wikiList);.
7c00: 20 20 20 20 20 20 20 20 70 2d 3e 77 69 6b 69 4c p->wikiL
7c10: 69 73 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 ist = 0;.
7c20: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 65 }. e
7c30: 6e 64 41 75 74 6f 50 61 72 61 67 72 61 70 68 28 ndAutoParagraph(
7c40: 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 62 6c p);. bl
7c50: 6f 62 5f 61 70 70 65 6e 64 66 28 70 2d 3e 70 4f ob_appendf(p->pO
7c60: 75 74 2c 20 22 5c 6e 5c 6e 22 2c 20 31 29 3b 0a ut, "\n\n", 1);.
7c70: 20 20 20 20 20 20 20 20 20 20 70 2d 3e 77 61 6e p->wan
7c80: 74 41 75 74 6f 50 61 72 61 67 72 61 70 68 20 3d tAutoParagraph =
7c90: 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 1;. }.
7ca0: 20 20 20 20 20 20 70 2d 3e 73 74 61 74 65 20 7c p->state |
7cb0: 3d 20 41 54 5f 50 41 52 41 47 52 41 50 48 7c 41 = AT_PARAGRAPH|A
7cc0: 54 5f 4e 45 57 4c 49 4e 45 3b 0a 20 20 20 20 20 T_NEWLINE;.
7cd0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 break;.
7ce0: 7d 0a 20 20 20 20 20 20 63 61 73 65 20 54 4f 4b }. case TOK
7cf0: 45 4e 5f 4e 45 57 4c 49 4e 45 3a 20 7b 0a 20 20 EN_NEWLINE: {.
7d00: 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e blob_appen
7d10: 64 28 70 2d 3e 70 4f 75 74 2c 20 22 5c 6e 22 2c d(p->pOut, "\n",
7d20: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 1);. p->
7d30: 73 74 61 74 65 20 7c 3d 20 41 54 5f 4e 45 57 4c state |= AT_NEWL
7d40: 49 4e 45 3b 0a 20 20 20 20 20 20 20 20 62 72 65 INE;. bre
7d50: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 ak;. }.
7d60: 20 20 63 61 73 65 20 54 4f 4b 45 4e 5f 42 55 4c case TOKEN_BUL
7d70: 4c 45 54 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 LET: {. i
7d80: 66 28 20 69 6e 6c 69 6e 65 4f 6e 6c 79 20 29 7b f( inlineOnly ){
7d90: 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 5f . blob_
7da0: 61 70 70 65 6e 64 28 70 2d 3e 70 4f 75 74 2c 20 append(p->pOut,
7db0: 22 20 26 62 75 6c 6c 3b 20 22 2c 20 2d 31 29 3b " • ", -1);
7dc0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a . }else{.
7dd0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 2d if( p-
7de0: 3e 77 69 6b 69 4c 69 73 74 21 3d 4d 41 52 4b 55 >wikiList!=MARKU
7df0: 50 5f 55 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 P_UL ){.
7e00: 20 20 20 20 69 66 28 20 70 2d 3e 77 69 6b 69 4c if( p->wikiL
7e10: 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 ist ){.
7e20: 20 20 20 20 20 70 6f 70 53 74 61 63 6b 54 6f 54 popStackToT
7e30: 61 67 28 70 2c 20 70 2d 3e 77 69 6b 69 4c 69 73 ag(p, p->wikiLis
7e40: 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 t);.
7e50: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 }. pu
7e60: 73 68 53 74 61 63 6b 28 70 2c 20 4d 41 52 4b 55 shStack(p, MARKU
7e70: 50 5f 55 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 P_UL);.
7e80: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 blob_append(p
7e90: 2d 3e 70 4f 75 74 2c 20 22 3c 75 6c 3e 22 2c 20 ->pOut, "<ul>",
7ea0: 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 4);.
7eb0: 70 2d 3e 77 69 6b 69 4c 69 73 74 20 3d 20 4d 41 p->wikiList = MA
7ec0: 52 4b 55 50 5f 55 4c 3b 0a 20 20 20 20 20 20 20 RKUP_UL;.
7ed0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 70 }. p
7ee0: 6f 70 53 74 61 63 6b 54 6f 54 61 67 28 70 2c 20 opStackToTag(p,
7ef0: 4d 41 52 4b 55 50 5f 4c 49 29 3b 0a 20 20 20 20 MARKUP_LI);.
7f00: 20 20 20 20 20 20 73 74 61 72 74 41 75 74 6f 50 startAutoP
7f10: 61 72 61 67 72 61 70 68 28 70 29 3b 0a 20 20 20 aragraph(p);.
7f20: 20 20 20 20 20 20 20 70 75 73 68 53 74 61 63 6b pushStack
7f30: 28 70 2c 20 4d 41 52 4b 55 50 5f 4c 49 29 3b 0a (p, MARKUP_LI);.
7f40: 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 blob_a
7f50: 70 70 65 6e 64 28 70 2d 3e 70 4f 75 74 2c 20 22 ppend(p->pOut, "
7f60: 3c 6c 69 3e 22 2c 20 34 29 3b 0a 20 20 20 20 20 <li>", 4);.
7f70: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65 }. bre
7f80: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 ak;. }.
7f90: 20 20 63 61 73 65 20 54 4f 4b 45 4e 5f 45 4e 55 case TOKEN_ENU
7fa0: 4d 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 M: {. if(
7fb0: 20 69 6e 6c 69 6e 65 4f 6e 6c 79 20 29 7b 0a 20 inlineOnly ){.
7fc0: 20 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 blob_ap
7fd0: 70 65 6e 64 66 28 70 2d 3e 70 4f 75 74 2c 20 22 pendf(p->pOut, "
7fe0: 20 28 25 64 29 20 22 2c 20 61 74 6f 69 28 7a 29 (%d) ", atoi(z)
7ff0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 );. }else
8000: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 {. if(
8010: 70 2d 3e 77 69 6b 69 4c 69 73 74 21 3d 4d 41 52 p->wikiList!=MAR
8020: 4b 55 50 5f 4f 4c 20 29 7b 0a 20 20 20 20 20 20 KUP_OL ){.
8030: 20 20 20 20 20 20 69 66 28 20 70 2d 3e 77 69 6b if( p->wik
8040: 69 4c 69 73 74 20 29 7b 0a 20 20 20 20 20 20 20 iList ){.
8050: 20 20 20 20 20 20 20 70 6f 70 53 74 61 63 6b 54 popStackT
8060: 6f 54 61 67 28 70 2c 20 70 2d 3e 77 69 6b 69 4c oTag(p, p->wikiL
8070: 69 73 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 ist);.
8080: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.
8090: 70 75 73 68 53 74 61 63 6b 28 70 2c 20 4d 41 52 pushStack(p, MAR
80a0: 4b 55 50 5f 4f 4c 29 3b 0a 20 20 20 20 20 20 20 KUP_OL);.
80b0: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 blob_append
80c0: 28 70 2d 3e 70 4f 75 74 2c 20 22 3c 6f 6c 3e 22 (p->pOut, "<ol>"
80d0: 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 , 4);.
80e0: 20 20 70 2d 3e 77 69 6b 69 4c 69 73 74 20 3d 20 p->wikiList =
80f0: 4d 41 52 4b 55 50 5f 4f 4c 3b 0a 20 20 20 20 20 MARKUP_OL;.
8100: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 }.
8110: 20 70 6f 70 53 74 61 63 6b 54 6f 54 61 67 28 70 popStackToTag(p
8120: 2c 20 4d 41 52 4b 55 50 5f 4c 49 29 3b 0a 20 20 , MARKUP_LI);.
8130: 20 20 20 20 20 20 20 20 73 74 61 72 74 41 75 74 startAut
8140: 6f 50 61 72 61 67 72 61 70 68 28 70 29 3b 0a 20 oParagraph(p);.
8150: 20 20 20 20 20 20 20 20 20 70 75 73 68 53 74 61 pushSta
8160: 63 6b 28 70 2c 20 4d 41 52 4b 55 50 5f 4c 49 29 ck(p, MARKUP_LI)
8170: 3b 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 ;. blob
8180: 5f 61 70 70 65 6e 64 66 28 70 2d 3e 70 4f 75 74 _appendf(p->pOut
8190: 2c 20 22 3c 6c 69 20 76 61 6c 75 65 3d 5c 22 25 , "<li value=\"%
81a0: 64 5c 22 3e 22 2c 20 61 74 6f 69 28 7a 29 29 3b d\">", atoi(z));
81b0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 . }.
81c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 break;.
81d0: 7d 0a 20 20 20 20 20 20 63 61 73 65 20 54 4f 4b }. case TOK
81e0: 45 4e 5f 49 4e 44 45 4e 54 3a 20 7b 0a 20 20 20 EN_INDENT: {.
81f0: 20 20 20 20 20 69 66 28 20 21 69 6e 6c 69 6e 65 if( !inline
8200: 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 20 20 20 20 Only ){.
8210: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 77 69 6b assert( p->wik
8220: 69 4c 69 73 74 3d 3d 30 20 29 3b 0a 20 20 20 20 iList==0 );.
8230: 20 20 20 20 20 20 70 75 73 68 53 74 61 63 6b 28 pushStack(
8240: 70 2c 20 4d 41 52 4b 55 50 5f 42 4c 4f 43 4b 51 p, MARKUP_BLOCKQ
8250: 55 4f 54 45 29 3b 0a 20 20 20 20 20 20 20 20 20 UOTE);.
8260: 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e blob_append(p->
8270: 70 4f 75 74 2c 20 22 3c 62 6c 6f 63 6b 71 75 6f pOut, "<blockquo
8280: 74 65 3e 22 2c 20 2d 31 29 3b 0a 20 20 20 20 20 te>", -1);.
8290: 20 20 20 20 20 70 2d 3e 77 61 6e 74 41 75 74 6f p->wantAuto
82a0: 50 61 72 61 67 72 61 70 68 20 3d 20 30 3b 0a 20 Paragraph = 0;.
82b0: 20 20 20 20 20 20 20 20 20 70 2d 3e 77 69 6b 69 p->wiki
82c0: 4c 69 73 74 20 3d 20 4d 41 52 4b 55 50 5f 42 4c List = MARKUP_BL
82d0: 4f 43 4b 51 55 4f 54 45 3b 0a 20 20 20 20 20 20 OCKQUOTE;.
82e0: 20 20 7d 0a 20 20 20 20 20 20 20 20 62 72 65 61 }. brea
82f0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 k;. }.
8300: 20 63 61 73 65 20 54 4f 4b 45 4e 5f 43 48 41 52 case TOKEN_CHAR
8310: 41 43 54 45 52 3a 20 7b 0a 20 20 20 20 20 20 20 ACTER: {.
8320: 20 73 74 61 72 74 41 75 74 6f 50 61 72 61 67 72 startAutoParagr
8330: 61 70 68 28 70 29 3b 0a 20 20 20 20 20 20 20 20 aph(p);.
8340: 69 66 28 20 7a 5b 30 5d 3d 3d 27 3c 27 20 29 7b if( z[0]=='<' ){
8350: 0a 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 5f . blob_
8360: 61 70 70 65 6e 64 28 70 2d 3e 70 4f 75 74 2c 20 append(p->pOut,
8370: 22 26 6c 74 3b 22 2c 20 34 29 3b 0a 20 20 20 20 "<", 4);.
8380: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 5b }else if( z[
8390: 30 5d 3d 3d 27 26 27 20 29 7b 0a 20 20 20 20 20 0]=='&' ){.
83a0: 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 blob_append
83b0: 28 70 2d 3e 70 4f 75 74 2c 20 22 26 61 6d 70 3b (p->pOut, "&
83c0: 22 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20 7d ", 5);. }
83d0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a . break;.
83e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 }. ca
83f0: 73 65 20 54 4f 4b 45 4e 5f 4c 49 4e 4b 3a 20 7b se TOKEN_LINK: {
8400: 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a . char *z
8410: 54 61 72 67 65 74 3b 0a 20 20 20 20 20 20 20 20 Target;.
8420: 63 68 61 72 20 2a 7a 44 69 73 70 6c 61 79 20 3d char *zDisplay =
8430: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 0;. int
8440: 69 2c 20 6a 3b 0a 20 20 20 20 20 20 20 20 69 6e i, j;. in
8450: 74 20 73 61 76 65 64 53 74 61 74 65 3b 0a 20 20 t savedState;.
8460: 20 20 20 20 20 20 63 68 61 72 20 7a 43 6c 6f 73 char zClos
8470: 65 5b 32 30 5d 3b 0a 0a 20 20 20 20 20 20 20 20 e[20];..
8480: 73 74 61 72 74 41 75 74 6f 50 61 72 61 67 72 61 startAutoParagra
8490: 70 68 28 70 29 3b 0a 20 20 20 20 20 20 20 20 7a ph(p);. z
84a0: 54 61 72 67 65 74 20 3d 20 26 7a 5b 31 5d 3b 0a Target = &z[1];.
84b0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 3d 31 3b for(i=1;
84c0: 20 7a 5b 69 5d 20 26 26 20 7a 5b 69 5d 21 3d 27 z[i] && z[i]!='
84d0: 5d 27 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 ]'; i++){.
84e0: 20 20 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 7c if( z[i]=='|
84f0: 27 20 26 26 20 7a 44 69 73 70 6c 61 79 3d 3d 30 ' && zDisplay==0
8500: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 ){.
8510: 7a 44 69 73 70 6c 61 79 20 3d 20 26 7a 5b 69 2b zDisplay = &z[i+
8520: 31 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 1];.
8530: 7a 5b 69 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 z[i] = 0;.
8540: 20 20 20 20 20 20 66 6f 72 28 6a 3d 69 2d 31 3b for(j=i-1;
8550: 20 6a 3e 30 20 26 26 20 69 73 73 70 61 63 65 28 j>0 && isspace(
8560: 7a 5b 6a 5d 29 3b 20 6a 2d 2d 29 7b 20 7a 5b 6a z[j]); j--){ z[j
8570: 5d 20 3d 20 30 3b 20 7d 0a 20 20 20 20 20 20 20 ] = 0; }.
8580: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 }. }.
8590: 20 20 20 20 20 20 20 7a 5b 69 5d 20 3d 20 30 3b z[i] = 0;
85a0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 44 69 . if( zDi
85b0: 73 70 6c 61 79 3d 3d 30 20 29 7b 0a 20 20 20 20 splay==0 ){.
85c0: 20 20 20 20 20 20 7a 44 69 73 70 6c 61 79 20 3d zDisplay =
85d0: 20 7a 54 61 72 67 65 74 3b 0a 20 20 20 20 20 20 zTarget;.
85e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 }else{.
85f0: 20 20 20 77 68 69 6c 65 28 20 69 73 73 70 61 63 while( isspac
8600: 65 28 2a 7a 44 69 73 70 6c 61 79 29 20 29 20 7a e(*zDisplay) ) z
8610: 44 69 73 70 6c 61 79 2b 2b 3b 0a 20 20 20 20 20 Display++;.
8620: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6f 70 65 }. ope
8630: 6e 48 79 70 65 72 6c 69 6e 6b 28 70 2c 20 7a 54 nHyperlink(p, zT
8640: 61 72 67 65 74 2c 20 7a 43 6c 6f 73 65 2c 20 73 arget, zClose, s
8650: 69 7a 65 6f 66 28 7a 43 6c 6f 73 65 29 29 3b 0a izeof(zClose));.
8660: 20 20 20 20 20 20 20 20 73 61 76 65 64 53 74 61 savedSta
8670: 74 65 20 3d 20 70 2d 3e 73 74 61 74 65 3b 0a 20 te = p->state;.
8680: 20 20 20 20 20 20 20 70 2d 3e 73 74 61 74 65 20 p->state
8690: 26 3d 20 7e 41 4c 4c 4f 57 5f 57 49 4b 49 3b 0a &= ~ALLOW_WIKI;.
86a0: 20 20 20 20 20 20 20 20 70 2d 3e 73 74 61 74 65 p->state
86b0: 20 7c 3d 20 46 4f 4e 54 5f 4d 41 52 4b 55 50 5f |= FONT_MARKUP_
86c0: 4f 4e 4c 59 3b 0a 20 20 20 20 20 20 20 20 77 69 ONLY;. wi
86d0: 6b 69 5f 72 65 6e 64 65 72 28 70 2c 20 7a 44 69 ki_render(p, zDi
86e0: 73 70 6c 61 79 29 3b 0a 20 20 20 20 20 20 20 20 splay);.
86f0: 70 2d 3e 73 74 61 74 65 20 3d 20 73 61 76 65 64 p->state = saved
8700: 53 74 61 74 65 3b 0a 20 20 20 20 20 20 20 20 62 State;. b
8710: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 70 4f lob_append(p->pO
8720: 75 74 2c 20 7a 43 6c 6f 73 65 2c 20 2d 31 29 3b ut, zClose, -1);
8730: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a . break;.
8740: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 63 61 }. ca
8750: 73 65 20 54 4f 4b 45 4e 5f 54 45 58 54 3a 20 7b se TOKEN_TEXT: {
8760: 0a 20 20 20 20 20 20 20 20 73 74 61 72 74 41 75 . startAu
8770: 74 6f 50 61 72 61 67 72 61 70 68 28 70 29 3b 0a toParagraph(p);.
8780: 20 20 20 20 20 20 20 20 62 6c 6f 62 5f 61 70 70 blob_app
8790: 65 6e 64 28 70 2d 3e 70 4f 75 74 2c 20 7a 2c 20 end(p->pOut, z,
87a0: 6e 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 n);. brea
87b0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 k;. }.
87c0: 20 63 61 73 65 20 54 4f 4b 45 4e 5f 4d 41 52 4b case TOKEN_MARK
87d0: 55 50 3a 20 7b 0a 20 20 20 20 20 20 20 20 63 6f UP: {. co
87e0: 6e 73 74 20 63 68 61 72 20 2a 7a 49 64 3b 0a 20 nst char *zId;.
87f0: 20 20 20 20 20 20 20 69 6e 74 20 69 44 69 76 3b int iDiv;
8800: 0a 20 20 20 20 20 20 20 20 70 61 72 73 65 4d 61 . parseMa
8810: 72 6b 75 70 28 26 6d 61 72 6b 75 70 2c 20 7a 29 rkup(&markup, z)
8820: 3b 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 ;.. /* Ma
8830: 72 6b 75 70 20 6f 66 20 74 68 65 20 66 6f 72 6d rkup of the form
8840: 20 3c 2f 64 69 76 20 69 64 3d 49 44 3e 20 77 68 </div id=ID> wh
8850: 65 72 65 20 74 68 65 72 65 20 69 73 20 61 20 6d ere there is a m
8860: 61 74 63 68 69 6e 67 0a 20 20 20 20 20 20 20 20 atching.
8870: 2a 2a 20 49 44 20 73 6f 6d 65 77 68 65 72 65 20 ** ID somewhere
8880: 6f 6e 20 74 68 65 20 73 74 61 63 6b 2e 20 20 45 on the stack. E
8890: 78 69 74 20 74 68 65 20 76 65 72 62 61 74 69 6d xit the verbatim
88a0: 20 69 66 20 77 65 72 65 20 61 72 65 20 69 6e 0a if were are in.
88b0: 20 20 20 20 20 20 20 20 2a 2a 20 69 74 2e 20 20 ** it.
88c0: 50 6f 70 20 74 68 65 20 73 74 61 63 6b 20 75 70 Pop the stack up
88d0: 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 to the matching
88e0: 20 3c 64 69 76 3e 2e 20 20 44 69 73 63 61 72 64 <div>. Discard
88f0: 20 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 the. **
8900: 3c 2f 64 69 76 3e 0a 20 20 20 20 20 20 20 20 2a </div>. *
8910: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 6d 61 /. if( ma
8920: 72 6b 75 70 2e 69 43 6f 64 65 3d 3d 4d 41 52 4b rkup.iCode==MARK
8930: 55 50 5f 44 49 56 20 26 26 20 6d 61 72 6b 75 70 UP_DIV && markup
8940: 2e 65 6e 64 54 61 67 20 26 26 0a 20 20 20 20 20 .endTag &&.
8950: 20 20 20 20 20 20 20 20 28 7a 49 64 20 3d 20 6d (zId = m
8960: 61 72 6b 75 70 49 64 28 26 6d 61 72 6b 75 70 29 arkupId(&markup)
8970: 29 21 3d 30 20 26 26 0a 20 20 20 20 20 20 20 20 )!=0 &&.
8980: 20 20 20 20 20 28 69 44 69 76 20 3d 20 66 69 6e (iDiv = fin
8990: 64 54 61 67 57 69 74 68 49 64 28 70 2c 20 4d 41 dTagWithId(p, MA
89a0: 52 4b 55 50 5f 44 49 56 2c 20 7a 49 64 29 29 3e RKUP_DIV, zId))>
89b0: 3d 30 0a 20 20 20 20 20 20 20 20 29 7b 0a 20 20 =0. ){.
89c0: 20 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 if( p->i
89d0: 6e 56 65 72 62 61 74 69 6d 20 29 7b 0a 20 20 20 nVerbatim ){.
89e0: 20 20 20 20 20 20 20 20 20 70 2d 3e 69 6e 56 65 p->inVe
89f0: 72 62 61 74 69 6d 20 3d 20 30 3b 0a 20 20 20 20 rbatim = 0;.
8a00: 20 20 20 20 20 20 20 20 70 2d 3e 73 74 61 74 65 p->state
8a10: 20 3d 20 70 2d 3e 70 72 65 56 65 72 62 53 74 61 = p->preVerbSta
8a20: 74 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 te;.
8a30: 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 70 blob_append(p->p
8a40: 4f 75 74 2c 20 22 3c 2f 70 72 65 3e 22 2c 20 36 Out, "</pre>", 6
8a50: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 );. }.
8a60: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20 while(
8a70: 70 2d 3e 6e 53 74 61 63 6b 3e 69 44 69 76 2b 31 p->nStack>iDiv+1
8a80: 20 29 20 70 6f 70 53 74 61 63 6b 28 70 29 3b 0a ) popStack(p);.
8a90: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 2d if( p-
8aa0: 3e 61 53 74 61 63 6b 5b 69 44 69 76 5d 2e 61 6c >aStack[iDiv].al
8ab0: 6c 6f 77 57 69 6b 69 20 29 7b 0a 20 20 20 20 20 lowWiki ){.
8ac0: 20 20 20 20 20 20 20 70 2d 3e 73 74 61 74 65 20 p->state
8ad0: 7c 3d 20 41 4c 4c 4f 57 5f 57 49 4b 49 3b 0a 20 |= ALLOW_WIKI;.
8ae0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a }else{.
8af0: 20 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 73 p->s
8b00: 74 61 74 65 20 26 3d 20 7e 41 4c 4c 4f 57 5f 57 tate &= ~ALLOW_W
8b10: 49 4b 49 3b 0a 20 20 20 20 20 20 20 20 20 20 7d IKI;. }
8b20: 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 . asser
8b30: 74 28 20 70 2d 3e 6e 53 74 61 63 6b 3d 3d 69 44 t( p->nStack==iD
8b40: 69 76 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 iv+1 );.
8b50: 20 20 70 2d 3e 6e 53 74 61 63 6b 2d 2d 3b 0a 20 p->nStack--;.
8b60: 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 }else..
8b70: 20 20 20 20 20 20 2f 2a 20 49 66 20 77 69 74 68 /* If with
8b80: 69 6e 20 3c 76 65 72 62 61 74 69 6d 20 69 64 3d in <verbatim id=
8b90: 49 44 3e 20 69 67 6e 6f 72 65 20 65 76 65 72 79 ID> ignore every
8ba0: 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e thing other than
8bb0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 3c 2f 76 65 . ** </ve
8bc0: 72 62 61 74 69 6d 20 69 64 3d 49 44 3e 20 61 6e rbatim id=ID> an
8bd0: 64 20 74 68 65 20 3c 2f 64 65 76 20 69 64 3d 49 d the </dev id=I
8be0: 44 32 3e 20 61 62 6f 76 65 2e 0a 20 20 20 20 20 D2> above..
8bf0: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 */. if
8c00: 28 20 70 2d 3e 69 6e 56 65 72 62 61 74 69 6d 20 ( p->inVerbatim
8c10: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 ){. if(
8c20: 20 65 6e 64 56 65 72 62 61 74 69 6d 28 70 2c 20 endVerbatim(p,
8c30: 26 6d 61 72 6b 75 70 29 20 29 7b 0a 20 20 20 20 &markup) ){.
8c40: 20 20 20 20 20 20 20 20 70 2d 3e 69 6e 56 65 72 p->inVer
8c50: 62 61 74 69 6d 20 3d 20 30 3b 0a 20 20 20 20 20 batim = 0;.
8c60: 20 20 20 20 20 20 20 70 2d 3e 73 74 61 74 65 20 p->state
8c70: 3d 20 70 2d 3e 70 72 65 56 65 72 62 53 74 61 74 = p->preVerbStat
8c80: 65 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 e;. b
8c90: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 70 4f lob_append(p->pO
8ca0: 75 74 2c 20 22 3c 2f 70 72 65 3e 22 2c 20 36 29 ut, "</pre>", 6)
8cb0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 ;. }els
8cc0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 e{. u
8cd0: 6e 70 61 72 73 65 4d 61 72 6b 75 70 28 26 6d 61 nparseMarkup(&ma
8ce0: 72 6b 75 70 29 3b 0a 20 20 20 20 20 20 20 20 20 rkup);.
8cf0: 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 70 blob_append(p
8d00: 2d 3e 70 4f 75 74 2c 20 22 26 6c 74 3b 22 2c 20 ->pOut, "<",
8d10: 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 4);.
8d20: 6e 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 20 n = 1;.
8d30: 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 }. }else
8d40: 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 52 65 6e .. /* Ren
8d50: 64 65 72 20 69 6e 76 61 6c 69 64 20 6d 61 72 6b der invalid mark
8d60: 75 70 20 6c 69 74 65 72 61 6c 6c 79 2e 20 20 54 up literally. T
8d70: 68 65 20 6d 61 72 6b 75 70 20 61 70 70 65 61 72 he markup appear
8d80: 73 20 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 s in the.
8d90: 20 2a 2a 20 66 69 6e 61 6c 20 6f 75 74 70 75 74 ** final output
8da0: 20 61 73 20 70 6c 61 69 6e 20 74 65 78 74 2e 0a as plain text..
8db0: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 */.
8dc0: 20 20 20 69 66 28 20 6d 61 72 6b 75 70 2e 69 43 if( markup.iC
8dd0: 6f 64 65 3d 3d 4d 41 52 4b 55 50 5f 49 4e 56 41 ode==MARKUP_INVA
8de0: 4c 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 LID ){.
8df0: 20 75 6e 70 61 72 73 65 4d 61 72 6b 75 70 28 26 unparseMarkup(&
8e00: 6d 61 72 6b 75 70 29 3b 0a 20 20 20 20 20 20 20 markup);.
8e10: 20 20 20 73 74 61 72 74 41 75 74 6f 50 61 72 61 startAutoPara
8e20: 67 72 61 70 68 28 70 29 3b 0a 20 20 20 20 20 20 graph(p);.
8e30: 20 20 20 20 62 6c 6f 62 5f 61 70 70 65 6e 64 28 blob_append(
8e40: 70 2d 3e 70 4f 75 74 2c 20 22 26 6c 74 3b 22 2c p->pOut, "<",
8e50: 20 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6e 4);. n
8e60: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 = 1;. }e
8e70: 6c 73 65 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 lse.. /*
8e80: 49 66 20 74 68 65 20 6d 61 72 6b 75 70 20 69 73 If the markup is
8e90: 20 6e 6f 74 20 66 6f 6e 74 2d 63 68 61 6e 67 65 not font-change
8ea0: 20 6d 61 72 6b 75 70 20 69 67 6e 6f 72 65 20 69 markup ignore i
8eb0: 74 20 69 66 20 74 68 65 0a 20 20 20 20 20 20 20 t if the.
8ec0: 20 2a 2a 20 66 6f 6e 74 2d 63 68 61 6e 67 65 2d ** font-change-
8ed0: 6f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 only flag is set
8ee0: 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 .. */.
8ef0: 20 20 20 20 20 69 66 28 20 28 6d 61 72 6b 75 70 if( (markup
8f00: 2e 69 54 79 70 65 26 4d 55 54 59 50 45 5f 46 4f .iType&MUTYPE_FO
8f10: 4e 54 29 3d 3d 30 20 26 26 20 28 70 2d 3e 73 74 NT)==0 && (p->st
8f20: 61 74 65 20 26 20 46 4f 4e 54 5f 4d 41 52 4b 55 ate & FONT_MARKU
8f30: 50 5f 4f 4e 4c 59 29 21 3d 30 20 29 7b 0a 20 20 P_ONLY)!=0 ){.
8f40: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f /* Do no
8f50: 74 68 69 6e 67 20 2a 2f 0a 20 20 20 20 20 20 20 thing */.
8f60: 20 7d 65 6c 73 65 0a 0a 20 20 20 20 20 20 20 20 }else..
8f70: 2f 2a 20 49 67 6e 6f 72 65 20 62 6c 6f 63 6b 20 /* Ignore block
8f80: 6d 61 72 6b 75 70 20 66 6f 72 20 69 6e 2d 6c 69 markup for in-li
8f90: 6e 65 20 72 65 6e 64 65 72 69 6e 67 2e 0a 20 20 ne rendering..
8fa0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 */.
8fb0: 20 69 66 28 20 69 6e 6c 69 6e 65 4f 6e 6c 79 20 if( inlineOnly
8fc0: 26 26 20 28 6d 61 72 6b 75 70 2e 69 54 79 70 65 && (markup.iType
8fd0: 26 4d 55 54 59 50 45 5f 49 4e 4c 49 4e 45 29 3d &MUTYPE_INLINE)=
8fe0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 =0 ){.
8ff0: 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f /* Do nothing */
9000: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 0a . }else..
9010: 20 20 20 20 20 20 20 20 69 66 28 20 6d 61 72 6b if( mark
9020: 75 70 2e 69 43 6f 64 65 3d 3d 4d 41 52 4b 55 50 up.iCode==MARKUP
9030: 5f 4e 4f 57 49 4b 49 20 29 7b 0a 20 20 20 20 20 _NOWIKI ){.
9040: 20 20 20 20 20 69 66 28 20 6d 61 72 6b 75 70 2e if( markup.
9050: 65 6e 64 54 61 67 20 29 7b 0a 20 20 20 20 20 20 endTag ){.
9060: 20 20 20 20 20 20 70 2d 3e 73 74 61 74 65 20 7c p->state |
9070: 3d 20 41 4c 4c 4f 57 5f 57 49 4b 49 3b 0a 20 20 = ALLOW_WIKI;.
9080: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 }else{.
9090: 20 20 20 20 20 20 20 20 20 20 20 70 2d 3e 73 74 p->st
90a0: 61 74 65 20 26 3d 20 7e 41 4c 4c 4f 57 5f 57 49 ate &= ~ALLOW_WI
90b0: 4b 49 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a KI;. }.
90c0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a 0a 20 }else..
90d0: 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 /* Genera
90e0: 74 65 20 65 6e 64 2d 74 61 67 73 20 2a 2f 0a 20 te end-tags */.
90f0: 20 20 20 20 20 20 20 69 66 28 20 6d 61 72 6b 75 if( marku
9100: 70 2e 65 6e 64 54 61 67 20 29 7b 0a 20 20 20 20 p.endTag ){.
9110: 20 20 20 20 20 20 70 6f 70 53 74 61 63 6b 54 6f popStackTo
9120: 54 61 67 28 70 2c 20 6d 61 72 6b 75 70 2e 69 43 Tag(p, markup.iC
9130: 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 ode);. }e
9140: 6c 73 65 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 lse.. /*
9150: 50 75 73 68 20 3c 64 69 76 3e 20 6d 61 72 6b 75 Push <div> marku
9160: 70 20 6f 6e 74 6f 20 74 68 65 20 73 74 61 63 6b p onto the stack
9170: 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 together with t
9180: 68 65 20 69 64 3d 49 44 20 61 74 74 72 69 62 75 he id=ID attribu
9190: 74 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 te.. */.
91a0: 20 20 20 20 20 20 20 69 66 28 20 6d 61 72 6b 75 if( marku
91b0: 70 2e 69 43 6f 64 65 3d 3d 4d 41 52 4b 55 50 5f p.iCode==MARKUP_
91c0: 44 49 56 20 29 7b 0a 20 20 20 20 20 20 20 20 20 DIV ){.
91d0: 20 70 75 73 68 53 74 61 63 6b 57 69 74 68 49 64 pushStackWithId
91e0: 28 70 2c 20 6d 61 72 6b 75 70 2e 69 43 6f 64 65 (p, markup.iCode
91f0: 2c 20 6d 61 72 6b 75 70 49 64 28 26 6d 61 72 6b , markupId(&mark
9200: 75 70 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 up),.
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
9220: 70 2d 3e 73 74 61 74 65 20 26 20 41 4c 4c 4f 57 p->state & ALLOW
9230: 5f 57 49 4b 49 29 21 3d 30 29 3b 0a 20 20 20 20 _WIKI)!=0);.
9240: 20 20 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 20 }else..
9250: 20 20 20 2f 2a 20 45 6e 74 65 72 20 3c 76 65 72 /* Enter <ver
9260: 62 61 74 69 6d 3e 20 70 72 6f 63 65 73 73 69 6e batim> processin
9270: 67 2e 20 20 57 69 74 68 20 76 65 72 62 61 74 69 g. With verbati
9280: 6d 20 65 6e 61 62 6c 65 64 2c 20 61 6c 6c 20 6f m enabled, all o
9290: 74 68 65 72 0a 20 20 20 20 20 20 20 20 2a 2a 20 ther. **
92a0: 6d 61 72 6b 75 70 20 6f 74 68 65 72 20 74 68 61 markup other tha
92b0: 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 n the correspond
92c0: 69 6e 67 20 65 6e 64 2d 74 61 67 20 77 69 74 68 ing end-tag with
92d0: 20 74 68 65 20 73 61 6d 65 20 49 44 20 69 73 0a the same ID is.
92e0: 20 20 20 20 20 20 20 20 2a 2a 20 69 67 6e 6f 72 ** ignor
92f0: 65 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 ed.. */.
9300: 20 20 20 20 20 20 20 69 66 28 20 6d 61 72 6b 75 if( marku
9310: 70 2e 69 43 6f 64 65 3d 3d 4d 41 52 4b 55 50 5f p.iCode==MARKUP_
9320: 56 45 52 42 41 54 49 4d 20 29 7b 0a 20 20 20 20 VERBATIM ){.
9330: 20 20 20 20 20 20 69 66 28 20 6d 61 72 6b 75 70 if( markup
9340: 2e 6e 41 74 74 72 3d 3d 31 20 29 7b 0a 20 20 20 .nAttr==1 ){.
9350: 20 20 20 20 20 20 20 20 20 70 2d 3e 7a 56 65 72 p->zVer
9360: 62 61 74 69 6d 49 64 20 3d 20 6d 61 72 6b 75 70 batimId = markup
9370: 2e 61 41 74 74 72 5b 30 5d 2e 7a 56 61 6c 75 65 .aAttr[0].zValue
9380: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 ;. }els
9390: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 e{. p
93a0: 2d 3e 7a 56 65 72 62 61 74 69 6d 49 64 20 3d 20 ->zVerbatimId =
93b0: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 0;. }.
93c0: 20 20 20 20 20 20 20 20 20 70 2d 3e 69 6e 56 65 p->inVe
93d0: 72 62 61 74 69 6d 20 3d 20 31 3b 0a 20 20 20 20 rbatim = 1;.
93e0: 20 20 20 20 20 20 70 2d 3e 70 72 65 56 65 72 62 p->preVerb
93f0: 53 74 61 74 65 20 3d 20 70 2d 3e 73 74 61 74 65 State = p->state
9400: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 73 ;. p->s
9410: 74 61 74 65 20 26 3d 20 7e 41 4c 4c 4f 57 5f 57 tate &= ~ALLOW_W
9420: 49 4b 49 3b 0a 20 20 20 20 20 20 20 20 20 20 62 IKI;. b
9430: 6c 6f 62 5f 61 70 70 65 6e 64 28 70 2d 3e 70 4f lob_append(p->pO
9440: 75 74 2c 20 22 3c 70 72 65 20 63 6c 61 73 73 3d ut, "<pre class=
9450: 27 76 65 72 62 61 74 69 6d 27 3e 22 2c 2d 31 29 'verbatim'>",-1)
9460: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 77 ;. p->w
9470: 61 6e 74 41 75 74 6f 50 61 72 61 67 72 61 70 68 antAutoParagraph
9480: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 = 0;. }e
9490: 6c 73 65 0a 20 20 20 20 20 20 20 20 69 66 28 20 lse. if(
94a0: 6d 61 72 6b 75 70 2e 69 54 79 70 65 3d 3d 4d 55 markup.iType==MU
94b0: 54 59 50 45 5f 4c 49 20 29 7b 0a 20 20 20 20 20 TYPE_LI ){.
94c0: 20 20 20 20 20 69 66 28 20 62 61 63 6b 75 70 54 if( backupT
94d0: 6f 54 79 70 65 28 70 2c 20 4d 55 54 59 50 45 5f oType(p, MUTYPE_
94e0: 4c 49 53 54 29 3d 3d 30 20 29 7b 0a 20 20 20 20 LIST)==0 ){.
94f0: 20 20 20 20 20 20 20 20 70 75 73 68 53 74 61 63 pushStac
9500: 6b 28 70 2c 20 4d 41 52 4b 55 50 5f 55 4c 29 3b k(p, MARKUP_UL);
9510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6c 6f . blo
9520: 62 5f 61 70 70 65 6e 64 28 70 2d 3e 70 4f 75 74 b_append(p->pOut
9530: 2c 20 22 3c 75 6c 3e 22 2c 20 34 29 3b 0a 20 20 , "<ul>", 4);.
9540: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 }.
9550: 20 20 20 20 70 75 73 68 53 74 61 63 6b 28 70 2c pushStack(p,
9560: 20 4d 41 52 4b 55 50 5f 4c 49 29 3b 0a 20 20 20 MARKUP_LI);.
9570: 20 20 20 20 20 20 20 72 65 6e 64 65 72 4d 61 72 renderMar
9580: 6b 75 70 28 70 2d 3e 70 4f 75 74 2c 20 26 6d 61 kup(p->pOut, &ma
9590: 72 6b 75 70 29 3b 0a 20 20 20 20 20 20 20 20 7d rkup);. }
95a0: 65 6c 73 65 0a 20 20 20 20 20 20 20 20 69 66 28 else. if(
95b0: 20 6d 61 72 6b 75 70 2e 69 54 79 70 65 3d 3d 4d markup.iType==M
95c0: 55 54 59 50 45 5f 54 52 20 29 7b 0a 20 20 20 20 UTYPE_TR ){.
95d0: 20 20 20 20 20 20 69 66 28 20 62 61 63 6b 75 70 if( backup
95e0: 54 6f 54 79 70 65 28 70 2c 20 4d 55 54 59 50 45 ToType(p, MUTYPE
95f0: 5f 54 41 42 4c 45 29 20 29 7b 0a 20 20 20 20 20 _TABLE) ){.
9600: 20 20 20 20 20 20 20 70 75 73 68 53 74 61 63 6b pushStack
9610: 28 70 2c 20 4d 41 52 4b 55 50 5f 54 52 29 3b 0a (p, MARKUP_TR);.
9620: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6e 64 rend
9630: 65 72 4d 61 72 6b 75 70 28 70 2d 3e 70 4f 75 74 erMarkup(p->pOut
9640: 2c 20 26 6d 61 72 6b 75 70 29 3b 0a 20 20 20 20 , &markup);.
9650: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }.
9660: 7d 65 6c 73 65 0a 20 20 20 20 20 20 20 20 69 66 }else. if
9670: 28 20 6d 61 72 6b 75 70 2e 69 54 79 70 65 3d 3d ( markup.iType==
9680: 4d 55 54 59 50 45 5f 54 44 20 29 7b 0a 20 20 20 MUTYPE_TD ){.
9690: 20 20 20 20 20 20 20 69 66 28 20 62 61 63 6b 75 if( backu
96a0: 70 54 6f 54 79 70 65 28 70 2c 20 4d 55 54 59 50 pToType(p, MUTYP
96b0: 45 5f 54 41 42 4c 45 7c 4d 55 54 59 50 45 5f 54 E_TABLE|MUTYPE_T
96c0: 52 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 R) ){.
96d0: 20 20 69 66 28 20 73 74 61 63 6b 54 6f 70 54 79 if( stackTopTy
96e0: 70 65 28 70 29 3d 3d 4d 55 54 59 50 45 5f 54 41 pe(p)==MUTYPE_TA
96f0: 42 4c 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 BLE ){.
9700: 20 20 20 20 20 70 75 73 68 53 74 61 63 6b 28 70 pushStack(p
9710: 2c 20 4d 41 52 4b 55 50 5f 54 52 29 3b 0a 20 20 , MARKUP_TR);.
9720: 20 20 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 blob
9730: 5f 61 70 70 65 6e 64 28 70 2d 3e 70 4f 75 74 2c _append(p->pOut,
9740: 20 22 3c 74 72 3e 22 2c 20 34 29 3b 0a 20 20 20 "<tr>", 4);.
9750: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 }.
9760: 20 20 20 20 20 20 20 70 75 73 68 53 74 61 63 6b pushStack
9770: 28 70 2c 20 6d 61 72 6b 75 70 2e 69 43 6f 64 65 (p, markup.iCode
9780: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 );. r
9790: 65 6e 64 65 72 4d 61 72 6b 75 70 28 70 2d 3e 70 enderMarkup(p->p
97a0: 4f 75 74 2c 20 26 6d 61 72 6b 75 70 29 3b 0a 20 Out, &markup);.
97b0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 }.
97c0: 20 20 20 7d 65 6c 73 65 0a 20 20 20 20 20 20 20 }else.
97d0: 20 69 66 28 20 6d 61 72 6b 75 70 2e 69 54 79 70 if( markup.iTyp
97e0: 65 3d 3d 4d 55 54 59 50 45 5f 48 59 50 45 52 4c e==MUTYPE_HYPERL
97f0: 49 4e 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 INK ){.
9800: 20 70 6f 70 53 74 61 63 6b 54 6f 54 61 67 28 70 popStackToTag(p
9810: 2c 20 6d 61 72 6b 75 70 2e 69 43 6f 64 65 29 3b , markup.iCode);
9820: 0a 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 . start
9830: 41 75 74 6f 50 61 72 61 67 72 61 70 68 28 70 29 AutoParagraph(p)
9840: 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65 6e 64 ;. rend
9850: 65 72 4d 61 72 6b 75 70 28 70 2d 3e 70 4f 75 74 erMarkup(p->pOut
9860: 2c 20 26 6d 61 72 6b 75 70 29 3b 0a 20 20 20 20 , &markup);.
9870: 20 20 20 20 20 20 70 75 73 68 53 74 61 63 6b 28 pushStack(
9880: 70 2c 20 6d 61 72 6b 75 70 2e 69 43 6f 64 65 29 p, markup.iCode)
9890: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 0a ;. }else.
98a0: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 {.
98b0: 20 20 20 20 69 66 28 20 6d 61 72 6b 75 70 2e 69 if( markup.i
98c0: 54 79 70 65 3d 3d 4d 55 54 59 50 45 5f 46 4f 4e Type==MUTYPE_FON
98d0: 54 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 T ){.
98e0: 20 73 74 61 72 74 41 75 74 6f 50 61 72 61 67 72 startAutoParagr
98f0: 61 70 68 28 70 29 3b 0a 20 20 20 20 20 20 20 20 aph(p);.
9900: 20 20 7d 65 6c 73 65 20 69 66 28 20 6d 61 72 6b }else if( mark
9910: 75 70 2e 69 54 79 70 65 3d 3d 4d 55 54 59 50 45 up.iType==MUTYPE
9920: 5f 42 4c 4f 43 4b 20 29 7b 0a 20 20 20 20 20 20 _BLOCK ){.
9930: 20 20 20 20 20 20 70 2d 3e 77 61 6e 74 41 75 74 p->wantAut
9940: 6f 50 61 72 61 67 72 61 70 68 20 3d 20 30 3b 0a oParagraph = 0;.
9950: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 }.
9960: 20 20 20 20 20 20 69 66 28 20 28 6d 61 72 6b 75 if( (marku
9970: 70 2e 69 54 79 70 65 20 26 20 4d 55 54 59 50 45 p.iType & MUTYPE
9980: 5f 53 54 41 43 4b 20 29 21 3d 30 20 29 7b 0a 20 _STACK )!=0 ){.
9990: 20 20 20 20 20 20 20 20 20 20 20 70 75 73 68 53 pushS
99a0: 74 61 63 6b 28 70 2c 20 6d 61 72 6b 75 70 2e 69 tack(p, markup.i
99b0: 43 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 20 Code);.
99c0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 72 65 6e }. ren
99d0: 64 65 72 4d 61 72 6b 75 70 28 70 2d 3e 70 4f 75 derMarkup(p->pOu
99e0: 74 2c 20 26 6d 61 72 6b 75 70 29 3b 0a 20 20 20 t, &markup);.
99f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 62 }. b
9a00: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 reak;. }.
9a10: 20 20 7d 0a 20 20 20 20 7a 20 2b 3d 20 6e 3b 0a }. z += n;.
9a20: 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 72 }.}.../*.** Tr
9a30: 61 6e 73 66 6f 72 6d 20 74 68 65 20 74 65 78 74 ansform the text
9a40: 20 69 6e 20 74 68 65 20 70 49 6e 20 62 6c 6f 62 in the pIn blob
9a50: 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 65 73 . Write the res
9a60: 75 6c 74 73 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 ults.** into the
9a70: 20 70 4f 75 74 20 62 6c 6f 62 2e 20 20 54 68 65 pOut blob. The
9a80: 20 70 4f 75 74 20 62 6c 6f 62 20 73 68 6f 75 6c pOut blob shoul
9a90: 64 20 61 6c 72 65 61 64 79 20 62 65 0a 2a 2a 20 d already be.**
9aa0: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 54 68 initialized. Th
9ab0: 65 20 6f 75 74 70 75 74 20 69 73 20 6d 65 72 65 e output is mere
9ac0: 6c 79 20 61 70 70 65 6e 64 65 64 20 74 6f 20 70 ly appended to p
9ad0: 4f 75 74 2e 0a 2a 2a 20 49 66 20 70 4f 75 74 20 Out..** If pOut
9ae0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 is NULL, then th
9af0: 65 20 6f 75 74 70 75 74 20 69 73 20 61 70 70 65 e output is appe
9b00: 6e 64 65 64 20 74 6f 20 74 68 65 20 43 47 49 0a nded to the CGI.
9b10: 2a 2a 20 72 65 70 6c 79 2e 0a 2a 2f 0a 76 6f 69 ** reply..*/.voi
9b20: 64 20 77 69 6b 69 5f 63 6f 6e 76 65 72 74 28 42 d wiki_convert(B
9b30: 6c 6f 62 20 2a 70 49 6e 2c 20 42 6c 6f 62 20 2a lob *pIn, Blob *
9b40: 70 4f 75 74 2c 20 69 6e 74 20 66 6c 61 67 73 29 pOut, int flags)
9b50: 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 52 {. char *z;. R
9b60: 65 6e 64 65 72 65 72 20 72 65 6e 64 65 72 65 72 enderer renderer
9b70: 3b 0a 0a 20 20 6d 65 6d 73 65 74 28 26 72 65 6e ;.. memset(&ren
9b80: 64 65 72 65 72 2c 20 30 2c 20 73 69 7a 65 6f 66 derer, 0, sizeof
9b90: 28 72 65 6e 64 65 72 65 72 29 29 3b 0a 20 20 72 (renderer));. r
9ba0: 65 6e 64 65 72 65 72 2e 73 74 61 74 65 20 3d 20 enderer.state =
9bb0: 41 4c 4c 4f 57 5f 57 49 4b 49 7c 41 54 5f 4e 45 ALLOW_WIKI|AT_NE
9bc0: 57 4c 49 4e 45 7c 41 54 5f 50 41 52 41 47 52 41 WLINE|AT_PARAGRA
9bd0: 50 48 3b 0a 20 20 69 66 28 20 66 6c 61 67 73 20 PH;. if( flags
9be0: 26 20 57 49 4b 49 5f 4e 4f 42 4c 4f 43 4b 20 29 & WIKI_NOBLOCK )
9bf0: 7b 0a 20 20 20 20 72 65 6e 64 65 72 65 72 2e 73 {. renderer.s
9c00: 74 61 74 65 20 7c 3d 20 49 4e 4c 49 4e 45 5f 4d tate |= INLINE_M
9c10: 41 52 4b 55 50 5f 4f 4e 4c 59 3b 0a 20 20 7d 0a ARKUP_ONLY;. }.
9c20: 20 20 69 66 28 20 66 6c 61 67 73 20 26 20 57 49 if( flags & WI
9c30: 4b 49 5f 49 4e 4c 49 4e 45 20 29 7b 0a 20 20 20 KI_INLINE ){.
9c40: 20 72 65 6e 64 65 72 65 72 2e 77 61 6e 74 41 75 renderer.wantAu
9c50: 74 6f 50 61 72 61 67 72 61 70 68 20 3d 20 30 3b toParagraph = 0;
9c60: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 . }else{. re
9c70: 6e 64 65 72 65 72 2e 77 61 6e 74 41 75 74 6f 50 nderer.wantAutoP
9c80: 61 72 61 67 72 61 70 68 20 3d 20 31 3b 0a 20 20 aragraph = 1;.
9c90: 7d 0a 20 20 69 66 28 20 70 4f 75 74 20 29 7b 0a }. if( pOut ){.
9ca0: 20 20 20 20 72 65 6e 64 65 72 65 72 2e 70 4f 75 renderer.pOu
9cb0: 74 20 3d 20 70 4f 75 74 3b 0a 20 20 7d 65 6c 73 t = pOut;. }els
9cc0: 65 7b 0a 20 20 20 20 72 65 6e 64 65 72 65 72 2e e{. renderer.
9cd0: 70 4f 75 74 20 3d 20 63 67 69 5f 6f 75 74 70 75 pOut = cgi_outpu
9ce0: 74 5f 62 6c 6f 62 28 29 3b 0a 20 20 7d 0a 0a 20 t_blob();. }..
9cf0: 20 7a 20 3d 20 62 6c 6f 62 5f 73 74 72 28 70 49 z = blob_str(pI
9d00: 6e 29 3b 0a 20 20 77 69 6b 69 5f 72 65 6e 64 65 n);. wiki_rende
9d10: 72 28 26 72 65 6e 64 65 72 65 72 2c 20 7a 29 3b r(&renderer, z);
9d20: 0a 20 20 65 6e 64 41 75 74 6f 50 61 72 61 67 72 . endAutoParagr
9d30: 61 70 68 28 26 72 65 6e 64 65 72 65 72 29 3b 0a aph(&renderer);.
9d40: 20 20 77 68 69 6c 65 28 20 72 65 6e 64 65 72 65 while( rendere
9d50: 72 2e 6e 53 74 61 63 6b 20 29 7b 0a 20 20 20 20 r.nStack ){.
9d60: 70 6f 70 53 74 61 63 6b 28 26 72 65 6e 64 65 72 popStack(&render
9d70: 65 72 29 3b 0a 20 20 7d 0a 20 20 62 6c 6f 62 5f er);. }. blob_
9d80: 61 70 70 65 6e 64 28 72 65 6e 64 65 72 65 72 2e append(renderer.
9d90: 70 4f 75 74 2c 20 22 5c 6e 22 2c 20 31 29 3b 0a pOut, "\n", 1);.
9da0: 20 20 66 72 65 65 28 72 65 6e 64 65 72 65 72 2e free(renderer.
9db0: 61 53 74 61 63 6b 29 3b 0a 7d 0a 0a 2f 2a 0a 2a aStack);.}../*.*
9dc0: 2a 20 43 4f 4d 4d 41 4e 44 3a 20 74 65 73 74 2d * COMMAND: test-
9dd0: 77 69 6b 69 2d 72 65 6e 64 65 72 0a 2a 2f 0a 76 wiki-render.*/.v
9de0: 6f 69 64 20 74 65 73 74 5f 77 69 6b 69 5f 72 65 oid test_wiki_re
9df0: 6e 64 65 72 28 76 6f 69 64 29 7b 0a 20 20 42 6c nder(void){. Bl
9e00: 6f 62 20 69 6e 2c 20 6f 75 74 3b 0a 20 20 69 66 ob in, out;. if
9e10: 28 20 67 2e 61 72 67 63 21 3d 33 20 29 20 75 73 ( g.argc!=3 ) us
9e20: 61 67 65 28 22 46 49 4c 45 22 29 3b 0a 20 20 62 age("FILE");. b
9e30: 6c 6f 62 5f 7a 65 72 6f 28 26 6f 75 74 29 3b 0a lob_zero(&out);.
9e40: 20 20 62 6c 6f 62 5f 72 65 61 64 5f 66 72 6f 6d blob_read_from
9e50: 5f 66 69 6c 65 28 26 69 6e 2c 20 67 2e 61 72 67 _file(&in, g.arg
9e60: 76 5b 32 5d 29 3b 0a 20 20 77 69 6b 69 5f 63 6f v[2]);. wiki_co
9e70: 6e 76 65 72 74 28 26 69 6e 2c 20 26 6f 75 74 2c nvert(&in, &out,
9e80: 20 30 29 3b 0a 20 20 62 6c 6f 62 5f 77 72 69 74 0);. blob_writ
9e90: 65 5f 74 6f 5f 66 69 6c 65 28 26 6f 75 74 2c 20 e_to_file(&out,
9ea0: 22 2d 22 29 3b 0a 7d 0a "-");.}.