raf 0.0.3 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 = []
|