nora_mark 0.2beta4 → 0.2beta5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 19152110e62f57084dafc55a167fff6204065720
4
- data.tar.gz: a860f6160b5f15d5571cfe8785ae56a107e2d24f
3
+ metadata.gz: 70b55ff7edfd0ea3832a9d7f239471c408dc640c
4
+ data.tar.gz: e3f7e05cdfb71d9681a4ce4dc3a609cde17206e8
5
5
  SHA512:
6
- metadata.gz: 438c2688705e6d8cdb66d8387b806c6878232e357f026951b9bac73adf5a3334814239af291fdf1308311161b0f0efc1202edec3eb1da283a1c4b799b517c213
7
- data.tar.gz: 516efbd14c9176760df9a7a40ed0d87b5bf8b4e40157654e1b941caf377ddfcaef76d01fe9d3f3d171978bcff26cdabf0a859cdf35974e1f907cdc027181b450
6
+ metadata.gz: de1829be0f4054b59effdfa4f46e418865e916ba2d96125682e165b37f4eb7afc18f62b8729bbbf90f565ff58d6bf3e12ca611bf8bda89fa1ccc4f6a9ffc11d8
7
+ data.tar.gz: cb44418db3abd96505643d739501785595aa94b9eef5b596b6e185ee9ff475677fc323f768c859ae4cd3a532ace6ee243a47c61ccbe118c1064166adc97f25ae
data/Rakefile CHANGED
@@ -1,12 +1,14 @@
1
1
  #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
2
+ require 'bundler/gem_tasks'
3
+ require 'rspec/core/rake_task'
3
4
 
4
5
  rule(/\.kpeg\.rb/ => proc {|task_name| task_name.sub(/kpeg\.rb$/, 'kpeg')}) do
5
6
  |t|
6
7
  system "kpeg -f #{t.prerequisites[0]}"
7
8
  end
8
9
 
10
+ RSpec::Core::RakeTask.new(:spec)
11
+
9
12
  desc "run rspec"
10
- task :test => ["lib/nora_mark/parser.kpeg.rb"] do
11
- system 'rspec'
12
- end
13
+ task :test => ["lib/nora_mark/parser.kpeg.rb", :spec]
14
+
data/bin/nora2html ADDED
@@ -0,0 +1,15 @@
1
+ require 'nora_mark'
2
+ require 'optparse'
3
+ require 'kconv'
4
+
5
+ auto_convert_encode = false
6
+ opt = OptionParser.new
7
+ opt.on('--kconv') {
8
+ auto_convert_encode = true
9
+ }
10
+
11
+ args = opt.parse(ARGV)
12
+ input = args.length > 0 ? File.open(args[0]).read : STDIN.read
13
+ input = Kconv.toutf8(input) if auto_convert_encode
14
+
15
+ puts NoraMark::Document::parse(input).render_parameter(nonpaged: true).html[0]
@@ -1,7 +1,7 @@
1
1
  module NoraMark
2
2
  module Html
3
3
  class Context
4
- attr_accessor :title, :head_inserters, :toc, :lang, :stylesheets, :enable_pgroup
4
+ attr_accessor :title, :head_inserters, :toc, :lang, :stylesheets, :enable_pgroup, :render_parameter
5
5
  def initialize(param = {})
6
6
  @head_inserters = []
7
7
  @toc = []
@@ -12,6 +12,7 @@ module NoraMark
12
12
  self.paragraph_style= param[:paragraph_style]
13
13
  @pages = Pages.new(param[:sequence_format])
14
14
  @block_delimiter_stack = []
15
+ @render_parameter = {}
15
16
  head_inserter do
16
17
  ret = ""
17
18
  @stylesheets.each { |s|
@@ -25,6 +25,28 @@ module NoraMark
25
25
  frontmatter_writer = FrontmatterWriter.new self
26
26
  paragraph_writer = ParagraphWriter.new self
27
27
  abstract_node_writer = AbstractNodeWriter.new self
28
+
29
+ newpage_writer = TagWriter.create('div', self,
30
+ node_preprocessor: proc do |node|
31
+ node.no_tag = true
32
+ node
33
+ end,
34
+ write_body_preprocessor: proc do |node|
35
+ title = nil
36
+ if node.parameters.size > 0 && node.parameters[0].size > 0
37
+ title = escape_html node.parameters.first
38
+ end
39
+ @context.title = title unless title.nil?
40
+ @context.end_html
41
+ :done
42
+ end
43
+ )
44
+ @hr_writer = TagWriter.create('hr', self, node_preprocessor: proc do |node|
45
+ node.body_empty = true
46
+ add_class node, 'page-break'
47
+ node
48
+ end)
49
+
28
50
  @writers = {
29
51
  Paragraph => paragraph_writer,
30
52
  ParagraphGroup => paragraph_writer,
@@ -69,22 +91,7 @@ module NoraMark
69
91
  'sect' => section_writer,
70
92
  'section' => section_writer,
71
93
  }),
72
- Newpage =>
73
- TagWriter.create('div', self,
74
- node_preprocessor: proc do |node|
75
- node.no_tag = true
76
- node
77
- end,
78
- write_body_preprocessor: proc do |node|
79
- title = nil
80
- if node.parameters.size > 0 && node.parameters[0].size > 0
81
- title = escape_html node.parameters.first
82
- end
83
- @context.title = title unless title.nil?
84
- @context.end_html
85
- :done
86
- end
87
- ),
94
+ Newpage => newpage_writer,
88
95
  Inline =>
89
96
  WriterSelector.new(self,
90
97
  {
@@ -162,9 +169,13 @@ module NoraMark
162
169
  }
163
170
  end
164
171
 
165
- def convert(parsed_result)
172
+ def convert(parsed_result, render_parameter = {})
166
173
  children = parsed_result.content
167
174
  @context.file_basename = parsed_result.document_name
175
+ @context.render_parameter = render_parameter
176
+ if render_parameter[:nonpaged]
177
+ @writers[Newpage] = @hr_writer
178
+ end
168
179
  children.each {
169
180
  |node|
170
181
  to_html(node)
@@ -42,12 +42,22 @@ CommandName = Word:name IdNames?:idnames ClassNames?:classes { {name: name, ids
42
42
  ParameterNormal = < /[^,)]/* > { text }
43
43
  ParameterQuoted = '"' < /[^"]/* > '"' - &/[,)]/ { text }
44
44
  ParameterSingleQuoted = "'" < /[^']/* > "'" - &/[,)]/ { text }
45
- Parameter = (ParameterQuoted | ParameterSingleQuoted | ParameterNormal ):value { value }
46
- Parameters = Parameter:parameter (',' - Parameter)*:rest_parameters { [parameter] + rest_parameters }
45
+ Parameter = (ParameterQuoted
46
+ | ParameterSingleQuoted
47
+ | ParameterNormal ):value { value }
48
+
49
+ Parameters = Parameter:parameter ',' - Parameters:parameters { [ parameter ] + parameters }
50
+ | Parameter:parameter { [ parameter ] }
51
+
47
52
  Command = CommandName:cn ('(' - Parameters:args - ')')? { args ||= []; cn.merge({ args: args }) }
48
53
 
49
54
  # paragraph
50
55
  ImplicitParagraph = - !ParagraphDelimiter Comment* DocumentLine:content Comment* EofComment? ~paragraph([],[], [], content)
56
+
57
+ # explicit paragraph
58
+ ExplicitParagraphCommand = Command:c &{ c[:name] == 'p' }
59
+ ExplicitParagraph = - ExplicitParagraphCommand:c ':' - DocumentContent?:content Le EmptyLine* ~paragraph(c[:ids], c[:classes], c[:args], content)
60
+
51
61
  Paragraph = ExplicitParagraph | ImplicitParagraph
52
62
 
53
63
  # paragraph_group
@@ -88,10 +98,6 @@ CommandNameForSpecialLineCommand = NewpageCommand | ExplicitParagraphCommand
88
98
  NewpageCommand = Command:command &{ command[:name] == 'newpage' }
89
99
  Newpage = - NewpageCommand:c ':' - DocumentContent?:content - Nl ~newpage(c[:ids],c[:classes],c[:args], content)
90
100
 
91
- # explicit paragraph
92
- ExplicitParagraphCommand = Command:c &{ c[:name] == 'p' }
93
- ExplicitParagraph = - ExplicitParagraphCommand:c ':' - DocumentContent?:content Le EmptyLine* ~paragraph(c[:ids], c[:classes], c[:args], content)
94
-
95
101
 
96
102
  # unordered list
97
103
  UnorderedList = UnorderedItem+:items ~unordered_list([],[],[], items)
@@ -168,10 +174,11 @@ DocumentLine = DocumentContent:content Le { content }
168
174
 
169
175
  #page
170
176
  Page = Frontmatter?:frontmatter - (!Newpage Block)*:blocks ~page(([frontmatter] + blocks).select{ |x| !x.nil?})
171
- NewpagedPage = Newpage:newpage Page:page { page.content = page.content.unshift newpage; page }
177
+ Pages = Page:page Newpage:newpage Pages:pages { [ page, newpage ] + pages }
178
+ | Page:page { [ page ] }
172
179
 
173
180
  #root
174
- root = Page:page NewpagedPage*:pages - EofComment? Eof { [ page ] + pages }
181
+ root = Pages:pages - EofComment? Eof { pages }
175
182
 
176
183
 
177
184
 
@@ -921,56 +921,67 @@ class NoraMark::Parser < KPeg::CompiledParser
921
921
  return _tmp
922
922
  end
923
923
 
924
- # Parameters = Parameter:parameter ("," - Parameter)*:rest_parameters { [parameter] + rest_parameters }
924
+ # Parameters = (Parameter:parameter "," - Parameters:parameters { [ parameter ] + parameters } | Parameter:parameter { [ parameter ] })
925
925
  def _Parameters
926
926
 
927
927
  _save = self.pos
928
- while true # sequence
929
- _tmp = apply(:_Parameter)
930
- parameter = @result
931
- unless _tmp
932
- self.pos = _save
933
- break
934
- end
935
- _ary = []
936
- while true
928
+ while true # choice
937
929
 
938
- _save2 = self.pos
939
- while true # sequence
940
- _tmp = match_string(",")
941
- unless _tmp
942
- self.pos = _save2
943
- break
944
- end
945
- _tmp = apply(:__hyphen_)
946
- unless _tmp
947
- self.pos = _save2
948
- break
949
- end
950
- _tmp = apply(:_Parameter)
951
- unless _tmp
952
- self.pos = _save2
953
- end
930
+ _save1 = self.pos
931
+ while true # sequence
932
+ _tmp = apply(:_Parameter)
933
+ parameter = @result
934
+ unless _tmp
935
+ self.pos = _save1
954
936
  break
955
- end # end sequence
937
+ end
938
+ _tmp = match_string(",")
939
+ unless _tmp
940
+ self.pos = _save1
941
+ break
942
+ end
943
+ _tmp = apply(:__hyphen_)
944
+ unless _tmp
945
+ self.pos = _save1
946
+ break
947
+ end
948
+ _tmp = apply(:_Parameters)
949
+ parameters = @result
950
+ unless _tmp
951
+ self.pos = _save1
952
+ break
953
+ end
954
+ @result = begin; [ parameter ] + parameters ; end
955
+ _tmp = true
956
+ unless _tmp
957
+ self.pos = _save1
958
+ end
959
+ break
960
+ end # end sequence
956
961
 
957
- _ary << @result if _tmp
958
- break unless _tmp
959
- end
960
- _tmp = true
961
- @result = _ary
962
- rest_parameters = @result
963
- unless _tmp
964
- self.pos = _save
962
+ break if _tmp
963
+ self.pos = _save
964
+
965
+ _save2 = self.pos
966
+ while true # sequence
967
+ _tmp = apply(:_Parameter)
968
+ parameter = @result
969
+ unless _tmp
970
+ self.pos = _save2
971
+ break
972
+ end
973
+ @result = begin; [ parameter ] ; end
974
+ _tmp = true
975
+ unless _tmp
976
+ self.pos = _save2
977
+ end
965
978
  break
966
- end
967
- @result = begin; [parameter] + rest_parameters ; end
968
- _tmp = true
969
- unless _tmp
970
- self.pos = _save
971
- end
979
+ end # end sequence
980
+
981
+ break if _tmp
982
+ self.pos = _save
972
983
  break
973
- end # end sequence
984
+ end # end choice
974
985
 
975
986
  set_failed_rule :_Parameters unless _tmp
976
987
  return _tmp
@@ -1103,6 +1114,94 @@ class NoraMark::Parser < KPeg::CompiledParser
1103
1114
  return _tmp
1104
1115
  end
1105
1116
 
1117
+ # ExplicitParagraphCommand = Command:c &{ c[:name] == 'p' }
1118
+ def _ExplicitParagraphCommand
1119
+
1120
+ _save = self.pos
1121
+ while true # sequence
1122
+ _tmp = apply(:_Command)
1123
+ c = @result
1124
+ unless _tmp
1125
+ self.pos = _save
1126
+ break
1127
+ end
1128
+ _save1 = self.pos
1129
+ _tmp = begin; c[:name] == 'p' ; end
1130
+ self.pos = _save1
1131
+ unless _tmp
1132
+ self.pos = _save
1133
+ end
1134
+ break
1135
+ end # end sequence
1136
+
1137
+ set_failed_rule :_ExplicitParagraphCommand unless _tmp
1138
+ return _tmp
1139
+ end
1140
+
1141
+ # ExplicitParagraph = - ExplicitParagraphCommand:c ":" - DocumentContent?:content Le EmptyLine* {paragraph(c[:ids], c[:classes], c[:args], content)}
1142
+ def _ExplicitParagraph
1143
+
1144
+ _save = self.pos
1145
+ while true # sequence
1146
+ _tmp = apply(:__hyphen_)
1147
+ unless _tmp
1148
+ self.pos = _save
1149
+ break
1150
+ end
1151
+ _tmp = apply(:_ExplicitParagraphCommand)
1152
+ c = @result
1153
+ unless _tmp
1154
+ self.pos = _save
1155
+ break
1156
+ end
1157
+ _tmp = match_string(":")
1158
+ unless _tmp
1159
+ self.pos = _save
1160
+ break
1161
+ end
1162
+ _tmp = apply(:__hyphen_)
1163
+ unless _tmp
1164
+ self.pos = _save
1165
+ break
1166
+ end
1167
+ _save1 = self.pos
1168
+ _tmp = apply(:_DocumentContent)
1169
+ @result = nil unless _tmp
1170
+ unless _tmp
1171
+ _tmp = true
1172
+ self.pos = _save1
1173
+ end
1174
+ content = @result
1175
+ unless _tmp
1176
+ self.pos = _save
1177
+ break
1178
+ end
1179
+ _tmp = apply(:_Le)
1180
+ unless _tmp
1181
+ self.pos = _save
1182
+ break
1183
+ end
1184
+ while true
1185
+ _tmp = apply(:_EmptyLine)
1186
+ break unless _tmp
1187
+ end
1188
+ _tmp = true
1189
+ unless _tmp
1190
+ self.pos = _save
1191
+ break
1192
+ end
1193
+ @result = begin; paragraph(c[:ids], c[:classes], c[:args], content); end
1194
+ _tmp = true
1195
+ unless _tmp
1196
+ self.pos = _save
1197
+ end
1198
+ break
1199
+ end # end sequence
1200
+
1201
+ set_failed_rule :_ExplicitParagraph unless _tmp
1202
+ return _tmp
1203
+ end
1204
+
1106
1205
  # Paragraph = (ExplicitParagraph | ImplicitParagraph)
1107
1206
  def _Paragraph
1108
1207
 
@@ -2042,94 +2141,6 @@ class NoraMark::Parser < KPeg::CompiledParser
2042
2141
  return _tmp
2043
2142
  end
2044
2143
 
2045
- # ExplicitParagraphCommand = Command:c &{ c[:name] == 'p' }
2046
- def _ExplicitParagraphCommand
2047
-
2048
- _save = self.pos
2049
- while true # sequence
2050
- _tmp = apply(:_Command)
2051
- c = @result
2052
- unless _tmp
2053
- self.pos = _save
2054
- break
2055
- end
2056
- _save1 = self.pos
2057
- _tmp = begin; c[:name] == 'p' ; end
2058
- self.pos = _save1
2059
- unless _tmp
2060
- self.pos = _save
2061
- end
2062
- break
2063
- end # end sequence
2064
-
2065
- set_failed_rule :_ExplicitParagraphCommand unless _tmp
2066
- return _tmp
2067
- end
2068
-
2069
- # ExplicitParagraph = - ExplicitParagraphCommand:c ":" - DocumentContent?:content Le EmptyLine* {paragraph(c[:ids], c[:classes], c[:args], content)}
2070
- def _ExplicitParagraph
2071
-
2072
- _save = self.pos
2073
- while true # sequence
2074
- _tmp = apply(:__hyphen_)
2075
- unless _tmp
2076
- self.pos = _save
2077
- break
2078
- end
2079
- _tmp = apply(:_ExplicitParagraphCommand)
2080
- c = @result
2081
- unless _tmp
2082
- self.pos = _save
2083
- break
2084
- end
2085
- _tmp = match_string(":")
2086
- unless _tmp
2087
- self.pos = _save
2088
- break
2089
- end
2090
- _tmp = apply(:__hyphen_)
2091
- unless _tmp
2092
- self.pos = _save
2093
- break
2094
- end
2095
- _save1 = self.pos
2096
- _tmp = apply(:_DocumentContent)
2097
- @result = nil unless _tmp
2098
- unless _tmp
2099
- _tmp = true
2100
- self.pos = _save1
2101
- end
2102
- content = @result
2103
- unless _tmp
2104
- self.pos = _save
2105
- break
2106
- end
2107
- _tmp = apply(:_Le)
2108
- unless _tmp
2109
- self.pos = _save
2110
- break
2111
- end
2112
- while true
2113
- _tmp = apply(:_EmptyLine)
2114
- break unless _tmp
2115
- end
2116
- _tmp = true
2117
- unless _tmp
2118
- self.pos = _save
2119
- break
2120
- end
2121
- @result = begin; paragraph(c[:ids], c[:classes], c[:args], content); end
2122
- _tmp = true
2123
- unless _tmp
2124
- self.pos = _save
2125
- end
2126
- break
2127
- end # end sequence
2128
-
2129
- set_failed_rule :_ExplicitParagraph unless _tmp
2130
- return _tmp
2131
- end
2132
-
2133
2144
  # UnorderedList = UnorderedItem+:items {unordered_list([],[],[], items)}
2134
2145
  def _UnorderedList
2135
2146
 
@@ -3549,54 +3560,74 @@ class NoraMark::Parser < KPeg::CompiledParser
3549
3560
  return _tmp
3550
3561
  end
3551
3562
 
3552
- # NewpagedPage = Newpage:newpage Page:page { page.content = page.content.unshift newpage; page }
3553
- def _NewpagedPage
3563
+ # Pages = (Page:page Newpage:newpage Pages:pages { [ page, newpage ] + pages } | Page:page { [ page ] })
3564
+ def _Pages
3554
3565
 
3555
3566
  _save = self.pos
3556
- while true # sequence
3557
- _tmp = apply(:_Newpage)
3558
- newpage = @result
3559
- unless _tmp
3560
- self.pos = _save
3567
+ while true # choice
3568
+
3569
+ _save1 = self.pos
3570
+ while true # sequence
3571
+ _tmp = apply(:_Page)
3572
+ page = @result
3573
+ unless _tmp
3574
+ self.pos = _save1
3575
+ break
3576
+ end
3577
+ _tmp = apply(:_Newpage)
3578
+ newpage = @result
3579
+ unless _tmp
3580
+ self.pos = _save1
3581
+ break
3582
+ end
3583
+ _tmp = apply(:_Pages)
3584
+ pages = @result
3585
+ unless _tmp
3586
+ self.pos = _save1
3587
+ break
3588
+ end
3589
+ @result = begin; [ page, newpage ] + pages ; end
3590
+ _tmp = true
3591
+ unless _tmp
3592
+ self.pos = _save1
3593
+ end
3561
3594
  break
3562
- end
3563
- _tmp = apply(:_Page)
3564
- page = @result
3565
- unless _tmp
3566
- self.pos = _save
3595
+ end # end sequence
3596
+
3597
+ break if _tmp
3598
+ self.pos = _save
3599
+
3600
+ _save2 = self.pos
3601
+ while true # sequence
3602
+ _tmp = apply(:_Page)
3603
+ page = @result
3604
+ unless _tmp
3605
+ self.pos = _save2
3606
+ break
3607
+ end
3608
+ @result = begin; [ page ] ; end
3609
+ _tmp = true
3610
+ unless _tmp
3611
+ self.pos = _save2
3612
+ end
3567
3613
  break
3568
- end
3569
- @result = begin; page.content = page.content.unshift newpage; page ; end
3570
- _tmp = true
3571
- unless _tmp
3572
- self.pos = _save
3573
- end
3614
+ end # end sequence
3615
+
3616
+ break if _tmp
3617
+ self.pos = _save
3574
3618
  break
3575
- end # end sequence
3619
+ end # end choice
3576
3620
 
3577
- set_failed_rule :_NewpagedPage unless _tmp
3621
+ set_failed_rule :_Pages unless _tmp
3578
3622
  return _tmp
3579
3623
  end
3580
3624
 
3581
- # root = Page:page NewpagedPage*:pages - EofComment? Eof { [ page ] + pages }
3625
+ # root = Pages:pages - EofComment? Eof { pages }
3582
3626
  def _root
3583
3627
 
3584
3628
  _save = self.pos
3585
3629
  while true # sequence
3586
- _tmp = apply(:_Page)
3587
- page = @result
3588
- unless _tmp
3589
- self.pos = _save
3590
- break
3591
- end
3592
- _ary = []
3593
- while true
3594
- _tmp = apply(:_NewpagedPage)
3595
- _ary << @result if _tmp
3596
- break unless _tmp
3597
- end
3598
- _tmp = true
3599
- @result = _ary
3630
+ _tmp = apply(:_Pages)
3600
3631
  pages = @result
3601
3632
  unless _tmp
3602
3633
  self.pos = _save
@@ -3607,11 +3638,11 @@ class NoraMark::Parser < KPeg::CompiledParser
3607
3638
  self.pos = _save
3608
3639
  break
3609
3640
  end
3610
- _save2 = self.pos
3641
+ _save1 = self.pos
3611
3642
  _tmp = apply(:_EofComment)
3612
3643
  unless _tmp
3613
3644
  _tmp = true
3614
- self.pos = _save2
3645
+ self.pos = _save1
3615
3646
  end
3616
3647
  unless _tmp
3617
3648
  self.pos = _save
@@ -3622,7 +3653,7 @@ class NoraMark::Parser < KPeg::CompiledParser
3622
3653
  self.pos = _save
3623
3654
  break
3624
3655
  end
3625
- @result = begin; [ page ] + pages ; end
3656
+ @result = begin; pages ; end
3626
3657
  _tmp = true
3627
3658
  unless _tmp
3628
3659
  self.pos = _save
@@ -3654,9 +3685,11 @@ class NoraMark::Parser < KPeg::CompiledParser
3654
3685
  Rules[:_ParameterQuoted] = rule_info("ParameterQuoted", "\"\\\"\" < /[^\"]/* > \"\\\"\" - &/[,)]/ { text }")
3655
3686
  Rules[:_ParameterSingleQuoted] = rule_info("ParameterSingleQuoted", "\"'\" < /[^']/* > \"'\" - &/[,)]/ { text }")
3656
3687
  Rules[:_Parameter] = rule_info("Parameter", "(ParameterQuoted | ParameterSingleQuoted | ParameterNormal):value { value }")
3657
- Rules[:_Parameters] = rule_info("Parameters", "Parameter:parameter (\",\" - Parameter)*:rest_parameters { [parameter] + rest_parameters }")
3688
+ Rules[:_Parameters] = rule_info("Parameters", "(Parameter:parameter \",\" - Parameters:parameters { [ parameter ] + parameters } | Parameter:parameter { [ parameter ] })")
3658
3689
  Rules[:_Command] = rule_info("Command", "CommandName:cn (\"(\" - Parameters:args - \")\")? { args ||= []; cn.merge({ args: args }) }")
3659
3690
  Rules[:_ImplicitParagraph] = rule_info("ImplicitParagraph", "- !ParagraphDelimiter Comment* DocumentLine:content Comment* EofComment? {paragraph([],[], [], content)}")
3691
+ Rules[:_ExplicitParagraphCommand] = rule_info("ExplicitParagraphCommand", "Command:c &{ c[:name] == 'p' }")
3692
+ Rules[:_ExplicitParagraph] = rule_info("ExplicitParagraph", "- ExplicitParagraphCommand:c \":\" - DocumentContent?:content Le EmptyLine* {paragraph(c[:ids], c[:classes], c[:args], content)}")
3660
3693
  Rules[:_Paragraph] = rule_info("Paragraph", "(ExplicitParagraph | ImplicitParagraph)")
3661
3694
  Rules[:_ParagraphGroup] = rule_info("ParagraphGroup", "Paragraph+:p EmptyLine* {paragraph_group([],[],[],p)}")
3662
3695
  Rules[:_BlockHead] = rule_info("BlockHead", "- Command:command - \"{\" - Nl EmptyLine* { command }")
@@ -3679,8 +3712,6 @@ class NoraMark::Parser < KPeg::CompiledParser
3679
3712
  Rules[:_CommandNameForSpecialLineCommand] = rule_info("CommandNameForSpecialLineCommand", "(NewpageCommand | ExplicitParagraphCommand)")
3680
3713
  Rules[:_NewpageCommand] = rule_info("NewpageCommand", "Command:command &{ command[:name] == 'newpage' }")
3681
3714
  Rules[:_Newpage] = rule_info("Newpage", "- NewpageCommand:c \":\" - DocumentContent?:content - Nl {newpage(c[:ids],c[:classes],c[:args], content)}")
3682
- Rules[:_ExplicitParagraphCommand] = rule_info("ExplicitParagraphCommand", "Command:c &{ c[:name] == 'p' }")
3683
- Rules[:_ExplicitParagraph] = rule_info("ExplicitParagraph", "- ExplicitParagraphCommand:c \":\" - DocumentContent?:content Le EmptyLine* {paragraph(c[:ids], c[:classes], c[:args], content)}")
3684
3715
  Rules[:_UnorderedList] = rule_info("UnorderedList", "UnorderedItem+:items {unordered_list([],[],[], items)}")
3685
3716
  Rules[:_UnorderedItem] = rule_info("UnorderedItem", "\"*:\" - DocumentContent:content Le {ul_item([], [], [], content)}")
3686
3717
  Rules[:_OrderedList] = rule_info("OrderedList", "OrderedItem+:items {ordered_list([],[],[], items)}")
@@ -3712,7 +3743,7 @@ class NoraMark::Parser < KPeg::CompiledParser
3712
3743
  Rules[:_DocumentContent] = rule_info("DocumentContent", "(Inline | DocumentText)+:content { content }")
3713
3744
  Rules[:_DocumentLine] = rule_info("DocumentLine", "DocumentContent:content Le { content }")
3714
3745
  Rules[:_Page] = rule_info("Page", "Frontmatter?:frontmatter - (!Newpage Block)*:blocks {page(([frontmatter] + blocks).select{ |x| !x.nil?})}")
3715
- Rules[:_NewpagedPage] = rule_info("NewpagedPage", "Newpage:newpage Page:page { page.content = page.content.unshift newpage; page }")
3716
- Rules[:_root] = rule_info("root", "Page:page NewpagedPage*:pages - EofComment? Eof { [ page ] + pages }")
3746
+ Rules[:_Pages] = rule_info("Pages", "(Page:page Newpage:newpage Pages:pages { [ page, newpage ] + pages } | Page:page { [ page ] })")
3747
+ Rules[:_root] = rule_info("root", "Pages:pages - EofComment? Eof { pages }")
3717
3748
  # :startdoc:
3718
3749
  end
@@ -1,3 +1,3 @@
1
1
  module NoraMark
2
- VERSION = "0.2beta4"
2
+ VERSION = "0.2beta5"
3
3
  end
data/lib/nora_mark.rb CHANGED
@@ -33,10 +33,15 @@ module NoraMark
33
33
 
34
34
  def html
35
35
  if @html.nil?
36
- @html = @html_generator.convert(self)
36
+ @html = @html_generator.convert(self, @render_parameter)
37
37
  end
38
38
  @html
39
39
  end
40
+
41
+ def render_parameter(param = {})
42
+ @render_parameter.merge! param
43
+ self
44
+ end
40
45
 
41
46
  def initialize(param = {})
42
47
  @preprocessors = [
@@ -44,6 +49,7 @@ module NoraMark
44
49
  ]
45
50
  @html_generator = Html::Generator.new(param)
46
51
  @document_name = param[:document_name] || "noramark_#{SecureRandom.uuid}"
52
+ @render_parameter = {}
47
53
  end
48
54
 
49
55
 
@@ -946,7 +946,23 @@ EOF
946
946
 
947
947
  end
948
948
  end
949
-
949
+ describe 'nonpaged mode' do
950
+ it 'should create single html' do
951
+ text = "some text\nnewpage:\nnext page"
952
+ noramark = NoraMark::Document.parse(text, lang: 'ja', title:'the document title')
953
+ converted = noramark.render_parameter(nonpaged: true).html
954
+ expect(converted.size).to eq 1
955
+ body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
956
+ expect(body.element_children[0].selector_and_children).to eq(
957
+ ['div.pgroup',
958
+ ['p', 'some text']])
959
+ expect(body.element_children[1].selector_and_children).to eq(
960
+ ['hr.page-break'])
961
+ expect(body.element_children[2].selector_and_children).to eq(
962
+ ['div.pgroup',
963
+ ['p', 'next page']])
964
+ end
965
+ end
950
966
  describe 'create file' do
951
967
  before { @basedir = File.join(File.dirname(__FILE__), 'created_files') }
952
968
  after { Dir.glob(File.join(@basedir, '*.xhtml')) { |file| File.delete file } }
@@ -960,9 +976,9 @@ EOF
960
976
  text = "some text\nnewpage:\nnext page"
961
977
  noramark = NoraMark::Document.parse(text, lang: 'ja', title:'the document title', document_name: 'nora-test-file', sequence_format: '%03d' )
962
978
  noramark.html.write_as_files(directory: @basedir)
963
- files = Dir.glob(File.join(@basedir, '*.xhtml'))
964
- expect(File.basename(files[0])).to eq 'nora-test-file_001.xhtml'
965
- expect(File.basename(files[1])).to eq 'nora-test-file_002.xhtml'
979
+ files = Dir.glob(File.join(@basedir, '*.xhtml')).map { |file| File.basename(file) }
980
+ expect(files).to include 'nora-test-file_001.xhtml'
981
+ expect(files).to include 'nora-test-file_002.xhtml'
966
982
  end
967
983
  end
968
984
  describe 'parse and create manual' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nora_mark
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2beta4
4
+ version: 0.2beta5
5
5
  platform: ruby
6
6
  authors:
7
7
  - KOJIMA Satoshi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-05 00:00:00.000000000 Z
11
+ date: 2014-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kpeg
@@ -69,7 +69,8 @@ dependencies:
69
69
  description: simple and customizable text markup language for EPUB
70
70
  email:
71
71
  - skoji@mac.com
72
- executables: []
72
+ executables:
73
+ - nora2html
73
74
  extensions: []
74
75
  extra_rdoc_files: []
75
76
  files:
@@ -80,6 +81,7 @@ files:
80
81
  - LICENSE
81
82
  - README.md
82
83
  - Rakefile
84
+ - bin/nora2html
83
85
  - example/nora-simple.css
84
86
  - example/noramark-reference-ja.nora
85
87
  - example/noramark-reference-ja_00001.xhtml