raf 0.0.3 → 0.1.0
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 +7 -0
- data/.gitignore +42 -0
- data/Gemfile +3 -12
- data/Gemfile.lock +10 -13
- data/History.rdoc +12 -0
- data/README.rdoc +10 -3
- data/Rakefile +1 -53
- data/VERSION +1 -1
- data/bin/raf2html +4 -1
- data/lib/parserutility.rb +3 -0
- data/lib/raf2html.rb +28 -41
- data/lib/raf2html_element.rb +26 -23
- data/lib/rafblockparser.ry +7 -5
- data/lib/rafblockparser.tab.rb +79 -81
- data/lib/rafelement.rb +34 -24
- data/lib/rafinlineparser.ry +10 -8
- data/lib/rafinlineparser.tab.rb +175 -173
- data/raf.gemspec +16 -112
- data/test.raf +4 -0
- metadata +52 -103
- data/lib/default.css +0 -116
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4ef425f171fb1428d84f05600664075ccd486eb9
|
4
|
+
data.tar.gz: 3a34f1507f9d623723aff59b15ce1e5998ef4b8e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cc6503f3a492c31334c8e3a9cf7f75b0fc8c21fdd6b71349e948fba1ad5b71aa23efcd69f0c1a2cf7b58dd798ef5134e37583a3f429d6f77adee2462f1f36c43
|
7
|
+
data.tar.gz: 49c818d4053e7f257afb84e774b9cbebe22eba46b52c05e7f76dd5f8641d6e2a0fe3aff7040f349f3787175c682c3ee38c9ee3fe9e76a6c0e263aa8c369a6b60
|
data/.gitignore
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# rcov generated
|
2
|
+
coverage
|
3
|
+
|
4
|
+
# rdoc generated
|
5
|
+
rdoc
|
6
|
+
|
7
|
+
# yard generated
|
8
|
+
doc
|
9
|
+
.yardoc
|
10
|
+
|
11
|
+
# bundler
|
12
|
+
.bundle
|
13
|
+
|
14
|
+
# jeweler generated
|
15
|
+
pkg
|
16
|
+
|
17
|
+
# Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
|
18
|
+
#
|
19
|
+
# * Create a file at ~/.gitignore
|
20
|
+
# * Include files you want ignored
|
21
|
+
# * Run: git config --global core.excludesfile ~/.gitignore
|
22
|
+
#
|
23
|
+
# After doing this, these files will be ignored in all your git projects,
|
24
|
+
# saving you from having to 'pollute' every project you touch with them
|
25
|
+
#
|
26
|
+
# Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
|
27
|
+
#
|
28
|
+
# For MacOS:
|
29
|
+
#
|
30
|
+
#.DS_Store
|
31
|
+
#
|
32
|
+
# For TextMate
|
33
|
+
#*.tmproj
|
34
|
+
#tmtags
|
35
|
+
#
|
36
|
+
# For emacs:
|
37
|
+
#*~
|
38
|
+
#\#*
|
39
|
+
#.\#*
|
40
|
+
#
|
41
|
+
# For vim:
|
42
|
+
#*.swp
|
data/Gemfile
CHANGED
@@ -1,13 +1,4 @@
|
|
1
|
-
source
|
2
|
-
# Add dependencies required to use your gem here.
|
3
|
-
# Example:
|
4
|
-
# gem "activesupport", ">= 2.3.5"
|
1
|
+
source 'https://rubygems.org'
|
5
2
|
|
6
|
-
#
|
7
|
-
|
8
|
-
group :development do
|
9
|
-
gem "shoulda", ">= 0"
|
10
|
-
gem "bundler", "~> 1.0.0"
|
11
|
-
gem "jeweler", "~> 1.5.2"
|
12
|
-
gem "rcov", ">= 0"
|
13
|
-
end
|
3
|
+
# Specify your gem's dependencies in raf.gemspec
|
4
|
+
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,20 +1,17 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
raf (0.2.0)
|
5
|
+
|
1
6
|
GEM
|
2
|
-
remote:
|
7
|
+
remote: https://rubygems.org/
|
3
8
|
specs:
|
4
|
-
|
5
|
-
jeweler (1.5.2)
|
6
|
-
bundler (~> 1.0.0)
|
7
|
-
git (>= 1.2.5)
|
8
|
-
rake
|
9
|
-
rake (0.8.7)
|
10
|
-
rcov (0.9.9)
|
11
|
-
shoulda (2.11.3)
|
9
|
+
rake (10.1.0)
|
12
10
|
|
13
11
|
PLATFORMS
|
14
12
|
ruby
|
15
13
|
|
16
14
|
DEPENDENCIES
|
17
|
-
bundler (~> 1.
|
18
|
-
|
19
|
-
|
20
|
-
shoulda
|
15
|
+
bundler (~> 1.3)
|
16
|
+
raf!
|
17
|
+
rake
|
data/History.rdoc
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
== 0.1.0 2013-11-26
|
2
|
+
* Ruby-2.0.0 をサポート
|
3
|
+
* Ruby-1.8.x, Ruby-1.9.x のサポートを終了
|
4
|
+
* ERB書式(<%=...%>)を正しく処理できていなかった問題を修正
|
5
|
+
|
6
|
+
== 0.0.5 2012-12-12
|
7
|
+
* supported ruby1.8 only
|
8
|
+
|
9
|
+
== 0.0.4 2012-12-10
|
10
|
+
* added "-*- encoding: utf-8 -*-" in code files.
|
11
|
+
* support ruby1.9
|
12
|
+
|
1
13
|
== 0.0.3 2011-04-10
|
2
14
|
* typo fix
|
3
15
|
|
data/README.rdoc
CHANGED
@@ -1,8 +1,15 @@
|
|
1
1
|
= raf
|
2
2
|
"raf" is simple document format.
|
3
|
-
refer to : http://garin.jp/doc/
|
3
|
+
refer to : http://garin.jp/doc/raf/raf (this page is japanese)
|
4
|
+
|
5
|
+
== install
|
6
|
+
// check ruby version
|
7
|
+
$ ruby -v
|
8
|
+
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]
|
9
|
+
|
10
|
+
// raf gem package install
|
11
|
+
$ gem install raf
|
4
12
|
|
5
13
|
== Copyright
|
6
|
-
Copyright (c) 2011 garin. See LICENSE.txt for
|
14
|
+
Copyright (c) 2011-2013 garin. See LICENSE.txt for
|
7
15
|
further details.
|
8
|
-
|
data/Rakefile
CHANGED
@@ -1,53 +1 @@
|
|
1
|
-
require
|
2
|
-
require 'bundler'
|
3
|
-
begin
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
require 'rake'
|
11
|
-
|
12
|
-
require 'jeweler'
|
13
|
-
Jeweler::Tasks.new do |gem|
|
14
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
15
|
-
gem.name = "raf"
|
16
|
-
gem.homepage = "http://github.com/garin/raf"
|
17
|
-
gem.license = "GPL"
|
18
|
-
gem.summary = %Q{raf is simple document format}
|
19
|
-
gem.description = %Q{raf is simple document format}
|
20
|
-
gem.email = "garin54@gmail.com"
|
21
|
-
gem.authors = ["garin"]
|
22
|
-
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
23
|
-
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
24
|
-
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
25
|
-
# gem.add_development_dependency 'rspec', '> 1.2.3'
|
26
|
-
end
|
27
|
-
Jeweler::RubygemsDotOrgTasks.new
|
28
|
-
|
29
|
-
require 'rake/testtask'
|
30
|
-
Rake::TestTask.new(:test) do |test|
|
31
|
-
test.libs << 'lib' << 'test'
|
32
|
-
test.pattern = 'test/**/test_*.rb'
|
33
|
-
test.verbose = true
|
34
|
-
end
|
35
|
-
|
36
|
-
require 'rcov/rcovtask'
|
37
|
-
Rcov::RcovTask.new do |test|
|
38
|
-
test.libs << 'test'
|
39
|
-
test.pattern = 'test/**/test_*.rb'
|
40
|
-
test.verbose = true
|
41
|
-
end
|
42
|
-
|
43
|
-
task :default => :test
|
44
|
-
|
45
|
-
require 'rake/rdoctask'
|
46
|
-
Rake::RDocTask.new do |rdoc|
|
47
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
48
|
-
|
49
|
-
rdoc.rdoc_dir = 'rdoc'
|
50
|
-
rdoc.title = "raf #{version}"
|
51
|
-
rdoc.rdoc_files.include('README*')
|
52
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
|
-
end
|
1
|
+
require "bundler/gem_tasks"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/bin/raf2html
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# -*- encoding: utf-8 -*-
|
3
|
+
# Copyright (C) garin <garin54@gmail.com> 2011
|
4
|
+
# See the included file COPYING for details.
|
2
5
|
$:.unshift File.join(File.dirname(__FILE__), "../lib")
|
3
6
|
require "optparse"
|
4
|
-
require "rafblockparser.tab"
|
5
7
|
require "raf2html"
|
6
8
|
|
7
9
|
options = {:css => nil, :language => 'ja', :index => true, :quiet => false}
|
@@ -11,6 +13,7 @@ opt = OptionParser.new do |opt|
|
|
11
13
|
opt.on("--css file", "スタイルシートのファイルを指定") {|f| options[:css] = f}
|
12
14
|
opt.on("-L", "--language LANG", "言語(デフォルトは #{options[:language]} 。ドキュメント側で指定されていればそちらを優先)"){|l| options[:language] = l}
|
13
15
|
opt.on("--[no-]index", "目次を生成する(デフォルトは生成する)"){|v| options[:index] = v }
|
16
|
+
opt.on("--[no-]metadata", "メタ情報を出力しない(デフォルトは出力する)"){|v| options[:metadata] = v }
|
14
17
|
opt.on("-q","--quiet", "本文だけを出力する(ヘッダやフッタは出力しない)"){ options[:quiet] = true }
|
15
18
|
end
|
16
19
|
opt.parse!(ARGV)
|
data/lib/parserutility.rb
CHANGED
data/lib/raf2html.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Copyright (C) garin <garin54@gmail.com> 2011
|
3
|
+
# See the included file COPYING for details.
|
1
4
|
require "raf2html_element"
|
2
5
|
require "cgi"
|
3
6
|
|
@@ -10,24 +13,25 @@ module Raf
|
|
10
13
|
@css = File.open(options[:css]).readlines.to_s unless options[:css].nil?
|
11
14
|
@language = options[:language]
|
12
15
|
@index = options[:index]
|
16
|
+
@metadata = options[:metadata]
|
13
17
|
@quiet = options[:quiet]
|
14
18
|
|
15
19
|
@raf = BlockParser.new
|
16
|
-
@
|
20
|
+
@metadata = setup_metadata
|
17
21
|
@nodes = @raf.parse src.map {|s| CGI.escapeHTML(s) }
|
18
22
|
end
|
19
23
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
+
def setup_metadata
|
25
|
+
metadata = @raf.metadata
|
26
|
+
metadata[:language] = @language if metadata[:language].nil?
|
27
|
+
metadata
|
24
28
|
end
|
25
29
|
|
26
30
|
def to_html
|
27
31
|
html = ""
|
28
32
|
html += header unless @quiet
|
29
33
|
html += header_title
|
30
|
-
html += metadata
|
34
|
+
html += metadata if @metadata
|
31
35
|
html += index if @index
|
32
36
|
html += body
|
33
37
|
html += footnote
|
@@ -36,7 +40,7 @@ module Raf
|
|
36
40
|
end
|
37
41
|
|
38
42
|
def body
|
39
|
-
@nodes.map do |node| node.apply end.
|
43
|
+
@nodes.map do |node| node.apply end.join
|
40
44
|
end
|
41
45
|
|
42
46
|
|
@@ -48,11 +52,10 @@ module Raf
|
|
48
52
|
next if h[:level] == 1 or h[:level] == 6
|
49
53
|
|
50
54
|
if h[:level] == 5
|
51
|
-
str +=
|
52
|
-
str += "<a href='#raf-head#{h[:level]}-#{i+1}' style='padding-left: 1em'>#{h[:title]}</a>\n"
|
55
|
+
str += "<div class=><a href='#raf-head#{h[:level]}-#{i+1}'><span class='space' />#{h[:title]}</a></div>\n"
|
53
56
|
else
|
54
57
|
str += index_terminate(h[:level], level_pre)
|
55
|
-
str += "<li><a href='#raf-head#{h[:level]}-#{i+1}'>#{h[:index]}
|
58
|
+
str += "<li><a href='#raf-head#{h[:level]}-#{i+1}'>#{h[:index]}#{h[:title]}</a>\n"
|
56
59
|
level_pre = h[:level]
|
57
60
|
end
|
58
61
|
end
|
@@ -82,30 +85,15 @@ module Raf
|
|
82
85
|
str = "<div id='raf-metadata'>"
|
83
86
|
str += "<table id='raf-metadata-table'>"
|
84
87
|
str_pre = ""
|
85
|
-
str_pre += "<tr><th>著者</th><td colspan='3'>#{@
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
unless @info[:publisher].nil? or @info[:version].nil?
|
95
|
-
str_pre += "<tr>"
|
96
|
-
str_pre += "<th>発行</th><td>#{@info[:publisher]}</td>" unless @info[:publisher].nil?
|
97
|
-
str_pre += "<th>バージョン</th><td>#{@info[:version]}</td>" unless @info[:version].nil?
|
98
|
-
str_pre += "</tr>"
|
99
|
-
end
|
100
|
-
|
101
|
-
unless @info[:contributor].nil? or @info[:revison].nil?
|
102
|
-
str_pre += "<tr>"
|
103
|
-
str_pre += "<th>寄稿者</th>#{@info[:contributor]}</td>" unless @info[:contributor].nil?
|
104
|
-
str_pre += "<th>リビジョン</th><td>#{@info[:revison]}</td>" unless @info[:revison].nil?
|
105
|
-
str_pre += "</tr>"
|
106
|
-
end
|
107
|
-
|
108
|
-
str_pre += "<tr><th>概要</th><td colspan='4'>#{@info[:description]}</td></tr>" unless @info[:description].nil?
|
88
|
+
str_pre += "<tr><th>著者</th><td colspan='3'>#{@metadata[:creator]}</td></tr>" unless @metadata[:creator].nil?
|
89
|
+
str_pre += "<tr><th>公開日</th><td>#{@metadata[:date]}</td></tr>" unless @metadata[:date].nil?
|
90
|
+
str_pre += "<tr><th>更新日</th><td>#{@metadata[:update]}</td></tr>" unless @metadata[:update].nil?
|
91
|
+
str_pre += "<tr><th>タグ</th><td>#{@metadata[:tag]}</td></tr>" unless @metadata[:tag].nil?
|
92
|
+
str_pre += "<tr><th>発行</th><td>#{@metadata[:publisher]}</td></tr>" unless @metadata[:publisher].nil?
|
93
|
+
str_pre += "<tr><th>バージョン</th><td>#{@metadata[:version]}</td></tr>" unless @metadata[:version].nil?
|
94
|
+
str_pre += "<tr><th>寄稿者</th>#{@metadata[:contributor]}</tr></td>" unless @metadata[:contributor].nil?
|
95
|
+
str_pre += "<tr.<th>リビジョン</th><td>#{@metadata[:revison]}</tr></td>" unless @metadata[:revison].nil?
|
96
|
+
str_pre += "<tr><th>概要</th><td colspan='4'>#{@metadata[:description]}</td></tr>" unless @metadata[:description].nil?
|
109
97
|
|
110
98
|
if str_pre.empty?
|
111
99
|
str_pre
|
@@ -118,8 +106,8 @@ module Raf
|
|
118
106
|
return "" if @raf.inline_index[:footnote].nil?
|
119
107
|
str = "<div id='raf-footnote'>"
|
120
108
|
@raf.inline_index[:footnote].each_with_index do |f,i|
|
121
|
-
str += "<a id='raf-footnote-#{i+1}' />"
|
122
|
-
str += "<a href='#raf-footnote-#{i+1}-reverse'>*#{i+1}</a>"
|
109
|
+
str += "<a id='raf-footnote-#{i+1}' class='footnote' />"
|
110
|
+
str += "<a href='#raf-footnote-#{i+1}-reverse' class='footnote-reverse'>*#{i+1}</a>"
|
123
111
|
str += " #{f[:content].map{|c| c.apply}}<br />"
|
124
112
|
end
|
125
113
|
str += "</div>"
|
@@ -130,20 +118,20 @@ module Raf
|
|
130
118
|
str = <<EOL
|
131
119
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
132
120
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
133
|
-
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="#{@
|
121
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="#{@metadata[:language]}">
|
134
122
|
<head>
|
135
123
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
136
124
|
EOL
|
137
125
|
str += css
|
138
126
|
str += <<EOL
|
139
|
-
<title>#{@
|
127
|
+
<title>#{@metadata[:subject]}</title>
|
140
128
|
</head>
|
141
129
|
<body>
|
142
130
|
EOL
|
143
131
|
end
|
144
132
|
|
145
133
|
def header_title
|
146
|
-
"<h1>#{@
|
134
|
+
"<h1>#{@metadata[:subject]}</h1>\n"
|
147
135
|
end
|
148
136
|
|
149
137
|
def css
|
@@ -158,10 +146,9 @@ EOL
|
|
158
146
|
|
159
147
|
def footer
|
160
148
|
str = "\n"
|
161
|
-
str += "<div id='rights'>#{@
|
149
|
+
str += "<div id='rights'>#{@metadata[:rights]}</div>\n" unless @metadata[:rights].nil?
|
162
150
|
str += "</body>\n</html>"
|
163
151
|
str
|
164
152
|
end
|
165
153
|
end
|
166
154
|
end
|
167
|
-
|
data/lib/raf2html_element.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Copyright (C) garin <garin54@gmail.com> 2011
|
3
|
+
# See the included file COPYING for details.
|
4
|
+
require "rafblockparser.tab"
|
1
5
|
module Raf
|
2
|
-
|
6
|
+
|
3
7
|
class Element
|
4
8
|
def newline_to_br(str)
|
5
9
|
str.gsub("\n", "<br />\n")
|
@@ -14,33 +18,33 @@ module Raf
|
|
14
18
|
str
|
15
19
|
end
|
16
20
|
end
|
17
|
-
|
21
|
+
|
18
22
|
# ----- Blocks
|
19
23
|
class WhiteLine < Element
|
20
24
|
def apply
|
21
25
|
"\n"
|
22
26
|
end
|
23
27
|
end
|
24
|
-
|
28
|
+
|
25
29
|
class PlainTextBlock < Element
|
26
30
|
def apply
|
27
31
|
@contents.map {|c| c.apply }
|
28
32
|
end
|
29
33
|
end
|
30
|
-
|
34
|
+
|
31
35
|
class HeadLine < Element
|
32
36
|
# @contents = [level, title, id, index]
|
33
37
|
def apply
|
34
38
|
return "" if @contents[0] == 1
|
35
39
|
str = ""
|
36
|
-
str += "<h#{@contents[0]} id='raf-head#{@contents[0]}-#{@contents[2]}'
|
40
|
+
str += "<h#{@contents[0]} id='raf-head#{@contents[0]}-#{@contents[2]}'>"
|
37
41
|
str += "<a id='#{@contents[1].to_code}'></a>"
|
38
|
-
str += "#{@contents[3]}" unless @contents[0] == 1 or @contents[0] == 5 or @contents[0] == 6
|
42
|
+
str += " #{@contents[3]}" unless @contents[0] == 1 or @contents[0] == 5 or @contents[0] == 6
|
39
43
|
str += "#{@contents[1]}</h#{@contents[0]}>\n"
|
40
44
|
str
|
41
45
|
end
|
42
46
|
end
|
43
|
-
|
47
|
+
|
44
48
|
class Paragraph < Element
|
45
49
|
def apply
|
46
50
|
"<p>#{@contents.map{|c| c.apply}}</p>\n"
|
@@ -51,7 +55,7 @@ module Raf
|
|
51
55
|
def apply
|
52
56
|
"<pre>#{@contents}</pre>\n"
|
53
57
|
end
|
54
|
-
end
|
58
|
+
end
|
55
59
|
|
56
60
|
class ItemList < Element
|
57
61
|
def apply
|
@@ -62,14 +66,14 @@ module Raf
|
|
62
66
|
type_pre = type
|
63
67
|
case item
|
64
68
|
when :INDENT
|
65
|
-
type = :indent
|
69
|
+
type = :indent
|
66
70
|
str += "\n<ul>\n"
|
67
71
|
when :DEDENT
|
68
|
-
type = :dedent
|
69
|
-
str += "</li>\n" if type_pre == :item
|
72
|
+
type = :dedent
|
73
|
+
str += "</li>\n" if type_pre == :item
|
70
74
|
str += "</ul>\n</li>\n"
|
71
75
|
else
|
72
|
-
type = :item
|
76
|
+
type = :item
|
73
77
|
str += "</li>\n" if type_pre == :item
|
74
78
|
str += "<li>#{item.apply}"
|
75
79
|
end
|
@@ -93,7 +97,7 @@ module Raf
|
|
93
97
|
end
|
94
98
|
end
|
95
99
|
str += "</ol>\n"
|
96
|
-
str
|
100
|
+
str
|
97
101
|
end
|
98
102
|
end
|
99
103
|
|
@@ -116,7 +120,7 @@ module Raf
|
|
116
120
|
if item =~ /^\s*\*/
|
117
121
|
str += "<th>#{item.sub(/^\s*\*/, "").sub(/\*\s*$/,"")}</th>"
|
118
122
|
else
|
119
|
-
str += "<td>#{item}</td>"
|
123
|
+
str += "<td>#{item}</td>"
|
120
124
|
end
|
121
125
|
end
|
122
126
|
str += "\n</tr>"
|
@@ -126,28 +130,27 @@ module Raf
|
|
126
130
|
end
|
127
131
|
end
|
128
132
|
# --- Blocks end
|
129
|
-
|
130
|
-
# --- Inlines
|
133
|
+
|
134
|
+
# --- Inlines
|
131
135
|
class Label < Element
|
132
136
|
# @contents = [label, title]
|
133
137
|
def apply
|
134
138
|
"<a href='##{@contents[0]}' id='#{@contents[0]}'>#{@contents[1]}</a>"
|
135
139
|
end
|
136
140
|
end
|
137
|
-
|
141
|
+
|
138
142
|
class Reference < Element
|
139
143
|
def apply
|
140
144
|
"<a href='#{@contents[1]}' title='#{@contents[1]}'>#{@contents[0]}</a>"
|
141
145
|
end
|
142
146
|
end
|
143
147
|
|
144
|
-
|
145
148
|
class Plain < Element
|
146
149
|
def apply
|
147
150
|
"#{newline_to_br(@contents.join(""))}"
|
148
151
|
end
|
149
152
|
end
|
150
|
-
|
153
|
+
|
151
154
|
class Emphasis < Element
|
152
155
|
def apply
|
153
156
|
"<em>#{@contents.map{|c| c.apply}}</em>"
|
@@ -180,16 +183,16 @@ module Raf
|
|
180
183
|
"<ruby><rb>#{@contents[0]}</rb><rp>(</rp><rt>#{@contents[1]}</rt><rp>)</rp></ruby>"
|
181
184
|
end
|
182
185
|
end
|
183
|
-
|
186
|
+
|
184
187
|
class Footnote < Element
|
185
188
|
def apply
|
186
|
-
"<a href='#raf-footnote-#{@contents[1]}' name='raf-footnote-#{@contents[1]}-reverse' title='#{@contents[0].map {|c| c.apply}}'><sup><small>*#{@contents[1]}</small></sup></a>"
|
189
|
+
"<a href='#raf-footnote-#{@contents[1]}' name='raf-footnote-#{@contents[1]}-reverse' title='#{@contents[0].map {|c| c.apply}}' class='footnote-reverse'><sup><small>*#{@contents[1]}</small></sup></a>"
|
187
190
|
end
|
188
|
-
end
|
191
|
+
end
|
189
192
|
|
190
193
|
class Image < Element
|
191
194
|
def apply
|
192
195
|
"<img src='#{@contents}' />"
|
193
196
|
end
|
194
|
-
end
|
197
|
+
end
|
195
198
|
end
|
data/lib/rafblockparser.ry
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright (C) garin <garin54@gmail.com> 2011
|
2
|
+
# See the included file COPYING for details.
|
1
3
|
class BlockParser
|
2
4
|
token HEADER WHITELINE HEADLINE PLAIN DESCLINE_TITLE DESCLINE QUOTE INDENT DEDENT ITEMLIST ITEMLISTCONTINUE NUMLIST TABLELINE
|
3
5
|
preclow
|
@@ -26,7 +28,7 @@ class BlockParser
|
|
26
28
|
name, val = val[0].split(":",2)
|
27
29
|
if name.nil? or val.nil?
|
28
30
|
else
|
29
|
-
@
|
31
|
+
@metadata.update({name.strip.to_sym => val.strip })
|
30
32
|
end
|
31
33
|
nil }
|
32
34
|
|
@@ -35,7 +37,7 @@ class BlockParser
|
|
35
37
|
title = val[0][1]
|
36
38
|
level = val[0][0]
|
37
39
|
if level == 1
|
38
|
-
@
|
40
|
+
@metadata[:subject] ||= title
|
39
41
|
else
|
40
42
|
@head_index.update(level)
|
41
43
|
end
|
@@ -138,16 +140,16 @@ end
|
|
138
140
|
|
139
141
|
def initialize
|
140
142
|
@inline_parser = InlineParser.new
|
141
|
-
@
|
143
|
+
@metadata = {}
|
142
144
|
@inline_index = @inline_parser.index
|
143
145
|
@index = {}
|
144
146
|
@head_index = HeadIndex.new
|
145
147
|
end
|
146
|
-
attr_reader :
|
148
|
+
attr_reader :metadata, :inline_index, :index
|
147
149
|
|
148
150
|
def parse(src)
|
149
151
|
@no = 0
|
150
|
-
@src = src
|
152
|
+
@src = Array(src)
|
151
153
|
@line = Line.new("")
|
152
154
|
@line_pre = @line.dup
|
153
155
|
@indent_stack = []
|