arti_mark 0.1.beta2 → 0.1.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/arti_mark/parser.kpeg +28 -30
- data/lib/arti_mark/parser.kpeg.rb +454 -452
- data/lib/arti_mark/version.rb +1 -1
- data/spec/arti_mark_spec.rb +15 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a753ec42964f583942ab77b63d3b65156c06311
|
4
|
+
data.tar.gz: 399b0886774cdea1efee7c110b756016f379d6ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9123fd9378a7dd31e676332ab8828f83b6c1fd2d39dea64109af297e7e736438fd65730119d365814b43d44a160b07bb719007c3ab85d7fa5191a1217e277212
|
7
|
+
data.tar.gz: 2b5d2f0827b7d224487793542fd59f3217daf0403a55d0c6d2da02c7264c8cb2e5be13c45f7e1be70d20b2679304e962227f692a0cac8d089494731374d61729
|
data/lib/arti_mark/parser.kpeg
CHANGED
@@ -4,16 +4,16 @@
|
|
4
4
|
eof = !.
|
5
5
|
space = ' ' | '\t'
|
6
6
|
eof_comment = lh space* "#" (!eof .)*
|
7
|
-
comment = lh space* "#" (!nl .)* nl
|
8
|
-
|
7
|
+
comment = lh space* "#" (!nl .)* nl empty_line*
|
9
8
|
- = ( space | comment )*
|
10
9
|
empty_line = lh - nl
|
11
10
|
nl = /\r?\n/
|
12
11
|
lh = /^/
|
13
|
-
le = nl |
|
12
|
+
le = nl | eof
|
14
13
|
word = < /[\w0-9]/ ( '-' | /[\w0-9]/ )* > { text }
|
15
14
|
num = < [0-9]+ > { text.to_i }
|
16
15
|
|
16
|
+
|
17
17
|
#common syntax
|
18
18
|
classname = '.' word:classname { classname }
|
19
19
|
classnames = (classname)*:classnames { classnames }
|
@@ -23,35 +23,31 @@ idnames = (idname)*:idnames { idnames }
|
|
23
23
|
commandname = word:name idnames?:idnames classnames?:classes { {:name => name, :ids => idnames, :classes => classes} }
|
24
24
|
parameter = < ( /[^,)]/* | '"' /[^"]/* '"' | "'" /[^']/* "'" ) > { text }
|
25
25
|
parameters = < parameter (',' parameter)* > { text }
|
26
|
-
command = commandname:
|
26
|
+
command = commandname:cn ('(' - parameters:arg - ')')? { arg ||= ''; cn.merge({ :args => arg.split(',') }) }
|
27
27
|
|
28
28
|
# paragraph
|
29
|
-
implicit_paragraph = < (!paragraph_delimiter - documentline -
|
29
|
+
implicit_paragraph = < (!paragraph_delimiter - documentline:p -) > { create_item(:paragraph, nil, p, raw: text) }
|
30
30
|
paragraph = explicit_paragraph | implicit_paragraph
|
31
31
|
|
32
32
|
# paragraph_group
|
33
|
-
paragraph_group = <
|
33
|
+
paragraph_group = < paragraph+:p empty_line* > { create_item(:paragraph_group, nil, p, raw: text) }
|
34
34
|
|
35
35
|
# explicit block
|
36
|
-
blockhead = lh - command:command - '{' -
|
37
|
-
blockend = lh - '}' - le
|
36
|
+
blockhead = lh - command:command - '{' - nl empty_line* { command }
|
37
|
+
blockend = lh - '}' - le empty_line*
|
38
38
|
blockbody = (!blockend block)+:body { body }
|
39
|
-
explicit_block = < blockhead:head blockbody:body blockend > { create_item(:block, head, body, raw: text) }
|
39
|
+
explicit_block = < blockhead:head - blockbody:body - blockend > { create_item(:block, head, body, raw: text) }
|
40
40
|
|
41
41
|
# inline command
|
42
42
|
inline = img_inline | common_inline
|
43
|
-
common_inline = < '[' command:
|
44
|
-
|
45
|
-
|
46
|
-
img_command = command:command &{ command[:name] == 'img' && command[:args].size == 2}
|
47
|
-
img_inline = < '[' img_command:command ']' > { create_item(:inline, command, nil, raw: text) }
|
43
|
+
common_inline = < '[' command:c '{' documentcontent_except('}'):content '}' ']' > { create_item(:inline, c, content, raw: text) }
|
44
|
+
img_command = command:c &{ c[:name] == 'img' && c[:args].size == 2}
|
45
|
+
img_inline = < '[' img_command:c ']' > { create_item(:inline, c, nil, raw: text) }
|
48
46
|
|
49
47
|
# special line commands
|
50
|
-
# newpage
|
51
|
-
newpage = line_command:item &{ item[:name] == 'newpage' }
|
52
48
|
# explicit paragraph
|
53
|
-
explicit_paragraph_command = command:
|
54
|
-
explicit_paragraph = < lh - explicit_paragraph_command:
|
49
|
+
explicit_paragraph_command = command:c &{ c[:name] == 'p' }
|
50
|
+
explicit_paragraph = < lh - explicit_paragraph_command:c ':' documentcontent?:content le empty_line*> { create_item(:paragraph, c, content, raw:text) }
|
55
51
|
|
56
52
|
# unordered list
|
57
53
|
unordered_list = < unordered_item+:items > { create_item(:ul, nil, items, raw: text) }
|
@@ -69,12 +65,20 @@ items_list = unordered_list | ordered_list | definition_list
|
|
69
65
|
|
70
66
|
|
71
67
|
# generic line command
|
72
|
-
line_command = < lh -
|
68
|
+
line_command = < lh - !explicit_paragraph_command command:c ':' documentcontent?:content - le empty_line* > { create_item(:line_command, c, content, raw: text) }
|
73
69
|
|
74
70
|
# blocks
|
75
|
-
|
76
|
-
|
77
|
-
|
71
|
+
line_block = items_list | line_command
|
72
|
+
block = (line_block | explicit_block | paragraph_group):block empty_line* {block}
|
73
|
+
block_delimiter = blockhead | blockend
|
74
|
+
paragraph_delimiter = block_delimiter | line_block
|
75
|
+
|
76
|
+
|
77
|
+
#header
|
78
|
+
stylesheets = < lh - 'stylesheets:' !le charstring:s nl > { create_item(:stylesheets, {:stylesheets => s.split(',').map(&:strip)}, nil, raw:text) }
|
79
|
+
title = < lh - 'title:' !le charstring:t nl > { create_item(:title, {:title => t }, nil, raw:text) }
|
80
|
+
lang = < lh - 'lang:' !le charstring:l nl > { create_item(:lang, {:lang => l }, nil, raw:text) }
|
81
|
+
header = (stylesheets | title | lang) empty_line*
|
78
82
|
|
79
83
|
# texts
|
80
84
|
char = < /[[:print:]]/ > { text }
|
@@ -83,15 +87,9 @@ char_except(e) = char:c &{ c != e }
|
|
83
87
|
charstring_except(e) = < char_except(e)* > { text }
|
84
88
|
documentcontent_except(e) = (inline | !inline char_except(e))+:content ~parse_text(content)
|
85
89
|
documentcontent = (inline | !inline char)+:content ~parse_text(content)
|
86
|
-
documentline = lh documentcontent:content
|
87
|
-
|
88
|
-
#header
|
89
|
-
stylesheets = < lh - 'stylesheets:' (!le charstring):stylesheets le > { create_item(:stylesheets, {:stylesheets => stylesheets.split(',').map(&:strip)}, nil, raw:text) }
|
90
|
-
title = < lh - 'title:' (!le charstring):title le > { create_item(:title, {:title => title }, nil, raw:text) }
|
91
|
-
lang = < lh - 'lang:' (!le charstring):lang le > { create_item(:lang, {:lang => lang }, nil, raw:text) }
|
92
|
-
header = stylesheets | title | lang
|
90
|
+
documentline = lh documentcontent:content le { content }
|
93
91
|
|
94
92
|
#root
|
95
|
-
root = header*:headers block*:blocks eof_comment? eof { headers
|
93
|
+
root = header*:headers - block*:blocks - eof_comment? eof { headers.concat blocks.select{ |x| !x.nil?} }
|
96
94
|
|
97
95
|
|
@@ -87,7 +87,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
87
87
|
return _tmp
|
88
88
|
end
|
89
89
|
|
90
|
-
# comment = lh space* "#" (!nl .)* nl
|
90
|
+
# comment = lh space* "#" (!nl .)* nl empty_line*
|
91
91
|
def _comment
|
92
92
|
|
93
93
|
_save = self.pos
|
@@ -138,6 +138,15 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
138
138
|
break
|
139
139
|
end
|
140
140
|
_tmp = apply(:_nl)
|
141
|
+
unless _tmp
|
142
|
+
self.pos = _save
|
143
|
+
break
|
144
|
+
end
|
145
|
+
while true
|
146
|
+
_tmp = apply(:_empty_line)
|
147
|
+
break unless _tmp
|
148
|
+
end
|
149
|
+
_tmp = true
|
141
150
|
unless _tmp
|
142
151
|
self.pos = _save
|
143
152
|
end
|
@@ -210,7 +219,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
210
219
|
return _tmp
|
211
220
|
end
|
212
221
|
|
213
|
-
# le = (nl |
|
222
|
+
# le = (nl | eof)
|
214
223
|
def _le
|
215
224
|
|
216
225
|
_save = self.pos
|
@@ -218,7 +227,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
218
227
|
_tmp = apply(:_nl)
|
219
228
|
break if _tmp
|
220
229
|
self.pos = _save
|
221
|
-
_tmp =
|
230
|
+
_tmp = apply(:_eof)
|
222
231
|
break if _tmp
|
223
232
|
self.pos = _save
|
224
233
|
break
|
@@ -644,13 +653,13 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
644
653
|
return _tmp
|
645
654
|
end
|
646
655
|
|
647
|
-
# command = commandname:
|
656
|
+
# command = commandname:cn ("(" - parameters:arg - ")")? { arg ||= ''; cn.merge({ :args => arg.split(',') }) }
|
648
657
|
def _command
|
649
658
|
|
650
659
|
_save = self.pos
|
651
660
|
while true # sequence
|
652
661
|
_tmp = apply(:_commandname)
|
653
|
-
|
662
|
+
cn = @result
|
654
663
|
unless _tmp
|
655
664
|
self.pos = _save
|
656
665
|
break
|
@@ -695,7 +704,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
695
704
|
self.pos = _save
|
696
705
|
break
|
697
706
|
end
|
698
|
-
@result = begin; arg ||= '';
|
707
|
+
@result = begin; arg ||= ''; cn.merge({ :args => arg.split(',') }) ; end
|
699
708
|
_tmp = true
|
700
709
|
unless _tmp
|
701
710
|
self.pos = _save
|
@@ -707,7 +716,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
707
716
|
return _tmp
|
708
717
|
end
|
709
718
|
|
710
|
-
# implicit_paragraph = <
|
719
|
+
# implicit_paragraph = < !paragraph_delimiter - documentline:p - > { create_item(:paragraph, nil, p, raw: text) }
|
711
720
|
def _implicit_paragraph
|
712
721
|
|
713
722
|
_save = self.pos
|
@@ -730,6 +739,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
730
739
|
break
|
731
740
|
end
|
732
741
|
_tmp = apply(:_documentline)
|
742
|
+
p = @result
|
733
743
|
unless _tmp
|
734
744
|
self.pos = _save1
|
735
745
|
break
|
@@ -741,7 +751,6 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
741
751
|
break
|
742
752
|
end # end sequence
|
743
753
|
|
744
|
-
paragraph = @result
|
745
754
|
if _tmp
|
746
755
|
text = get_text(_text_start)
|
747
756
|
end
|
@@ -749,7 +758,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
749
758
|
self.pos = _save
|
750
759
|
break
|
751
760
|
end
|
752
|
-
@result = begin; create_item(:paragraph, nil,
|
761
|
+
@result = begin; create_item(:paragraph, nil, p, raw: text) ; end
|
753
762
|
_tmp = true
|
754
763
|
unless _tmp
|
755
764
|
self.pos = _save
|
@@ -779,7 +788,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
779
788
|
return _tmp
|
780
789
|
end
|
781
790
|
|
782
|
-
# paragraph_group = <
|
791
|
+
# paragraph_group = < paragraph+:p empty_line* > { create_item(:paragraph_group, nil, p, raw: text) }
|
783
792
|
def _paragraph_group
|
784
793
|
|
785
794
|
_save = self.pos
|
@@ -790,61 +799,11 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
790
799
|
while true # sequence
|
791
800
|
_save2 = self.pos
|
792
801
|
_ary = []
|
793
|
-
|
794
|
-
_save3 = self.pos
|
795
|
-
while true # choice
|
796
|
-
|
797
|
-
_save4 = self.pos
|
798
|
-
while true # sequence
|
799
|
-
_tmp = apply(:_paragraph)
|
800
|
-
unless _tmp
|
801
|
-
self.pos = _save4
|
802
|
-
break
|
803
|
-
end
|
804
|
-
_tmp = apply(:_nl)
|
805
|
-
unless _tmp
|
806
|
-
self.pos = _save4
|
807
|
-
end
|
808
|
-
break
|
809
|
-
end # end sequence
|
810
|
-
|
811
|
-
break if _tmp
|
812
|
-
self.pos = _save3
|
813
|
-
_tmp = apply(:_paragraph)
|
814
|
-
break if _tmp
|
815
|
-
self.pos = _save3
|
816
|
-
break
|
817
|
-
end # end choice
|
818
|
-
|
802
|
+
_tmp = apply(:_paragraph)
|
819
803
|
if _tmp
|
820
804
|
_ary << @result
|
821
805
|
while true
|
822
|
-
|
823
|
-
_save5 = self.pos
|
824
|
-
while true # choice
|
825
|
-
|
826
|
-
_save6 = self.pos
|
827
|
-
while true # sequence
|
828
|
-
_tmp = apply(:_paragraph)
|
829
|
-
unless _tmp
|
830
|
-
self.pos = _save6
|
831
|
-
break
|
832
|
-
end
|
833
|
-
_tmp = apply(:_nl)
|
834
|
-
unless _tmp
|
835
|
-
self.pos = _save6
|
836
|
-
end
|
837
|
-
break
|
838
|
-
end # end sequence
|
839
|
-
|
840
|
-
break if _tmp
|
841
|
-
self.pos = _save5
|
842
|
-
_tmp = apply(:_paragraph)
|
843
|
-
break if _tmp
|
844
|
-
self.pos = _save5
|
845
|
-
break
|
846
|
-
end # end choice
|
847
|
-
|
806
|
+
_tmp = apply(:_paragraph)
|
848
807
|
_ary << @result if _tmp
|
849
808
|
break unless _tmp
|
850
809
|
end
|
@@ -853,7 +812,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
853
812
|
else
|
854
813
|
self.pos = _save2
|
855
814
|
end
|
856
|
-
|
815
|
+
p = @result
|
857
816
|
unless _tmp
|
858
817
|
self.pos = _save1
|
859
818
|
break
|
@@ -876,7 +835,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
876
835
|
self.pos = _save
|
877
836
|
break
|
878
837
|
end
|
879
|
-
@result = begin; create_item(:paragraph_group, nil,
|
838
|
+
@result = begin; create_item(:paragraph_group, nil, p, raw: text) ; end
|
880
839
|
_tmp = true
|
881
840
|
unless _tmp
|
882
841
|
self.pos = _save
|
@@ -888,7 +847,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
888
847
|
return _tmp
|
889
848
|
end
|
890
849
|
|
891
|
-
# blockhead = lh - command:command - "{" -
|
850
|
+
# blockhead = lh - command:command - "{" - nl empty_line* { command }
|
892
851
|
def _blockhead
|
893
852
|
|
894
853
|
_save = self.pos
|
@@ -924,7 +883,16 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
924
883
|
self.pos = _save
|
925
884
|
break
|
926
885
|
end
|
927
|
-
_tmp = apply(:
|
886
|
+
_tmp = apply(:_nl)
|
887
|
+
unless _tmp
|
888
|
+
self.pos = _save
|
889
|
+
break
|
890
|
+
end
|
891
|
+
while true
|
892
|
+
_tmp = apply(:_empty_line)
|
893
|
+
break unless _tmp
|
894
|
+
end
|
895
|
+
_tmp = true
|
928
896
|
unless _tmp
|
929
897
|
self.pos = _save
|
930
898
|
break
|
@@ -941,7 +909,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
941
909
|
return _tmp
|
942
910
|
end
|
943
911
|
|
944
|
-
# blockend = lh - "}" - le
|
912
|
+
# blockend = lh - "}" - le empty_line*
|
945
913
|
def _blockend
|
946
914
|
|
947
915
|
_save = self.pos
|
@@ -967,6 +935,15 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
967
935
|
break
|
968
936
|
end
|
969
937
|
_tmp = apply(:_le)
|
938
|
+
unless _tmp
|
939
|
+
self.pos = _save
|
940
|
+
break
|
941
|
+
end
|
942
|
+
while true
|
943
|
+
_tmp = apply(:_empty_line)
|
944
|
+
break unless _tmp
|
945
|
+
end
|
946
|
+
_tmp = true
|
970
947
|
unless _tmp
|
971
948
|
self.pos = _save
|
972
949
|
end
|
@@ -1048,7 +1025,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1048
1025
|
return _tmp
|
1049
1026
|
end
|
1050
1027
|
|
1051
|
-
# explicit_block = < blockhead:head blockbody:body blockend > { create_item(:block, head, body, raw: text) }
|
1028
|
+
# explicit_block = < blockhead:head - blockbody:body - blockend > { create_item(:block, head, body, raw: text) }
|
1052
1029
|
def _explicit_block
|
1053
1030
|
|
1054
1031
|
_save = self.pos
|
@@ -1063,12 +1040,22 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1063
1040
|
self.pos = _save1
|
1064
1041
|
break
|
1065
1042
|
end
|
1043
|
+
_tmp = apply(:__hyphen_)
|
1044
|
+
unless _tmp
|
1045
|
+
self.pos = _save1
|
1046
|
+
break
|
1047
|
+
end
|
1066
1048
|
_tmp = apply(:_blockbody)
|
1067
1049
|
body = @result
|
1068
1050
|
unless _tmp
|
1069
1051
|
self.pos = _save1
|
1070
1052
|
break
|
1071
1053
|
end
|
1054
|
+
_tmp = apply(:__hyphen_)
|
1055
|
+
unless _tmp
|
1056
|
+
self.pos = _save1
|
1057
|
+
break
|
1058
|
+
end
|
1072
1059
|
_tmp = apply(:_blockend)
|
1073
1060
|
unless _tmp
|
1074
1061
|
self.pos = _save1
|
@@ -1113,7 +1100,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1113
1100
|
return _tmp
|
1114
1101
|
end
|
1115
1102
|
|
1116
|
-
# common_inline = < "[" command:
|
1103
|
+
# common_inline = < "[" command:c "{" documentcontent_except('}'):content "}" "]" > { create_item(:inline, c, content, raw: text) }
|
1117
1104
|
def _common_inline
|
1118
1105
|
|
1119
1106
|
_save = self.pos
|
@@ -1128,7 +1115,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1128
1115
|
break
|
1129
1116
|
end
|
1130
1117
|
_tmp = apply(:_command)
|
1131
|
-
|
1118
|
+
c = @result
|
1132
1119
|
unless _tmp
|
1133
1120
|
self.pos = _save1
|
1134
1121
|
break
|
@@ -1163,7 +1150,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1163
1150
|
self.pos = _save
|
1164
1151
|
break
|
1165
1152
|
end
|
1166
|
-
@result = begin; create_item(:inline,
|
1153
|
+
@result = begin; create_item(:inline, c, content, raw: text) ; end
|
1167
1154
|
_tmp = true
|
1168
1155
|
unless _tmp
|
1169
1156
|
self.pos = _save
|
@@ -1175,19 +1162,19 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1175
1162
|
return _tmp
|
1176
1163
|
end
|
1177
1164
|
|
1178
|
-
# img_command = command:
|
1165
|
+
# img_command = command:c &{ c[:name] == 'img' && c[:args].size == 2}
|
1179
1166
|
def _img_command
|
1180
1167
|
|
1181
1168
|
_save = self.pos
|
1182
1169
|
while true # sequence
|
1183
1170
|
_tmp = apply(:_command)
|
1184
|
-
|
1171
|
+
c = @result
|
1185
1172
|
unless _tmp
|
1186
1173
|
self.pos = _save
|
1187
1174
|
break
|
1188
1175
|
end
|
1189
1176
|
_save1 = self.pos
|
1190
|
-
_tmp = begin;
|
1177
|
+
_tmp = begin; c[:name] == 'img' && c[:args].size == 2; end
|
1191
1178
|
self.pos = _save1
|
1192
1179
|
unless _tmp
|
1193
1180
|
self.pos = _save
|
@@ -1199,7 +1186,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1199
1186
|
return _tmp
|
1200
1187
|
end
|
1201
1188
|
|
1202
|
-
# img_inline = < "[" img_command:
|
1189
|
+
# img_inline = < "[" img_command:c "]" > { create_item(:inline, c, nil, raw: text) }
|
1203
1190
|
def _img_inline
|
1204
1191
|
|
1205
1192
|
_save = self.pos
|
@@ -1214,7 +1201,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1214
1201
|
break
|
1215
1202
|
end
|
1216
1203
|
_tmp = apply(:_img_command)
|
1217
|
-
|
1204
|
+
c = @result
|
1218
1205
|
unless _tmp
|
1219
1206
|
self.pos = _save1
|
1220
1207
|
break
|
@@ -1233,7 +1220,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1233
1220
|
self.pos = _save
|
1234
1221
|
break
|
1235
1222
|
end
|
1236
|
-
@result = begin; create_item(:inline,
|
1223
|
+
@result = begin; create_item(:inline, c, nil, raw: text) ; end
|
1237
1224
|
_tmp = true
|
1238
1225
|
unless _tmp
|
1239
1226
|
self.pos = _save
|
@@ -1245,43 +1232,19 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1245
1232
|
return _tmp
|
1246
1233
|
end
|
1247
1234
|
|
1248
|
-
#
|
1249
|
-
def _newpage
|
1250
|
-
|
1251
|
-
_save = self.pos
|
1252
|
-
while true # sequence
|
1253
|
-
_tmp = apply(:_line_command)
|
1254
|
-
item = @result
|
1255
|
-
unless _tmp
|
1256
|
-
self.pos = _save
|
1257
|
-
break
|
1258
|
-
end
|
1259
|
-
_save1 = self.pos
|
1260
|
-
_tmp = begin; item[:name] == 'newpage' ; end
|
1261
|
-
self.pos = _save1
|
1262
|
-
unless _tmp
|
1263
|
-
self.pos = _save
|
1264
|
-
end
|
1265
|
-
break
|
1266
|
-
end # end sequence
|
1267
|
-
|
1268
|
-
set_failed_rule :_newpage unless _tmp
|
1269
|
-
return _tmp
|
1270
|
-
end
|
1271
|
-
|
1272
|
-
# explicit_paragraph_command = command:command &{ command[:name] == 'p' }
|
1235
|
+
# explicit_paragraph_command = command:c &{ c[:name] == 'p' }
|
1273
1236
|
def _explicit_paragraph_command
|
1274
1237
|
|
1275
1238
|
_save = self.pos
|
1276
1239
|
while true # sequence
|
1277
1240
|
_tmp = apply(:_command)
|
1278
|
-
|
1241
|
+
c = @result
|
1279
1242
|
unless _tmp
|
1280
1243
|
self.pos = _save
|
1281
1244
|
break
|
1282
1245
|
end
|
1283
1246
|
_save1 = self.pos
|
1284
|
-
_tmp = begin;
|
1247
|
+
_tmp = begin; c[:name] == 'p' ; end
|
1285
1248
|
self.pos = _save1
|
1286
1249
|
unless _tmp
|
1287
1250
|
self.pos = _save
|
@@ -1293,7 +1256,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1293
1256
|
return _tmp
|
1294
1257
|
end
|
1295
1258
|
|
1296
|
-
# explicit_paragraph = < lh - explicit_paragraph_command:
|
1259
|
+
# explicit_paragraph = < lh - explicit_paragraph_command:c ":" documentcontent?:content le empty_line* > { create_item(:paragraph, c, content, raw:text) }
|
1297
1260
|
def _explicit_paragraph
|
1298
1261
|
|
1299
1262
|
_save = self.pos
|
@@ -1313,7 +1276,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1313
1276
|
break
|
1314
1277
|
end
|
1315
1278
|
_tmp = apply(:_explicit_paragraph_command)
|
1316
|
-
|
1279
|
+
c = @result
|
1317
1280
|
unless _tmp
|
1318
1281
|
self.pos = _save1
|
1319
1282
|
break
|
@@ -1336,6 +1299,15 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1336
1299
|
break
|
1337
1300
|
end
|
1338
1301
|
_tmp = apply(:_le)
|
1302
|
+
unless _tmp
|
1303
|
+
self.pos = _save1
|
1304
|
+
break
|
1305
|
+
end
|
1306
|
+
while true
|
1307
|
+
_tmp = apply(:_empty_line)
|
1308
|
+
break unless _tmp
|
1309
|
+
end
|
1310
|
+
_tmp = true
|
1339
1311
|
unless _tmp
|
1340
1312
|
self.pos = _save1
|
1341
1313
|
end
|
@@ -1349,7 +1321,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1349
1321
|
self.pos = _save
|
1350
1322
|
break
|
1351
1323
|
end
|
1352
|
-
@result = begin; create_item(:paragraph,
|
1324
|
+
@result = begin; create_item(:paragraph, c, content, raw:text) ; end
|
1353
1325
|
_tmp = true
|
1354
1326
|
unless _tmp
|
1355
1327
|
self.pos = _save
|
@@ -1684,7 +1656,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1684
1656
|
return _tmp
|
1685
1657
|
end
|
1686
1658
|
|
1687
|
-
# line_command = < lh -
|
1659
|
+
# line_command = < lh - !explicit_paragraph_command command:c ":" documentcontent?:content - le empty_line* > { create_item(:line_command, c, content, raw: text) }
|
1688
1660
|
def _line_command
|
1689
1661
|
|
1690
1662
|
_save = self.pos
|
@@ -1703,25 +1675,16 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1703
1675
|
self.pos = _save1
|
1704
1676
|
break
|
1705
1677
|
end
|
1706
|
-
|
1707
1678
|
_save2 = self.pos
|
1708
|
-
|
1709
|
-
|
1710
|
-
|
1711
|
-
|
1712
|
-
self.pos =
|
1713
|
-
unless _tmp
|
1714
|
-
self.pos = _save2
|
1715
|
-
break
|
1716
|
-
end
|
1717
|
-
_tmp = apply(:_command)
|
1718
|
-
unless _tmp
|
1719
|
-
self.pos = _save2
|
1720
|
-
end
|
1679
|
+
_tmp = apply(:_explicit_paragraph_command)
|
1680
|
+
_tmp = _tmp ? nil : true
|
1681
|
+
self.pos = _save2
|
1682
|
+
unless _tmp
|
1683
|
+
self.pos = _save1
|
1721
1684
|
break
|
1722
|
-
end
|
1723
|
-
|
1724
|
-
|
1685
|
+
end
|
1686
|
+
_tmp = apply(:_command)
|
1687
|
+
c = @result
|
1725
1688
|
unless _tmp
|
1726
1689
|
self.pos = _save1
|
1727
1690
|
break
|
@@ -1731,19 +1694,33 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1731
1694
|
self.pos = _save1
|
1732
1695
|
break
|
1733
1696
|
end
|
1734
|
-
|
1697
|
+
_save3 = self.pos
|
1735
1698
|
_tmp = apply(:_documentcontent)
|
1736
1699
|
@result = nil unless _tmp
|
1737
1700
|
unless _tmp
|
1738
1701
|
_tmp = true
|
1739
|
-
self.pos =
|
1702
|
+
self.pos = _save3
|
1740
1703
|
end
|
1741
1704
|
content = @result
|
1742
1705
|
unless _tmp
|
1743
1706
|
self.pos = _save1
|
1744
1707
|
break
|
1745
1708
|
end
|
1709
|
+
_tmp = apply(:__hyphen_)
|
1710
|
+
unless _tmp
|
1711
|
+
self.pos = _save1
|
1712
|
+
break
|
1713
|
+
end
|
1746
1714
|
_tmp = apply(:_le)
|
1715
|
+
unless _tmp
|
1716
|
+
self.pos = _save1
|
1717
|
+
break
|
1718
|
+
end
|
1719
|
+
while true
|
1720
|
+
_tmp = apply(:_empty_line)
|
1721
|
+
break unless _tmp
|
1722
|
+
end
|
1723
|
+
_tmp = true
|
1747
1724
|
unless _tmp
|
1748
1725
|
self.pos = _save1
|
1749
1726
|
end
|
@@ -1757,7 +1734,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1757
1734
|
self.pos = _save
|
1758
1735
|
break
|
1759
1736
|
end
|
1760
|
-
@result = begin; create_item(:line_command,
|
1737
|
+
@result = begin; create_item(:line_command, c, content, raw: text) ; end
|
1761
1738
|
_tmp = true
|
1762
1739
|
unless _tmp
|
1763
1740
|
self.pos = _save
|
@@ -1769,8 +1746,8 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1769
1746
|
return _tmp
|
1770
1747
|
end
|
1771
1748
|
|
1772
|
-
#
|
1773
|
-
def
|
1749
|
+
# line_block = (items_list | line_command)
|
1750
|
+
def _line_block
|
1774
1751
|
|
1775
1752
|
_save = self.pos
|
1776
1753
|
while true # choice
|
@@ -1780,33 +1757,60 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1780
1757
|
_tmp = apply(:_line_command)
|
1781
1758
|
break if _tmp
|
1782
1759
|
self.pos = _save
|
1783
|
-
|
1784
|
-
|
1785
|
-
|
1786
|
-
|
1787
|
-
|
1788
|
-
|
1760
|
+
break
|
1761
|
+
end # end choice
|
1762
|
+
|
1763
|
+
set_failed_rule :_line_block unless _tmp
|
1764
|
+
return _tmp
|
1765
|
+
end
|
1766
|
+
|
1767
|
+
# block = (line_block | explicit_block | paragraph_group):block empty_line* {block}
|
1768
|
+
def _block
|
1769
|
+
|
1770
|
+
_save = self.pos
|
1771
|
+
while true # sequence
|
1772
|
+
|
1789
1773
|
_save1 = self.pos
|
1790
|
-
|
1791
|
-
|
1792
|
-
|
1793
|
-
|
1794
|
-
|
1795
|
-
|
1796
|
-
|
1797
|
-
|
1774
|
+
while true # choice
|
1775
|
+
_tmp = apply(:_line_block)
|
1776
|
+
break if _tmp
|
1777
|
+
self.pos = _save1
|
1778
|
+
_tmp = apply(:_explicit_block)
|
1779
|
+
break if _tmp
|
1780
|
+
self.pos = _save1
|
1781
|
+
_tmp = apply(:_paragraph_group)
|
1782
|
+
break if _tmp
|
1798
1783
|
self.pos = _save1
|
1784
|
+
break
|
1785
|
+
end # end choice
|
1786
|
+
|
1787
|
+
block = @result
|
1788
|
+
unless _tmp
|
1789
|
+
self.pos = _save
|
1790
|
+
break
|
1791
|
+
end
|
1792
|
+
while true
|
1793
|
+
_tmp = apply(:_empty_line)
|
1794
|
+
break unless _tmp
|
1795
|
+
end
|
1796
|
+
_tmp = true
|
1797
|
+
unless _tmp
|
1798
|
+
self.pos = _save
|
1799
|
+
break
|
1800
|
+
end
|
1801
|
+
@result = begin; block; end
|
1802
|
+
_tmp = true
|
1803
|
+
unless _tmp
|
1804
|
+
self.pos = _save
|
1799
1805
|
end
|
1800
|
-
break if _tmp
|
1801
|
-
self.pos = _save
|
1802
1806
|
break
|
1803
|
-
end # end
|
1807
|
+
end # end sequence
|
1804
1808
|
|
1805
1809
|
set_failed_rule :_block unless _tmp
|
1806
1810
|
return _tmp
|
1807
1811
|
end
|
1808
1812
|
|
1809
|
-
# block_delimiter = (blockhead | blockend
|
1813
|
+
# block_delimiter = (blockhead | blockend)
|
1810
1814
|
def _block_delimiter
|
1811
1815
|
|
1812
1816
|
_save = self.pos
|
@@ -1817,9 +1821,6 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1817
1821
|
_tmp = apply(:_blockend)
|
1818
1822
|
break if _tmp
|
1819
1823
|
self.pos = _save
|
1820
|
-
_tmp = apply(:_newpage)
|
1821
|
-
break if _tmp
|
1822
|
-
self.pos = _save
|
1823
1824
|
break
|
1824
1825
|
end # end choice
|
1825
1826
|
|
@@ -1827,15 +1828,15 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1827
1828
|
return _tmp
|
1828
1829
|
end
|
1829
1830
|
|
1830
|
-
# paragraph_delimiter = (
|
1831
|
+
# paragraph_delimiter = (block_delimiter | line_block)
|
1831
1832
|
def _paragraph_delimiter
|
1832
1833
|
|
1833
1834
|
_save = self.pos
|
1834
1835
|
while true # choice
|
1835
|
-
_tmp = apply(:
|
1836
|
+
_tmp = apply(:_block_delimiter)
|
1836
1837
|
break if _tmp
|
1837
1838
|
self.pos = _save
|
1838
|
-
_tmp = apply(:
|
1839
|
+
_tmp = apply(:_line_block)
|
1839
1840
|
break if _tmp
|
1840
1841
|
self.pos = _save
|
1841
1842
|
break
|
@@ -1845,13 +1846,51 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1845
1846
|
return _tmp
|
1846
1847
|
end
|
1847
1848
|
|
1848
|
-
#
|
1849
|
-
def
|
1849
|
+
# stylesheets = < lh - "stylesheets:" !le charstring:s nl > { create_item(:stylesheets, {:stylesheets => s.split(',').map(&:strip)}, nil, raw:text) }
|
1850
|
+
def _stylesheets
|
1850
1851
|
|
1851
1852
|
_save = self.pos
|
1852
1853
|
while true # sequence
|
1853
1854
|
_text_start = self.pos
|
1854
|
-
|
1855
|
+
|
1856
|
+
_save1 = self.pos
|
1857
|
+
while true # sequence
|
1858
|
+
_tmp = apply(:_lh)
|
1859
|
+
unless _tmp
|
1860
|
+
self.pos = _save1
|
1861
|
+
break
|
1862
|
+
end
|
1863
|
+
_tmp = apply(:__hyphen_)
|
1864
|
+
unless _tmp
|
1865
|
+
self.pos = _save1
|
1866
|
+
break
|
1867
|
+
end
|
1868
|
+
_tmp = match_string("stylesheets:")
|
1869
|
+
unless _tmp
|
1870
|
+
self.pos = _save1
|
1871
|
+
break
|
1872
|
+
end
|
1873
|
+
_save2 = self.pos
|
1874
|
+
_tmp = apply(:_le)
|
1875
|
+
_tmp = _tmp ? nil : true
|
1876
|
+
self.pos = _save2
|
1877
|
+
unless _tmp
|
1878
|
+
self.pos = _save1
|
1879
|
+
break
|
1880
|
+
end
|
1881
|
+
_tmp = apply(:_charstring)
|
1882
|
+
s = @result
|
1883
|
+
unless _tmp
|
1884
|
+
self.pos = _save1
|
1885
|
+
break
|
1886
|
+
end
|
1887
|
+
_tmp = apply(:_nl)
|
1888
|
+
unless _tmp
|
1889
|
+
self.pos = _save1
|
1890
|
+
end
|
1891
|
+
break
|
1892
|
+
end # end sequence
|
1893
|
+
|
1855
1894
|
if _tmp
|
1856
1895
|
text = get_text(_text_start)
|
1857
1896
|
end
|
@@ -1859,7 +1898,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1859
1898
|
self.pos = _save
|
1860
1899
|
break
|
1861
1900
|
end
|
1862
|
-
@result = begin; text ; end
|
1901
|
+
@result = begin; create_item(:stylesheets, {:stylesheets => s.split(',').map(&:strip)}, nil, raw:text) ; end
|
1863
1902
|
_tmp = true
|
1864
1903
|
unless _tmp
|
1865
1904
|
self.pos = _save
|
@@ -1867,39 +1906,232 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
1867
1906
|
break
|
1868
1907
|
end # end sequence
|
1869
1908
|
|
1870
|
-
set_failed_rule :
|
1909
|
+
set_failed_rule :_stylesheets unless _tmp
|
1871
1910
|
return _tmp
|
1872
1911
|
end
|
1873
1912
|
|
1874
|
-
#
|
1875
|
-
def
|
1913
|
+
# title = < lh - "title:" !le charstring:t nl > { create_item(:title, {:title => t }, nil, raw:text) }
|
1914
|
+
def _title
|
1876
1915
|
|
1877
1916
|
_save = self.pos
|
1878
1917
|
while true # sequence
|
1879
1918
|
_text_start = self.pos
|
1880
|
-
|
1881
|
-
|
1882
|
-
|
1883
|
-
|
1884
|
-
|
1885
|
-
|
1886
|
-
|
1887
|
-
|
1888
|
-
|
1889
|
-
|
1890
|
-
|
1891
|
-
|
1892
|
-
|
1893
|
-
|
1894
|
-
|
1895
|
-
|
1896
|
-
|
1897
|
-
|
1898
|
-
|
1899
|
-
|
1900
|
-
|
1901
|
-
|
1902
|
-
|
1919
|
+
|
1920
|
+
_save1 = self.pos
|
1921
|
+
while true # sequence
|
1922
|
+
_tmp = apply(:_lh)
|
1923
|
+
unless _tmp
|
1924
|
+
self.pos = _save1
|
1925
|
+
break
|
1926
|
+
end
|
1927
|
+
_tmp = apply(:__hyphen_)
|
1928
|
+
unless _tmp
|
1929
|
+
self.pos = _save1
|
1930
|
+
break
|
1931
|
+
end
|
1932
|
+
_tmp = match_string("title:")
|
1933
|
+
unless _tmp
|
1934
|
+
self.pos = _save1
|
1935
|
+
break
|
1936
|
+
end
|
1937
|
+
_save2 = self.pos
|
1938
|
+
_tmp = apply(:_le)
|
1939
|
+
_tmp = _tmp ? nil : true
|
1940
|
+
self.pos = _save2
|
1941
|
+
unless _tmp
|
1942
|
+
self.pos = _save1
|
1943
|
+
break
|
1944
|
+
end
|
1945
|
+
_tmp = apply(:_charstring)
|
1946
|
+
t = @result
|
1947
|
+
unless _tmp
|
1948
|
+
self.pos = _save1
|
1949
|
+
break
|
1950
|
+
end
|
1951
|
+
_tmp = apply(:_nl)
|
1952
|
+
unless _tmp
|
1953
|
+
self.pos = _save1
|
1954
|
+
end
|
1955
|
+
break
|
1956
|
+
end # end sequence
|
1957
|
+
|
1958
|
+
if _tmp
|
1959
|
+
text = get_text(_text_start)
|
1960
|
+
end
|
1961
|
+
unless _tmp
|
1962
|
+
self.pos = _save
|
1963
|
+
break
|
1964
|
+
end
|
1965
|
+
@result = begin; create_item(:title, {:title => t }, nil, raw:text) ; end
|
1966
|
+
_tmp = true
|
1967
|
+
unless _tmp
|
1968
|
+
self.pos = _save
|
1969
|
+
end
|
1970
|
+
break
|
1971
|
+
end # end sequence
|
1972
|
+
|
1973
|
+
set_failed_rule :_title unless _tmp
|
1974
|
+
return _tmp
|
1975
|
+
end
|
1976
|
+
|
1977
|
+
# lang = < lh - "lang:" !le charstring:l nl > { create_item(:lang, {:lang => l }, nil, raw:text) }
|
1978
|
+
def _lang
|
1979
|
+
|
1980
|
+
_save = self.pos
|
1981
|
+
while true # sequence
|
1982
|
+
_text_start = self.pos
|
1983
|
+
|
1984
|
+
_save1 = self.pos
|
1985
|
+
while true # sequence
|
1986
|
+
_tmp = apply(:_lh)
|
1987
|
+
unless _tmp
|
1988
|
+
self.pos = _save1
|
1989
|
+
break
|
1990
|
+
end
|
1991
|
+
_tmp = apply(:__hyphen_)
|
1992
|
+
unless _tmp
|
1993
|
+
self.pos = _save1
|
1994
|
+
break
|
1995
|
+
end
|
1996
|
+
_tmp = match_string("lang:")
|
1997
|
+
unless _tmp
|
1998
|
+
self.pos = _save1
|
1999
|
+
break
|
2000
|
+
end
|
2001
|
+
_save2 = self.pos
|
2002
|
+
_tmp = apply(:_le)
|
2003
|
+
_tmp = _tmp ? nil : true
|
2004
|
+
self.pos = _save2
|
2005
|
+
unless _tmp
|
2006
|
+
self.pos = _save1
|
2007
|
+
break
|
2008
|
+
end
|
2009
|
+
_tmp = apply(:_charstring)
|
2010
|
+
l = @result
|
2011
|
+
unless _tmp
|
2012
|
+
self.pos = _save1
|
2013
|
+
break
|
2014
|
+
end
|
2015
|
+
_tmp = apply(:_nl)
|
2016
|
+
unless _tmp
|
2017
|
+
self.pos = _save1
|
2018
|
+
end
|
2019
|
+
break
|
2020
|
+
end # end sequence
|
2021
|
+
|
2022
|
+
if _tmp
|
2023
|
+
text = get_text(_text_start)
|
2024
|
+
end
|
2025
|
+
unless _tmp
|
2026
|
+
self.pos = _save
|
2027
|
+
break
|
2028
|
+
end
|
2029
|
+
@result = begin; create_item(:lang, {:lang => l }, nil, raw:text) ; end
|
2030
|
+
_tmp = true
|
2031
|
+
unless _tmp
|
2032
|
+
self.pos = _save
|
2033
|
+
end
|
2034
|
+
break
|
2035
|
+
end # end sequence
|
2036
|
+
|
2037
|
+
set_failed_rule :_lang unless _tmp
|
2038
|
+
return _tmp
|
2039
|
+
end
|
2040
|
+
|
2041
|
+
# header = (stylesheets | title | lang) empty_line*
|
2042
|
+
def _header
|
2043
|
+
|
2044
|
+
_save = self.pos
|
2045
|
+
while true # sequence
|
2046
|
+
|
2047
|
+
_save1 = self.pos
|
2048
|
+
while true # choice
|
2049
|
+
_tmp = apply(:_stylesheets)
|
2050
|
+
break if _tmp
|
2051
|
+
self.pos = _save1
|
2052
|
+
_tmp = apply(:_title)
|
2053
|
+
break if _tmp
|
2054
|
+
self.pos = _save1
|
2055
|
+
_tmp = apply(:_lang)
|
2056
|
+
break if _tmp
|
2057
|
+
self.pos = _save1
|
2058
|
+
break
|
2059
|
+
end # end choice
|
2060
|
+
|
2061
|
+
unless _tmp
|
2062
|
+
self.pos = _save
|
2063
|
+
break
|
2064
|
+
end
|
2065
|
+
while true
|
2066
|
+
_tmp = apply(:_empty_line)
|
2067
|
+
break unless _tmp
|
2068
|
+
end
|
2069
|
+
_tmp = true
|
2070
|
+
unless _tmp
|
2071
|
+
self.pos = _save
|
2072
|
+
end
|
2073
|
+
break
|
2074
|
+
end # end sequence
|
2075
|
+
|
2076
|
+
set_failed_rule :_header unless _tmp
|
2077
|
+
return _tmp
|
2078
|
+
end
|
2079
|
+
|
2080
|
+
# char = < /[[:print:]]/ > { text }
|
2081
|
+
def _char
|
2082
|
+
|
2083
|
+
_save = self.pos
|
2084
|
+
while true # sequence
|
2085
|
+
_text_start = self.pos
|
2086
|
+
_tmp = scan(/\A(?-mix:[[:print:]])/)
|
2087
|
+
if _tmp
|
2088
|
+
text = get_text(_text_start)
|
2089
|
+
end
|
2090
|
+
unless _tmp
|
2091
|
+
self.pos = _save
|
2092
|
+
break
|
2093
|
+
end
|
2094
|
+
@result = begin; text ; end
|
2095
|
+
_tmp = true
|
2096
|
+
unless _tmp
|
2097
|
+
self.pos = _save
|
2098
|
+
end
|
2099
|
+
break
|
2100
|
+
end # end sequence
|
2101
|
+
|
2102
|
+
set_failed_rule :_char unless _tmp
|
2103
|
+
return _tmp
|
2104
|
+
end
|
2105
|
+
|
2106
|
+
# charstring = < char* > { text }
|
2107
|
+
def _charstring
|
2108
|
+
|
2109
|
+
_save = self.pos
|
2110
|
+
while true # sequence
|
2111
|
+
_text_start = self.pos
|
2112
|
+
while true
|
2113
|
+
_tmp = apply(:_char)
|
2114
|
+
break unless _tmp
|
2115
|
+
end
|
2116
|
+
_tmp = true
|
2117
|
+
if _tmp
|
2118
|
+
text = get_text(_text_start)
|
2119
|
+
end
|
2120
|
+
unless _tmp
|
2121
|
+
self.pos = _save
|
2122
|
+
break
|
2123
|
+
end
|
2124
|
+
@result = begin; text ; end
|
2125
|
+
_tmp = true
|
2126
|
+
unless _tmp
|
2127
|
+
self.pos = _save
|
2128
|
+
end
|
2129
|
+
break
|
2130
|
+
end # end sequence
|
2131
|
+
|
2132
|
+
set_failed_rule :_charstring unless _tmp
|
2133
|
+
return _tmp
|
2134
|
+
end
|
1903
2135
|
|
1904
2136
|
# char_except = char:c &{ c != e }
|
1905
2137
|
def _char_except(e)
|
@@ -2141,7 +2373,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
2141
2373
|
return _tmp
|
2142
2374
|
end
|
2143
2375
|
|
2144
|
-
# documentline = lh documentcontent:content
|
2376
|
+
# documentline = lh documentcontent:content le { content }
|
2145
2377
|
def _documentline
|
2146
2378
|
|
2147
2379
|
_save = self.pos
|
@@ -2157,7 +2389,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
2157
2389
|
self.pos = _save
|
2158
2390
|
break
|
2159
2391
|
end
|
2160
|
-
_tmp =
|
2392
|
+
_tmp = apply(:_le)
|
2161
2393
|
unless _tmp
|
2162
2394
|
self.pos = _save
|
2163
2395
|
break
|
@@ -2174,247 +2406,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
2174
2406
|
return _tmp
|
2175
2407
|
end
|
2176
2408
|
|
2177
|
-
#
|
2178
|
-
def _stylesheets
|
2179
|
-
|
2180
|
-
_save = self.pos
|
2181
|
-
while true # sequence
|
2182
|
-
_text_start = self.pos
|
2183
|
-
|
2184
|
-
_save1 = self.pos
|
2185
|
-
while true # sequence
|
2186
|
-
_tmp = apply(:_lh)
|
2187
|
-
unless _tmp
|
2188
|
-
self.pos = _save1
|
2189
|
-
break
|
2190
|
-
end
|
2191
|
-
_tmp = apply(:__hyphen_)
|
2192
|
-
unless _tmp
|
2193
|
-
self.pos = _save1
|
2194
|
-
break
|
2195
|
-
end
|
2196
|
-
_tmp = match_string("stylesheets:")
|
2197
|
-
unless _tmp
|
2198
|
-
self.pos = _save1
|
2199
|
-
break
|
2200
|
-
end
|
2201
|
-
|
2202
|
-
_save2 = self.pos
|
2203
|
-
while true # sequence
|
2204
|
-
_save3 = self.pos
|
2205
|
-
_tmp = apply(:_le)
|
2206
|
-
_tmp = _tmp ? nil : true
|
2207
|
-
self.pos = _save3
|
2208
|
-
unless _tmp
|
2209
|
-
self.pos = _save2
|
2210
|
-
break
|
2211
|
-
end
|
2212
|
-
_tmp = apply(:_charstring)
|
2213
|
-
unless _tmp
|
2214
|
-
self.pos = _save2
|
2215
|
-
end
|
2216
|
-
break
|
2217
|
-
end # end sequence
|
2218
|
-
|
2219
|
-
stylesheets = @result
|
2220
|
-
unless _tmp
|
2221
|
-
self.pos = _save1
|
2222
|
-
break
|
2223
|
-
end
|
2224
|
-
_tmp = apply(:_le)
|
2225
|
-
unless _tmp
|
2226
|
-
self.pos = _save1
|
2227
|
-
end
|
2228
|
-
break
|
2229
|
-
end # end sequence
|
2230
|
-
|
2231
|
-
if _tmp
|
2232
|
-
text = get_text(_text_start)
|
2233
|
-
end
|
2234
|
-
unless _tmp
|
2235
|
-
self.pos = _save
|
2236
|
-
break
|
2237
|
-
end
|
2238
|
-
@result = begin; create_item(:stylesheets, {:stylesheets => stylesheets.split(',').map(&:strip)}, nil, raw:text) ; end
|
2239
|
-
_tmp = true
|
2240
|
-
unless _tmp
|
2241
|
-
self.pos = _save
|
2242
|
-
end
|
2243
|
-
break
|
2244
|
-
end # end sequence
|
2245
|
-
|
2246
|
-
set_failed_rule :_stylesheets unless _tmp
|
2247
|
-
return _tmp
|
2248
|
-
end
|
2249
|
-
|
2250
|
-
# title = < lh - "title:" (!le charstring):title le > { create_item(:title, {:title => title }, nil, raw:text) }
|
2251
|
-
def _title
|
2252
|
-
|
2253
|
-
_save = self.pos
|
2254
|
-
while true # sequence
|
2255
|
-
_text_start = self.pos
|
2256
|
-
|
2257
|
-
_save1 = self.pos
|
2258
|
-
while true # sequence
|
2259
|
-
_tmp = apply(:_lh)
|
2260
|
-
unless _tmp
|
2261
|
-
self.pos = _save1
|
2262
|
-
break
|
2263
|
-
end
|
2264
|
-
_tmp = apply(:__hyphen_)
|
2265
|
-
unless _tmp
|
2266
|
-
self.pos = _save1
|
2267
|
-
break
|
2268
|
-
end
|
2269
|
-
_tmp = match_string("title:")
|
2270
|
-
unless _tmp
|
2271
|
-
self.pos = _save1
|
2272
|
-
break
|
2273
|
-
end
|
2274
|
-
|
2275
|
-
_save2 = self.pos
|
2276
|
-
while true # sequence
|
2277
|
-
_save3 = self.pos
|
2278
|
-
_tmp = apply(:_le)
|
2279
|
-
_tmp = _tmp ? nil : true
|
2280
|
-
self.pos = _save3
|
2281
|
-
unless _tmp
|
2282
|
-
self.pos = _save2
|
2283
|
-
break
|
2284
|
-
end
|
2285
|
-
_tmp = apply(:_charstring)
|
2286
|
-
unless _tmp
|
2287
|
-
self.pos = _save2
|
2288
|
-
end
|
2289
|
-
break
|
2290
|
-
end # end sequence
|
2291
|
-
|
2292
|
-
title = @result
|
2293
|
-
unless _tmp
|
2294
|
-
self.pos = _save1
|
2295
|
-
break
|
2296
|
-
end
|
2297
|
-
_tmp = apply(:_le)
|
2298
|
-
unless _tmp
|
2299
|
-
self.pos = _save1
|
2300
|
-
end
|
2301
|
-
break
|
2302
|
-
end # end sequence
|
2303
|
-
|
2304
|
-
if _tmp
|
2305
|
-
text = get_text(_text_start)
|
2306
|
-
end
|
2307
|
-
unless _tmp
|
2308
|
-
self.pos = _save
|
2309
|
-
break
|
2310
|
-
end
|
2311
|
-
@result = begin; create_item(:title, {:title => title }, nil, raw:text) ; end
|
2312
|
-
_tmp = true
|
2313
|
-
unless _tmp
|
2314
|
-
self.pos = _save
|
2315
|
-
end
|
2316
|
-
break
|
2317
|
-
end # end sequence
|
2318
|
-
|
2319
|
-
set_failed_rule :_title unless _tmp
|
2320
|
-
return _tmp
|
2321
|
-
end
|
2322
|
-
|
2323
|
-
# lang = < lh - "lang:" (!le charstring):lang le > { create_item(:lang, {:lang => lang }, nil, raw:text) }
|
2324
|
-
def _lang
|
2325
|
-
|
2326
|
-
_save = self.pos
|
2327
|
-
while true # sequence
|
2328
|
-
_text_start = self.pos
|
2329
|
-
|
2330
|
-
_save1 = self.pos
|
2331
|
-
while true # sequence
|
2332
|
-
_tmp = apply(:_lh)
|
2333
|
-
unless _tmp
|
2334
|
-
self.pos = _save1
|
2335
|
-
break
|
2336
|
-
end
|
2337
|
-
_tmp = apply(:__hyphen_)
|
2338
|
-
unless _tmp
|
2339
|
-
self.pos = _save1
|
2340
|
-
break
|
2341
|
-
end
|
2342
|
-
_tmp = match_string("lang:")
|
2343
|
-
unless _tmp
|
2344
|
-
self.pos = _save1
|
2345
|
-
break
|
2346
|
-
end
|
2347
|
-
|
2348
|
-
_save2 = self.pos
|
2349
|
-
while true # sequence
|
2350
|
-
_save3 = self.pos
|
2351
|
-
_tmp = apply(:_le)
|
2352
|
-
_tmp = _tmp ? nil : true
|
2353
|
-
self.pos = _save3
|
2354
|
-
unless _tmp
|
2355
|
-
self.pos = _save2
|
2356
|
-
break
|
2357
|
-
end
|
2358
|
-
_tmp = apply(:_charstring)
|
2359
|
-
unless _tmp
|
2360
|
-
self.pos = _save2
|
2361
|
-
end
|
2362
|
-
break
|
2363
|
-
end # end sequence
|
2364
|
-
|
2365
|
-
lang = @result
|
2366
|
-
unless _tmp
|
2367
|
-
self.pos = _save1
|
2368
|
-
break
|
2369
|
-
end
|
2370
|
-
_tmp = apply(:_le)
|
2371
|
-
unless _tmp
|
2372
|
-
self.pos = _save1
|
2373
|
-
end
|
2374
|
-
break
|
2375
|
-
end # end sequence
|
2376
|
-
|
2377
|
-
if _tmp
|
2378
|
-
text = get_text(_text_start)
|
2379
|
-
end
|
2380
|
-
unless _tmp
|
2381
|
-
self.pos = _save
|
2382
|
-
break
|
2383
|
-
end
|
2384
|
-
@result = begin; create_item(:lang, {:lang => lang }, nil, raw:text) ; end
|
2385
|
-
_tmp = true
|
2386
|
-
unless _tmp
|
2387
|
-
self.pos = _save
|
2388
|
-
end
|
2389
|
-
break
|
2390
|
-
end # end sequence
|
2391
|
-
|
2392
|
-
set_failed_rule :_lang unless _tmp
|
2393
|
-
return _tmp
|
2394
|
-
end
|
2395
|
-
|
2396
|
-
# header = (stylesheets | title | lang)
|
2397
|
-
def _header
|
2398
|
-
|
2399
|
-
_save = self.pos
|
2400
|
-
while true # choice
|
2401
|
-
_tmp = apply(:_stylesheets)
|
2402
|
-
break if _tmp
|
2403
|
-
self.pos = _save
|
2404
|
-
_tmp = apply(:_title)
|
2405
|
-
break if _tmp
|
2406
|
-
self.pos = _save
|
2407
|
-
_tmp = apply(:_lang)
|
2408
|
-
break if _tmp
|
2409
|
-
self.pos = _save
|
2410
|
-
break
|
2411
|
-
end # end choice
|
2412
|
-
|
2413
|
-
set_failed_rule :_header unless _tmp
|
2414
|
-
return _tmp
|
2415
|
-
end
|
2416
|
-
|
2417
|
-
# root = header*:headers block*:blocks eof_comment? eof { headers + blocks }
|
2409
|
+
# root = header*:headers - block*:blocks - eof_comment? eof { headers.concat blocks.select{ |x| !x.nil?} }
|
2418
2410
|
def _root
|
2419
2411
|
|
2420
2412
|
_save = self.pos
|
@@ -2432,6 +2424,11 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
2432
2424
|
self.pos = _save
|
2433
2425
|
break
|
2434
2426
|
end
|
2427
|
+
_tmp = apply(:__hyphen_)
|
2428
|
+
unless _tmp
|
2429
|
+
self.pos = _save
|
2430
|
+
break
|
2431
|
+
end
|
2435
2432
|
_ary = []
|
2436
2433
|
while true
|
2437
2434
|
_tmp = apply(:_block)
|
@@ -2445,6 +2442,11 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
2445
2442
|
self.pos = _save
|
2446
2443
|
break
|
2447
2444
|
end
|
2445
|
+
_tmp = apply(:__hyphen_)
|
2446
|
+
unless _tmp
|
2447
|
+
self.pos = _save
|
2448
|
+
break
|
2449
|
+
end
|
2448
2450
|
_save3 = self.pos
|
2449
2451
|
_tmp = apply(:_eof_comment)
|
2450
2452
|
unless _tmp
|
@@ -2460,7 +2462,7 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
2460
2462
|
self.pos = _save
|
2461
2463
|
break
|
2462
2464
|
end
|
2463
|
-
@result = begin; headers
|
2465
|
+
@result = begin; headers.concat blocks.select{ |x| !x.nil?} ; end
|
2464
2466
|
_tmp = true
|
2465
2467
|
unless _tmp
|
2466
2468
|
self.pos = _save
|
@@ -2476,12 +2478,12 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
2476
2478
|
Rules[:_eof] = rule_info("eof", "!.")
|
2477
2479
|
Rules[:_space] = rule_info("space", "(\" \" | \"\\\\t\")")
|
2478
2480
|
Rules[:_eof_comment] = rule_info("eof_comment", "lh space* \"\#\" (!eof .)*")
|
2479
|
-
Rules[:_comment] = rule_info("comment", "lh space* \"\#\" (!nl .)* nl")
|
2481
|
+
Rules[:_comment] = rule_info("comment", "lh space* \"\#\" (!nl .)* nl empty_line*")
|
2480
2482
|
Rules[:__hyphen_] = rule_info("-", "(space | comment)*")
|
2481
2483
|
Rules[:_empty_line] = rule_info("empty_line", "lh - nl")
|
2482
2484
|
Rules[:_nl] = rule_info("nl", "/\\r?\\n/")
|
2483
2485
|
Rules[:_lh] = rule_info("lh", "/^/")
|
2484
|
-
Rules[:_le] = rule_info("le", "(nl |
|
2486
|
+
Rules[:_le] = rule_info("le", "(nl | eof)")
|
2485
2487
|
Rules[:_word] = rule_info("word", "< /[\\w0-9]/ (\"-\" | /[\\w0-9]/)* > { text }")
|
2486
2488
|
Rules[:_num] = rule_info("num", "< [0-9]+ > { text.to_i }")
|
2487
2489
|
Rules[:_classname] = rule_info("classname", "\".\" word:classname { classname }")
|
@@ -2491,21 +2493,20 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
2491
2493
|
Rules[:_commandname] = rule_info("commandname", "word:name idnames?:idnames classnames?:classes { {:name => name, :ids => idnames, :classes => classes} }")
|
2492
2494
|
Rules[:_parameter] = rule_info("parameter", "< (/[^,)]/* | \"\\\"\" /[^\"]/* \"\\\"\" | \"'\" /[^']/* \"'\") > { text }")
|
2493
2495
|
Rules[:_parameters] = rule_info("parameters", "< parameter (\",\" parameter)* > { text }")
|
2494
|
-
Rules[:_command] = rule_info("command", "commandname:
|
2495
|
-
Rules[:_implicit_paragraph] = rule_info("implicit_paragraph", "<
|
2496
|
+
Rules[:_command] = rule_info("command", "commandname:cn (\"(\" - parameters:arg - \")\")? { arg ||= ''; cn.merge({ :args => arg.split(',') }) }")
|
2497
|
+
Rules[:_implicit_paragraph] = rule_info("implicit_paragraph", "< !paragraph_delimiter - documentline:p - > { create_item(:paragraph, nil, p, raw: text) }")
|
2496
2498
|
Rules[:_paragraph] = rule_info("paragraph", "(explicit_paragraph | implicit_paragraph)")
|
2497
|
-
Rules[:_paragraph_group] = rule_info("paragraph_group", "<
|
2498
|
-
Rules[:_blockhead] = rule_info("blockhead", "lh - command:command - \"{\" -
|
2499
|
-
Rules[:_blockend] = rule_info("blockend", "lh - \"}\" - le")
|
2499
|
+
Rules[:_paragraph_group] = rule_info("paragraph_group", "< paragraph+:p empty_line* > { create_item(:paragraph_group, nil, p, raw: text) }")
|
2500
|
+
Rules[:_blockhead] = rule_info("blockhead", "lh - command:command - \"{\" - nl empty_line* { command }")
|
2501
|
+
Rules[:_blockend] = rule_info("blockend", "lh - \"}\" - le empty_line*")
|
2500
2502
|
Rules[:_blockbody] = rule_info("blockbody", "(!blockend block)+:body { body }")
|
2501
|
-
Rules[:_explicit_block] = rule_info("explicit_block", "< blockhead:head blockbody:body blockend > { create_item(:block, head, body, raw: text) }")
|
2503
|
+
Rules[:_explicit_block] = rule_info("explicit_block", "< blockhead:head - blockbody:body - blockend > { create_item(:block, head, body, raw: text) }")
|
2502
2504
|
Rules[:_inline] = rule_info("inline", "(img_inline | common_inline)")
|
2503
|
-
Rules[:_common_inline] = rule_info("common_inline", "< \"[\" command:
|
2504
|
-
Rules[:_img_command] = rule_info("img_command", "command:
|
2505
|
-
Rules[:_img_inline] = rule_info("img_inline", "< \"[\" img_command:
|
2506
|
-
Rules[:
|
2507
|
-
Rules[:
|
2508
|
-
Rules[:_explicit_paragraph] = rule_info("explicit_paragraph", "< lh - explicit_paragraph_command:command \":\" documentcontent?:content le > { create_item(:paragraph, command, content, raw:text) }")
|
2505
|
+
Rules[:_common_inline] = rule_info("common_inline", "< \"[\" command:c \"{\" documentcontent_except('}'):content \"}\" \"]\" > { create_item(:inline, c, content, raw: text) }")
|
2506
|
+
Rules[:_img_command] = rule_info("img_command", "command:c &{ c[:name] == 'img' && c[:args].size == 2}")
|
2507
|
+
Rules[:_img_inline] = rule_info("img_inline", "< \"[\" img_command:c \"]\" > { create_item(:inline, c, nil, raw: text) }")
|
2508
|
+
Rules[:_explicit_paragraph_command] = rule_info("explicit_paragraph_command", "command:c &{ c[:name] == 'p' }")
|
2509
|
+
Rules[:_explicit_paragraph] = rule_info("explicit_paragraph", "< lh - explicit_paragraph_command:c \":\" documentcontent?:content le empty_line* > { create_item(:paragraph, c, content, raw:text) }")
|
2509
2510
|
Rules[:_unordered_list] = rule_info("unordered_list", "< unordered_item+:items > { create_item(:ul, nil, items, raw: text) }")
|
2510
2511
|
Rules[:_unordered_item] = rule_info("unordered_item", "< lh \"*:\" documentcontent:content le > { create_item(:li, nil, content, raw: text) }")
|
2511
2512
|
Rules[:_ordered_list] = rule_info("ordered_list", "< ordered_item+:items > { create_item(:ol, nil, items, raw: text) }")
|
@@ -2513,21 +2514,22 @@ class ArtiMark::Parser < KPeg::CompiledParser
|
|
2513
2514
|
Rules[:_definition_list] = rule_info("definition_list", "< definition_item+:items > { create_item(:dl, nil, items, raw: text) }")
|
2514
2515
|
Rules[:_definition_item] = rule_info("definition_item", "< lh \";:\" - documentcontent_except(':'):term \":\" - documentcontent:definition le > { create_item(:dtdd, {:args => [term, definition]}, nil, raw: text) }")
|
2515
2516
|
Rules[:_items_list] = rule_info("items_list", "(unordered_list | ordered_list | definition_list)")
|
2516
|
-
Rules[:_line_command] = rule_info("line_command", "< lh -
|
2517
|
-
Rules[:
|
2518
|
-
Rules[:
|
2519
|
-
Rules[:
|
2517
|
+
Rules[:_line_command] = rule_info("line_command", "< lh - !explicit_paragraph_command command:c \":\" documentcontent?:content - le empty_line* > { create_item(:line_command, c, content, raw: text) }")
|
2518
|
+
Rules[:_line_block] = rule_info("line_block", "(items_list | line_command)")
|
2519
|
+
Rules[:_block] = rule_info("block", "(line_block | explicit_block | paragraph_group):block empty_line* {block}")
|
2520
|
+
Rules[:_block_delimiter] = rule_info("block_delimiter", "(blockhead | blockend)")
|
2521
|
+
Rules[:_paragraph_delimiter] = rule_info("paragraph_delimiter", "(block_delimiter | line_block)")
|
2522
|
+
Rules[:_stylesheets] = rule_info("stylesheets", "< lh - \"stylesheets:\" !le charstring:s nl > { create_item(:stylesheets, {:stylesheets => s.split(',').map(&:strip)}, nil, raw:text) }")
|
2523
|
+
Rules[:_title] = rule_info("title", "< lh - \"title:\" !le charstring:t nl > { create_item(:title, {:title => t }, nil, raw:text) }")
|
2524
|
+
Rules[:_lang] = rule_info("lang", "< lh - \"lang:\" !le charstring:l nl > { create_item(:lang, {:lang => l }, nil, raw:text) }")
|
2525
|
+
Rules[:_header] = rule_info("header", "(stylesheets | title | lang) empty_line*")
|
2520
2526
|
Rules[:_char] = rule_info("char", "< /[[:print:]]/ > { text }")
|
2521
2527
|
Rules[:_charstring] = rule_info("charstring", "< char* > { text }")
|
2522
2528
|
Rules[:_char_except] = rule_info("char_except", "char:c &{ c != e }")
|
2523
2529
|
Rules[:_charstring_except] = rule_info("charstring_except", "< char_except(e)* > { text }")
|
2524
2530
|
Rules[:_documentcontent_except] = rule_info("documentcontent_except", "(inline | !inline char_except(e))+:content {parse_text(content)}")
|
2525
2531
|
Rules[:_documentcontent] = rule_info("documentcontent", "(inline | !inline char)+:content {parse_text(content)}")
|
2526
|
-
Rules[:_documentline] = rule_info("documentline", "lh documentcontent:content
|
2527
|
-
Rules[:
|
2528
|
-
Rules[:_title] = rule_info("title", "< lh - \"title:\" (!le charstring):title le > { create_item(:title, {:title => title }, nil, raw:text) }")
|
2529
|
-
Rules[:_lang] = rule_info("lang", "< lh - \"lang:\" (!le charstring):lang le > { create_item(:lang, {:lang => lang }, nil, raw:text) }")
|
2530
|
-
Rules[:_header] = rule_info("header", "(stylesheets | title | lang)")
|
2531
|
-
Rules[:_root] = rule_info("root", "header*:headers block*:blocks eof_comment? eof { headers + blocks }")
|
2532
|
+
Rules[:_documentline] = rule_info("documentline", "lh documentcontent:content le { content }")
|
2533
|
+
Rules[:_root] = rule_info("root", "header*:headers - block*:blocks - eof_comment? eof { headers.concat blocks.select{ |x| !x.nil?} }")
|
2532
2534
|
# :startdoc:
|
2533
2535
|
end
|