glyph 0.4.2 → 0.5.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 (132) hide show
  1. data/Rakefile +19 -40
  2. data/benchmark.rb +1 -2
  3. data/book/config.yml +8 -8
  4. data/book/document.glyph +18 -19
  5. data/book/images/glyph/commands_tasks.png +0 -0
  6. data/book/lib/layouts/bookindex.glyph +113 -111
  7. data/book/lib/layouts/bookpage.glyph +112 -108
  8. data/book/lib/macros/reference.rb +2 -2
  9. data/book/lib/tasks/tasks.rake +1 -1
  10. data/book/text/acknowledgements.glyph +1 -0
  11. data/book/text/changelog.glyph +140 -112
  12. data/book/text/compiling/compiling.glyph +36 -24
  13. data/book/text/compiling/lite_mode.glyph +11 -11
  14. data/book/text/compiling/programmatic_usage.glyph +57 -57
  15. data/book/text/config/document.glyph +7 -1
  16. data/book/text/config/options.glyph +5 -3
  17. data/book/text/config/output.glyph +41 -8
  18. data/book/text/extending/bookmarks_headers.glyph +13 -11
  19. data/book/text/extending/command.glyph +1 -1
  20. data/book/text/extending/commands_tasks.glyph +2 -2
  21. data/book/text/extending/internals.glyph +29 -29
  22. data/book/text/extending/interpreting.glyph +48 -9
  23. data/book/text/extending/macro_def.glyph +80 -32
  24. data/book/text/extending/output_format.glyph +2 -2
  25. data/book/text/extending/placeholders.glyph +27 -15
  26. data/book/text/extending/validators.glyph +1 -1
  27. data/book/text/getting_started/configuration.glyph +1 -1
  28. data/book/text/getting_started/create_project.glyph +4 -5
  29. data/book/text/getting_started/structure.glyph +2 -2
  30. data/book/text/macros/macros_core.glyph +341 -199
  31. data/book/text/macros/macros_filters.glyph +1 -1
  32. data/book/text/macros/macros_inline.glyph +3 -3
  33. data/book/text/macros/macros_structure.glyph +1 -1
  34. data/book/text/ref_commands.glyph +98 -93
  35. data/book/text/snippets.glyph +18 -0
  36. data/book/text/stats/bookmarks.glyph +16 -16
  37. data/book/text/stats/links.glyph +23 -23
  38. data/book/text/stats/macros.glyph +14 -14
  39. data/book/text/stats/snippets.glyph +26 -26
  40. data/book/text/stats/stats.glyph +14 -15
  41. data/book/text/text_editing/attribute_intro.glyph +8 -8
  42. data/book/text/text_editing/code.glyph +16 -16
  43. data/book/text/text_editing/conditionals.glyph +12 -13
  44. data/book/text/text_editing/esc_quot.glyph +3 -3
  45. data/book/text/text_editing/evaluation.glyph +57 -3
  46. data/book/text/text_editing/inclusions.glyph +34 -25
  47. data/book/text/text_editing/macro_composition.glyph +28 -0
  48. data/book/text/text_editing/macro_intro.glyph +4 -4
  49. data/book/text/text_editing/section_aliases.glyph +23 -23
  50. data/book/text/text_editing/sections.glyph +22 -22
  51. data/book/text/text_editing/stylesheets.glyph +33 -33
  52. data/book/text/text_editing/topics.glyph +6 -6
  53. data/book/text/text_editing/xml_fallback.glyph +1 -1
  54. data/book/text/troubleshooting/errors_command.glyph +4 -4
  55. data/book/text/troubleshooting/errors_generic.glyph +16 -10
  56. data/book/text/troubleshooting/errors_macro.glyph +18 -21
  57. data/book/text/troubleshooting/errors_parser.glyph +7 -7
  58. data/config.yml +51 -29
  59. data/document.glyph +18 -18
  60. data/glyph.gemspec +39 -287
  61. data/layouts/web5/topic.glyph +1 -1
  62. data/lib/glyph.rb +42 -10
  63. data/lib/glyph/analyzer.rb +5 -2
  64. data/lib/glyph/bookmark.rb +3 -1
  65. data/lib/glyph/commands.rb +11 -9
  66. data/lib/glyph/commands/add.rb +3 -1
  67. data/lib/glyph/commands/compile.rb +10 -7
  68. data/lib/glyph/commands/config.rb +7 -5
  69. data/lib/glyph/commands/init.rb +2 -0
  70. data/lib/glyph/commands/outline.rb +2 -0
  71. data/lib/glyph/commands/stats.rb +3 -0
  72. data/lib/glyph/commands/todo.rb +2 -0
  73. data/lib/glyph/config.rb +2 -0
  74. data/lib/glyph/document.rb +34 -9
  75. data/lib/glyph/interpreter.rb +2 -0
  76. data/lib/glyph/macro.rb +97 -25
  77. data/lib/glyph/macro_validators.rb +9 -6
  78. data/lib/glyph/node.rb +3 -1
  79. data/lib/glyph/parser.rb +68 -33
  80. data/lib/glyph/reporter.rb +3 -1
  81. data/lib/glyph/syntax_node.rb +23 -28
  82. data/lib/glyph/system_extensions.rb +21 -0
  83. data/lib/glyph/utils.rb +24 -4
  84. data/macros/block.rb +111 -0
  85. data/macros/core.rb +163 -33
  86. data/macros/filters.rb +3 -2
  87. data/macros/inline.rb +97 -0
  88. data/macros/reps/html.rb +180 -0
  89. data/macros/reps/html5.rb +100 -0
  90. data/macros/reps/web.rb +4 -0
  91. data/macros/reps/web5.rb +4 -0
  92. data/macros/structure.rb +229 -0
  93. data/macros/xml.rb +29 -24
  94. data/spec/config.yml +7 -0
  95. data/spec/files/article.glyph +2 -2
  96. data/spec/files/web_doc.glyph +9 -5
  97. data/spec/lib/commands_spec.rb +13 -9
  98. data/spec/lib/config_spec.rb +2 -2
  99. data/spec/lib/document_spec.rb +10 -0
  100. data/spec/lib/glyph_spec.rb +30 -8
  101. data/spec/lib/macro_spec.rb +39 -4
  102. data/spec/lib/macro_validators_spec.rb +3 -4
  103. data/spec/lib/parser_spec.rb +7 -0
  104. data/spec/lib/reporter_spec.rb +1 -0
  105. data/spec/lib/syntax_node_spec.rb +40 -6
  106. data/spec/macros/core_spec.rb +154 -21
  107. data/spec/macros/filters_spec.rb +1 -1
  108. data/spec/macros/html5_spec.rb +4 -5
  109. data/spec/macros/macros_spec.rb +6 -7
  110. data/spec/macros/web5_spec.rb +3 -3
  111. data/spec/macros/web_spec.rb +10 -7
  112. data/spec/macros/xml_spec.rb +11 -2
  113. data/spec/spec_helper.rb +11 -5
  114. data/spec/tasks/generate_spec.rb +40 -5
  115. data/spec/tasks/load_spec.rb +1 -13
  116. data/styles/coderay.css +147 -38
  117. data/styles/default.css +19 -22
  118. data/styles/pagination.css +30 -30
  119. data/tasks/generate.rake +54 -18
  120. data/tasks/load.rake +9 -24
  121. data/tasks/project.rake +0 -2
  122. metadata +208 -207
  123. data/.gitignore +0 -7
  124. data/VERSION +0 -1
  125. data/book/snippets.yml +0 -18
  126. data/lib/glyph/macro_helpers.rb +0 -282
  127. data/macros/html/block.rb +0 -124
  128. data/macros/html/inline.rb +0 -42
  129. data/macros/html/structure.rb +0 -191
  130. data/macros/html5/block.rb +0 -69
  131. data/macros/html5/inline.rb +0 -24
  132. data/macros/html5/structure.rb +0 -140
@@ -1,191 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- macro :section do
4
- max_parameters 1
5
- if raw_attribute(:src) && Glyph.multiple_output_files? then
6
- required_attribute :title
7
- end
8
- procs = {}
9
- procs[:title] = lambda do |level, ident, title|
10
- %{<h#{level} id="#{ident}">#{title}</h#{level}>\n}
11
- end
12
- procs[:body] = lambda do |title, value|
13
- %{<div class="#{@name}">
14
- #{title}#{value}
15
-
16
- </div>}
17
- end
18
- section_element_for procs
19
- end
20
-
21
- macro :article do
22
- exact_parameters 1
23
- head = raw_attr(:head)
24
- head ||= %{style[default.css]}
25
- pre_title = raw_attr(:"pre-title")
26
- post_title = raw_attr(:"post-title")
27
- pubdate = @node.attr(:pubdate) ? "div[@class[pubdate]#{@node.attr(:pubdate).contents}]" : "pubdate[]"
28
- halftitlepage = raw_attr(:halftitlepage)
29
- halftitlepage ||= %{
30
- #{pre_title}
31
- title[]
32
- subtitle[]
33
- author[]
34
- #{pubdate}
35
- #{post_title}
36
- }
37
- interpret %{document[
38
- head[#{head}]
39
- body[
40
- halftitlepage[
41
- #{halftitlepage}
42
- ]
43
- #{@node.value}
44
- ]
45
- ]}
46
- end
47
-
48
- macro :book do
49
- no_parameters
50
- head = raw_attr(:head)
51
- head ||= %{style[default.css]}
52
- pre_title = raw_attr(:"pre-title")
53
- post_title = raw_attr(:"post-title")
54
- titlepage = raw_attr(:titlepage)
55
- pubdate = @node.attr(:pubdate) ? "div[@class[pubdate]#{@node.attr(:pubdate).contents}]" : "pubdate[]"
56
- titlepage ||= %{
57
- #{pre_title}
58
- title[]
59
- subtitle[]
60
- revision[]
61
- author[]
62
- #{pubdate}
63
- #{post_title}
64
- }
65
- frontmatter = raw_attr(:frontmatter)
66
- bodymatter = raw_attr(:bodymatter)
67
- backmatter = raw_attr(:backmatter)
68
- frontmatter = "frontmatter[\n#{frontmatter}\n]" if frontmatter
69
- bodymatter = "bodymatter[\n#{bodymatter}\n]" if bodymatter
70
- backmatter = "backmatter[\n#{backmatter}\n]" if backmatter
71
- interpret %{document[
72
- head[#{head}]
73
- body[
74
- titlepage[
75
- #{titlepage}
76
- ]
77
- #{frontmatter}
78
- #{bodymatter}
79
- #{backmatter}
80
- ]
81
- ]}
82
- end
83
-
84
-
85
- macro :document do
86
- exact_parameters 1
87
- %{<?xml version="1.0" encoding="utf-8"?>
88
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
89
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
90
- #{value}
91
-
92
- </html>}
93
- end
94
-
95
- macro :head do
96
- exact_parameters 1
97
- author = Glyph['document.author'].blank? ? "" : %{<meta name="author" content="#{Glyph["document.author"]}" />
98
- }
99
- copy = Glyph['document.author'].blank? ? "" : %{<meta name="copyright" content="#{Glyph["document.author"]}" />}
100
- %{<head>
101
- <title>#{Glyph["document.title"]}</title>
102
- #{author}
103
- #{copy}
104
- <meta name="generator" content="Glyph v#{Glyph::VERSION} (http://www.h3rald.com/glyph)" />
105
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
106
- #{value}
107
- </head>
108
- }
109
- end
110
-
111
- macro :style do
112
- within :head
113
- exact_parameters 1
114
- file = Glyph.lite? ? Pathname.new(value) : Glyph::PROJECT/"styles/#{value}"
115
- file = Pathname.new Glyph::HOME/'styles'/value unless file.exist?
116
- macro_error "Stylesheet '#{value}' not found" unless file.exist?
117
-
118
- @node[:document].style file
119
- case Glyph['document.styles'].to_s
120
- when 'embed' then
121
- style = ""
122
- case file.extname
123
- when ".css" then
124
- style = file_load file
125
- when ".sass", ".scss" then
126
- begin
127
- require 'sass'
128
- style = Sass::Engine.new(file_load(file), :syntax => file.extname.gsub(/^\./, '').to_sym).render
129
- rescue LoadError
130
- macro_error "Haml is not installed. Please run: gem install haml"
131
- rescue Exception
132
- raise
133
- end
134
- else
135
- macro_error "Extension '#{file.extname}' not supported."
136
- end
137
- %{<style type="text/css">
138
- #{style}
139
- </style>}
140
- when 'import' then
141
- %{<style type="text/css">
142
- @import url("#{Glyph["output.#{Glyph['document.output']}.base"]}styles/#{value.gsub(/\..+$/, '.css')}");
143
- </style>}
144
- when 'link' then
145
- %{<link href="#{Glyph["output.#{Glyph['document.output']}.base"]}styles/#{value.gsub(/\..+$/, '.css')}" rel="stylesheet" type="text/css" />}
146
- else
147
- macro_error "Value '#{Glyph['document.styles']}' not allowed for 'document.styles' setting"
148
- end
149
- end
150
-
151
- macro :toc do
152
- max_parameters 1
153
- link_proc = lambda do |head|
154
- (!Glyph.multiple_output_files? || (head.definition != head.file)) ? %{<a href="#{head.link(@source_file)}">#{head.title}</a>} : head.title
155
- end
156
- toc_list_proc = lambda do |descend_proc, bmk, document|
157
- %{<div class="contents">
158
- <h2 class="toc-header" id="#{bmk}">#{bmk.title}</h2>
159
- <ol class="toc">
160
- #{descend_proc.call(document.structure, nil)}
161
- </ol>
162
- </div>}
163
- end
164
- toc_item_proc = lambda do |classes, header|
165
- "<li class=\"#{classes.join(" ").strip}\">#{header}</li>"
166
- end
167
- toc_sublist_proc = lambda do |contents|
168
- "<li><ol>#{contents}</ol></li>\n"
169
- end
170
- toc_element_for param(0), attr(:title),
171
- :link => link_proc,
172
- :toc_list => toc_list_proc,
173
- :toc_item => toc_item_proc,
174
- :toc_sublist => toc_sublist_proc
175
- end
176
-
177
- # See:
178
- # http://microformats.org/wiki/book-brainstorming
179
- # http://en.wikipedia.org/wiki/Book_design
180
-
181
- (Glyph['system.structure.frontmatter'] + Glyph['system.structure.bodymatter'] + Glyph['system.structure.backmatter']).
182
- each {|s| macro_alias s => :section }
183
-
184
- macro_alias "§" => :section
185
- macro_alias :frontcover => :section
186
- macro_alias :titlepage => :section
187
- macro_alias :halftitlepage => :section
188
- macro_alias :frontmatter => :section
189
- macro_alias :bodymatter => :section
190
- macro_alias :backmatter => :section
191
- macro_alias :backcover => :section
@@ -1,69 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- macro :note do
4
- %{<aside class="#{@name}">
5
- <span class="note-title">#{@name.to_s.capitalize}</span>#{value}
6
-
7
- </aside>}
8
- end
9
-
10
- macro :box do
11
- exact_parameters 2
12
- %{<aside class="box">
13
- <div class="box-title">#{param(0)}</div>
14
- #{param(1)}
15
-
16
- </aside>}
17
- end
18
-
19
- macro :figure do
20
- min_parameters 1
21
- max_parameters 2
22
- image = param(0)
23
- alt = "@alt[-]" unless attr(:alt)
24
- caption = "figcaption[#{param(1)}]" rescue nil
25
- figure_element_for image, alt, caption do |alt, dest_file, caption|
26
- interpret %{=figure[
27
- img[#{alt}@src[#{Glyph["output.#{Glyph['document.output']}.base"]}#{dest_file}]#{@node.attrs.join}]
28
- #{caption}
29
- ]}
30
- end
31
- end
32
-
33
- macro :pubdate do
34
- no_parameters
35
- t = Time.now
36
- %{<time class="pubdate" datetime="#{t.strftime("%Y-%m-%d")}">
37
- #{Time.now.strftime("%B %Y")}
38
- </time>}
39
- end
40
-
41
- macro :navigation do
42
- exact_parameters 1
43
- procs = {}
44
- procs[:contents] = lambda do
45
- %{<a href="#{Glyph["output.#{Glyph['document.output']}.base"]}index.html">Contents</a>}
46
- end
47
- procs[:previous] = lambda do |topic|
48
- if topic then
49
- %{<a href="#{Glyph["output.#{Glyph['document.output']}.base"]}#{topic[:src].gsub(/\..+$/, '.html')}">#{topic[:title]} &larr;</a>}
50
- else
51
- ""
52
- end
53
- end
54
- procs[:next] = lambda do |topic|
55
- if topic then
56
- %{<a href="#{Glyph["output.#{Glyph['document.output']}.base"]}#{topic[:src].gsub(/\..+$/, '.html')}">&rarr; #{topic[:title]}</a>}
57
- else
58
- ""
59
- end
60
- end
61
- procs[:navigation] = lambda do |contents, prev_link, next_link|
62
- %{<nav>#{prev_link}#{contents}#{next_link}</nav>}
63
- end
64
- navigation_element_for param(0).to_sym, procs
65
- end
66
-
67
- macro_alias :important => :note
68
- macro_alias :tip => :note
69
- macro_alias :caution => :note
@@ -1,24 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- macro :fmi do
4
- exact_parameters 2, :level => :warning
5
- fmi_element_for param(0), param(1) do |topic, link|
6
- %{<span class="fmi">for more information on <mark>#{topic}</mark>, see #{link}</span>}
7
- end
8
- end
9
-
10
- macro :draftcomment do
11
- draftcomment_element do |value|
12
- %{<aside class="comment"><span class="comment-pre"><strong>Comment:</strong> </span>#{value}</aside>}
13
- end
14
- end
15
-
16
- macro :todo do
17
- exact_parameters 1
18
- todo_element do |value|
19
- %{<aside class="todo"><span class="todo-pre"><strong>TODO:</strong> </span>#{value}</aside>}
20
- end
21
- end
22
-
23
- macro_alias '!' => :todo
24
- macro_alias :dc => :draftcomment
@@ -1,140 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- macro :section do
4
- max_parameters 1
5
- if raw_attribute(:src) && Glyph.multiple_output_files? then
6
- required_attribute :title
7
- end
8
- procs = {}
9
- procs[:title] = lambda do |level, ident, title|
10
- %{<header><h1 id="#{ident}">#{title}</h1></header>\n}
11
- end
12
- procs[:body] = lambda do |title, value|
13
- %{<section class="#{@name}">
14
- #{title}#{value}
15
-
16
- </section>}
17
- end
18
- section_element_for procs
19
- end
20
-
21
- macro :article do
22
- exact_parameters 1
23
- head = raw_attr(:head)
24
- head ||= %{style[default.css]}
25
- pre_title = raw_attr(:"pre-title")
26
- post_title = raw_attr(:"post-title")
27
- pubdate = @node.attr(:pubdate) ? "time[@class[pubdate]#{@node.attr(:pubdate).contents}]" : "pubdate[]"
28
- halftitlepage = raw_attr(:halftitlepage)
29
- halftitlepage ||= %{
30
- #{pre_title}
31
- hgroup[
32
- title[]
33
- subtitle[]
34
- ]
35
- author[]
36
- #{pubdate}
37
- #{post_title}
38
- }
39
- interpret %{document[
40
- head[#{head}]
41
- body[
42
- =article[
43
- halftitlepage[
44
- #{halftitlepage}
45
- ]
46
- #{@node.value}
47
- ]
48
- ]
49
- ]}
50
- end
51
-
52
- macro :book do
53
- no_parameters
54
- head = raw_attr(:head)
55
- head ||= %{style[default.css]}
56
- pre_title = raw_attr(:"pre-title")
57
- post_title = raw_attr(:"post-title")
58
- titlepage = raw_attr(:titlepage)
59
- pubdate = @node.attr(:pubdate) ? "time[@class[pubdate]#{@node.attr(:pubdate).contents}]" : "pubdate[]"
60
- titlepage ||= %{
61
- #{pre_title}
62
- hgroup[
63
- title[]
64
- subtitle[]
65
- ]
66
- revision[]
67
- author[]
68
- #{pubdate}
69
- #{post_title}
70
- }
71
- frontmatter = raw_attr(:frontmatter)
72
- bodymatter = raw_attr(:bodymatter)
73
- backmatter = raw_attr(:backmatter)
74
- frontmatter = "frontmatter[\n#{frontmatter}\n]" if frontmatter
75
- bodymatter = "bodymatter[\n#{bodymatter}\n]" if bodymatter
76
- backmatter = "backmatter[\n#{backmatter}\n]" if backmatter
77
- interpret %{document[
78
- head[#{head}]
79
- body[
80
- titlepage[
81
- #{titlepage}
82
- ]
83
- #{frontmatter}
84
- #{bodymatter}
85
- #{backmatter}
86
- ]
87
- ]}
88
- end
89
-
90
-
91
- macro :document do
92
- exact_parameters 1
93
- %{<!DOCTYPE html>
94
- <html lang="en">
95
- #{value}
96
-
97
- </html>}
98
- end
99
-
100
- macro :toc do
101
- max_parameters 1
102
- link_proc = lambda do |head|
103
- (!Glyph.multiple_output_files? || (head.definition != head.file)) ? %{<a href="#{head.link(@source_file)}">#{head.title}</a>} : head.title
104
- end
105
- toc_list_proc = lambda do |descend_proc, bmk, document|
106
- %{<nav class="contents">
107
- <h1 class="toc-header" id="#{bmk}">#{bmk.title}</h1>
108
- <ol class="toc">
109
- #{descend_proc.call(document.structure, nil)}
110
- </ol>
111
- </nav>}
112
- end
113
- toc_item_proc = lambda do |classes, header|
114
- "<li class=\"#{classes.join(" ").strip}\">#{header}</li>"
115
- end
116
- toc_sublist_proc = lambda do |contents|
117
- "<li><ol>#{contents}</ol></li>\n"
118
- end
119
- toc_element_for param(0), attr(:title),
120
- :link => link_proc,
121
- :toc_list => toc_list_proc,
122
- :toc_item => toc_item_proc,
123
- :toc_sublist => toc_sublist_proc
124
- end
125
-
126
- # See:
127
- # http://microformats.org/wiki/book-brainstorming
128
- # http://en.wikipedia.org/wiki/Book_design
129
-
130
- (Glyph['system.structure.frontmatter'] + Glyph['system.structure.bodymatter'] + Glyph['system.structure.backmatter']).
131
- each {|s| macro_alias s => :section }
132
-
133
- macro_alias "§" => :section
134
- macro_alias :frontcover => :section
135
- macro_alias :titlepage => :section
136
- macro_alias :halftitlepage => :section
137
- macro_alias :frontmatter => :section
138
- macro_alias :bodymatter => :section
139
- macro_alias :backmatter => :section
140
- macro_alias :backcover => :section