erbook 4.0.0 → 5.0.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.
Files changed (52) hide show
  1. data/README +3 -3
  2. data/Rakefile +6 -3
  3. data/bin/erbook +285 -251
  4. data/doc/README +2 -2
  5. data/doc/api/classes/ERBook.html +2 -2
  6. data/doc/api/classes/RDoc/AnyMethod.html +20 -20
  7. data/doc/api/classes/RDoc/AnyMethod.src/M000003.html +18 -0
  8. data/doc/api/classes/RDoc/AnyMethod.src/M000004.html +23 -0
  9. data/doc/api/classes/RDoc/AnyMethod.src/M000005.html +4 -4
  10. data/doc/api/classes/RDoc/AnyMethod.src/M000006.html +7 -8
  11. data/doc/api/classes/RDoc/TopLevel.html +30 -30
  12. data/doc/api/classes/RDoc/{AnyMethod.src → TopLevel.src}/M000007.html +4 -4
  13. data/doc/api/classes/RDoc/TopLevel.src/{M000014.html → M000008.html} +4 -4
  14. data/doc/api/classes/RDoc/TopLevel.src/M000009.html +4 -4
  15. data/doc/api/classes/RDoc/TopLevel.src/M000010.html +15 -4
  16. data/doc/api/classes/RDoc/TopLevel.src/M000011.html +11 -4
  17. data/doc/api/classes/RDoc/TopLevel.src/M000012.html +4 -15
  18. data/doc/api/classes/String.html +17 -82
  19. data/doc/api/classes/String.src/M000001.html +4 -4
  20. data/doc/api/classes/String.src/M000002.html +3 -6
  21. data/doc/api/created.rid +1 -1
  22. data/doc/api/files/lib/erbook/rdoc_rb.html +1 -1
  23. data/doc/api/files/lib/erbook/{html_rb.html → to_xhtml_rb.html} +7 -7
  24. data/doc/api/files/lib/erbook_rb.html +1 -1
  25. data/doc/api/fr_file_index.html +1 -1
  26. data/doc/api/fr_method_index.html +12 -14
  27. data/doc/api/index.html +1 -1
  28. data/doc/index.xhtml +2277 -0
  29. data/doc/manual.erb +198 -155
  30. data/fmt/xhtml.icons/index.yaml +20 -0
  31. data/fmt/xhtml.icons/mediawiki-1.13.2/COPYING +340 -0
  32. data/fmt/xhtml.icons/mediawiki-1.13.2/README +103 -0
  33. data/fmt/xhtml.icons/mediawiki-1.13.2/skins/simple/external.png +0 -0
  34. data/fmt/xhtml.icons/tango-icon-theme-0.8.1/48x48/README +2 -0
  35. data/fmt/{html.icons/note.png → xhtml.icons/tango-icon-theme-0.8.1/48x48/apps/accessories-text-editor.png} +0 -0
  36. data/fmt/{html.icons/quote.png → xhtml.icons/tango-icon-theme-0.8.1/48x48/apps/internet-group-chat.png} +0 -0
  37. data/fmt/{html.icons/important.png → xhtml.icons/tango-icon-theme-0.8.1/48x48/emblems/emblem-important.png} +0 -0
  38. data/fmt/{html.icons/warning.png → xhtml.icons/tango-icon-theme-0.8.1/48x48/status/dialog-error.png} +0 -0
  39. data/fmt/{html.icons/tip.png → xhtml.icons/tango-icon-theme-0.8.1/48x48/status/dialog-information.png} +0 -0
  40. data/fmt/{html.icons/caution.png → xhtml.icons/tango-icon-theme-0.8.1/48x48/status/dialog-warning.png} +0 -0
  41. data/fmt/{html.icons/LICENSE → xhtml.icons/tango-icon-theme-0.8.1/COPYING} +0 -0
  42. data/fmt/xhtml.icons/tango-icon-theme-0.8.1/README +12 -0
  43. data/fmt/{html.yaml → xhtml.yaml} +305 -247
  44. data/lib/erbook.rb +2 -2
  45. data/lib/erbook/{html.rb → to_xhtml.rb} +18 -24
  46. metadata +42 -21
  47. data/doc/api/classes/RDoc/AnyMethod.src/M000008.html +0 -22
  48. data/doc/api/classes/RDoc/TopLevel.src/M000013.html +0 -25
  49. data/doc/api/classes/String.src/M000003.html +0 -20
  50. data/doc/api/classes/String.src/M000004.html +0 -26
  51. data/doc/index.html +0 -2663
  52. data/fmt/html.icons/README +0 -31
@@ -0,0 +1,2 @@
1
+ The 48x48 images in this subtree were generated from their SVG
2
+ sources in ../scalable/ using Inkscape <http://inkscape.org>.
@@ -0,0 +1,12 @@
1
+ Tango Icon Theme
2
+ ----------------
3
+
4
+ This is an icon theme that follows the Tango visual guidelines [1]. Currently
5
+ it depends on Imagemagick for creation of 24x24 bitmaps by adding a 1px padding
6
+ around the 22x22px version. For GNOME and KDE you will also need
7
+ icon-naming-utils that allow the theme to work in these environments before
8
+ they follow the new naming scheme [2].
9
+
10
+
11
+ [1] http://tango-project.org/Tango_Icon_Theme_Guidelines
12
+ [2] http://tango-project.org/Standard_Icon_Naming_Specification
@@ -1,19 +1,19 @@
1
1
  desc: web page for the Internet
2
2
 
3
3
  code: |
4
- # load the String#to_html and String#to_inline_html methods
5
- require 'erbook/html'
4
+ # load the String#to_xhtml and String#to_inline_xhtml methods
5
+ require 'erbook/to_xhtml'
6
6
 
7
7
  class String
8
- # Transforms this UTF-8 string into HTML entities.
9
- def to_html_entities
8
+ # Transforms this UTF-8 string into XML entities.
9
+ def to_xml_entities
10
10
  unpack('U*').map! {|c| "&##{c};"}.join
11
11
  end
12
12
 
13
13
  # Transforms this string into a valid URI fragment.
14
14
  # See http://www.nmt.edu/tcc/help/pubs/xhtml/id-type.html
15
15
  def to_uri_fragment
16
- # remove HTML tags from the input
16
+ # remove XML tags from the input
17
17
  buf = gsub(/<.*?>/, '')
18
18
 
19
19
  # The first or only character must be a letter.
@@ -32,168 +32,230 @@ code: |
32
32
  end
33
33
 
34
34
  class Hash
35
- # Transforms this hash into a string of HTML attribute key=value pairs.
36
- def to_html_atts
35
+ # Transforms this hash into a string of XML attribute key="value" pairs.
36
+ def to_xml_atts
37
37
  inject([]) {|s,(k,v)| s << %( #{k}="#{v}") }.join
38
38
  end
39
39
  end
40
40
 
41
- class Node
42
- # Returns the user-defined title for this node's content.
43
- def title
44
- @title ||= args[0]
45
- end
41
+ module ERBook
42
+ class Template
43
+ # Protects the given content from the text-to-XHTML conversion process.
44
+ def verbatim aContent
45
+ ERB::Util.html_escape aContent
46
+ end
46
47
 
47
- # Returns the user-defined indentifer for this node.
48
- def id
49
- @id ||= args[1]
50
- end
48
+ # Returns XHTML for a hyperlink to the given
49
+ # URL of the given label and mouse-hover title.
50
+ def hyperlink aUrl, aLabel = aUrl, aTitle = nil
51
+ %{<a href="#{aUrl}"#{%{ title="#{aTitle}"} if aTitle}>#{aLabel}</a>}
52
+ end
51
53
 
52
- def type_label
53
- type.to_s.capitalize
54
- end
54
+ # Returns an <img/> tag that embeds the given image file.
55
+ #
56
+ # aPath:: path to the image file
57
+ # aFormat:: format of the image file (e.g. PNG, JPEG, GIF, etc.)
58
+ # aAtts:: additional attributes for the <img> tag
59
+ #
60
+ def embed_image_file aPath, aFormat = aPath[/\w+/], aAtts = {}
61
+ data = ERBook.base_64_encode File.read(aPath)
62
+ embed_image_data data, aFormat, aAtts
63
+ end
55
64
 
56
- def type_atts
57
- { :class => type }.to_html_atts
65
+ # Returns an <img/> tag that embeds the given raw image data.
66
+ #
67
+ # aData:: raw image data
68
+ # aFormat:: format of the image file (e.g. PNG, JPEG, GIF, etc.)
69
+ # aAtts:: additional attributes for the <img> tag
70
+ #
71
+ def embed_image_data aData, aFormat, aAtts = {}
72
+ aAtts[:src] = ERBook.base_64_embed_image_data(aData, aFormat)
73
+ "<img#{aAtts.to_xml_atts}/>"
74
+ end
58
75
  end
59
76
 
60
- def title_atts
61
- { :class => :title, :id => here_frag }.to_html_atts
62
- end
77
+ class Node
78
+ # Returns the user-defined title for this node's content.
79
+ def title
80
+ @title ||= args[0]
81
+ end
63
82
 
64
- def title_html
65
- title.to_s.to_inline_html
66
- end
83
+ # Returns the user-defined indentifer for this node.
84
+ def id
85
+ @id ||= args[1]
86
+ end
67
87
 
68
- def content_html
69
- content.to_s.to_html
70
- end
71
88
 
72
- def title_link aTitle = nil
73
- here_link here_frag, aTitle || title_html
74
- # %{#{aTitle || title_html}&nbsp;&nbsp;&nbsp;&nbsp;#{here_link here_frag, '&para;'}&nbsp;#{list_link here_frag, list_frag, '&equiv;'}}
75
- end
89
+ ##
90
+ # utility methods
91
+ #
76
92
 
77
- def index_link
78
- list_link here_frag, list_frag, index
79
- # %{<span id="#{here_frag}">#{index}</span>}
80
- end
93
+ def type_label #:nodoc:
94
+ type.to_s.capitalize
95
+ end
81
96
 
82
- def number_link
83
- list_link here_frag, list_frag, [type_label, number].compact.join(' ')
84
- # %{<span id="#{here_frag}">#{[type_label, number].compact.join(' ')}</span>}
85
- end
97
+ def type_label_here_link #:nodoc:
98
+ s = type_label
99
+ here_link s, s
100
+ end
86
101
 
87
- def number_and_title_link
88
- "#{number_link}.&nbsp;&nbsp;#{title_link}"
89
- end
102
+ # Returns the title of this node as XHTML.
103
+ def title_xhtml
104
+ title.to_s.to_inline_xhtml
105
+ end
90
106
 
91
- def index_and_title_link
92
- "#{index_link}&nbsp;&nbsp;#{title_link}"
93
- end
107
+ # Returns the content of this node as XHTML.
108
+ def content_xhtml
109
+ content.to_s.to_xhtml
110
+ end
94
111
 
95
- def content_div
96
- %{<div class="content">#{content_html}</div>}
97
- end
112
+ # Returns the content of this node as XHTML inside a <div/>.
113
+ def content_xhtml_div #:nodoc:
114
+ %{<div class="content">#{content_xhtml}</div>}
115
+ end
116
+
117
+ # Returns a hyperlink to this node containing its title.
118
+ def title_link aTitle = nil
119
+ here_link here_frag, aTitle || title_xhtml
120
+ end
98
121
 
99
- @@frags = []
122
+ # Returns a hyperlink to this node
123
+ # containing its LaTeX-style index number.
124
+ def index_link
125
+ list_link here_frag, list_frag, index
126
+ end
100
127
 
101
- # Returns a unique URI fragment for this node.
102
- def here_frag
103
- unless defined? @here_frag
104
- salt = object_id.abs
105
- frag = (id || title || salt).to_s.to_uri_fragment
128
+ # Returns a hyperlink to this node containing its occurrence number.
129
+ def number_link
130
+ list_link here_frag, list_frag, [type_label, number].compact.join(' ')
131
+ end
106
132
 
107
- # make it unique
108
- while @@frags.include? frag
109
- frag << '-' << (index || number || salt).to_s
133
+ # Returns a hyperlink to this node containing
134
+ # its ocurrence number and its title.
135
+ def number_and_title_link #:nodoc:
136
+ "#{number_link}.&nbsp;&nbsp;#{title_link}"
137
+ end
138
+
139
+ # Returns a hyperlink to this node containing
140
+ # its LaTeX-style index number and its title.
141
+ def index_and_title_link #:nodoc:
142
+ "#{index_link}&nbsp;&nbsp;#{title_link}"
143
+ end
144
+
145
+
146
+ ##
147
+ # URI fragments
148
+ #
149
+
150
+ @@frags = []
151
+
152
+ # Returns a unique URI fragment for this node.
153
+ def here_frag #:nodoc:
154
+ unless defined? @here_frag
155
+ salt = object_id.abs
156
+ frag = (id || title || salt).to_s.to_uri_fragment
157
+
158
+ # make it unique
159
+ while @@frags.include? frag
160
+ frag << '-' << (index || number || salt).to_s
161
+ end
162
+
163
+ @@frags << frag
164
+ @here_frag = frag
110
165
  end
111
166
 
112
- @@frags << frag
113
- @here_frag = frag
167
+ @here_frag
168
+ end
169
+
170
+ # Returns the URI fragment for the location in the table
171
+ # of contents / list of figures that points this node.
172
+ def list_frag #:nodoc:
173
+ @list_frag ||= "rev:#{here_frag}"
114
174
  end
115
175
 
116
- @here_frag
117
- end
118
176
 
119
- # Returns the URI fragment for the location in the table
120
- # of contents / list of figures that points this node.
121
- def list_frag
122
- @list_frag ||= "rev:#{here_frag}"
177
+ private
178
+
179
+ def here_link aHereFrag, aLabel #:nodoc:
180
+ %{<a class="here" title="Permanent link to this section" href="##{aHereFrag}">#{aLabel}</a>}
181
+ end
182
+
183
+ def list_link aHereFrag, aListFrag, aLabel #:nodoc:
184
+ %{<a class="list" title="Return to table of contents" id="#{aHereFrag}" href="##{aListFrag}">#{aLabel}</a>}
185
+ end
123
186
  end
124
- end
125
187
 
126
- def here_link aHereFrag, aLabel
127
- %{<a class="here" title="Permanent link to this section" href="##{aHereFrag}">#{aLabel}</a>}
128
- end
188
+ # Encodes the given input in base64 format.
189
+ def ERBook.base_64_encode aInput #:nodoc:
190
+ [aInput].pack('m')
191
+ end
129
192
 
130
- def list_link aHereFrag, aListFrag, aLabel
131
- %{<a class="list" title="Return to table of contents" href="##{aListFrag}">#{aLabel}</a>}
132
- end
193
+ # Returns a string denoting embedded, base64 encoded data.
194
+ def ERBook.base_64_embed aData, aFormat #:nodoc:
195
+ "data:#{aFormat.to_s.downcase};base64,#{aData.tr("\n", '')}"
196
+ end
133
197
 
134
- # Returns a hyperlink to the given URL of
135
- # the given label and mouse-hover title.
136
- def link aUrl, aLabel = aUrl, aTitle = nil
137
- %{<a href="#{h aUrl}"#{%{ title="#{aTitle}"} if aTitle}>#{aLabel}</a>}
138
- end
198
+ # Returns a string denoting embedded, base64 encoded image data.
199
+ # aFormat:: format of the image data (e.g. PNG, JPEG, GIF, etc.)
200
+ def ERBook.base_64_embed_image_data aData, aFormat #:nodoc:
201
+ base_64_embed aData, "image/#{aFormat}"
202
+ end
139
203
 
140
- # Encodes the given input in base64 format.
141
- def base_64_encode aInput
142
- [aInput].pack('m')
143
- end
204
+ ##
205
+ # load admonition icons
206
+ #
144
207
 
145
- # Returns a string denoting embedded, base64 encoded data.
146
- def base_64_embed aData, aFormat
147
- "data:#{aFormat.to_s.downcase};base64,#{aData.tr("\n", '')}"
148
- end
208
+ ICONS_DIR = File.join(ERBook::FORMATS_DIR, 'xhtml.icons')
209
+ ICON_DEFS = YAML.load_file File.join(ICONS_DIR, 'index.yaml')
149
210
 
150
- # Returns a string denoting embedded, base64 encoded image data.
151
- # aFormat:: format of the image data (e.g. PNG, JPG, GIF, etc.)
152
- def base_64_embed_image_data aData, aFormat
153
- base_64_embed aData, "image/#{aFormat}"
154
- end
211
+ Icon = Struct.new(:origin, :path, :name, :format, :data)
212
+ class Icon #:nodoc:
213
+ # Returns a data URI containing embedded image data.
214
+ def data_uri
215
+ ERBook.base_64_embed_image_data self.data, self.format
216
+ end
155
217
 
156
- # Returns a HTML <img> tag that embeds the given image file.
157
- #
158
- # aPath:: path to the image file
159
- # aFormat:: format of the image file (e.g. PNG, JPG, GIF, etc.)
160
- # aAtts:: additional attributes for the <img> tag
161
- #
162
- def embed_image_file aPath, aFormat = aPath[/\w+/], aAtts = {}
163
- data = base_64_encode File.read(aPath)
164
- aAtts['src'] = base_64_embed_image_data(data, aFormat)
165
- "<img#{aAtts.to_html_atts}/>"
166
- end
218
+ # Returns a CSS url() containing embedded image data.
219
+ def data_css
220
+ %{url("#{data_uri}")}
221
+ end
167
222
 
168
- ##
169
- # load admonition icons
170
- #
223
+ # Returns a XML entity reference (to this icon's
224
+ # embedded image data) ready for insertion into XML.
225
+ def entity_xml
226
+ "&#{entity_name};"
227
+ end
171
228
 
172
- Icon = Struct.new(:path, :name, :format, :data)
229
+ # Returns the name of the XML entity whose
230
+ # value contains embedded image data.
231
+ def entity_name
232
+ "icon_#{name}"
233
+ end
173
234
 
174
- class Icon
175
- # Returns the CSS class for this icon.
176
- def css_class
177
- @css_class ||= "icon-#{name}"
235
+ # Returns an <img/> tag that renders the image
236
+ # data embedded as an ENTITY in the html DOCTYPE.
237
+ def to_xhtml aAtts = {}
238
+ aAtts[:alt] ||= name
239
+ aAtts[:src] = entity_xml
240
+ aAtts[:class] = :icon
241
+ "<img#{aAtts.to_xml_atts}/>"
242
+ end
178
243
  end
179
244
 
180
- # Returns a CSS url() containing embedded image data.
181
- def css_image
182
- "url(#{base_64_embed_image_data self.data, self.format})"
183
- end
184
- end
245
+ ICON_BY_NAME = {}
185
246
 
186
- ICONS = {}
247
+ ICON_DEFS.each_pair do |name, path|
248
+ format = File.extname(path).sub('.', '')
249
+ origin = path[/^\w+/]
187
250
 
188
- Dir[File.join(ERBook::FORMATS_DIR, 'html.icons', '*.*')].each do |path|
189
- ext = File.extname(path)
190
- name = File.basename(path, ext)
191
- data = base_64_encode File.open(path, 'rb') {|f| f.read }
251
+ path = File.join(ICONS_DIR, path) # make the path absolute
252
+ data = base_64_encode File.open(path, 'rb') {|f| f.read }
192
253
 
193
- ICONS[name] = Icon.new(path, name, ext.sub('.', ''), data)
194
- end
254
+ ICON_BY_NAME[name] = Icon.new(origin, path, name, format, data)
255
+ end
195
256
 
196
- # STDERR.puts ICONS.inspect
257
+ ICONS = ICON_BY_NAME.values
258
+ end
197
259
 
198
260
 
199
261
  nodes:
@@ -207,7 +269,7 @@ nodes:
207
269
  index: false
208
270
  number: false
209
271
  silent: true
210
- output: <%= @node.content_html %>
272
+ output: <%= @node.content_xhtml %>
211
273
 
212
274
  header_outside_above: &header_insert
213
275
  toc: false
@@ -215,7 +277,7 @@ nodes:
215
277
  index: false
216
278
  number: false
217
279
  silent: true
218
- output: <div class="<%= @node.type %>"><%= @node.content_html %></div>
280
+ output: <div class="<%= @node.type %>"><%= @node.content_xhtml %></div>
219
281
 
220
282
  header_inside_above: *header_insert
221
283
  header_inside_below: *header_insert
@@ -234,10 +296,9 @@ nodes:
234
296
  number: false
235
297
  silent: true
236
298
  output: |
237
- <% label = @node.type_label %>
238
- <div id="<%= label %>">
239
- <h1 class="title"><%= here_link label, label %></h1>
240
- <%= @node.content_div %>
299
+ <div id="<%= @node.type_label %>">
300
+ <h1 class="title"><%= @node.type_label_here_link %></h1>
301
+ <%= @node.content_xhtml_div %>
241
302
  </div>
242
303
 
243
304
 
@@ -252,12 +313,12 @@ nodes:
252
313
  number: true
253
314
  output: |
254
315
  <div class="<%= @node.type %>">
255
- <h1<%= @node.title_atts %>>
316
+ <h1 class="title">
256
317
  <%= @node.type_label %>&nbsp;<%= @node.index_link %>
257
318
  <br/>
258
319
  <big><%= @node.title_link %></big>
259
320
  </h1>
260
- <%= @node.content_div %>
321
+ <%= @node.content_xhtml_div %>
261
322
  </div>
262
323
 
263
324
  chapter: *latex
@@ -270,10 +331,10 @@ nodes:
270
331
  output: |
271
332
  <% depth = [6, @node.depth + 1].min %>
272
333
  <div class="<%= @node.type %>">
273
- <h<%= depth %><%= @node.title_atts %>>
334
+ <h<%= depth %> class="title">
274
335
  <%= @node.index_and_title_link %>
275
336
  </h<%= depth %>>
276
- <%= @node.content_div %>
337
+ <%= @node.content_xhtml_div %>
277
338
  </div>
278
339
 
279
340
  paragraph:
@@ -282,9 +343,9 @@ nodes:
282
343
  index: false
283
344
  number: false
284
345
  output: |
285
- <div<%= @node.type_atts %>>
286
- <p<%= @node.title_atts %>><%= @node.title_link %></p>
287
- <%= @node.content_div %>
346
+ <div class="<%= @node.type %>">
347
+ <p class="title"><%= @node.title_link %></p>
348
+ <%= @node.content_xhtml_div %>
288
349
  </div>
289
350
 
290
351
 
@@ -298,16 +359,9 @@ nodes:
298
359
  index: false
299
360
  number: true
300
361
  output: |
301
- <div<%= @node.type_atts %>>
302
- <p<%= @node.title_atts %>><%= @node.number_and_title_link %></p>
303
- <div class="content <%=
304
- $use_icons = true unless defined? $use_icons
305
-
306
- if $use_icons and icon = ICONS[@node.type]
307
- ($icons_used ||= []) << icon
308
- icon.css_class
309
- end
310
- %>"><%= @node.content_html %></div>
362
+ <div class="<%= @node.type %>">
363
+ <p class="title"><%= @node.number_and_title_link %></p>
364
+ <div class="content"><%= ICON_BY_NAME[@node.type].to_xhtml %><%= @node.content_xhtml %></div>
311
365
  </div>
312
366
 
313
367
  note: *admonition
@@ -329,7 +383,7 @@ nodes:
329
383
  output: |
330
384
  <div class="<%= @node.type %>">
331
385
  <p class="title"><%= @node.number_and_title_link %></p>
332
- <%= @node.content_div %>
386
+ <%= @node.content_xhtml_div %>
333
387
  </div>
334
388
 
335
389
  table: *formal
@@ -366,16 +420,16 @@ nodes:
366
420
 
367
421
  title_auto = @node.args.length < 2
368
422
 
369
- title_html =
423
+ title_xhtml =
370
424
  if title_auto
371
425
  title_text
372
426
  else
373
427
  @node.args[1].to_s
374
- end.to_inline_html
428
+ end.to_inline_xhtml
375
429
 
376
430
  %{<a class="#{@node.type}" href="##{target.here_frag}"#{
377
431
  %( title="#{title_text}") unless title_auto
378
- }>#{title_html}</a>}
432
+ }>#{title_xhtml}</a>}
379
433
  else
380
434
  raise ArgumentError, "invalid cross-reference to #{@node.title.inspect}", @node.trace
381
435
  end
@@ -440,7 +494,7 @@ output: |
440
494
  (n.index.to_s + '&nbsp;&nbsp;' if n.index),
441
495
  n.list_frag,
442
496
  n.here_frag,
443
- n.title.to_s.to_inline_html
497
+ n.title.to_s.to_inline_xhtml
444
498
  ]
445
499
  nested = n.children.inject('') {|s,c| s << toc_builder[c] }
446
500
 
@@ -466,7 +520,7 @@ output: |
466
520
 
467
521
  lof = lof_enums.sort.map do |(type, nodes)|
468
522
  nested = nodes.map do |n|
469
- %{<li><a id="#{n.list_frag}" href="##{n.here_frag}">#{n.title.to_s.to_inline_html}</a></li>}
523
+ %{<li><a id="#{n.list_frag}" href="##{n.here_frag}">#{n.title.to_s.to_inline_xhtml}</a></li>}
470
524
  end
471
525
 
472
526
  label = type.capitalize << 's' # TODO: pluralize this properly
@@ -475,76 +529,56 @@ output: |
475
529
  %{<h2 id="#{label}" class="title"><a class="here" href="##{label}">#{label}</a></h2> <ol>#{nested}</ol>}
476
530
  end
477
531
  %>
532
+ <?xml version="1.0" encoding="utf-8"?>
478
533
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
479
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
534
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
535
+ <% ICONS.each do |icon| %>
536
+ <!ENTITY <%= icon.entity_name %> "<%= icon.data_uri %>">
537
+ <% end %>
538
+ ]>
480
539
  <html xmlns="http://www.w3.org/1999/xhtml">
481
540
  <head>
482
541
  <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
483
542
  <meta name="date" content="<%= $date %>"/>
484
543
  <meta name="author" content="<%= $authors.keys.join(', ') %>"/>
485
544
  <meta name="generator" content="<%= ERBook::DISPLAY %>"/>
486
- <% $feeds.each_pair do |here_frag, fmt| %>
487
- <link rel="alternate" type="application/<%= fmt %>+xml" href="<%= here_frag %>"/>
488
- <% end if $feeds %>
489
- <title><%= $title.to_s.to_inline_html %></title>
490
-
491
- <% if $use_icons %>
492
- <style type="text/css" media="screen">
493
- blockquote {
494
- background-image : <%= ICONS['quote'].css_image %>;
495
- background-repeat : no-repeat;
496
- padding-left : 65px;
497
- min-height : 40px;
498
- margin-left : 0;
499
- }
500
- </style>
501
- <% end %>
545
+ <title><%= $title.to_s.to_inline_xhtml %></title>
502
546
 
503
- <% if defined? $icons_used and not $icons_used.empty? %>
504
- <style type="text/css" media="screen">
505
- <% $icons_used.each do |icon| %>
506
- .<%= icon.css_class %> {
507
- background-image: <%= icon.css_image %>;
508
- background-repeat: no-repeat;
509
- padding-left: 4em;
510
- }
511
- <% end %>
512
- </style>
547
+ <% if $feeds %>
548
+ <% $feeds.each_pair do |url, fmt| %>
549
+ <link rel="alternate" type="application/<%= fmt %>+xml" href="<%= url %>"/>
550
+ <% end %>
551
+ <% end %>
513
552
 
514
- <style type="text/css" media="print">
515
- <% $icons_used.each do |icon| %>
516
- .<%= icon.css_class %> {
517
- <%
518
- # we use list-style-image instead of
519
- # background-image because the latter is
520
- # neither printable nor shown in print
521
- # preview by default in most browsers
522
- #
523
- # see http://www.web-graphics.com/mtarchive/001703.php
524
- %>
525
- display: list-item;
526
- list-style-image: <%= icon.css_image %>;
527
- list-style-position: inside;
528
- }
529
-
530
- .<%= icon.css_class %> li {
531
- list-style-image: none;
532
- }
533
- <% end %>
553
+ <% @spec['styles'].each_pair do |media, style| %>
554
+ <style type="text/css" media="<%= media %>">
555
+ <![CDATA[<%= style %>]]>
534
556
  </style>
535
557
  <% end %>
536
558
 
537
- <%
538
- styles = @spec['styles']
539
- (styles.keys - %w[common]).each do |media|
540
- %>
541
- <style type="text/css" media="<%= media %>">
542
- <!--
543
- <%= styles['common'] %>
544
- <%= styles[media] %>
545
- -->
559
+ <style type="text/css" media="screen">
560
+ <![CDATA[
561
+ /* decorate external hyperlinks with a visual indicator */
562
+ a:not([href^="#"])
563
+ {
564
+ color : #3366BB;
565
+ background : <%= ICON_BY_NAME['link'].data_css %>;
566
+ background-position : center right;
567
+ background-repeat : no-repeat;
568
+ padding-right : 13px;
569
+ }
570
+
571
+ /* display icon for blockquote elements */
572
+ blockquote
573
+ {
574
+ background-image : <%= ICON_BY_NAME['quote'].data_css %>;
575
+ background-repeat : no-repeat;
576
+ margin-left : 0;
577
+ padding-left : 65px;
578
+ min-height : 50px;
579
+ }
580
+ ]]>
546
581
  </style>
547
- <% end %>
548
582
  </head>
549
583
  <body>
550
584
  <%
@@ -578,11 +612,11 @@ output: |
578
612
  <%= header.output %>
579
613
  <% else %>
580
614
  <%= $logo if defined? $logo %>
581
- <h1 class="title"><%= $title.to_s.to_inline_html %></h1>
615
+ <h1 class="title"><%= $title.to_s.to_inline_xhtml %></h1>
582
616
  <h2 class="authors"><%=
583
- $authors.map do |(name, here_frag)|
584
- if here_frag
585
- %{<a href="#{here_frag}">#{name}</a>}
617
+ $authors.map do |(name, url)|
618
+ if url
619
+ %{<a href="#{url}">#{name}</a>}
586
620
  else
587
621
  name
588
622
  end
@@ -628,7 +662,7 @@ output: |
628
662
  <h1 class="title" id="References"><a class="here" href="#References">References</a></h1>
629
663
  <ol>
630
664
  <% references.each do |n| %>
631
- <li id="<%= n.here_frag %>"><%= n.content_html %></li>
665
+ <li id="<%= n.here_frag %>"><%= n.content_xhtml %></li>
632
666
  <% end %>
633
667
  </ol>
634
668
  </div>
@@ -642,16 +676,32 @@ output: |
642
676
  <div id="footer">
643
677
  <%= node = @types['footer_inside_above'].first and node.output %>
644
678
  <% if footer = @types['footer'].first %>
645
- <%= footer.content.to_s.to_html %>
679
+ <%= footer.content.to_s.to_xhtml %>
646
680
  <% else %>
647
681
  Generated by <a href="<%= ERBook::WEBSITE %>"><%= ERBook::DISPLAY %></a> on <%= Time.now %>.
648
682
  <% end %>
649
683
 
650
- <% if $icons_used %>
651
- <div id="footer-credits">
652
- The icons used in this document are &copy; 2005 <a href="http://tango.freedesktop.org">Tango Desktop Project</a>. They are part of the <a href="http://tango.freedesktop.org/Tango_Icon_Library">Tango Icon Theme</a> set, which is distributed under the <a href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Attribution-ShareAlike 2.5 License Agreement</a>.
653
- </div>
654
- <% end %>
684
+ <div id="footer-credits">
685
+ <p>
686
+ <% ICONS.select {|i| i.origin == 'tango' }.each do |icon| %>
687
+ <%= icon.to_xhtml %>
688
+ <% end %>
689
+
690
+ <br/>
691
+
692
+ The icons shown above are &copy; 2005 <a href="http://tango.freedesktop.org">Tango Desktop Project</a>. They are part of the <a href="http://tango.freedesktop.org/Tango_Icon_Library">Tango Icon Theme</a> set, which is distributed under the <a href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Attribution-ShareAlike 2.5 License Agreement</a>.
693
+ </p>
694
+
695
+ <p>
696
+ <% ICONS.select {|i| i.origin == 'mediawiki' }.each do |icon| %>
697
+ <%= icon.to_xhtml %>
698
+ <% end %>
699
+
700
+ <br/>
701
+
702
+ The icons shown above are &copy; 2007 <a href="https://www.ohloh.net/projects/mediawiki/contributors">MediaWiki contributors</a>. They are part of the <a href="http://www.mediawiki.org/wiki/MediaWiki">MediaWiki</a> software, which is distributed under the <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, version 2</a>.
703
+ </p>
704
+ </div>
655
705
  <%= node = @types['footer_inside_below'].first and node.output %>
656
706
  </div>
657
707
  <%= node = @types['footer_outside_below'].first and node.output %>
@@ -659,7 +709,7 @@ output: |
659
709
  </html>
660
710
 
661
711
  styles:
662
- common: |
712
+ all: |
663
713
  body
664
714
  {
665
715
  color : #000000;
@@ -672,8 +722,8 @@ styles:
672
722
 
673
723
  blockquote
674
724
  {
675
- font-family : Georgia, serif;
676
- color : #444;
725
+ color : #333;
726
+ font-style : italic;
677
727
  }
678
728
 
679
729
  em
@@ -890,7 +940,7 @@ styles:
890
940
 
891
941
  #footer-credits
892
942
  {
893
- margin-top : 1em;
943
+ margin-top : 2em;
894
944
  margin-bottom : 2em;
895
945
  }
896
946
 
@@ -964,21 +1014,35 @@ styles:
964
1014
  margin : 3em;
965
1015
  }
966
1016
 
967
- .tip > .icon,
968
- .note > .icon,
969
- .caution > .icon,
970
- .warning > .icon,
971
- .important > .icon
1017
+ .tip > .content,
1018
+ .note > .content,
1019
+ .caution > .content,
1020
+ .warning > .content,
1021
+ .important > .content,
1022
+ .figure > .content,
1023
+ .table > .content,
1024
+ .example > .content,
1025
+ .equation > .content,
1026
+ .procedure > .content
1027
+ {
1028
+ min-height : 48px; /* 48px is height of icon */
1029
+ }
1030
+
1031
+ .tip > .content > .icon,
1032
+ .note > .content > .icon,
1033
+ .caution > .content > .icon,
1034
+ .warning > .content > .icon,
1035
+ .important > .content > .icon
972
1036
  {
973
1037
  float : left;
974
1038
  margin : 0 1em 1em 0; /* top right bottom left */
975
1039
  }
976
1040
 
977
- .tip .icon,
978
- .note .icon,
979
- .caution .icon,
980
- .warning .icon,
981
- .important .icon
1041
+ .tip .content .icon,
1042
+ .note .content .icon,
1043
+ .caution .content .icon,
1044
+ .warning .content .icon,
1045
+ .important .content .icon
982
1046
  {
983
1047
  _display : none; /* IE6 cannot display embedded images */
984
1048
  }
@@ -1008,9 +1072,9 @@ styles:
1008
1072
  screen: |
1009
1073
  body
1010
1074
  {
1011
- margin : auto;
1012
- max-width : 36em;
1013
- padding : 0.5em;
1075
+ margin : auto;
1076
+ max-width : 36em;
1077
+ padding : 0.5em;
1014
1078
  }
1015
1079
 
1016
1080
  /* source code */
@@ -1051,18 +1115,12 @@ styles:
1051
1115
 
1052
1116
  a:link
1053
1117
  {
1054
- color : #0000FF;
1118
+ color : #002BB8;
1055
1119
  }
1056
1120
 
1057
1121
  a:visited
1058
1122
  {
1059
- color : #C71585;
1060
- }
1061
-
1062
- /* external hyperlinks */
1063
- a:not([href^="#"]):before
1064
- {
1065
- content : "\2660"; /* &spades; */
1123
+ color : #5A3696;
1066
1124
  }
1067
1125
 
1068
1126
  a.here,