bbcodelib 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,851 @@
1
+ #include "bbcode_parser.h"
2
+
3
+ namespace bbcode{
4
+
5
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
6
+ // [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER SMALL SUB TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE CDE HR IMG EML LST MUL LS2
7
+ enum conds Parser[][50]={/*C1*/ {C2, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, NT, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // INITIAL STATE
8
+ /*C2*/ {C25, C25, C26, C25, C25, C25, C25,C25, C3, C28, C30, C32, C34, C36, NT, NO, C1, NO, C38,C40,C42,C48,C50,C52,C54,C56,C58,C60,C62,C64,C70,C76,C85,C91,C93,C95,C97,C105,C114,C116,C118,C36,C36,C36,C36,C36,C36,C36,}, // opening tags distributor
9
+ /*C3*/ {C25, C25, C26, C25, C25, C25, C25,C25, C25, C28, C30, C32, C34, C36, NT, NO, C1, NO, C38,C40,C46,C48,C50,C52,C54,C56,C58,C60,C62,C68,C74,C80,C87,C91,C93,C25,C99,C107,C114,C25,C118,C36,C36,C36,C36,C36,C36,C36,}, // closing tags distributor
10
+ /*C4*/ {C4, C4, C18, C4, C4, C4, C4, C4, C4, C4, C4, C4, C5, C4, NT, NO, C1, NO, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C4,}, //
11
+ /*C5*/ {C2, C2, C2, C6, C2, C2, C5, C2, C2, C2, C2, C2, C2, C2, NT, NO, C1, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
12
+ /*C6*/ {C2, C12, C18, C2, C2, C2, C6, C2, C7, C2, C14, C2, C2, C2, NT, NO, C1, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
13
+ /*C7*/ {C2, C2, C2, C2, C2, C2, C7, C8, C2, C2, C2, C2, C2, C2, NT, NO, C1, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
14
+ /*C8*/ {C2, C11, C2, C2, C2, C9, C8, C2, C2, C2, C2, C2, C2, C2, NT, NO, C1, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
15
+ /*C9*/ {C9, C9, C2, C9, C9, C10, C9, C9, C9, C9, C9, C9, C9, C9, NT, NO, C1, NO, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9, C9,}, //
16
+ /*C10*/ {C2, C2, C18, C2, C11, C2, C10, C2, C2, C2, C2, C2, C2, C2, NT, NO, C1, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
17
+ /*C11*/ {C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, T, NO, C6, NO, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6,}, //
18
+ /*C12*/ {C2, C2, C2, C2, C13, C2, C12, C2, C2, C2, C2, C2, C2, C2, NT, NO, C1, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
19
+ /*C13*/ {C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, T, NO, C6, NO, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6,}, //
20
+ /*C14*/ {C2, C2, C2, C2, C2, C2, C14,C15, C2, C2, C2, C2, C2, C2, NT, NO, C1, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
21
+ /*C15*/ {C2, C17, C2, C2, C2, C16, C2, C2, C2, C2, C2, C2, C2, C2, NT, NO, C1, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
22
+ /*C16*/ {C16, C16, C2, C16, C16, C17, C16,C16, C16, C16, C16, C2, C2, C2, NT, NO, C1, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
23
+ /*C17*/ {C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, T, NO, C6, NO, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6, C6,}, //
24
+ /*C18*/ {C20, C20, C19, C20, C20, C20, C20,C20, C20, C20, C20, C20, C20, C20, NT, NO, C1, NO, C20,C20,C20,C20,C20,C20,C20,C20,C20,C20,C20,C20,C20,C20,C20,C20,C20,C20,C20, C20,C20,C20,C20,C20,C20,C20,C20,C20,C20,C20,}, //
25
+ /*C19*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C23,NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, //
26
+ /*C20*/ {C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, T, NO, C4, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
27
+ /*C21*/ {C2, C2, C22, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, NT, NO, C1, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
28
+ /*C22*/ {C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, T, NO, C4, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
29
+ /*C23*/ {C21, C23, C23, C23, C23, C23, C23,C23, C23, C23, C23, C23, C23, C23, NT, NO, C1, NO, C23,C23,C23,C23,C23,C23,C23,C23,C23,C23,C23,C23,C23,C23,C23,C23,C23,C23,C23, C23,C23,C23,C23,C23,C23,C23,C23,C23,C23,C23,}, //
30
+ /*C24*/ {C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, NT, NO, C1, NO, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2,}, //
31
+ /*C25*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, YES, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // ERROR STATE
32
+ //[b] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL TER PB RET MEM
33
+ /*C26*/ {C25, C27, C25, C25, C25, C25, C26,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [b
34
+ /*C27*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [b]
35
+ //[i] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL TER PB RET MEM
36
+ /*C28*/ {C25, C29, C25, C25, C25, C25, C28,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [i
37
+ /*C29*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [i]
38
+ //[u] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER TER PB RET MEM
39
+ /*C30*/ {C25, C31, C25, C25, C25, C25, C30,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [u
40
+ /*C31*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [u]
41
+ //[h] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM
42
+ /*C32*/ {C25, C33, C25, C25, C25, C25, C32,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [h
43
+ /*C33*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO , C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [h]
44
+ //[small] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM
45
+ /*C34*/ {C25, C35, C25, C25, C25, C25, C34,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [small
46
+ /*C35*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [small]
47
+ //[sub] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM
48
+ /*C36*/ {C25, C37, C25, C25, C25, C25, C36,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [sub
49
+ /*C37*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [sub]
50
+ //[sup] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
51
+ /*C38*/{C25, C39, C25, C25, C25, C25, C38,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [sup
52
+ /*C39*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [sup]
53
+ //[offtopic] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
54
+ /*C40*/{C25, C41, C25, C25, C25, C25, C40,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [offtopic
55
+ /*C41*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [offtopic]
56
+ //[color=WORD] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL
57
+ /*C42*/{C25, C25, C25, C25, C25, C25, C40,C43, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [color
58
+ /*C43*/{C25, C25, C25, C44, C25, C25, C43,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C44,C44,C44,C44,C44,C44,C44,C44,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [color=
59
+ /*C44*/{C25, C45, C25, C25, C25, C25, C44,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [color=WORD
60
+ /*C45*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [color=WORD]
61
+ //[/color] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
62
+ /*C46*/{C25, C47, C25, C25, C25, C25, C46,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [/color
63
+ /*C47*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [/color]
64
+ //[red] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
65
+ /*C48*/{C25, C49, C25, C25, C25, C25, C48,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [red
66
+ /*C49*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [red]
67
+ //[orange] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
68
+ /*C50*/{C25, C51, C25, C25, C25, C25, C50,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [orange
69
+ /*C51*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [orange]
70
+ //[yellow ] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
71
+ /*C52*/{C25, C53, C25, C25, C25, C25, C52,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [yellow
72
+ /*C53*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [yellow]
73
+ //[green ] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
74
+ /*C54*/{C25, C55, C25, C25, C25, C25, C54,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [green
75
+ /*C55*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [green]
76
+ //[blue ] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
77
+ /*C56*/{C25, C57, C25, C25, C25, C25, C56,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [blue
78
+ /*C57*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [blue]
79
+ //[purple ] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
80
+ /*C58*/{C25, C59, C25, C25, C25, C25, C58,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [purple
81
+ /*C59*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [purple]
82
+ //[white] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
83
+ /*C60*/{C25, C61, C25, C25, C25, C25, C60,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [white
84
+ /*C61*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [white]
85
+ //[black] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
86
+ /*C62*/{C25, C63, C25, C25, C25, C25, C60,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [black
87
+ /*C63*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [black]
88
+ //[size=WORD] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ
89
+ /*C64*/{C25, C25, C25, C25, C25, C25, C64,C65, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [size
90
+ /*C65*/{C25, C25, C25, C66, C25, C25, C65,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [size=
91
+ /*C66*/{C25, C67, C25, C25, C25, C25, C66,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [size=WORD
92
+ /*C67*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [size=WORD]
93
+ //[/size] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
94
+ /*C68*/{C25, C69, C25, C25, C25, C25, C68,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [/size
95
+ /*C69*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [/size]
96
+ //[face=WORD] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ
97
+ /*C70*/{C25, C25, C25, C25, C25, C25, C70,C71, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [face
98
+ /*C71*/{C25, C25, C25, C72, C25, C25, C71,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [face=
99
+ /*C72*/{C25, C73, C25, C25, C25, C25, C72,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [face=WORD
100
+ /*C73*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [face=WORD]
101
+ //[/face] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
102
+ /*C74*/{C25, C75, C25, C25, C25, C25, C74,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [/face
103
+ /*C75*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [/face]
104
+ //[url] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE CDE HR IMG EML LST MUL LS2
105
+ /*C76*/{C25, C77, C25, C25, C25, C25, C76,C82, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [url
106
+ /*C77*/{C25, C25, C25, C78, C25, C25, C77,C25, C78, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [url]
107
+ /*C78*/{C79, C25, C78, C78, C78, C25, C79,C78, C78, C78, C78, C78, C78, C78, NT, NO, C1, YES,C78,C78,C78,C78,C78,C78,C78,C78,C78,C78,C78,C78,C78,C78,C78,C78,C78,C78,C78, C78,C78,C78,C78,C25,C25,C25,C25,C25,C25,C25,}, // found [url]WORD
108
+ /*C79*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C2, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [url]WORD[
109
+ //[/url] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
110
+ /*C80*/{C25, C81, C25, C25, C25, C25, C74,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [/url
111
+ /*C81*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [/url]
112
+
113
+ /*C82*/{C25, C25, C25, C83, C25, C25, C82,C25, C83, C83, C83, C83, C83, C83, NT, NO, C1, YES,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [url=hello +
114
+ /*C83*/{C25, C84, C25, C83, C83, C25, C83,C83, C83, C83, C83, C83, C83, C83, NT, NO, C1, YES,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C83,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [url=hello +
115
+ /*C84*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [url=hello w]
116
+ //[quote] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
117
+ /*C85*/{C25, C86, C25, C25, C25, C25, C85,C89, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [quote
118
+ /*C86*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [quote]
119
+ //[/quote] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
120
+ /*C87*/{C25, C88, C25, C25, C25, C25, C87,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [quote
121
+ /*C88*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [quote]
122
+ //[/quote=] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP
123
+ /*C89*/{C25, C25, C25, C90, C25, C25, C89,C25, C25, C90, C90, C90, C90, C90, NT, NO, C1, YES,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90, C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,}, // found [quote=
124
+ /*C90*/{C25, C86, C25, C90, C25, C25, C90,C25, C25, C90, C90, C90, C90, C90, NT, NO, C1, YES,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90, C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,C90,}, // found [quote=.+
125
+ //[pre] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
126
+ /*C91*/{C25, C92, C25, C25, C25, C25, C91,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [pre
127
+ /*C92*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [pre]
128
+ //[/pre] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
129
+ /*C93*/{C25, C94, C25, C25, C25, C25, C94,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [code
130
+ /*C94*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [code]
131
+ //[hr] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
132
+ /*C95*/{C25, C96, C25, C25, C25, C25, C95, C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,}, // found [hr
133
+ /*C96*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [hr]
134
+ //[img [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
135
+ /*C97*/{C25, C98, C25, C25, C25, C25, C97,C103,C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [img
136
+ /*C98*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO,C101, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [img]
137
+ //[/img [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
138
+ /*C99*/{C25,C100, C25, C25, C25, C25, C99,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [/img
139
+ /*C100*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [/img]
140
+ //[img].+ [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE CDE HR IMG EML LST MUL LS2
141
+ /*C101*/{C102, C25, C101, C101, C101, C25, C25,C25,C101,C101,C101, C101, C101, C101, NT, NO, C1, YES,C101,C101,C25,C101,C101,C101,C25,C101,C101,C101,C101,C101,C101,C101,C101,C101, C101,C101,C101, C101,C101,C101,C101,C25,C25,C25,C25,C25,C25,C25,},// found [/img
142
+ /*C102*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C2, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [/img]
143
+ //[img=] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
144
+ /*C103*/{C25, C25, C25, C104, C104, C25, C104,C104,C104,C104,C104, C104, C104, C104, NT, NO, C1, YES,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [img=
145
+ //[img=] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
146
+ /*C104*/{C25, C98, C25, C104, C104, C25, C104,C104,C104,C104,C104, C104, C104, C104, NT, NO, C1, YES,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C104,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [img=.+
147
+ //[email [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
148
+ /*C105*/{C25, C106, C25, C25, C25, C25, C105,C111,C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [email
149
+ /*C106*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO,C109, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [email]
150
+ //[/email [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
151
+ /*C107*/{C25, C108, C25, C25, C25, C25, C99,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [/email
152
+ /*C108*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [/email]
153
+ //[email].+ [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
154
+ /*C109*/{C110, C25, C109, C109, C109, C109,C109,C25, C25,C109, C109, C109, C109, C109, NT, NO, C1, YES,C109,C109,C109,C109,C109,C109,C109,C109,C109,C109,C109,C109,C109,C109,C109,C109,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [email].+
155
+ /*C110*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C2, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [email].+[
156
+ //[email=] [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
157
+ /*C111*/{C25, C25, C25, C112, C25, C25, C112,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [email=
158
+ /*C112*/{C25, C113, C25, C112, C25, C25,C112,C25, C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [email=.+
159
+ /*C113*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [email]
160
+ //[list [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
161
+ /*C114*/{C25, C115, C25, C25, C25, C25, C114, C25,C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [list
162
+ /*C115*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO,C109, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [list]
163
+ //[* [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
164
+ /*C116*/{C25, C117, C25, C25, C25, C25, C116, C25,C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [*
165
+ /*C117*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [*]
166
+ //[* [ ] BOLD WORD COLON QUOTE SP EQAL / ITAL UNDER HEADER TER PB RET MEM SUP OFF COL RED ORG YEL GRN BLU PUR WHT BLK SZ FAC URL QUO PRE
167
+ /*C118*/{C25, C119, C25, C25, C25, C25, C118, C25,C25, C25, C25, C25, C25, C25, NT, NO, C1, YES,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25, C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,C25,},// found [*
168
+ /*C119*/ {C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, T, NO, C1, NO, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1,}, // found [*]
169
+
170
+ };
171
+
172
+ //--------------------------------
173
+ // parser::max_form_field_num
174
+ size_t parser::read_buffer_size(size_t read_buffer_size) throw(out_of_range){
175
+ if(read_buffer_size <= 0) throw out_of_range(get_module_msg("Read buffer size must be more than 0"));
176
+ return myswap(_pconf._read_buffer_size, read_buffer_size);
177
+ }
178
+
179
+ //--------------------------------
180
+ // parser::parse
181
+
182
+ void parser::parse(void){
183
+ /* we're doing some ianitialization */
184
+
185
+ _lexer.init(_pconf);
186
+ l = TERM;
187
+ _current_state = C1;
188
+ _parsed_data.clear();
189
+ _lexems = stack<lexeme>();//cleaning up
190
+ _im_data = "";
191
+
192
+
193
+
194
+ while( (l =_lexer.get_lexeme()) != TERM){
195
+ _lexems.push(l);
196
+ _im_data = _lexer.get_lexeme_str();
197
+ _parsed_data += _im_data;
198
+ while(_lexems.size()){
199
+ l = _lexems.top();
200
+ _lexems.pop();
201
+ switch(l){
202
+ case WORD:
203
+ _current_state = Parser[_current_state][3];
204
+ break;
205
+
206
+ case LEFT_SQUARE_BRACKET:
207
+ _current_state = Parser[_current_state][0];
208
+ _tmp_tag.left_bracket_pos = _parsed_data.length()-1;
209
+ break;
210
+
211
+ case RIGHT_SQUARE_BRACKET:
212
+ _current_state = Parser[_current_state][1];
213
+ _tmp_tag.right_bracket_pos = _parsed_data.length()-1;
214
+ break;
215
+
216
+ case SLASH:
217
+ _current_state = Parser[_current_state][8];
218
+ _tmp_tag.type = tag::closing;
219
+ break;
220
+
221
+ case BOLD:
222
+ _current_state = Parser[_current_state][2];
223
+ break;
224
+
225
+ case ITALIC:
226
+ _current_state = Parser[_current_state][9];
227
+ break;
228
+
229
+
230
+ case HEADER:
231
+ _current_state = Parser[_current_state][11];
232
+ break;
233
+
234
+ case UNDERLINE:
235
+ _current_state = Parser[_current_state][10];
236
+ break;
237
+
238
+ case SMALL:
239
+ _current_state = Parser[_current_state][12];
240
+ break;
241
+ case SUB:
242
+ _current_state = Parser[_current_state][13];
243
+ break;
244
+
245
+ case SUP:
246
+ _current_state = Parser[_current_state][18];
247
+ break;
248
+
249
+ case OFFTOPIC:
250
+ _current_state = Parser[_current_state][19];
251
+ break;
252
+ case COLOR:
253
+ _current_state = Parser[_current_state][20];
254
+ break;
255
+ case RED:
256
+ _current_state = Parser[_current_state][21];
257
+ break;
258
+ case ORANGE:
259
+ _current_state = Parser[_current_state][22];
260
+ break;
261
+
262
+ case YELLOW:
263
+ _current_state = Parser[_current_state][23];
264
+ break;
265
+
266
+ case GREEN:
267
+ _current_state = Parser[_current_state][24];
268
+ break;
269
+ case BLUE:
270
+ _current_state = Parser[_current_state][25];
271
+ break;
272
+ case PURPLE:
273
+ _current_state = Parser[_current_state][26];
274
+ break;
275
+ case WHITE:
276
+ _current_state = Parser[_current_state][27];
277
+ break;
278
+ case BLACK:
279
+ _current_state = Parser[_current_state][28];
280
+ break;
281
+ case SIZE:
282
+ _current_state = Parser[_current_state][29];
283
+ break;
284
+ case FACE:
285
+ _current_state = Parser[_current_state][30];
286
+ break;
287
+ case URL:
288
+ _current_state = Parser[_current_state][31];
289
+ break;
290
+
291
+ case QQUOTE:
292
+ _current_state = Parser[_current_state][32];
293
+ break;
294
+
295
+ case PRE:
296
+ _current_state = Parser[_current_state][33];
297
+ break;
298
+
299
+ case CODE:
300
+ _current_state = Parser[_current_state][34];
301
+ break;
302
+ case HR:
303
+ _current_state = Parser[_current_state][35];
304
+ break;
305
+ case IMG:
306
+ _current_state = Parser[_current_state][36];
307
+ break;
308
+
309
+ case EMAIL:
310
+ _current_state = Parser[_current_state][37];
311
+ break;
312
+ case LIST:
313
+ _current_state = Parser[_current_state][38];
314
+ break;
315
+
316
+ case MULT:
317
+ _current_state = Parser[_current_state][39];
318
+ break;
319
+
320
+ case OLIST:
321
+ _current_state = Parser[_current_state][40];
322
+ break;
323
+
324
+ case COLON:
325
+ _current_state = Parser[_current_state][4];
326
+ break;
327
+ case SEMICOLON:
328
+ _current_state = Parser[_current_state][4];
329
+ break;
330
+ case QUOTE:
331
+ _current_state = Parser[_current_state][5];
332
+ break;
333
+ case SPACE:
334
+ _current_state = Parser[_current_state][6];
335
+ break;
336
+ case EQUALITY:
337
+ _current_state = Parser[_current_state][7];
338
+ break;
339
+
340
+ }
341
+ switch(_current_state){
342
+ case C1:
343
+ _tmp_tag.clear();
344
+ break;
345
+
346
+ case C25:
347
+ _lexems.push(l);
348
+ _current_state = C1; /* error recovery mode */
349
+ _tmp_tag.clear();
350
+ break;
351
+ case C27: //[b] tag found
352
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
353
+ _tmp_tag.name = _BOLD;
354
+ _parsed_tags.push_back(_tmp_tag);
355
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
356
+ _tmp_tag.clear();
357
+ break;
358
+ case C29: //[i] tag found
359
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
360
+ _tmp_tag.name = _ITALIC;
361
+ _parsed_tags.push_back(_tmp_tag);
362
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
363
+ _tmp_tag.clear();
364
+ break;
365
+ case C31: //[u] tag found
366
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
367
+ _tmp_tag.name = _UNDERLINE;
368
+ _parsed_tags.push_back(_tmp_tag);
369
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
370
+ _tmp_tag.clear();
371
+ break;
372
+ case C33: //[h] tag found
373
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
374
+ _tmp_tag.name = _HEADER;
375
+ _parsed_tags.push_back(_tmp_tag);
376
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
377
+ _tmp_tag.clear();
378
+ break;
379
+ case C35: //[small] tag found
380
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
381
+ _tmp_tag.name = _SMALL;
382
+ _parsed_tags.push_back(_tmp_tag);
383
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
384
+ _tmp_tag.clear();
385
+ break;
386
+ case C37: //[sub] tag found
387
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
388
+ _tmp_tag.name = _SUB;
389
+ _parsed_tags.push_back(_tmp_tag);
390
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
391
+ _tmp_tag.clear();
392
+ break;
393
+ case C39: //[sup] tag found
394
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
395
+ _tmp_tag.name = _SUP;
396
+ _parsed_tags.push_back(_tmp_tag);
397
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
398
+ _tmp_tag.clear();
399
+ break;
400
+ case C41: //[offtopc] tag found
401
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
402
+ _tmp_tag.name = _OFFTOPIC;
403
+ _parsed_tags.push_back(_tmp_tag);
404
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
405
+ _tmp_tag.clear();
406
+ break;
407
+ case C44: //[color=WORD, WORD found
408
+ _tmp_tag.attr.insert(make_pair(_COLOR, _im_data));
409
+ break;
410
+
411
+ case C45: //[color=WORD] found
412
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
413
+ _tmp_tag.name = _COLOR;
414
+ _parsed_tags.push_back(_tmp_tag);
415
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
416
+ _tmp_tag.clear();
417
+ break;
418
+
419
+ case C47: //[/color] found
420
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
421
+ _tmp_tag.name = _COLOR;
422
+ _parsed_tags.push_back(_tmp_tag);
423
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
424
+ _tmp_tag.clear();
425
+ break;
426
+
427
+ case C49: //[red] found
428
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
429
+ _tmp_tag.name = _RED;
430
+ _parsed_tags.push_back(_tmp_tag);
431
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
432
+ _tmp_tag.clear();
433
+ break;
434
+
435
+ case C51: //[orange] found
436
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
437
+ _tmp_tag.name = _ORANGE;
438
+ _parsed_tags.push_back(_tmp_tag);
439
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
440
+ _tmp_tag.clear();
441
+ break;
442
+ case C53: //[yellow] found
443
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
444
+ _tmp_tag.name = _YELLOW;
445
+ _parsed_tags.push_back(_tmp_tag);
446
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
447
+ _tmp_tag.clear();
448
+ break;
449
+ case C55: //[yellow] found
450
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
451
+ _tmp_tag.name = _GREEN;
452
+ _parsed_tags.push_back(_tmp_tag);
453
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
454
+ _tmp_tag.clear();
455
+ break;
456
+ case C57: //[blue] found
457
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
458
+ _tmp_tag.name = _BLUE;
459
+ _parsed_tags.push_back(_tmp_tag);
460
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
461
+ _tmp_tag.clear();
462
+ break;
463
+ case C59: //[purple] found
464
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
465
+ _tmp_tag.name = _PURPLE;
466
+ _parsed_tags.push_back(_tmp_tag);
467
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
468
+ _tmp_tag.clear();
469
+ break;
470
+ case C61: //[white] found
471
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
472
+ _tmp_tag.name = _WHITE;
473
+ _parsed_tags.push_back(_tmp_tag);
474
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
475
+ _tmp_tag.clear();
476
+ break;
477
+ case C63: //[black] found
478
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
479
+ _tmp_tag.name = _BLACK;
480
+ _parsed_tags.push_back(_tmp_tag);
481
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
482
+ _tmp_tag.clear();
483
+ break;
484
+ case C66: //[size=WORD, WORD found
485
+ _tmp_tag.attr.insert(make_pair(_SIZE, _im_data));
486
+ break;
487
+ case C67: //[size=WORD] found
488
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
489
+ _tmp_tag.name = _SIZE;
490
+ _parsed_tags.push_back(_tmp_tag);
491
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
492
+ _tmp_tag.clear();
493
+ break;
494
+ case C69: //[size=WORD] found
495
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
496
+ _tmp_tag.name = _SIZE;
497
+ _parsed_tags.push_back(_tmp_tag);
498
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
499
+ _tmp_tag.clear();
500
+ break;
501
+ case C72: //[face=WORD, WORD found
502
+ _tmp_tag.attr.insert(make_pair(_FACE, _im_data));
503
+ break;
504
+ case C73: //[face=WORD] found
505
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
506
+ _tmp_tag.name = _FACE;
507
+ _parsed_tags.push_back(_tmp_tag);
508
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
509
+ _tmp_tag.clear();
510
+ break;
511
+ case C75: //[/face] found
512
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
513
+ _tmp_tag.name = _FACE;
514
+ _parsed_tags.push_back(_tmp_tag);
515
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
516
+ _tmp_tag.clear();
517
+ break;
518
+
519
+ case C77: //[url] found
520
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
521
+ _tmp_tag.name = _URL;
522
+ _parsed_tags.push_back(_tmp_tag);
523
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
524
+ _tmp_tag.clear();
525
+ break;
526
+
527
+ case C78: //[url]WORD+ accumulating
528
+ if(!_parsed_tags.empty() && _parsed_tags.back().name == _URL){
529
+ if((_parsed_tags.back().attr).find(_URL) == _parsed_tags.back().attr.end()){
530
+ _parsed_tags.back().attr.insert(make_pair(_URL, _im_data));
531
+ }else{
532
+ _parsed_tags.back().attr[_URL] += _im_data;
533
+ }
534
+ }
535
+ break;
536
+
537
+ case C81: //[/url] found
538
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
539
+ _tmp_tag.name = _URL;
540
+ _parsed_tags.push_back(_tmp_tag);
541
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
542
+ _tmp_tag.clear();
543
+ break;
544
+
545
+ case C83: //[url]WORD+ accumulating
546
+ if(_tmp_tag.attr.find(_URL) == _tmp_tag.attr.end()){
547
+ _tmp_tag.attr.insert(make_pair(_URL, _im_data));
548
+ }else{
549
+ _tmp_tag.attr[_URL] += _im_data;
550
+ }
551
+ break;
552
+ case C84: //[url=hello world] found
553
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
554
+ _tmp_tag.name = _URL;
555
+ _tmp_tag.type = tag::opening;
556
+ _parsed_tags.push_back(_tmp_tag);
557
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
558
+ _tmp_tag.clear();
559
+ break;
560
+
561
+ case C86: //[quote]
562
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
563
+ _tmp_tag.name = _QUOTE;
564
+ if(_tmp_tag.type == tag::opening)
565
+ _tmp_tag.attr.insert(make_pair(_QUOTE, ""));
566
+ _parsed_tags.push_back(_tmp_tag);
567
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
568
+ _tmp_tag.clear();
569
+ break;
570
+
571
+ case C88: //[quote]
572
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
573
+ _tmp_tag.name = _QUOTE;
574
+ _parsed_tags.push_back(_tmp_tag);
575
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
576
+ _tmp_tag.clear();
577
+ break;
578
+
579
+ case C90: //[quote=WORD+ accumulating
580
+ if(_tmp_tag.attr.find(_QUOTE) == _tmp_tag.attr.end()){
581
+ _tmp_tag.attr.insert(make_pair(_QUOTE, _im_data));
582
+ }else{
583
+ _tmp_tag.attr[_QUOTE] += _im_data;
584
+ }
585
+ break;
586
+ case C92: //[pre] found
587
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
588
+ _tmp_tag.name = _PRE;
589
+ _parsed_tags.push_back(_tmp_tag);
590
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
591
+ _tmp_tag.clear();
592
+ break;
593
+ case C94: //[code] found
594
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
595
+ _tmp_tag.name = _CODE;
596
+ _parsed_tags.push_back(_tmp_tag);
597
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
598
+ _tmp_tag.clear();
599
+ break;
600
+ case C96: //[hr] found
601
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
602
+ _tmp_tag.name = _HR;
603
+ _tmp_tag.has_closing_tag = false;
604
+ _parsed_tags.push_back(_tmp_tag);
605
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
606
+ _tmp_tag.clear();
607
+ break;
608
+ case C98: //[img] found
609
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
610
+ _tmp_tag.name = _IMG;
611
+ if(_tmp_tag.attr.find(_TITLE) == _tmp_tag.attr.end()){
612
+ _tmp_tag.attr.insert(make_pair(_TITLE, ""));
613
+ }
614
+ _parsed_tags.push_back(_tmp_tag);
615
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
616
+ _tmp_tag.clear();
617
+ break;
618
+ case C100: //[/img] found
619
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
620
+ _tmp_tag.name = _IMG;
621
+ _tmp_tag.type = tag::closing;
622
+ _parsed_tags.push_back(_tmp_tag);
623
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
624
+ _tmp_tag.clear();
625
+ break;
626
+ case C101: //[img].+ collecting URL
627
+ if(!_parsed_tags.empty() && _parsed_tags.back().name == _IMG){
628
+ if((_parsed_tags.back().attr).find(_IMG) == _parsed_tags.back().attr.end()){
629
+ _parsed_tags.back().attr.insert(make_pair(_IMG, _im_data));
630
+ }else{
631
+ _parsed_tags.back().attr[_IMG] += _im_data;
632
+ }
633
+ }
634
+ break;
635
+ case C104: //[img=.+ collecting HINT
636
+ if(_tmp_tag.attr.find(_TITLE) == _tmp_tag.attr.end()){
637
+ _tmp_tag.attr.insert(make_pair(_TITLE, _im_data));
638
+ }else{
639
+ _tmp_tag.attr[_TITLE] += _im_data;
640
+ }
641
+ break;
642
+
643
+ case C106: //[email] found
644
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
645
+ _tmp_tag.name = _EMAIL;
646
+ _parsed_tags.push_back(_tmp_tag);
647
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
648
+ _tmp_tag.clear();
649
+ break;
650
+
651
+ case C108: //[/email] found
652
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
653
+ _tmp_tag.name = _EMAIL;
654
+ _parsed_tags.push_back(_tmp_tag);
655
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
656
+ _tmp_tag.clear();
657
+ break;
658
+
659
+ case C109: //[email].+ collecting EMAIL
660
+ if(!_parsed_tags.empty() && _parsed_tags.back().name == _EMAIL){
661
+ if((_parsed_tags.back().attr).find(_EMAIL) == _parsed_tags.back().attr.end()){
662
+ _parsed_tags.back().attr.insert(make_pair(_EMAIL, _im_data));
663
+ }else{
664
+ _parsed_tags.back().attr[_EMAIL] += _im_data;
665
+ }
666
+ }
667
+
668
+ case C112: //[email=
669
+ if(_tmp_tag.attr.find(_EMAIL) == _tmp_tag.attr.end()){
670
+ _tmp_tag.attr.insert(make_pair(_EMAIL, _im_data));
671
+ }else{
672
+ _tmp_tag.attr[_EMAIL] += _im_data;
673
+ }
674
+ break;
675
+ case C113: //[email=mail to] found
676
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
677
+ _tmp_tag.name = _EMAIL;
678
+ _parsed_tags.push_back(_tmp_tag);
679
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
680
+ _tmp_tag.clear();
681
+ break;
682
+
683
+ case C115: //[list] found
684
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
685
+ _tmp_tag.name = _LIST;
686
+ _parsed_tags.push_back(_tmp_tag);
687
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
688
+ _tmp_tag.clear();
689
+ break;
690
+
691
+ case C117: //[*] found
692
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
693
+ _tmp_tag.name = _MULT;
694
+ _tmp_tag.has_closing_tag = false;
695
+ _parsed_tags.push_back(_tmp_tag);
696
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
697
+ _tmp_tag.clear();
698
+ break;
699
+
700
+ case C119: //[olist] found
701
+ _tmp_tag.right_bracket_pos = _parsed_data.length();
702
+ _tmp_tag.name = _OLIST;
703
+ _parsed_tags.push_back(_tmp_tag);
704
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "found [" << _tmp_tag.name <<"] tag state: " << _tmp_tag.type << std::endl;
705
+ _tmp_tag.clear();
706
+ break;
707
+ };
708
+ if(Parser[_current_state][14] == T){
709
+ _current_state = Parser[_current_state][16];
710
+ _bbcode_replacements();
711
+ }
712
+
713
+ }
714
+
715
+ }
716
+ }
717
+
718
+ //--------------------------------
719
+ // parser::bbcode_replacements
720
+ void parser::_bbcode_replacements(void){
721
+ string opening, closing;
722
+ _discarded_tags.clear();
723
+
724
+ if(!_parsed_tags.size()) return;//we have nothing to process
725
+
726
+ tag _cur_tag = _parsed_tags.back(); //taking the last tag
727
+
728
+ //just in case we have something like <hr> at the begining (no closing tag)
729
+ if(_cur_tag.has_closing_tag == false){
730
+ opening = _tag_replacement(_cur_tag);
731
+ //replacing opening tag
732
+ _parsed_data.erase(_cur_tag.left_bracket_pos, _cur_tag.right_bracket_pos - _cur_tag.left_bracket_pos);
733
+ _parsed_data.insert(_cur_tag.left_bracket_pos, opening);
734
+ _discarded_tags.push_back(_cur_tag);
735
+ _discarded_tags_cleanup();
736
+ if(!_parsed_tags.size()) return;//we have nothing more to process
737
+ _cur_tag = _parsed_tags.back(); //getting the last tag
738
+ }
739
+
740
+ // we're expecting to find an opening tag, going from the last closed tag (last tag is not included)
741
+ for(tags::reverse_iterator ci = _parsed_tags.rbegin() + 1; ci != _parsed_tags.rend(); ci++){
742
+ if( _cur_tag.type == tag::closing){
743
+ tag _t = *ci;
744
+ if((*ci).name == _cur_tag.name && (*ci).type == tag::opening){ //make sure we found the same openning tag
745
+ opening = _tag_replacement(*ci);
746
+ closing = _tag_replacement(_cur_tag);
747
+ //replacing closing tag
748
+ _parsed_data.erase(_cur_tag.left_bracket_pos, _cur_tag.right_bracket_pos - _cur_tag.left_bracket_pos);
749
+ _parsed_data.insert(_cur_tag.left_bracket_pos, closing);
750
+ //replacing opening tag
751
+ _parsed_data.erase((*ci).left_bracket_pos, (*ci).right_bracket_pos - (*ci).left_bracket_pos);
752
+ _parsed_data.insert((*ci).left_bracket_pos, opening);
753
+ //now when we made replacements, we're going to removed processed tags
754
+ _discarded_tags.push_back(*ci);
755
+ _discarded_tags.push_back(_cur_tag);
756
+ break;
757
+ }else{
758
+ if((*ci).type == tag::opening){ //we found overlapped tag, let's mark it for deletion
759
+ if(_pconf._config && bbcode::DEBUG_MODE_ON) std::cout << "overlapped tag" << (*ci).name;
760
+ _discarded_tags.push_back(*ci);
761
+ }
762
+ }
763
+ }
764
+ }
765
+ _discarded_tags_cleanup();
766
+ }
767
+ //--------------------------------
768
+ // parser::_tag_replacement(tag& t)
769
+ string parser::_tag_replacement(tag& t){
770
+ string res;
771
+ string tmp;
772
+ supported_tag_storage::const_iterator ci;
773
+
774
+ if(t.type == tag::closing)
775
+ ci = _supported_tag_storage.find(_HTML_BSLASH + t.name);
776
+ else
777
+ ci = _supported_tag_storage.find(t.name);
778
+
779
+ if(ci == _supported_tag_storage.end())
780
+ return _BBTAG_IS_UNAVAILABLE_RET; //in case you don't want to support some of phpbb tags just upload new schema
781
+
782
+ res = (*ci).second;
783
+
784
+ if(!t.attr.empty()){
785
+ for(tag::attribs::const_iterator ci = t.attr.begin(); ci != t.attr.end(); ci++){
786
+ size_t p = res.find(_SCHEMA_MACRO_PREFIX + (*ci).first);
787
+ if(p != string::npos){
788
+ res.erase(p, (*ci).first.length() + _SCHEMA_MACRO_PREFIX.length());
789
+ //javascript: guard
790
+ tmp = (*ci).second;
791
+ tmp = _js_guard(tmp);
792
+ res.insert(p, tmp);
793
+ }
794
+ }
795
+ }else{
796
+ size_t p = res.find(_SCHEMA_MACRO_PREFIX + (*ci).first);
797
+ //in case we have to clean up our macros
798
+ if(p != string::npos)
799
+ res.erase(p, (*ci).first.length() + _SCHEMA_MACRO_PREFIX.length());
800
+ }
801
+
802
+ return res;
803
+ }
804
+
805
+ //---------------------------------
806
+ //parser::_load_supported_tag_scheme
807
+ void parser::load_supported_tag_schema(const string& schema){
808
+ strings r = split_string(schema, _SHEMA_DELIMITER, false);
809
+ _supported_tag_storage.clear();
810
+ strings r2;
811
+ size_t sz = r.size();
812
+ for(strings::const_iterator ci = r.begin(); ci != r.end(); ci++){
813
+ r2 = split_string(*ci, _SHEMA_TAG_DELIMITER);
814
+ if(r2.size() != 2) throw runtime_error(_THIS_MODULE_STR_IDENT + " bad bb tag schema. " + *ci);
815
+ _supported_tag_storage.insert(make_pair(trim(r2[0]), trim(r2[1])));
816
+ }
817
+ }
818
+ //---------------------------------
819
+ //parser::_current_tag_schema
820
+ string parser::current_tag_schema(void) const{
821
+ stringstream r;
822
+ for(supported_tag_storage::const_iterator ci = _supported_tag_storage.begin(); ci != _supported_tag_storage.end(); ci++){
823
+ r << (*ci).first << "|" << (*ci).second << ";" << std::endl;
824
+ }
825
+ return r.str();
826
+ }
827
+ //---------------------------------
828
+ //parser::_js_guard
829
+ string parser::_js_guard(string str){
830
+ size_t _colon_offset = str.find_first_of(_COLON);
831
+ if(_colon_offset != string::npos && _colon_offset >= _MAXIMUM_PROTO_LENGTH)
832
+ str.erase(0, _colon_offset + 1);
833
+ return str;
834
+
835
+ }
836
+ //---------------------------------
837
+ //parser::_discarded_tags_cleanup
838
+ void parser::_discarded_tags_cleanup(void){
839
+ //we're discarding overlapped|used tags, we don't need them any longer
840
+ if(!_discarded_tags.empty()){
841
+ for(tags::const_iterator ci = _discarded_tags.begin(); ci != _discarded_tags.end(); ci++){
842
+ tags::iterator it = find(_parsed_tags.begin(), _parsed_tags.end(), *ci);
843
+ if(it != _parsed_tags.end()){
844
+ _parsed_tags.erase(it);
845
+ }
846
+
847
+ }
848
+ }
849
+ }
850
+
851
+ }