erbook 7.0.0 → 7.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CREDITS +3 -0
- data/bin/erbook +2 -2
- data/doc/HelloWorld.input +1 -1
- data/doc/api/classes/ERBook/Document.html +153 -150
- data/doc/api/classes/ERBook/Document/Node.html +7 -7
- data/doc/api/classes/ERBook/Template.html +24 -24
- data/doc/api/classes/ERBook/Template/Sandbox.html +6 -6
- data/doc/api/classes/RDoc/AnyMethod.html +32 -28
- data/doc/api/classes/RDoc/TopLevel.html +47 -47
- data/doc/api/classes/String.html +14 -14
- data/doc/api/created.rid +1 -1
- data/doc/api/files/CREDITS.html +68 -0
- data/doc/api/files/lib/erbook/document_rb.html +1 -3
- data/doc/api/files/lib/erbook/rdoc_rb.html +1 -1
- data/doc/api/files/lib/erbook/template_rb.html +1 -1
- data/doc/api/files/lib/erbook/to_xhtml_rb.html +3 -3
- data/doc/api/files/lib/erbook_rb.html +3 -1
- data/doc/api/panel/search_index.js +1 -1
- data/doc/api/panel/tree.js +1 -1
- data/doc/formats.erb +129 -8
- data/doc/history.erb +136 -2
- data/doc/index.erb +2 -2
- data/doc/index.xhtml +1867 -610
- data/doc/intro.erb +29 -13
- data/doc/setup.erb +9 -2
- data/doc/theory.erb +24 -3
- data/doc/usage.erb +11 -2
- data/fmt/xhtml.yaml +913 -707
- data/fmt/{xhtml.icons → xhtml/icons}/index.yaml +2 -2
- data/fmt/{xhtml.icons → xhtml/icons}/mediawiki-1.13.2/COPYING +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/mediawiki-1.13.2/README +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/mediawiki-1.13.2/skins/simple/external.png +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/rakefile +4 -6
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/16x16/places/start-here.png +0 -0
- data/fmt/xhtml/icons/tango-icon-theme-0.8.90/32x32/actions/go-next.png +0 -0
- data/fmt/xhtml/icons/tango-icon-theme-0.8.90/32x32/actions/go-previous.png +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/32x32/places/start-here.png +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/32x32/status/software-update-available.png +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/48x48/apps/accessories-text-editor.png +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/48x48/apps/internet-group-chat.png +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/48x48/emblems/emblem-important.png +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/48x48/status/dialog-error.png +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/48x48/status/dialog-information.png +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/48x48/status/dialog-warning.png +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/COPYING +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/README +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/actions/bookmark-new.svg +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/actions/go-home.svg +0 -0
- data/fmt/xhtml/icons/tango-icon-theme-0.8.90/scalable/actions/go-next.svg +191 -0
- data/fmt/xhtml/icons/tango-icon-theme-0.8.90/scalable/actions/go-previous.svg +852 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/actions/view-refresh.svg +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/apps/accessories-text-editor.svg +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/apps/internet-group-chat.svg +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/emblems/emblem-favorite.svg +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/emblems/emblem-important.svg +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/mimetypes/application-certificate.svg +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/places/start-here.svg +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/status/dialog-error.svg +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/status/dialog-information.svg +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/status/dialog-warning.svg +0 -0
- data/fmt/{xhtml.icons → xhtml/icons}/tango-icon-theme-0.8.90/scalable/status/software-update-available.svg +0 -0
- data/fmt/xhtml/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/fmt/xhtml/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/fmt/xhtml/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/fmt/xhtml/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/fmt/xhtml/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/fmt/xhtml/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/fmt/xhtml/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/fmt/xhtml/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/fmt/xhtml/jquery/images/ui-icons_222222_256x240.png +0 -0
- data/fmt/xhtml/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
- data/fmt/xhtml/jquery/images/ui-icons_454545_256x240.png +0 -0
- data/fmt/xhtml/jquery/images/ui-icons_888888_256x240.png +0 -0
- data/fmt/xhtml/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/fmt/{xhtml.scripts → xhtml/jquery}/jquery-1.3.2.min.js +0 -0
- data/fmt/xhtml/jquery/jquery-ui-1.7.2.custom.css +406 -0
- data/fmt/xhtml/jquery/jquery-ui-1.7.2.custom.min.js +43 -0
- data/lang/de.yaml +13 -2
- data/lang/el.yaml +13 -2
- data/lang/es.yaml +13 -2
- data/lang/fr.yaml +13 -2
- data/lang/it.yaml +13 -2
- data/lang/ja.yaml +13 -2
- data/lang/ko.yaml +13 -2
- data/lang/nl.yaml +13 -2
- data/lang/phrases.yaml +15 -4
- data/lang/pt.yaml +13 -2
- data/lang/ru.yaml +13 -2
- data/lang/zh.yaml +13 -2
- data/lang/zt.yaml +13 -2
- data/lib/erbook.rb +10 -8
- data/lib/erbook/document.rb +144 -139
- data/lib/erbook/rdoc.rb +29 -7
- data/lib/erbook/template.rb +2 -2
- data/lib/erbook/to_xhtml.rb +6 -2
- metadata +78 -45
- data/doc/api/files/ANN_eml.html +0 -276
- data/doc/api/files/ANN_html.html +0 -407
- data/doc/api/files/ANN_txt.html +0 -271
- data/fmt/xhtml.icons/tango-icon-theme-0.8.90/32x32/actions/go-down.png +0 -0
- data/fmt/xhtml.icons/tango-icon-theme-0.8.90/32x32/actions/go-up.png +0 -0
- data/fmt/xhtml.icons/tango-icon-theme-0.8.90/scalable/actions/go-down.svg +0 -200
- data/fmt/xhtml.icons/tango-icon-theme-0.8.90/scalable/actions/go-up.svg +0 -196
- data/fmt/xhtml.scripts/jquery.localscroll-1.2.7-min.js +0 -9
- data/fmt/xhtml.scripts/jquery.scrollTo-1.4.1-min.js +0 -11
data/lang/pt.yaml
CHANGED
@@ -1,32 +1,43 @@
|
|
1
1
|
# pt (Portuguese)
|
2
|
+
About: Sobre
|
3
|
+
Abstract: Sumário
|
2
4
|
Caution: Cuidado
|
3
5
|
Cautions: Cuidados
|
4
6
|
Chapter: Capítulo
|
5
7
|
Contents: Índices
|
8
|
+
Document: Original
|
6
9
|
Equation: Equação
|
7
10
|
Equations: Equações
|
8
11
|
Example: Exemplo
|
9
12
|
Examples: Exemplos
|
13
|
+
Failed!: Falhado!
|
10
14
|
Figure: Figura
|
11
15
|
Figures: Figuras
|
12
16
|
Focus next segment: Segmento seguinte do foco
|
13
17
|
Focus previous segment: Segmento precedente do foco
|
14
18
|
Focus this segment: Focalize este segmento
|
15
|
-
Generated by %s on %s.: Gerado por %s em %s.
|
16
19
|
Important: Importante
|
17
20
|
Importants: Importants
|
21
|
+
Index: Índice
|
22
|
+
License: Licença
|
23
|
+
Loading...: Carregamento…
|
18
24
|
Note: Nota
|
19
25
|
Notes: Notas
|
26
|
+
Origin: Origem
|
20
27
|
Part: Parte
|
28
|
+
Please enable JavaScript in your Web browser.: Permita por favor o Javascript em seu web browser.
|
29
|
+
Printer friendly: Impressora amigável
|
21
30
|
Procedure: Procedimento
|
22
31
|
Procedures: Procedimentos
|
32
|
+
Ready!: Pronto!
|
23
33
|
Reference: Referência
|
24
34
|
References: Referências
|
35
|
+
Resource: Recurso
|
25
36
|
Return to listing: Retorne à lista
|
26
37
|
Section: Seção
|
27
38
|
Table: Tabela
|
28
39
|
Tables: Tabelas
|
29
|
-
|
40
|
+
This document was generated by %s on %s using the following resources.: Este original foi gerado por %s em %s usando os seguintes recursos.
|
30
41
|
Tip: Ponta
|
31
42
|
Tips: Pontas
|
32
43
|
Warning: Aviso
|
data/lang/ru.yaml
CHANGED
@@ -1,32 +1,43 @@
|
|
1
1
|
# ru (Russian)
|
2
|
+
About: О
|
3
|
+
Abstract: Конспект
|
2
4
|
Caution: Предосторежение
|
3
5
|
Cautions: Предосторежения
|
4
6
|
Chapter: Глава
|
5
7
|
Contents: Содержание
|
8
|
+
Document: Документ
|
6
9
|
Equation: Уровнение
|
7
10
|
Equations: Уровнения
|
8
11
|
Example: Пример
|
9
12
|
Examples: Примеры
|
13
|
+
Failed!: Неудачно!
|
10
14
|
Figure: Диаграмма
|
11
15
|
Figures: Диаграммы
|
12
16
|
Focus next segment: Этап фокуса следующий
|
13
17
|
Focus previous segment: Этап фокуса предыдущий
|
14
18
|
Focus this segment: Сфокусируйте этот этап
|
15
|
-
Generated by %s on %s.: Произведено %s на %s.
|
16
19
|
Important: Важно
|
17
20
|
Importants: Importants
|
21
|
+
Index: Индекс
|
22
|
+
License: Лицензия
|
23
|
+
Loading...: Нагрузка…
|
18
24
|
Note: Примечание
|
19
25
|
Notes: Примечания
|
26
|
+
Origin: Начало
|
20
27
|
Part: Часть
|
28
|
+
Please enable JavaScript in your Web browser.: Пожалуйста включите яваскрипт в вашем браузере паутины.
|
29
|
+
Printer friendly: Принтер содружественный
|
21
30
|
Procedure: Процедура
|
22
31
|
Procedures: Процедуры
|
32
|
+
Ready!: Готово!
|
23
33
|
Reference: Справка
|
24
34
|
References: Справки
|
35
|
+
Resource: Ресурс
|
25
36
|
Return to listing: Возвратите к перечислению
|
26
37
|
Section: Раздел
|
27
38
|
Table: Таблица
|
28
39
|
Tables: Таблицы
|
29
|
-
|
40
|
+
This document was generated by %s on %s using the following resources.: Этот документ был произведен %s на %s используя следующие ресурсы.
|
30
41
|
Tip: Подсказка
|
31
42
|
Tips: Подсказки
|
32
43
|
Warning: Предупреждение
|
data/lang/zh.yaml
CHANGED
@@ -1,32 +1,43 @@
|
|
1
1
|
# zh (Chinese-simp)
|
2
|
+
About: 关于
|
3
|
+
Abstract: 摘要
|
2
4
|
Caution: 小心
|
3
5
|
Cautions: 小心
|
4
6
|
Chapter: 章节
|
5
7
|
Contents: 内容
|
8
|
+
Document: 文件
|
6
9
|
Equation: 等式
|
7
10
|
Equations: 等式
|
8
11
|
Example: 例子
|
9
12
|
Examples: 例子
|
13
|
+
Failed!: 不合格!
|
10
14
|
Figure: 图
|
11
15
|
Figures: 图
|
12
16
|
Focus next segment: 焦点下段
|
13
17
|
Focus previous segment: 焦点早先段
|
14
18
|
Focus this segment: 聚焦这段
|
15
|
-
Generated by %s on %s.: 引起由%s在%s。
|
16
19
|
Important: 重要
|
17
20
|
Importants: Importants
|
21
|
+
Index: 索引
|
22
|
+
License: 执照
|
23
|
+
Loading...: 装货…
|
18
24
|
Note: 笔记
|
19
25
|
Notes: 笔记
|
26
|
+
Origin: 起源
|
20
27
|
Part: 部分
|
28
|
+
Please enable JavaScript in your Web browser.: 请使能在您的浏览器的Java语言。
|
29
|
+
Printer friendly: 友好的打印机
|
21
30
|
Procedure: 做法
|
22
31
|
Procedures: 做法
|
32
|
+
Ready!: 准备好!
|
23
33
|
Reference: 参考
|
24
34
|
References: 参考
|
35
|
+
Resource: 资源
|
25
36
|
Return to listing: 回到目录
|
26
37
|
Section: 部分
|
27
38
|
Table: 表
|
28
39
|
Tables: 表
|
29
|
-
|
40
|
+
This document was generated by %s on %s using the following resources.: 使用以下资源,本文是由%s引起的在%s。
|
30
41
|
Tip: 技巧
|
31
42
|
Tips: 技巧
|
32
43
|
Warning: 警告
|
data/lang/zt.yaml
CHANGED
@@ -1,32 +1,43 @@
|
|
1
1
|
# zt (Chinese-trad)
|
2
|
+
About: 關於
|
3
|
+
Abstract: 摘要
|
2
4
|
Caution: 小心
|
3
5
|
Cautions: 小心
|
4
6
|
Chapter: 章節
|
5
7
|
Contents: 内容
|
8
|
+
Document: 文件
|
6
9
|
Equation: 等式
|
7
10
|
Equations: 等式
|
8
11
|
Example: 例子
|
9
12
|
Examples: 例子
|
13
|
+
Failed!: 不合格!
|
10
14
|
Figure: 图
|
11
15
|
Figures: 图
|
12
16
|
Focus next segment: 焦點下段
|
13
17
|
Focus previous segment: 焦點早先段
|
14
18
|
Focus this segment: 聚焦這段
|
15
|
-
Generated by %s on %s.: 引起由%s在%s。
|
16
19
|
Important: 重要
|
17
20
|
Importants: Importants
|
21
|
+
Index: 索引
|
22
|
+
License: 執照
|
23
|
+
Loading...: 裝貨…
|
18
24
|
Note: 筆記
|
19
25
|
Notes: 筆記
|
26
|
+
Origin: 起源
|
20
27
|
Part: 部分
|
28
|
+
Please enable JavaScript in your Web browser.: 請使能在您的瀏覽器的Java語言。
|
29
|
+
Printer friendly: 友好的打印機
|
21
30
|
Procedure: 做法
|
22
31
|
Procedures: 做法
|
32
|
+
Ready!: 準備好!
|
23
33
|
Reference: 參考
|
24
34
|
References: 參考
|
35
|
+
Resource: 資源
|
25
36
|
Return to listing: 回到目錄
|
26
37
|
Section: 部分
|
27
38
|
Table: 表
|
28
39
|
Tables: 表
|
29
|
-
|
40
|
+
This document was generated by %s on %s using the following resources.: 使用以下资源,本文是由%s引起的在%s。
|
30
41
|
Tip: 技巧
|
31
42
|
Tips: 技巧
|
32
43
|
Warning: 警告
|
data/lib/erbook.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright
|
3
|
-
# See
|
2
|
+
# Copyright protects this work.
|
3
|
+
# See LICENSE file for details.
|
4
4
|
#++
|
5
5
|
|
6
6
|
require 'rubygems'
|
@@ -9,15 +9,17 @@ require 'inochi'
|
|
9
9
|
|
10
10
|
Inochi.init :ERBook,
|
11
11
|
:program => 'erbook',
|
12
|
-
:version => '7.
|
13
|
-
:release => '2009-
|
12
|
+
:version => '7.1.0',
|
13
|
+
:release => '2009-08-30',
|
14
14
|
:website => 'http://snk.tuxfamily.org/lib/erbook/',
|
15
15
|
:tagline => 'Extensible document processor based on eRuby',
|
16
16
|
:require => {
|
17
|
-
'ember'
|
18
|
-
'maruku'
|
19
|
-
'coderay'
|
20
|
-
'rainpress'
|
17
|
+
'ember' => '~> 0', # for eRuby template processing
|
18
|
+
'maruku' => '~> 0.5', # for Markdown to XHTML conversion
|
19
|
+
'coderay' => '>= 0.8', # for syntax coloring of source code
|
20
|
+
'rainpress' => '~> 1', # for minifying CSS
|
21
|
+
'haml' => '>= 2.2.2', # for generating HTML and CSS
|
22
|
+
'mime-types' => '>= 1.16', # for detecting MIME types
|
21
23
|
}
|
22
24
|
|
23
25
|
module ERBook
|
data/lib/erbook/document.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright
|
3
|
-
# See
|
2
|
+
# Copyright protects this work.
|
3
|
+
# See LICENSE file for details.
|
4
4
|
#++
|
5
5
|
|
6
6
|
require 'yaml'
|
@@ -41,7 +41,7 @@ module ERBook
|
|
41
41
|
#
|
42
42
|
def initialize format_name, input_text, input_file, options = {}
|
43
43
|
# process format specification
|
44
|
-
|
44
|
+
@format_file = format_name.to_s
|
45
45
|
|
46
46
|
File.file? @format_file or
|
47
47
|
@format_file = File.join(ERBook::FORMATS_DIR, @format_file + '.yaml')
|
@@ -62,160 +62,163 @@ module ERBook
|
|
62
62
|
@node_defs = @format['nodes']
|
63
63
|
|
64
64
|
# process input document
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
65
|
+
begin
|
66
|
+
# create sandbox for input evaluation
|
67
|
+
template = Template.new(input_file, input_text, options[:unindent])
|
68
|
+
sandbox = template.sandbox
|
69
|
+
|
70
|
+
@template_vars = {
|
71
|
+
:@format => @format,
|
72
|
+
:@roots => @roots = [], # root nodes of all trees
|
73
|
+
:@nodes => @nodes = [], # all nodes in the forest
|
74
|
+
:@nodes_by_type => @nodes_by_type = Hash.new {|h,k| h[k] = [] },
|
75
|
+
:@stack => [], # stack for all nodes
|
76
|
+
}.each_pair {|k,v| sandbox.instance_variable_set(k, v) }
|
77
|
+
|
78
|
+
##
|
79
|
+
# Handles the method call from a node
|
80
|
+
# placeholder in the input document.
|
81
|
+
#
|
82
|
+
def sandbox.__node_impl__ node_type, *node_args, &node_content
|
83
|
+
node = Node.new(
|
84
|
+
:type => node_type,
|
85
|
+
:defn => @format['nodes'][node_type],
|
86
|
+
:args => node_args,
|
87
|
+
:children => [],
|
88
|
+
|
89
|
+
# omit erbook internals from the stack trace
|
90
|
+
:trace => caller.reject {|t|
|
91
|
+
[$0, ERBook::INSTALL].any? {|f| t.index(f) == 0 }
|
92
|
+
}
|
93
|
+
)
|
94
|
+
@nodes << node
|
95
|
+
@nodes_by_type[node.type] << node
|
96
|
+
|
97
|
+
# calculate occurrence number for this node
|
98
|
+
if node.defn['number']
|
99
|
+
@count ||= Hash.new {|h,k| h[k] = []}
|
100
|
+
node.number = (@count[node.type] << node).length
|
101
|
+
end
|
100
102
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
103
|
+
# assign node family
|
104
|
+
if parent = @stack.last
|
105
|
+
parent.children << node
|
106
|
+
node.parent = parent
|
107
|
+
node.depth = parent.depth
|
108
|
+
node.depth += 1 if node.defn['depth']
|
107
109
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
110
|
+
# calculate latex-style index number for this node
|
111
|
+
if node.defn['index']
|
112
|
+
ancestry = @stack.reverse.find {|n| n.defn['index'] }.index
|
113
|
+
branches = node.parent.children.select {|n| n.index }
|
112
114
|
|
113
|
-
|
114
|
-
end
|
115
|
-
else
|
116
|
-
@roots << node
|
117
|
-
node.parent = nil
|
118
|
-
node.depth = 0
|
119
|
-
|
120
|
-
# calculate latex-style index number for this node
|
121
|
-
if node.defn['index']
|
122
|
-
branches = @roots.select {|n| n.index }
|
123
|
-
node.index = (branches.length + 1).to_s
|
124
|
-
end
|
115
|
+
node.index = [ancestry, branches.length + 1].join('.')
|
125
116
|
end
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
117
|
+
else
|
118
|
+
@roots << node
|
119
|
+
node.parent = nil
|
120
|
+
node.depth = 0
|
121
|
+
|
122
|
+
# calculate latex-style index number for this node
|
123
|
+
if node.defn['index']
|
124
|
+
branches = @roots.select {|n| n.index }
|
125
|
+
node.index = (branches.length + 1).to_s
|
132
126
|
end
|
133
|
-
|
134
|
-
@buffer << node
|
135
|
-
|
136
|
-
nil
|
137
127
|
end
|
138
128
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
__node_impl__ #{type.inspect}, *node_args, &node_content
|
145
|
-
end
|
146
|
-
}, binding, file, line
|
129
|
+
# assign node content
|
130
|
+
if block_given?
|
131
|
+
@stack.push node
|
132
|
+
node.content = __block_content__(node, &node_content)
|
133
|
+
@stack.pop
|
147
134
|
end
|
148
135
|
|
149
|
-
|
150
|
-
template.render
|
151
|
-
@processed_document = template.buffer
|
136
|
+
@buffer << node
|
152
137
|
|
153
|
-
|
154
|
-
|
155
|
-
n.defn['inline'] }
|
138
|
+
nil
|
139
|
+
end
|
156
140
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
141
|
+
@node_defs.each_key do |type|
|
142
|
+
# XXX: using a string because define_method()
|
143
|
+
# does not accept a block until Ruby 1.9
|
144
|
+
file, line = __FILE__, __LINE__; eval %{
|
145
|
+
def sandbox.#{type} *node_args, &node_content
|
146
|
+
__node_impl__ #{type.inspect}, *node_args, &node_content
|
147
|
+
end
|
148
|
+
}, binding, file, line
|
149
|
+
end
|
162
150
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
151
|
+
# evaluate the input & build the document tree
|
152
|
+
template.render
|
153
|
+
@processed_document = template.buffer
|
154
|
+
|
155
|
+
# chain block-level nodes together for local navigation
|
156
|
+
block_nodes = @nodes.reject do |n|
|
157
|
+
n.defn['bypass'] || n.defn['inline']
|
158
|
+
end
|
159
|
+
|
160
|
+
require 'enumerator'
|
161
|
+
block_nodes.each_cons(2) do |a, b|
|
162
|
+
a.next_node = b
|
163
|
+
b.prev_node = a
|
164
|
+
end
|
165
|
+
|
166
|
+
# calculate output for all nodes
|
167
|
+
actual_output_by_node = {}
|
168
|
+
|
169
|
+
visitor = lambda do |n|
|
170
|
+
#
|
171
|
+
# allow child nodes to calculate their actual
|
172
|
+
# output and to set their identifier as Node#output
|
173
|
+
#
|
174
|
+
# we do this nodes first because this node's
|
175
|
+
# content contains the child nodes' output
|
176
|
+
#
|
177
|
+
n.children.each {|c| visitor.call c }
|
178
|
+
|
179
|
+
# calculate the output for this node
|
180
|
+
actual_output = Template.new(
|
181
|
+
"#{@format_file}:nodes:#{n.type}:output",
|
182
|
+
n.defn['output'].to_s.chomp
|
183
|
+
).render_with(@template_vars.merge(:@node => n))
|
184
|
+
|
185
|
+
# reveal child nodes' actual output in this node's actual output
|
186
|
+
n.children.each do |c|
|
187
|
+
if c.defn['inline'] && !c.defn['bypass']
|
188
|
+
actual_output[c.output] = actual_output_by_node[c]
|
189
|
+
|
190
|
+
else
|
191
|
+
# pull block-level node out of paragraph tag added by Maruku
|
192
|
+
actual_output.sub! %r/(<p>\s*)?#{Regexp.quote c.output}/ do
|
193
|
+
actual_output_by_node[c] + $1.to_s
|
192
194
|
end
|
193
195
|
end
|
194
|
-
|
195
|
-
actual_output_by_node[n] = actual_output
|
196
|
-
|
197
|
-
#
|
198
|
-
# allow the parent node to calculate its actual
|
199
|
-
# output without interference from the output of
|
200
|
-
# this node (Node#to_s is aliased to Node#output)
|
201
|
-
#
|
202
|
-
# this assumes that having this node's string
|
203
|
-
# representation be a consecutive sequence of digits
|
204
|
-
# will not interfere with the text-to-whatever
|
205
|
-
# transformation defined by the format specification
|
206
|
-
#
|
207
|
-
n.output = Digest::SHA1.digest(n.object_id.to_s).unpack('I*').join
|
208
196
|
end
|
209
197
|
|
210
|
-
|
198
|
+
actual_output_by_node[n] = actual_output
|
199
|
+
|
200
|
+
#
|
201
|
+
# allow the parent node to calculate its actual
|
202
|
+
# output without interference from the output of
|
203
|
+
# this node (Node#to_s is aliased to Node#output)
|
204
|
+
#
|
205
|
+
# this assumes that having this node's string
|
206
|
+
# representation be a consecutive sequence of digits
|
207
|
+
# will not interfere with the text-to-whatever
|
208
|
+
# transformation defined by the format specification
|
209
|
+
#
|
210
|
+
n.output = Digest::SHA1.digest(n.object_id.to_s).unpack('I*').join
|
211
|
+
end
|
211
212
|
|
212
|
-
|
213
|
-
@nodes.each {|n| n.output = actual_output_by_node[n] }
|
213
|
+
@roots.each {|n| visitor.call n }
|
214
214
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
215
|
+
# replace the temporary identifier with each node's actual output
|
216
|
+
@nodes.each {|n| n.output = actual_output_by_node[n] }
|
217
|
+
|
218
|
+
rescue Exception
|
219
|
+
puts input_text # so the user can debug line numbers in stack trace
|
220
|
+
error "Could not process input document #{input_file.inspect}"
|
221
|
+
end
|
219
222
|
end
|
220
223
|
|
221
224
|
##
|
@@ -232,7 +235,9 @@ module ERBook
|
|
232
235
|
undef id if respond_to? :id
|
233
236
|
undef type if respond_to? :type
|
234
237
|
|
238
|
+
##
|
235
239
|
# Returns the output of this node.
|
240
|
+
#
|
236
241
|
def to_s
|
237
242
|
defn['silent'] ? '' : output
|
238
243
|
end
|