bbcodelib 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/Manifest.txt +21 -0
- data/README.rdoc +39 -0
- data/Rakefile +34 -0
- data/bbcodelib.gemspec +34 -0
- data/ext/Makefile +150 -0
- data/ext/bbcode.cpp +37 -0
- data/ext/bbcode_config.h +179 -0
- data/ext/bbcode_lexer.cpp +297 -0
- data/ext/bbcode_lexer.h +99 -0
- data/ext/bbcode_parser.cpp +851 -0
- data/ext/bbcode_parser.h +159 -0
- data/ext/bbcode_utils.cpp +143 -0
- data/ext/bbcode_utils.h +144 -0
- data/ext/extconf.rb +13 -0
- data/lib/bbcodelib.rb +6 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/test/test_bbcodelib.rb +11 -0
- data/test/test_helper.rb +3 -0
- metadata +89 -0
@@ -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
|
+
}
|