arti_mark 0.1.beta3 → 0.1.beta5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -4
- data/README.md +108 -7
- data/lib/arti_mark.rb +30 -35
- data/lib/arti_mark/html/abstract_item_writer.rb +14 -0
- data/lib/arti_mark/html/context.rb +100 -79
- data/lib/arti_mark/html/generator.rb +51 -34
- data/lib/arti_mark/html/header_writer.rb +3 -0
- data/lib/arti_mark/html/pages.rb +56 -0
- data/lib/arti_mark/html/paragraph_writer.rb +52 -0
- data/lib/arti_mark/parser.kpeg +34 -6
- data/lib/arti_mark/parser.kpeg.rb +1015 -128
- data/lib/arti_mark/version.rb +1 -1
- data/spec/arti_mark_spec.rb +338 -82
- data/spec/created_files/.gitignore +1 -0
- data/spec/fixture/test_src_ja.arti +3 -1
- metadata +7 -18
- data/lib/arti_mark/article_parser.rb +0 -12
- data/lib/arti_mark/base_parser.rb +0 -26
- data/lib/arti_mark/block_image_parser.rb +0 -27
- data/lib/arti_mark/command_lexer.rb +0 -83
- data/lib/arti_mark/common_block_parser.rb +0 -36
- data/lib/arti_mark/definition_list_parser.rb +0 -23
- data/lib/arti_mark/div_parser.rb +0 -12
- data/lib/arti_mark/head_parser.rb +0 -20
- data/lib/arti_mark/html/result.rb +0 -27
- data/lib/arti_mark/list_parser.rb +0 -27
- data/lib/arti_mark/ordered_list_parser.rb +0 -14
- data/lib/arti_mark/paragraph_parser.rb +0 -30
- data/lib/arti_mark/section_parser.rb +0 -12
- data/lib/arti_mark/syntax.rb +0 -147
- data/lib/arti_mark/universal_block_parser.rb +0 -10
- data/lib/arti_mark/unordered_list_parser.rb +0 -14
@@ -0,0 +1 @@
|
|
1
|
+
*.xhtml
|
@@ -1,3 +1,4 @@
|
|
1
|
+
title: the sample text
|
1
2
|
sect.preface {
|
2
3
|
h1: 前書き
|
3
4
|
前書きのようなものをここでかく。
|
@@ -7,6 +8,7 @@ h1: 前書き
|
|
7
8
|
newpage:
|
8
9
|
|
9
10
|
art.main {
|
11
|
+
|
10
12
|
h1: 本文
|
11
13
|
ここからが本文。
|
12
14
|
チェックする項目は
|
@@ -31,7 +33,7 @@ h1: 本文
|
|
31
33
|
|
32
34
|
コマンドについて説明する。
|
33
35
|
|
34
|
-
;:コマンド文字列: <コマンド名>[
|
36
|
+
;:コマンド文字列: <コマンド名>[#id名]*[.クラス名]*[(パラメータ)]
|
35
37
|
;: 行コマンド : 行先頭に、<コマンド文字列>: がくる。続く行末までの文字が処理対象となる。p/h以外のブロック要素を生成する行コマンドは、暗黙のブロックを中断する。
|
36
38
|
;: ブロックコマンド : 行先頭に<コマンド文字列>{ がくる。その行では文字を続けない。} 単独の行で閉じる。
|
37
39
|
;: インラインコマンド : 行の途中にあらわれる[<コマンド文字列>{<文字>}] の列。
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arti_mark
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.beta5
|
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-02
|
11
|
+
date: 2014-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kpeg
|
@@ -67,33 +67,21 @@ files:
|
|
67
67
|
- Rakefile
|
68
68
|
- arti_mark.gemspec
|
69
69
|
- lib/arti_mark.rb
|
70
|
-
- lib/arti_mark/
|
71
|
-
- lib/arti_mark/base_parser.rb
|
72
|
-
- lib/arti_mark/block_image_parser.rb
|
73
|
-
- lib/arti_mark/command_lexer.rb
|
74
|
-
- lib/arti_mark/common_block_parser.rb
|
75
|
-
- lib/arti_mark/definition_list_parser.rb
|
76
|
-
- lib/arti_mark/div_parser.rb
|
77
|
-
- lib/arti_mark/head_parser.rb
|
70
|
+
- lib/arti_mark/html/abstract_item_writer.rb
|
78
71
|
- lib/arti_mark/html/context.rb
|
79
72
|
- lib/arti_mark/html/generator.rb
|
80
73
|
- lib/arti_mark/html/header_writer.rb
|
81
|
-
- lib/arti_mark/html/
|
74
|
+
- lib/arti_mark/html/pages.rb
|
75
|
+
- lib/arti_mark/html/paragraph_writer.rb
|
82
76
|
- lib/arti_mark/html/tag_writer.rb
|
83
77
|
- lib/arti_mark/html/util.rb
|
84
78
|
- lib/arti_mark/html/writer_selector.rb
|
85
|
-
- lib/arti_mark/list_parser.rb
|
86
|
-
- lib/arti_mark/ordered_list_parser.rb
|
87
|
-
- lib/arti_mark/paragraph_parser.rb
|
88
79
|
- lib/arti_mark/parser.kpeg
|
89
80
|
- lib/arti_mark/parser.kpeg.rb
|
90
81
|
- lib/arti_mark/parser.rb
|
91
|
-
- lib/arti_mark/section_parser.rb
|
92
|
-
- lib/arti_mark/syntax.rb
|
93
|
-
- lib/arti_mark/universal_block_parser.rb
|
94
|
-
- lib/arti_mark/unordered_list_parser.rb
|
95
82
|
- lib/arti_mark/version.rb
|
96
83
|
- spec/arti_mark_spec.rb
|
84
|
+
- spec/created_files/.gitignore
|
97
85
|
- spec/fixture/test_src_ja.arti
|
98
86
|
- spec/nokogiri_test_helper.rb
|
99
87
|
- spec/spec_helper.rb
|
@@ -122,6 +110,7 @@ specification_version: 4
|
|
122
110
|
summary: simple and customizable text markup language for EPUB
|
123
111
|
test_files:
|
124
112
|
- spec/arti_mark_spec.rb
|
113
|
+
- spec/created_files/.gitignore
|
125
114
|
- spec/fixture/test_src_ja.arti
|
126
115
|
- spec/nokogiri_test_helper.rb
|
127
116
|
- spec/spec_helper.rb
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
module ArtiMark
|
3
|
-
module BaseParser
|
4
|
-
include CommandLexer
|
5
|
-
|
6
|
-
|
7
|
-
def paragraph(line, syntax, cls_array = [])
|
8
|
-
if line =~/^(「|『|()/ # TODO: should be plaggable
|
9
|
-
cls_array << 'noindent'
|
10
|
-
end
|
11
|
-
"<p#{class_string(cls_array)}>#{line}</p>\n"
|
12
|
-
end
|
13
|
-
|
14
|
-
def process_line(line, syntax, context)
|
15
|
-
return '' if line =~ /^#.*$/
|
16
|
-
line = escape_html line
|
17
|
-
line = replace_inline_commands(line, syntax, context)
|
18
|
-
lexed = lex_line_command(line)
|
19
|
-
if !lexed[:cmd].nil? && syntax.linecommand_handler.respond_to?(lexed[:cmd].to_sym)
|
20
|
-
syntax.linecommand_handler.send(lexed[:cmd], lexed, context)
|
21
|
-
else
|
22
|
-
paragraph(line, syntax)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
#require 'singleton'
|
2
|
-
|
3
|
-
module ArtiMark
|
4
|
-
class BlockImageParser
|
5
|
-
include BaseParser, Singleton
|
6
|
-
def accept?(lines)
|
7
|
-
lex_line_command(lines[0])[:cmd] =~ /image/
|
8
|
-
end
|
9
|
-
|
10
|
-
def parse(lines, r, syntax)
|
11
|
-
lexed = lex_line_command(lines[0])
|
12
|
-
raise 'HeadParser called for #{lines[0]}' unless lexed[:cmd] =~ /image/
|
13
|
-
lines.shift
|
14
|
-
lexed[:cls] << 'img-wrap' if lexed[:cls].size == 0
|
15
|
-
src = lexed[:params][0].strip
|
16
|
-
alt = lexed[:params][1].strip if !lexed[:params][1].nil?
|
17
|
-
caption = lexed[:text].strip
|
18
|
-
caption_before = lexed[:named_params][:caption_before]
|
19
|
-
|
20
|
-
r << "<div#{ids_string(lexed[:ids])}#{class_string(lexed[:cls])}>"
|
21
|
-
r << "<p>#{caption}</p>" if !caption.nil? && caption.size > 0 && caption_before
|
22
|
-
r << "<img src='#{src}' alt='#{escape_html alt}' />"
|
23
|
-
r << "<p>#{escape_html caption}</p>" if !caption.nil? && caption.size > 0 && !caption_before
|
24
|
-
r << "</div>\n"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,83 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
module ArtiMark
|
3
|
-
module CommandLexer
|
4
|
-
def escape_html(string)
|
5
|
-
string.to_s.gsub("&", "&").
|
6
|
-
gsub("<", "<").
|
7
|
-
gsub(">", ">").
|
8
|
-
gsub('"', """)
|
9
|
-
end
|
10
|
-
|
11
|
-
def attr_string(the_array, attr_name)
|
12
|
-
if the_array.size == 0
|
13
|
-
''
|
14
|
-
else
|
15
|
-
" #{attr_name}='#{the_array.join(' ')}'"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def class_string(cls_array)
|
20
|
-
attr_string(cls_array, 'class')
|
21
|
-
end
|
22
|
-
|
23
|
-
def ids_string(ids_array)
|
24
|
-
attr_string(ids_array, 'id')
|
25
|
-
end
|
26
|
-
def attr_array(part, separator=".")
|
27
|
-
the_array = []
|
28
|
-
if !part.nil? && part.size > 0
|
29
|
-
the_array = part[1..-1].split(separator)
|
30
|
-
end
|
31
|
-
the_array
|
32
|
-
end
|
33
|
-
def id_array(id_part)
|
34
|
-
attr_array(id_part, '#')
|
35
|
-
end
|
36
|
-
|
37
|
-
def class_array(cls_part)
|
38
|
-
attr_array(cls_part, '.')
|
39
|
-
end
|
40
|
-
|
41
|
-
def param_parse(param_part)
|
42
|
-
r = []
|
43
|
-
named = {}
|
44
|
-
if !param_part.nil? && param_part.size > 0
|
45
|
-
r = param_part.split(',')
|
46
|
-
end
|
47
|
-
r.each {
|
48
|
-
|param|
|
49
|
-
splitted = param.split(':', 2)
|
50
|
-
if (splitted.size == 2)
|
51
|
-
named[splitted[0].strip.to_sym] = splitted[1]
|
52
|
-
end
|
53
|
-
}
|
54
|
-
return r, named
|
55
|
-
end
|
56
|
-
|
57
|
-
def lex_line_command(line)
|
58
|
-
line =~ /^([\w\*;]+?)((?:\#[A-Za-z0-9_\-]+?)*)((?:\.[A-Za-z0-9_\-]+?)*)(?:\((.+?)\))?\s*:(.*?)$/
|
59
|
-
all_params, named_params = param_parse($4)
|
60
|
-
return { :cmd => $1, :ids => id_array($2), :cls => class_array($3), :params => all_params, :named_params => named_params, :text => $5 }
|
61
|
-
end
|
62
|
-
|
63
|
-
def lex_block_command(line)
|
64
|
-
line =~ /^(\w+?)((?:\#[A-Za-z0-9_\-]+?)*)((?:\.[A-Za-z0-9_\-]+?)*)(?:\((.+?)\))?\s*(?:{(---)?)\s*$/
|
65
|
-
not_named, named = param_parse($4)
|
66
|
-
return { :cmd => $1, :ids => id_array($2), :cls => class_array($3), :params => not_named, :named_params => named, :delimiter => $5||''}
|
67
|
-
end
|
68
|
-
|
69
|
-
def replace_inline_commands(line, syntax, context)
|
70
|
-
line.gsub(/\[(\w+?)((?:\#[A-Za-z0-9_\-]+?)*)((?:\.[A-Za-z0-9_\-]+?)*)(?:\((.+?)\))?\s*{(.*?)}\]/) {
|
71
|
-
|matched|
|
72
|
-
not_named, named = param_parse($4)
|
73
|
-
lexed = {:cmd => $1, :ids => id_array($2), :cls => class_array($3), :params => not_named, :named_params => named, :text => $5 }
|
74
|
-
if !lexed[:cmd].nil?
|
75
|
-
syntax.inline_handler.send(lexed[:cmd], lexed, context)
|
76
|
-
else
|
77
|
-
matched
|
78
|
-
end
|
79
|
-
}
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
require 'singleton'
|
3
|
-
|
4
|
-
module ArtiMark
|
5
|
-
module CommonBlockParser
|
6
|
-
include BaseParser
|
7
|
-
def accept?(lines)
|
8
|
-
lex_block_command(lines[0])[:cmd] =~ @command
|
9
|
-
end
|
10
|
-
|
11
|
-
def parse(lines, r, syntax)
|
12
|
-
lexed = lex_block_command(lines.shift)
|
13
|
-
throw 'something wrong here #{lines}' unless lexed[:cmd] =~ @command
|
14
|
-
@markup = lexed[:cmd] if @markup.nil?
|
15
|
-
r.enter_block(lexed)
|
16
|
-
process_block(lines, r, syntax, lexed[:ids], lexed[:cls], lexed[:params])
|
17
|
-
r.exit_block(lexed)
|
18
|
-
end
|
19
|
-
|
20
|
-
def process_block(lines, r, syntax, ids_array, cls_array, params)
|
21
|
-
previous_pgroup , r.enable_pgroup = r.enable_pgroup , false if params.member? 'wo-pgroup'
|
22
|
-
r << "<#{@markup}#{ids_string(ids_array)}#{class_string(cls_array)}>\n"
|
23
|
-
while lines.size > 0
|
24
|
-
if r.block_close? lines[0]
|
25
|
-
lines.shift
|
26
|
-
break
|
27
|
-
else
|
28
|
-
syntax.determine_parser(lines, :get_default => true).call(lines, r, syntax)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
r << "</#{@markup}>\n"
|
32
|
-
r.enable_pgroup = previous_pgroup if !previous_pgroup.nil?
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
require 'singleton'
|
3
|
-
|
4
|
-
module ArtiMark
|
5
|
-
class DefinitionListParser
|
6
|
-
include ListParser, Singleton
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
@cmd = /;/
|
10
|
-
@blockname = 'dl'
|
11
|
-
end
|
12
|
-
|
13
|
-
def process_block(lines, r, syntax)
|
14
|
-
while lines.size > 0
|
15
|
-
lexed = lex_line_command(lines[0])
|
16
|
-
return unless lexed[:cmd] =~ @cmd
|
17
|
-
dt, dd = lexed[:text].split(':', 2).map(&:strip)
|
18
|
-
r << "<dt>#{escape_html dt}</dt><dd>#{escape_html dd}</dd>\n"
|
19
|
-
lines.shift
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/lib/arti_mark/div_parser.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
#require 'singleton'
|
2
|
-
|
3
|
-
module ArtiMark
|
4
|
-
class HeadParser
|
5
|
-
include BaseParser, Singleton
|
6
|
-
def accept?(lines)
|
7
|
-
lex_line_command(lines[0])[:cmd] =~ /h[1-6]/
|
8
|
-
end
|
9
|
-
|
10
|
-
def parse(lines, r, syntax)
|
11
|
-
line = escape_html lines[0]
|
12
|
-
line = replace_inline_commands(line, syntax, r)
|
13
|
-
lexed = lex_line_command(line)
|
14
|
-
raise 'HeadParser called for #{lines[0]}' unless lexed[:cmd] =~ /h([1-6])/
|
15
|
-
lines.shift
|
16
|
-
r << "<#{lexed[:cmd]}#{ids_string(lexed[:ids])}#{class_string(lexed[:cls])}>#{lexed[:text].strip}</#{lexed[:cmd]}>\n"
|
17
|
-
r.toc = lexed[:text].strip if lexed[:params].member? 'in-toc'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module ArtiMark
|
2
|
-
module Html
|
3
|
-
class Context
|
4
|
-
class Result < Array
|
5
|
-
def initialize
|
6
|
-
super
|
7
|
-
end
|
8
|
-
|
9
|
-
def write_as_files(prefix, format='%03d')
|
10
|
-
self.each_with_index {
|
11
|
-
|converted, i|
|
12
|
-
File.open("#{prefix}_#{format%(i+1)}.xhtml", 'w+') {
|
13
|
-
|file|
|
14
|
-
file << converted
|
15
|
-
}
|
16
|
-
}
|
17
|
-
end
|
18
|
-
def write_as_single_file(filename)
|
19
|
-
File.open(filename, 'w+') {
|
20
|
-
|file|
|
21
|
-
file << self[0]
|
22
|
-
}
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
module ArtiMark
|
4
|
-
module ListParser
|
5
|
-
include BaseParser
|
6
|
-
|
7
|
-
def accept?(lines)
|
8
|
-
lex_line_command(lines[0])[:cmd] =~ @cmd
|
9
|
-
end
|
10
|
-
|
11
|
-
def parse(lines, r, syntax)
|
12
|
-
lexed = lex_line_command(lines[0])
|
13
|
-
r << "<#{@blockname}#{ids_string(lexed[:ids])}#{class_string(lexed[:cls])}>\n"
|
14
|
-
process_block(lines, r, syntax)
|
15
|
-
r << "</#{@blockname}>\n"
|
16
|
-
end
|
17
|
-
|
18
|
-
def process_block(lines, r, syntax)
|
19
|
-
while lines.size > 0
|
20
|
-
lexed = lex_line_command(lines[0])
|
21
|
-
return unless lexed[:cmd] =~ @cmd
|
22
|
-
r << "<li>#{escape_html lexed[:text].strip}</li>\n"
|
23
|
-
lines.shift
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
require 'singleton'
|
3
|
-
|
4
|
-
module ArtiMark
|
5
|
-
class ParagraphParser
|
6
|
-
include BaseParser, Singleton
|
7
|
-
|
8
|
-
def accept?(lines)
|
9
|
-
lines[0].size == 0
|
10
|
-
end
|
11
|
-
def parse(lines, context, syntax)
|
12
|
-
lines.shift while lines[0].size == 0
|
13
|
-
return unless syntax.determine_parser(lines).nil?
|
14
|
-
context << process_paragraph_group(lines, syntax, context)
|
15
|
-
end
|
16
|
-
|
17
|
-
def process_paragraph_group(lines, syntax, context)
|
18
|
-
paragraph = ''
|
19
|
-
while (lines.size > 0 &&
|
20
|
-
!context.block_close?(lines[0]) &&
|
21
|
-
syntax.determine_parser(lines).nil?)
|
22
|
-
paragraph << process_line(lines.shift, syntax, context)
|
23
|
-
end
|
24
|
-
if paragraph.size > 0
|
25
|
-
paragraph = "<div class='pgroup'>\n#{paragraph}</div>\n" if context.enable_pgroup
|
26
|
-
end
|
27
|
-
paragraph
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|