nora_mark 0.2beta3 → 0.2beta4
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/.travis.yml +5 -0
- data/Gemfile +2 -0
- data/README.md +17 -12
- data/example/nora-simple.css +52 -0
- data/example/noramark-reference-ja.nora +246 -0
- data/example/noramark-reference-ja_00001.xhtml +187 -0
- data/lib/nora_mark/html/{abstract_item_writer.rb → abstract_node_writer.rb} +3 -3
- data/lib/nora_mark/html/context.rb +3 -21
- data/lib/nora_mark/html/frontmatter_writer.rb +33 -0
- data/lib/nora_mark/html/generator.rb +122 -100
- data/lib/nora_mark/html/pages.rb +3 -9
- data/lib/nora_mark/html/paragraph_writer.rb +27 -23
- data/lib/nora_mark/html/tag_writer.rb +33 -34
- data/lib/nora_mark/html/writer_selector.rb +3 -3
- data/lib/nora_mark/node.rb +31 -0
- data/lib/nora_mark/parser.kpeg +133 -79
- data/lib/nora_mark/parser.kpeg.rb +1822 -1526
- data/lib/nora_mark/parser.rb +4 -23
- data/lib/nora_mark/version.rb +1 -1
- data/lib/nora_mark.rb +7 -2
- data/nora_mark.gemspec +1 -0
- data/spec/epub30-schemas/epub-nav-30.nvdl +16 -0
- data/spec/epub30-schemas/epub-nav-30.rnc +10 -0
- data/spec/epub30-schemas/epub-nav-30.sch +72 -0
- data/spec/epub30-schemas/epub-svg-30.nvdl +15 -0
- data/spec/epub30-schemas/epub-svg-30.rnc +15 -0
- data/spec/epub30-schemas/epub-svg-30.sch +10 -0
- data/spec/epub30-schemas/epub-xhtml-30.nvdl +15 -0
- data/spec/epub30-schemas/epub-xhtml-30.rnc +37 -0
- data/spec/epub30-schemas/epub-xhtml-30.sch +377 -0
- data/spec/epub30-schemas/epub30-catalog.xml +335 -0
- data/spec/epub30-schemas/media-overlay-30.nvdl +14 -0
- data/spec/epub30-schemas/media-overlay-30.rnc +46 -0
- data/spec/epub30-schemas/media-overlay-30.sch +9 -0
- data/spec/epub30-schemas/mod/datatypes.rnc +143 -0
- data/spec/epub30-schemas/mod/epub-mathml3-30.rnc +74 -0
- data/spec/epub30-schemas/mod/epub-prefix-attr.rnc +8 -0
- data/spec/epub30-schemas/mod/epub-ssml-attrs.rnc +11 -0
- data/spec/epub30-schemas/mod/epub-svg11-30.rnc +12 -0
- data/spec/epub30-schemas/mod/epub-svg11-re.sch +7 -0
- data/spec/epub30-schemas/mod/epub-switch.rnc +32 -0
- data/spec/epub30-schemas/mod/epub-trigger.rnc +17 -0
- data/spec/epub30-schemas/mod/epub-type-attr.rnc +7 -0
- data/spec/epub30-schemas/mod/epub-xhtml-mathml3-30.rnc +5 -0
- data/spec/epub30-schemas/mod/epub-xhtml-svg11-30.rnc +6 -0
- data/spec/epub30-schemas/mod/html5/LICENSE +23 -0
- data/spec/epub30-schemas/mod/html5/README +21 -0
- data/spec/epub30-schemas/mod/html5/html5-aria-30.rnc +105 -0
- data/spec/epub30-schemas/mod/html5/html5-attrib-30.rnc +44 -0
- data/spec/epub30-schemas/mod/html5/html5-document-30.rnc +44 -0
- data/spec/epub30-schemas/mod/html5/html5-edit-30.rnc +24 -0
- data/spec/epub30-schemas/mod/html5/html5-embed-30.rnc +155 -0
- data/spec/epub30-schemas/mod/html5/html5-forms-30.rnc +431 -0
- data/spec/epub30-schemas/mod/html5/html5-grouping-30.rnc +115 -0
- data/spec/epub30-schemas/mod/html5/html5-interactive-30.rnc +86 -0
- data/spec/epub30-schemas/mod/html5/html5-models-30.rnc +10 -0
- data/spec/epub30-schemas/mod/html5/html5-phrasing-30.rnc +134 -0
- data/spec/epub30-schemas/mod/html5/html5-script-30.rnc +164 -0
- data/spec/epub30-schemas/mod/html5/html5-sections-30.rnc +58 -0
- data/spec/epub30-schemas/mod/html5/html5-style-30.rnc +18 -0
- data/spec/epub30-schemas/mod/id-unique.sch +10 -0
- data/spec/epub30-schemas/mod/mathml/LICENSE +3 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-common.rnc +84 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-content.rnc +373 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-presentation.rnc +536 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-strict-content.rnc +60 -0
- data/spec/epub30-schemas/mod/security/LICENSE +4 -0
- data/spec/epub30-schemas/mod/security/Lenient-Encryption11-ghc.rnc +41 -0
- data/spec/epub30-schemas/mod/security/Lenient-Encryption11.rnc +39 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature-exclusiveC14N.rnc +25 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc +32 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature11-properties.rnc +30 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature11.rnc +28 -0
- data/spec/epub30-schemas/mod/security/Strict-Encryption.rnc +27 -0
- data/spec/epub30-schemas/mod/security/Strict-Signature.rnc +22 -0
- data/spec/epub30-schemas/mod/security/exc-c14n.rnc +39 -0
- data/spec/epub30-schemas/mod/security/security_any.rnc +15 -0
- data/spec/epub30-schemas/mod/security/xenc-allowAnyForeign.rnc +25 -0
- data/spec/epub30-schemas/mod/security/xenc-schema-11.rnc +96 -0
- data/spec/epub30-schemas/mod/security/xenc-schema.rnc +145 -0
- data/spec/epub30-schemas/mod/security/xenc11-allowAnyForeign.rnc +19 -0
- data/spec/epub30-schemas/mod/security/xmldsig-allowAnyForeign.rnc +47 -0
- data/spec/epub30-schemas/mod/security/xmldsig-core-schema.rnc +276 -0
- data/spec/epub30-schemas/mod/security/xmldsig-filter2.rnc +16 -0
- data/spec/epub30-schemas/mod/security/xmldsig-properties-schema.rnc +34 -0
- data/spec/epub30-schemas/mod/security/xmldsig11-allowAnyForeign.rnc +18 -0
- data/spec/epub30-schemas/mod/security/xmldsig11-schema.rnc +133 -0
- data/spec/epub30-schemas/mod/security/xmlsec-ghc-allowAnyForeign.rnc +21 -0
- data/spec/epub30-schemas/mod/security/xmlsec-ghc-schema.rnc +42 -0
- data/spec/epub30-schemas/mod/svg11/LICENSE +1 -0
- data/spec/epub30-schemas/mod/svg11/README.txt +8 -0
- data/spec/epub30-schemas/mod/svg11/svg11-flat.rnc +3999 -0
- data/spec/epub30-schemas/ocf-container-30.rnc +16 -0
- data/spec/epub30-schemas/ocf-encryption-30.rnc +12 -0
- data/spec/epub30-schemas/ocf-signatures-30.rnc +8 -0
- data/spec/epub30-schemas/package-30.nvdl +14 -0
- data/spec/epub30-schemas/package-30.rnc +91 -0
- data/spec/epub30-schemas/package-30.sch +137 -0
- data/spec/jing-20091111/bin/jing.jar +0 -0
- data/spec/nora_mark_spec.rb +229 -68
- data/spec/spec_helper.rb +16 -0
- metadata +179 -6
- data/lib/nora_mark/html/header_writer.rb +0 -35
- data/spec/fixture/test_src_ja.nora +0 -50
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 19152110e62f57084dafc55a167fff6204065720
|
|
4
|
+
data.tar.gz: a860f6160b5f15d5571cfe8785ae56a107e2d24f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 438c2688705e6d8cdb66d8387b806c6878232e357f026951b9bac73adf5a3334814239af291fdf1308311161b0f0efc1202edec3eb1da283a1c4b799b517c213
|
|
7
|
+
data.tar.gz: 516efbd14c9176760df9a7a40ed0d87b5bf8b4e40157654e1b941caf377ddfcaef76d01fe9d3f3d171978bcff26cdabf0a859cdf35974e1f907cdc027181b450
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
# NoraMark
|
|
2
|
+
[<img src="https://secure.travis-ci.org/skoji/noramark.png" />](http://travis-ci.org/skoji/noramark) [](https://coveralls.io/r/skoji/noramark?branch=master)
|
|
2
3
|
|
|
3
4
|
NoraMark is a simple text markup language. It is designed to create XHTML files for EPUB books. Its default mode is for Japanese text.
|
|
4
5
|
|
|
5
6
|
**CAUTION This is very early alpha version, so it's not stable at all, even the markup syntax**
|
|
6
7
|
|
|
7
|
-
In
|
|
8
|
-
|
|
8
|
+
In non-beta release version, the syntax will be more stable.
|
|
9
|
+
|
|
10
|
+
## Requirements
|
|
11
|
+
|
|
12
|
+
* Ruby 2.0.0 or greater
|
|
9
13
|
|
|
10
14
|
## Installation
|
|
11
15
|
|
|
@@ -33,10 +37,13 @@ An example of markup text (text is in english, but the paragraph style is japane
|
|
|
33
37
|
# line begins with # is a comment.
|
|
34
38
|
# you don't need to indent noramark text.
|
|
35
39
|
|
|
40
|
+
# page/document metadata in YAML frontmatter
|
|
41
|
+
---
|
|
36
42
|
lang: ja
|
|
37
43
|
title: test title
|
|
38
|
-
stylesheets: css/normalize.css, css/main.css
|
|
39
|
-
|
|
44
|
+
stylesheets: [css/normalize.css, css/main.css]
|
|
45
|
+
---
|
|
46
|
+
|
|
40
47
|
art {
|
|
41
48
|
h1: header 1
|
|
42
49
|
article comes here.
|
|
@@ -84,9 +91,11 @@ Another example of markup text in non-japanese (paragraph style is default)
|
|
|
84
91
|
# line begins with # is a comment.
|
|
85
92
|
# you don't need to indent noramark text.
|
|
86
93
|
|
|
94
|
+
---
|
|
87
95
|
lang: en
|
|
88
96
|
title: test title
|
|
89
|
-
stylesheets: css/normalize.css, css/main.css
|
|
97
|
+
stylesheets: [ css/normalize.css, css/main.css]
|
|
98
|
+
---
|
|
90
99
|
|
|
91
100
|
art {
|
|
92
101
|
h1: header 1
|
|
@@ -127,9 +136,11 @@ Another example of markup text
|
|
|
127
136
|
|
|
128
137
|
# Markdown-ish heading will creates section
|
|
129
138
|
|
|
139
|
+
---
|
|
130
140
|
lang: ja
|
|
131
141
|
title: test title
|
|
132
142
|
stylesheets: css/normalize.css, css/main.css
|
|
143
|
+
---
|
|
133
144
|
|
|
134
145
|
=: this is the first heading
|
|
135
146
|
|
|
@@ -147,7 +158,7 @@ Another example of markup text
|
|
|
147
158
|
The converted XHTML file
|
|
148
159
|
|
|
149
160
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
150
|
-
<html xmlns="http://www.w3.org/1999/xhtml" lang="
|
|
161
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="en">
|
|
151
162
|
<head>
|
|
152
163
|
<title>test title</title>
|
|
153
164
|
<link rel="stylesheet" type="text/css" href="css/normalize.css" />
|
|
@@ -169,12 +180,6 @@ The converted XHTML file
|
|
|
169
180
|
</section>
|
|
170
181
|
</body>
|
|
171
182
|
</html>
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
183
|
|
|
179
184
|
|
|
180
185
|
In a near future version, you will be able to add custom commands.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
body {
|
|
2
|
+
font-family: serif, sans-serif;
|
|
3
|
+
line-height: 1.75;
|
|
4
|
+
text-align: justify;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
h1, h2, h3, h4, h5, h6 {
|
|
8
|
+
font-family: sans-serif;
|
|
9
|
+
color: #884444;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
dt {
|
|
13
|
+
font-family: sans-serif;
|
|
14
|
+
color: #404040;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
p {
|
|
18
|
+
text-indent: 1em;
|
|
19
|
+
margin-top: 0;
|
|
20
|
+
margin-bottom: 0;
|
|
21
|
+
}
|
|
22
|
+
.noindent {
|
|
23
|
+
text-indent: 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.pgroup {
|
|
27
|
+
margin-top 1em;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
pre {
|
|
31
|
+
padding: 0.5em;
|
|
32
|
+
background: #dddddd;
|
|
33
|
+
width: 95%;
|
|
34
|
+
margin: 1em auto;
|
|
35
|
+
border: 1px solid #aaaaaa;
|
|
36
|
+
border-radius: 0.5em;
|
|
37
|
+
}
|
|
38
|
+
pre.code-html {
|
|
39
|
+
background: #efefef;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
h1 {
|
|
43
|
+
border-bottom: 1px solid #444444;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
h2 {
|
|
47
|
+
border-bottom: 1px solid #888888;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
h3 {
|
|
51
|
+
border-bottom: 1px solid #aaaaaa;
|
|
52
|
+
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
---
|
|
2
|
+
lang: ja
|
|
3
|
+
stylesheets: nora-simple.css
|
|
4
|
+
title: NoraMark Manual
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
=: NoraMark Manual
|
|
8
|
+
|
|
9
|
+
[strong{(作成中・記述は未完成です。)}]
|
|
10
|
+
|
|
11
|
+
NoraMarkは、EPUBで利用するXHTMLを生成するためのマークアップとしてデザインされました。次のような特徴があります。
|
|
12
|
+
|
|
13
|
+
*: プレーンテキストの原稿を邪魔しない最小限の記述
|
|
14
|
+
*: しかしマークアップ部分は、通常のテキストと「違って」見える。
|
|
15
|
+
*: ブロック・ライン・インラインごとの基本記法を原則として固定。憶える記法は少なくてすむはず。
|
|
16
|
+
*: 生のHTML記法なしで、多くのタグを記述できる
|
|
17
|
+
*: マークアップに独自コマンドの追加ができる
|
|
18
|
+
*: 文書構造に対する処理を追加できる
|
|
19
|
+
*: パース結果をXMLとして取得できる
|
|
20
|
+
|
|
21
|
+
==: 必要なもの
|
|
22
|
+
|
|
23
|
+
*: ruby 2.0以上
|
|
24
|
+
|
|
25
|
+
==: インストール方法
|
|
26
|
+
|
|
27
|
+
Gemfileに次のように書きます
|
|
28
|
+
|
|
29
|
+
code {
|
|
30
|
+
gem 'nora_mark'
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
そして、
|
|
34
|
+
code {
|
|
35
|
+
$ bundle
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
または
|
|
39
|
+
|
|
40
|
+
code {
|
|
41
|
+
gem install nora_mark
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
==: 使い方
|
|
45
|
+
|
|
46
|
+
code {//ruby
|
|
47
|
+
require 'nora_mark'
|
|
48
|
+
|
|
49
|
+
document = NoraMark::Document.parse(string_or_io, lang: 'ja')
|
|
50
|
+
document.html.write_as_files
|
|
51
|
+
//}
|
|
52
|
+
|
|
53
|
+
==: マークアップ
|
|
54
|
+
|
|
55
|
+
===: 通常のテキスト
|
|
56
|
+
|
|
57
|
+
単なるテキストもHTMLに変換されます。
|
|
58
|
+
|
|
59
|
+
pre(原稿) {//
|
|
60
|
+
吾輩は猫である。名前はまだ無い。
|
|
61
|
+
どこで生れたかとんと見当けんとうがつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
|
|
62
|
+
<中略>
|
|
63
|
+
この書生の掌の裏うちでしばらくはよい心持に坐っておったが、しばらくすると非常な速力で運転し始めた。
|
|
64
|
+
|
|
65
|
+
ふと気が付いて見ると書生はいない。たくさんおった兄弟が一疋ぴきも見えぬ。
|
|
66
|
+
//}
|
|
67
|
+
|
|
68
|
+
code(変換結果) {//html
|
|
69
|
+
<div class='pgroup'>
|
|
70
|
+
<p>吾輩は猫である。名前はまだ無い。</p>
|
|
71
|
+
<p>どこで生れたかとんと見当けんとうがつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。</p>
|
|
72
|
+
<p><中略></p>
|
|
73
|
+
<p>この書生の掌の裏うちでしばらくはよい心持に坐っておったが、しばらくすると非常な速力で運転し始めた。</p>
|
|
74
|
+
</div>
|
|
75
|
+
<div class='pgroup'>
|
|
76
|
+
<p>ふと気が付いて見ると書生はいない。たくさんおった兄弟が一疋ぴきも見えぬ。</p>
|
|
77
|
+
</div>
|
|
78
|
+
//}
|
|
79
|
+
|
|
80
|
+
改行ごとに<p>要素がつくられます。空行で区切られると、<div class='pgroup'>がつくられます。
|
|
81
|
+
言語が日本語(ja)以外の場合は、次のようになります。
|
|
82
|
+
|
|
83
|
+
pre(原稿) {
|
|
84
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
|
|
85
|
+
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
|
86
|
+
|
|
87
|
+
Ut enim ad minim veniam, quis nostrud exercitation
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
code(変換結果) {//html
|
|
91
|
+
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, <br />sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </p>
|
|
92
|
+
<p>Ut enim ad minim veniam, quis nostrud exercitation</p>
|
|
93
|
+
//}
|
|
94
|
+
|
|
95
|
+
===: 明示的なブロック
|
|
96
|
+
|
|
97
|
+
NoraMarkでは、<コマンド> { ではじまり、} のみの行で終わる範囲を明示的なブロックとみなします。
|
|
98
|
+
|
|
99
|
+
pre(原稿) {//
|
|
100
|
+
d.column {
|
|
101
|
+
この部分は、divで囲まれます。
|
|
102
|
+
}
|
|
103
|
+
//}
|
|
104
|
+
|
|
105
|
+
code(変換結果) {//html
|
|
106
|
+
<div class="column">
|
|
107
|
+
<div class="pgroup">
|
|
108
|
+
<p>この部分は、divで囲まれます。</p>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
//}
|
|
112
|
+
|
|
113
|
+
定義済みの明示的ブロックのコマンドは、次のものがあります。
|
|
114
|
+
|
|
115
|
+
;: d : divを生成します
|
|
116
|
+
;: sec, section : sectionを生成します
|
|
117
|
+
;: art, article : articleを生成します
|
|
118
|
+
|
|
119
|
+
このほかに、後述のpreformatブロックがあります。
|
|
120
|
+
|
|
121
|
+
未定義のコマンドの場合は、対応する名前のタグを生成します。
|
|
122
|
+
|
|
123
|
+
pre(原稿) {//
|
|
124
|
+
blockquote {
|
|
125
|
+
山路を登りながら、こう考えた。
|
|
126
|
+
智に働けば角が立つ。情に棹させば流される。意地を通せば窮屈だ。とかくに人の世は住みにくい
|
|
127
|
+
}
|
|
128
|
+
//}
|
|
129
|
+
|
|
130
|
+
code(変換結果) {//html
|
|
131
|
+
<blockquote>
|
|
132
|
+
<div class='pgroup'>
|
|
133
|
+
<p>山路を登りながら、こう考えた。</p>
|
|
134
|
+
<p>智に働けば角が立つ。情に棹させば流される。意地を通せば窮屈だ。とかくに人の世は住みにくい</p>
|
|
135
|
+
</div>
|
|
136
|
+
</blockquote>
|
|
137
|
+
//}
|
|
138
|
+
|
|
139
|
+
===: インラインコマンド
|
|
140
|
+
|
|
141
|
+
インラインコマンドは、次の形式をしています。
|
|
142
|
+
pre{//
|
|
143
|
+
[<コマンド>{内容}]
|
|
144
|
+
//}
|
|
145
|
+
|
|
146
|
+
定義済みのインラインコマンドには、次のものがあります。
|
|
147
|
+
|
|
148
|
+
;:l {
|
|
149
|
+
リンクを定義する。
|
|
150
|
+
pre {//
|
|
151
|
+
[l(http://github.com/skoji/noramark){NoraMarkのレポジトリ}]
|
|
152
|
+
//}
|
|
153
|
+
}
|
|
154
|
+
;:s {
|
|
155
|
+
spanを定義する。おもにクラスを設定するときに利用する。
|
|
156
|
+
pre {//
|
|
157
|
+
[s.note{spanの中にはいる}]
|
|
158
|
+
//}
|
|
159
|
+
}
|
|
160
|
+
;:img {
|
|
161
|
+
画像を定義する。このコマンドにはブレースのセクションがない。
|
|
162
|
+
pre {//
|
|
163
|
+
[img(img/some_image.jpg,alternate text)]
|
|
164
|
+
//}
|
|
165
|
+
}
|
|
166
|
+
;:tcy {
|
|
167
|
+
class tcyのspanを定義する。縦書きにおける縦中横のスタイルをあてることを想定している。
|
|
168
|
+
pre {//
|
|
169
|
+
FM TOWNSが登場してからすでに[tcy{25}]年がたった。
|
|
170
|
+
//}
|
|
171
|
+
}
|
|
172
|
+
;:ruby {
|
|
173
|
+
ルビをマークアップする。
|
|
174
|
+
pre {//
|
|
175
|
+
[ruby(とんぼ){蜻蛉}]の[ruby(めがね){眼鏡}]はみずいろめがね
|
|
176
|
+
//}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
===: 行コマンド
|
|
180
|
+
|
|
181
|
+
行コマンドは1行を占有し、次の形式をしています。
|
|
182
|
+
pre{//
|
|
183
|
+
<コマンド>:内容
|
|
184
|
+
//}
|
|
185
|
+
|
|
186
|
+
定義済みの行コマンドには、次のものがあります。
|
|
187
|
+
|
|
188
|
+
;: p {
|
|
189
|
+
パラグラフをマークアップする。主に、クラスやIDを付加する目的で使う。
|
|
190
|
+
pre{//
|
|
191
|
+
p.caution: 用量に注意してご利用ください。
|
|
192
|
+
//}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
;: image {
|
|
196
|
+
divでラップされたimgをマークアップする。
|
|
197
|
+
pre{//
|
|
198
|
+
image(./path-to-image/img.jpg, 代替テキスト): イメージのキャプション
|
|
199
|
+
//}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
;: newpage {
|
|
203
|
+
新規ページを作成する。通常は、あらたなXHTMLファイルが生成される。
|
|
204
|
+
pre{//
|
|
205
|
+
newpage:
|
|
206
|
+
//}
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
===: リスト
|
|
211
|
+
|
|
212
|
+
====: 箇条書き
|
|
213
|
+
|
|
214
|
+
pre(原稿) {//
|
|
215
|
+
*: *:ではじまる行は、箇条書きになる。
|
|
216
|
+
*: 空行があくまで、箇条書きがつづく。
|
|
217
|
+
|
|
218
|
+
*: 空行があくと、あらたな箇条書きになる。
|
|
219
|
+
//}
|
|
220
|
+
|
|
221
|
+
code(変換結果) {//html
|
|
222
|
+
<ul><li>*:ではじまる行は、箇条書きになる。 </li>
|
|
223
|
+
<li>空行があくまで、箇条書きがつづく。</li>
|
|
224
|
+
</ul>
|
|
225
|
+
<ul><li>空行があくと、あらたな箇条書きになる。</li>
|
|
226
|
+
</ul>
|
|
227
|
+
}
|
|
228
|
+
//}
|
|
229
|
+
|
|
230
|
+
====: 番号つきリスト
|
|
231
|
+
|
|
232
|
+
====: 定義リスト
|
|
233
|
+
|
|
234
|
+
===: 見出し
|
|
235
|
+
|
|
236
|
+
====: 単独の見出し
|
|
237
|
+
|
|
238
|
+
====: セクションを生成する見出し
|
|
239
|
+
|
|
240
|
+
===: Frontmatter
|
|
241
|
+
|
|
242
|
+
==: カスタマイズ
|
|
243
|
+
===: 生成ルール追加
|
|
244
|
+
===: 木構造の操作
|
|
245
|
+
|
|
246
|
+
==: XML生成
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
|
|
3
|
+
<head>
|
|
4
|
+
<title>NoraMark Manual</title>
|
|
5
|
+
<link rel="stylesheet" type="text/css" href="nora-simple.css" />
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<section><h1>NoraMark Manual</h1>
|
|
9
|
+
<div class='pgroup'><p><strong>(作成中・記述は未完成です。)</strong></p>
|
|
10
|
+
</div>
|
|
11
|
+
<div class='pgroup'><p>NoraMarkは、EPUBで利用するXHTMLを生成するためのマークアップとしてデザインされました。次のような特徴があります。</p>
|
|
12
|
+
</div>
|
|
13
|
+
<ul><li>プレーンテキストの原稿を邪魔しない最小限の記述</li>
|
|
14
|
+
<li>しかしマークアップ部分は、通常のテキストと「違って」見える。</li>
|
|
15
|
+
<li>ブロック・ライン・インラインごとの基本記法を原則として固定。憶える記法は少なくてすむはず。</li>
|
|
16
|
+
<li>生のHTML記法なしで、多くのタグを記述できる</li>
|
|
17
|
+
<li>マークアップに独自コマンドの追加ができる</li>
|
|
18
|
+
<li>文書構造に対する処理を追加できる</li>
|
|
19
|
+
<li>パース結果をXMLとして取得できる</li>
|
|
20
|
+
</ul>
|
|
21
|
+
<section><h2>必要なもの</h2>
|
|
22
|
+
<ul><li>ruby 2.0以上</li>
|
|
23
|
+
</ul>
|
|
24
|
+
</section>
|
|
25
|
+
<section><h2>インストール方法</h2>
|
|
26
|
+
<div class='pgroup'><p>Gemfileに次のように書きます</p>
|
|
27
|
+
</div>
|
|
28
|
+
<pre><code>gem 'nora_mark' </code></pre>
|
|
29
|
+
<div class='pgroup'><p>そして、</p>
|
|
30
|
+
</div>
|
|
31
|
+
<pre><code>$ bundle</code></pre>
|
|
32
|
+
<div class='pgroup'><p>または</p>
|
|
33
|
+
</div>
|
|
34
|
+
<pre><code>gem install nora_mark</code></pre>
|
|
35
|
+
</section>
|
|
36
|
+
<section><h2>使い方</h2>
|
|
37
|
+
<pre class='code-ruby' data-code-language='ruby'><code>require 'nora_mark'
|
|
38
|
+
document = NoraMark::Document.parse(string_or_io, lang: 'ja')
|
|
39
|
+
document.html.write_as_files</code></pre>
|
|
40
|
+
</section>
|
|
41
|
+
<section><h2>マークアップ</h2>
|
|
42
|
+
<section><h3>通常のテキスト</h3>
|
|
43
|
+
<div class='pgroup'><p>単なるテキストもHTMLに変換されます。</p>
|
|
44
|
+
</div>
|
|
45
|
+
<pre>吾輩は猫である。名前はまだ無い。
|
|
46
|
+
どこで生れたかとんと見当けんとうがつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
|
|
47
|
+
<中略>
|
|
48
|
+
この書生の掌の裏うちでしばらくはよい心持に坐っておったが、しばらくすると非常な速力で運転し始めた。
|
|
49
|
+
ふと気が付いて見ると書生はいない。たくさんおった兄弟が一疋ぴきも見えぬ。</pre>
|
|
50
|
+
<pre class='code-html' data-code-language='html'><code><div class='pgroup'>
|
|
51
|
+
<p>吾輩は猫である。名前はまだ無い。</p>
|
|
52
|
+
<p>どこで生れたかとんと見当けんとうがつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。</p>
|
|
53
|
+
<p><中略></p>
|
|
54
|
+
<p>この書生の掌の裏うちでしばらくはよい心持に坐っておったが、しばらくすると非常な速力で運転し始めた。</p>
|
|
55
|
+
</div>
|
|
56
|
+
<div class='pgroup'>
|
|
57
|
+
<p>ふと気が付いて見ると書生はいない。たくさんおった兄弟が一疋ぴきも見えぬ。</p>
|
|
58
|
+
</div></code></pre>
|
|
59
|
+
<div class='pgroup'><p>改行ごとに<p>要素がつくられます。空行で区切られると、<div class='pgroup'>がつくられます。</p>
|
|
60
|
+
<p>言語が日本語(ja)以外の場合は、次のようになります。</p>
|
|
61
|
+
</div>
|
|
62
|
+
<pre>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
|
|
63
|
+
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
|
64
|
+
Ut enim ad minim veniam, quis nostrud exercitation </pre>
|
|
65
|
+
<pre class='code-html' data-code-language='html'><code><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, <br />sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </p>
|
|
66
|
+
<p>Ut enim ad minim veniam, quis nostrud exercitation</p></code></pre>
|
|
67
|
+
</section>
|
|
68
|
+
<section><h3>明示的なブロック</h3>
|
|
69
|
+
<div class='pgroup'><p>NoraMarkでは、<コマンド> { ではじまり、} のみの行で終わる範囲を明示的なブロックとみなします。</p>
|
|
70
|
+
</div>
|
|
71
|
+
<pre>d.column {
|
|
72
|
+
この部分は、divで囲まれます。
|
|
73
|
+
}</pre>
|
|
74
|
+
<pre class='code-html' data-code-language='html'><code><div class="column">
|
|
75
|
+
<div class="pgroup">
|
|
76
|
+
<p>この部分は、divで囲まれます。</p>
|
|
77
|
+
</div>
|
|
78
|
+
</div></code></pre>
|
|
79
|
+
<div class='pgroup'><p>定義済みの明示的ブロックのコマンドは、次のものがあります。</p>
|
|
80
|
+
</div>
|
|
81
|
+
<dl><dt>d</dt>
|
|
82
|
+
<dd>divを生成します</dd>
|
|
83
|
+
<dt>sec, section</dt>
|
|
84
|
+
<dd>sectionを生成します</dd>
|
|
85
|
+
<dt>art, article</dt>
|
|
86
|
+
<dd>articleを生成します</dd>
|
|
87
|
+
</dl>
|
|
88
|
+
<div class='pgroup'><p>このほかに、後述のpreformatブロックがあります。</p>
|
|
89
|
+
</div>
|
|
90
|
+
<div class='pgroup'><p>未定義のコマンドの場合は、対応する名前のタグを生成します。</p>
|
|
91
|
+
</div>
|
|
92
|
+
<pre>blockquote {
|
|
93
|
+
山路を登りながら、こう考えた。
|
|
94
|
+
智に働けば角が立つ。情に棹させば流される。意地を通せば窮屈だ。とかくに人の世は住みにくい
|
|
95
|
+
}</pre>
|
|
96
|
+
<pre class='code-html' data-code-language='html'><code><blockquote>
|
|
97
|
+
<div class='pgroup'>
|
|
98
|
+
<p>山路を登りながら、こう考えた。</p>
|
|
99
|
+
<p>智に働けば角が立つ。情に棹させば流される。意地を通せば窮屈だ。とかくに人の世は住みにくい</p>
|
|
100
|
+
</div>
|
|
101
|
+
</blockquote></code></pre>
|
|
102
|
+
</section>
|
|
103
|
+
<section><h3>インラインコマンド</h3>
|
|
104
|
+
<div class='pgroup'><p>インラインコマンドは、次の形式をしています。</p>
|
|
105
|
+
</div>
|
|
106
|
+
<pre>[<コマンド>{内容}]</pre>
|
|
107
|
+
<div class='pgroup'><p>定義済みのインラインコマンドには、次のものがあります。</p>
|
|
108
|
+
</div>
|
|
109
|
+
<dl><dt>l</dt>
|
|
110
|
+
<dd><div class='pgroup'><p>リンクを定義する。</p>
|
|
111
|
+
</div>
|
|
112
|
+
<pre>[l(http://github.com/skoji/noramark){NoraMarkのレポジトリ}]</pre></dd>
|
|
113
|
+
<dt>s</dt>
|
|
114
|
+
<dd><div class='pgroup'><p>spanを定義する。おもにクラスを設定するときに利用する。</p>
|
|
115
|
+
</div>
|
|
116
|
+
<pre>[s.note{spanの中にはいる}]</pre></dd>
|
|
117
|
+
<dt>img</dt>
|
|
118
|
+
<dd><div class='pgroup'><p>画像を定義する。このコマンドにはブレースのセクションがない。</p>
|
|
119
|
+
</div>
|
|
120
|
+
<pre>[img(img/some_image.jpg,alternate text)]</pre></dd>
|
|
121
|
+
<dt>tcy</dt>
|
|
122
|
+
<dd><div class='pgroup'><p>class tcyのspanを定義する。縦書きにおける縦中横のスタイルをあてることを想定している。</p>
|
|
123
|
+
</div>
|
|
124
|
+
<pre>FM TOWNSが登場してからすでに[tcy{25}]年がたった。</pre></dd>
|
|
125
|
+
<dt>ruby</dt>
|
|
126
|
+
<dd><div class='pgroup'><p>ルビをマークアップする。</p>
|
|
127
|
+
</div>
|
|
128
|
+
<pre>[ruby(とんぼ){蜻蛉}]の[ruby(めがね){眼鏡}]はみずいろめがね</pre></dd>
|
|
129
|
+
</dl>
|
|
130
|
+
</section>
|
|
131
|
+
<section><h3>行コマンド</h3>
|
|
132
|
+
<div class='pgroup'><p>行コマンドは1行を占有し、次の形式をしています。</p>
|
|
133
|
+
</div>
|
|
134
|
+
<pre><コマンド>:内容</pre>
|
|
135
|
+
<div class='pgroup'><p>定義済みの行コマンドには、次のものがあります。</p>
|
|
136
|
+
</div>
|
|
137
|
+
<dl><dt>p</dt>
|
|
138
|
+
<dd><div class='pgroup'><p>パラグラフをマークアップする。主に、クラスやIDを付加する目的で使う。</p>
|
|
139
|
+
</div>
|
|
140
|
+
<pre>p.caution: 用量に注意してご利用ください。</pre></dd>
|
|
141
|
+
<dt>image</dt>
|
|
142
|
+
<dd><div class='pgroup'><p>divでラップされたimgをマークアップする。</p>
|
|
143
|
+
</div>
|
|
144
|
+
<pre>image(./path-to-image/img.jpg, 代替テキスト): イメージのキャプション</pre></dd>
|
|
145
|
+
<dt>newpage</dt>
|
|
146
|
+
<dd><div class='pgroup'><p>新規ページを作成する。通常は、あらたなXHTMLファイルが生成される。</p>
|
|
147
|
+
</div>
|
|
148
|
+
<pre>newpage:</pre></dd>
|
|
149
|
+
</dl>
|
|
150
|
+
</section>
|
|
151
|
+
<section><h3>リスト</h3>
|
|
152
|
+
<section><h4>箇条書き</h4>
|
|
153
|
+
<pre>*: *:ではじまる行は、箇条書きになる。
|
|
154
|
+
*: 空行があくまで、箇条書きがつづく。
|
|
155
|
+
*: 空行があくと、あらたな箇条書きになる。</pre>
|
|
156
|
+
<pre class='code-html' data-code-language='html'><code><ul><li>*:ではじまる行は、箇条書きになる。 </li>
|
|
157
|
+
<li>空行があくまで、箇条書きがつづく。</li>
|
|
158
|
+
</ul>
|
|
159
|
+
<ul><li>空行があくと、あらたな箇条書きになる。</li>
|
|
160
|
+
</ul>
|
|
161
|
+
}</code></pre>
|
|
162
|
+
</section>
|
|
163
|
+
<section><h4>番号つきリスト</h4>
|
|
164
|
+
<section><h4>定義リスト</h4>
|
|
165
|
+
<section><h3>見出し</h3>
|
|
166
|
+
<section><h4>単独の見出し</h4>
|
|
167
|
+
<section><h4>セクションを生成する見出し</h4>
|
|
168
|
+
<section><h3>Frontmatter</h3>
|
|
169
|
+
<section><h2>カスタマイズ</h2>
|
|
170
|
+
<section><h3>生成ルール追加</h3>
|
|
171
|
+
</section>
|
|
172
|
+
<section><h3>木構造の操作</h3>
|
|
173
|
+
<section><h2>XML生成</h2>
|
|
174
|
+
</section>
|
|
175
|
+
</section>
|
|
176
|
+
</section>
|
|
177
|
+
</section>
|
|
178
|
+
</section>
|
|
179
|
+
</section>
|
|
180
|
+
</section>
|
|
181
|
+
</section>
|
|
182
|
+
</section>
|
|
183
|
+
</section>
|
|
184
|
+
</section>
|
|
185
|
+
</section>
|
|
186
|
+
</body>
|
|
187
|
+
</html>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
module NoraMark
|
|
2
2
|
module Html
|
|
3
|
-
class
|
|
3
|
+
class AbstractNodeWriter
|
|
4
4
|
def initialize(generator)
|
|
5
5
|
@generator = generator
|
|
6
6
|
end
|
|
7
|
-
def write(
|
|
8
|
-
|
|
7
|
+
def write(node)
|
|
8
|
+
node.content.each do |child|
|
|
9
9
|
@generator.to_html child
|
|
10
10
|
end
|
|
11
11
|
end
|
|
@@ -8,10 +8,9 @@ module NoraMark
|
|
|
8
8
|
@lang = param[:lang] || 'en'
|
|
9
9
|
@title = param[:title] || 'NoraMark generated document'
|
|
10
10
|
@stylesheets = param[:stylesheets] || []
|
|
11
|
-
@stylesheets_alt = param[:stylesheets_alt] || []
|
|
12
11
|
@enable_pgroup = param[:enable_pgroup] || true
|
|
13
12
|
self.paragraph_style= param[:paragraph_style]
|
|
14
|
-
@pages = Pages.new(param[:
|
|
13
|
+
@pages = Pages.new(param[:sequence_format])
|
|
15
14
|
@block_delimiter_stack = []
|
|
16
15
|
head_inserter do
|
|
17
16
|
ret = ""
|
|
@@ -28,8 +27,8 @@ module NoraMark
|
|
|
28
27
|
end
|
|
29
28
|
end
|
|
30
29
|
|
|
31
|
-
def
|
|
32
|
-
@pages.
|
|
30
|
+
def file_basename=(name)
|
|
31
|
+
@pages.file_basename = name
|
|
33
32
|
end
|
|
34
33
|
|
|
35
34
|
def chop_last_space
|
|
@@ -83,23 +82,6 @@ module NoraMark
|
|
|
83
82
|
end
|
|
84
83
|
end
|
|
85
84
|
|
|
86
|
-
def enter_block(lexed)
|
|
87
|
-
@block_delimiter_stack.push(lexed[:delimiter])
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def exit_block(lexed)
|
|
91
|
-
@block_delimiter_stack.pop
|
|
92
|
-
nil
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def block_close?(line)
|
|
96
|
-
line == (@block_delimiter_stack.last || '') + '}'
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def toc=(label)
|
|
100
|
-
@toc[-1] = label if @toc.size > 0
|
|
101
|
-
end
|
|
102
|
-
|
|
103
85
|
def <<(text)
|
|
104
86
|
if @pages.size == 0 || @pages.last.frozen?
|
|
105
87
|
start_html
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module NoraMark
|
|
2
|
+
module Html
|
|
3
|
+
class FrontmatterWriter
|
|
4
|
+
include Util
|
|
5
|
+
def initialize(generator)
|
|
6
|
+
@generator = generator
|
|
7
|
+
@context = generator.context
|
|
8
|
+
@writers = {
|
|
9
|
+
stylesheets: proc do |value|
|
|
10
|
+
value = [value] if value.is_a? String
|
|
11
|
+
@context.stylesheets.concat value
|
|
12
|
+
end,
|
|
13
|
+
title: proc do |value|
|
|
14
|
+
@context.title = escape_html value
|
|
15
|
+
end,
|
|
16
|
+
lang: proc do |value|
|
|
17
|
+
@context.lang = escape_html value.strip
|
|
18
|
+
end,
|
|
19
|
+
paragraph_style: proc do |value|
|
|
20
|
+
@context.paragraph_style = value.strip.to_sym
|
|
21
|
+
end
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
def write(node)
|
|
25
|
+
node.yaml.each {
|
|
26
|
+
|k,v|
|
|
27
|
+
writer = @writers[k.to_sym]
|
|
28
|
+
writer.call(v) unless writer.nil?
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|