arti_mark 0.1.beta3 → 0.1.beta5

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.
@@ -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
- ;:コマンド文字列: <コマンド名>[.クラス名]*[#id名]*[(パラメータ)]
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.beta3
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-21 00:00:00.000000000 Z
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/article_parser.rb
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/result.rb
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,12 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'singleton'
3
-
4
- module ArtiMark
5
- class ArticleParser
6
- include CommonBlockParser, Singleton
7
- def initialize
8
- @command = /(art|article)/
9
- @markup = 'article'
10
- end
11
- end
12
- end
@@ -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("&", "&amp;").
6
- gsub("<", "&lt;").
7
- gsub(">", "&gt;").
8
- gsub('"', "&quot;")
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
@@ -1,12 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'singleton'
3
-
4
- module ArtiMark
5
- class DivParser
6
- include CommonBlockParser, Singleton
7
- def initialize
8
- @command = /(d|div)/
9
- @markup = 'div'
10
- end
11
- end
12
- end
@@ -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,14 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'singleton'
3
-
4
- module ArtiMark
5
- class OrderedListParser
6
- include ListParser, Singleton
7
-
8
- def initialize
9
- @cmd = /[0-9]+/
10
- @blockname = 'ol'
11
- end
12
-
13
- end
14
- 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
@@ -1,12 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'singleton'
3
-
4
- module ArtiMark
5
- class SectionParser
6
- include CommonBlockParser, Singleton
7
- def initialize
8
- @command = /(sec|section)/
9
- @markup = 'section'
10
- end
11
- end
12
- end