nora_mark 0.2beta4 → 0.2beta5

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 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