nora_mark 0.2beta5 → 0.2beta6
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/README.md +11 -0
- data/example/noramark-reference-ja.nora +14 -0
- data/example/noramark-reference-ja_00001.xhtml +10 -0
- data/lib/nora_mark.rb +1 -1
- data/lib/nora_mark/parser.kpeg +2 -1
- data/lib/nora_mark/parser.kpeg.rb +22 -4
- data/lib/nora_mark/version.rb +1 -1
- data/spec/nora_mark_spec.rb +20 -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: ade2dd5b4cdd69d794a353b7753554cee5d147d8
|
4
|
+
data.tar.gz: e98bc05bb7a68cb64de1d10ecd213d6a4891fd1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a04a47daf848c44003e0acaa6c69da73e64c8c1aaa4f445ff36f5bd550f7e37297533c04c572bb1f6110deeb0a3492793cfc80d38f35946a65ff6a5079dc5f7
|
7
|
+
data.tar.gz: 3e009acb8be92588512b73554abd8f54b126e7ba5c57392d503ad0c609c9f1dbd151e0a07b5fad7d45d231cc9214837cbe6662d1c0133f294a8c11fb2517f363
|
data/README.md
CHANGED
@@ -32,6 +32,17 @@ Or install it yourself as:
|
|
32
32
|
document = NoraMark::Document.parse(string_or_io)
|
33
33
|
put document.html[0] # outputs 1st page of converted XHTML file
|
34
34
|
|
35
|
+
From commandline:
|
36
|
+
|
37
|
+
$ nora2html < text.nora > result.xhtml
|
38
|
+
|
39
|
+
Note: nora2html replace ``newpage:`` command to ``<hr class="page-break" />`` and output all pages in one xhtml.
|
40
|
+
Main purpose of ``nora2html`` is to validate your markup.
|
41
|
+
|
42
|
+
I am planning to release nora2epub and other external tools.
|
43
|
+
|
44
|
+
## Markup
|
45
|
+
|
35
46
|
An example of markup text (text is in english, but the paragraph style is japanese)
|
36
47
|
|
37
48
|
# line begins with # is a comment.
|
@@ -43,6 +43,20 @@ gem install nora_mark
|
|
43
43
|
|
44
44
|
==: 使い方
|
45
45
|
|
46
|
+
===: コマンドラインから
|
47
|
+
|
48
|
+
code {
|
49
|
+
$ nora2html < source.nora > output.xhtml
|
50
|
+
}
|
51
|
+
|
52
|
+
入力はutf-8のみ受け付けます。日本語のテキストであれば、kconvオプションでうまくうごくかもしれません。
|
53
|
+
|
54
|
+
code {
|
55
|
+
$ nora2html --kconv < source.nora > output.xhtml
|
56
|
+
}
|
57
|
+
|
58
|
+
[s.strong{nora2htmlは、newpageコマンドを<hr />タグに置き換え、すべてのページをひとつのxhtmlとして出力します}]
|
59
|
+
===: コードから
|
46
60
|
code {//ruby
|
47
61
|
require 'nora_mark'
|
48
62
|
|
@@ -34,10 +34,20 @@
|
|
34
34
|
<pre><code>gem install nora_mark</code></pre>
|
35
35
|
</section>
|
36
36
|
<section><h2>使い方</h2>
|
37
|
+
<section><h3>コマンドラインから</h3>
|
38
|
+
<pre><code>$ nora2html < source.nora > output.xhtml</code></pre>
|
39
|
+
<div class='pgroup'><p>入力はutf-8のみ受け付けます。日本語のテキストであれば、kconvオプションでうまくうごくかもしれません。</p>
|
40
|
+
</div>
|
41
|
+
<pre><code>$ nora2html --kconv < source.nora > output.xhtml</code></pre>
|
42
|
+
<div class='pgroup'><p><span class='strong'>nora2htmlは、newpageコマンドを<hr />タグに置き換え、すべてのページをひとつのxhtmlとして出力します</span></p>
|
43
|
+
</div>
|
44
|
+
</section>
|
45
|
+
<section><h3>コードから</h3>
|
37
46
|
<pre class='code-ruby' data-code-language='ruby'><code>require 'nora_mark'
|
38
47
|
document = NoraMark::Document.parse(string_or_io, lang: 'ja')
|
39
48
|
document.html.write_as_files</code></pre>
|
40
49
|
</section>
|
50
|
+
</section>
|
41
51
|
<section><h2>マークアップ</h2>
|
42
52
|
<section><h3>通常のテキスト</h3>
|
43
53
|
<div class='pgroup'><p>単なるテキストもHTMLに変換されます。</p>
|
data/lib/nora_mark.rb
CHANGED
@@ -11,7 +11,7 @@ module NoraMark
|
|
11
11
|
|
12
12
|
def self.parse(string_or_io, param = {})
|
13
13
|
instance = new param
|
14
|
-
src = string_or_io.respond_to?(:read) ? string_or_io.read : string_or_io
|
14
|
+
src = (string_or_io.respond_to?(:read) ? string_or_io.read : string_or_io).encode 'utf-8'
|
15
15
|
yield instance if block_given?
|
16
16
|
instance.instance_eval do
|
17
17
|
@preprocessors.each do
|
data/lib/nora_mark/parser.kpeg
CHANGED
@@ -21,6 +21,7 @@
|
|
21
21
|
%% page = ast Page(content)
|
22
22
|
|
23
23
|
# literals
|
24
|
+
BOM = /\uFEFF/
|
24
25
|
Eof = !.
|
25
26
|
Space = ' ' | '\t'
|
26
27
|
EofComment = Space* "#" (!Eof .)*
|
@@ -178,7 +179,7 @@ Pages = Page:page Newpage:newpage Pages:pages { [ page, newpage ] + pages }
|
|
178
179
|
| Page:page { [ page ] }
|
179
180
|
|
180
181
|
#root
|
181
|
-
root = Pages:pages - EofComment? Eof { pages }
|
182
|
+
root = BOM? Pages:pages - EofComment? Eof { pages }
|
182
183
|
|
183
184
|
|
184
185
|
|
@@ -262,6 +262,13 @@ class NoraMark::Parser < KPeg::CompiledParser
|
|
262
262
|
end
|
263
263
|
include ::NoraMarkConstruction
|
264
264
|
|
265
|
+
# BOM = /\uFEFF/
|
266
|
+
def _BOM
|
267
|
+
_tmp = scan(/\A(?-mix:\uFEFF)/)
|
268
|
+
set_failed_rule :_BOM unless _tmp
|
269
|
+
return _tmp
|
270
|
+
end
|
271
|
+
|
265
272
|
# Eof = !.
|
266
273
|
def _Eof
|
267
274
|
_save = self.pos
|
@@ -3622,11 +3629,21 @@ class NoraMark::Parser < KPeg::CompiledParser
|
|
3622
3629
|
return _tmp
|
3623
3630
|
end
|
3624
3631
|
|
3625
|
-
# root = Pages:pages - EofComment? Eof { pages }
|
3632
|
+
# root = BOM? Pages:pages - EofComment? Eof { pages }
|
3626
3633
|
def _root
|
3627
3634
|
|
3628
3635
|
_save = self.pos
|
3629
3636
|
while true # sequence
|
3637
|
+
_save1 = self.pos
|
3638
|
+
_tmp = apply(:_BOM)
|
3639
|
+
unless _tmp
|
3640
|
+
_tmp = true
|
3641
|
+
self.pos = _save1
|
3642
|
+
end
|
3643
|
+
unless _tmp
|
3644
|
+
self.pos = _save
|
3645
|
+
break
|
3646
|
+
end
|
3630
3647
|
_tmp = apply(:_Pages)
|
3631
3648
|
pages = @result
|
3632
3649
|
unless _tmp
|
@@ -3638,11 +3655,11 @@ class NoraMark::Parser < KPeg::CompiledParser
|
|
3638
3655
|
self.pos = _save
|
3639
3656
|
break
|
3640
3657
|
end
|
3641
|
-
|
3658
|
+
_save2 = self.pos
|
3642
3659
|
_tmp = apply(:_EofComment)
|
3643
3660
|
unless _tmp
|
3644
3661
|
_tmp = true
|
3645
|
-
self.pos =
|
3662
|
+
self.pos = _save2
|
3646
3663
|
end
|
3647
3664
|
unless _tmp
|
3648
3665
|
self.pos = _save
|
@@ -3666,6 +3683,7 @@ class NoraMark::Parser < KPeg::CompiledParser
|
|
3666
3683
|
end
|
3667
3684
|
|
3668
3685
|
Rules = {}
|
3686
|
+
Rules[:_BOM] = rule_info("BOM", "/\\uFEFF/")
|
3669
3687
|
Rules[:_Eof] = rule_info("Eof", "!.")
|
3670
3688
|
Rules[:_Space] = rule_info("Space", "(\" \" | \"\\\\t\")")
|
3671
3689
|
Rules[:_EofComment] = rule_info("EofComment", "Space* \"\#\" (!Eof .)*")
|
@@ -3744,6 +3762,6 @@ class NoraMark::Parser < KPeg::CompiledParser
|
|
3744
3762
|
Rules[:_DocumentLine] = rule_info("DocumentLine", "DocumentContent:content Le { content }")
|
3745
3763
|
Rules[:_Page] = rule_info("Page", "Frontmatter?:frontmatter - (!Newpage Block)*:blocks {page(([frontmatter] + blocks).select{ |x| !x.nil?})}")
|
3746
3764
|
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 }")
|
3765
|
+
Rules[:_root] = rule_info("root", "BOM? Pages:pages - EofComment? Eof { pages }")
|
3748
3766
|
# :startdoc:
|
3749
3767
|
end
|
data/lib/nora_mark/version.rb
CHANGED
data/spec/nora_mark_spec.rb
CHANGED
@@ -36,6 +36,26 @@ describe NoraMark do
|
|
36
36
|
['p', 'ここから、次のパラグラフです。']]
|
37
37
|
)
|
38
38
|
end
|
39
|
+
it 'should convert simple paragraph with BOM' do
|
40
|
+
text = "\uFEFFここから、パラグラフがはじまります。\n「二行目です。」\n三行目です。\n\n\n ここから、次のパラグラフです。"
|
41
|
+
noramark = NoraMark::Document.parse(text, lang: 'ja', title: 'the title')
|
42
|
+
converted = noramark.html
|
43
|
+
body = Nokogiri::XML::Document.parse(converted[0]).root.at_xpath('xmlns:body')
|
44
|
+
expect(body.element_children.size).to eq 2
|
45
|
+
expect(body.element_children[0].selector_and_children).to eq(
|
46
|
+
['div.pgroup',
|
47
|
+
['p', 'ここから、パラグラフがはじまります。'],
|
48
|
+
['p.noindent', '「二行目です。」'],
|
49
|
+
['p', '三行目です。']
|
50
|
+
]
|
51
|
+
)
|
52
|
+
|
53
|
+
expect(body.element_children[1].selector_and_children).to eq(
|
54
|
+
['div.pgroup',
|
55
|
+
['p', 'ここから、次のパラグラフです。']]
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
39
59
|
it 'should convert simple paragraph in english mode' do
|
40
60
|
text = "paragraph begins.\n2nd line.\n 3rd line.\n\n\n next paragraph."
|
41
61
|
noramark = NoraMark::Document.parse(text, lang: 'en', title: 'the title')
|