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.
- data/Rakefile +19 -40
- data/benchmark.rb +1 -2
- data/book/config.yml +8 -8
- data/book/document.glyph +18 -19
- data/book/images/glyph/commands_tasks.png +0 -0
- data/book/lib/layouts/bookindex.glyph +113 -111
- data/book/lib/layouts/bookpage.glyph +112 -108
- data/book/lib/macros/reference.rb +2 -2
- data/book/lib/tasks/tasks.rake +1 -1
- data/book/text/acknowledgements.glyph +1 -0
- data/book/text/changelog.glyph +140 -112
- data/book/text/compiling/compiling.glyph +36 -24
- data/book/text/compiling/lite_mode.glyph +11 -11
- data/book/text/compiling/programmatic_usage.glyph +57 -57
- data/book/text/config/document.glyph +7 -1
- data/book/text/config/options.glyph +5 -3
- data/book/text/config/output.glyph +41 -8
- data/book/text/extending/bookmarks_headers.glyph +13 -11
- data/book/text/extending/command.glyph +1 -1
- data/book/text/extending/commands_tasks.glyph +2 -2
- data/book/text/extending/internals.glyph +29 -29
- data/book/text/extending/interpreting.glyph +48 -9
- data/book/text/extending/macro_def.glyph +80 -32
- data/book/text/extending/output_format.glyph +2 -2
- data/book/text/extending/placeholders.glyph +27 -15
- data/book/text/extending/validators.glyph +1 -1
- data/book/text/getting_started/configuration.glyph +1 -1
- data/book/text/getting_started/create_project.glyph +4 -5
- data/book/text/getting_started/structure.glyph +2 -2
- data/book/text/macros/macros_core.glyph +341 -199
- data/book/text/macros/macros_filters.glyph +1 -1
- data/book/text/macros/macros_inline.glyph +3 -3
- data/book/text/macros/macros_structure.glyph +1 -1
- data/book/text/ref_commands.glyph +98 -93
- data/book/text/snippets.glyph +18 -0
- data/book/text/stats/bookmarks.glyph +16 -16
- data/book/text/stats/links.glyph +23 -23
- data/book/text/stats/macros.glyph +14 -14
- data/book/text/stats/snippets.glyph +26 -26
- data/book/text/stats/stats.glyph +14 -15
- data/book/text/text_editing/attribute_intro.glyph +8 -8
- data/book/text/text_editing/code.glyph +16 -16
- data/book/text/text_editing/conditionals.glyph +12 -13
- data/book/text/text_editing/esc_quot.glyph +3 -3
- data/book/text/text_editing/evaluation.glyph +57 -3
- data/book/text/text_editing/inclusions.glyph +34 -25
- data/book/text/text_editing/macro_composition.glyph +28 -0
- data/book/text/text_editing/macro_intro.glyph +4 -4
- data/book/text/text_editing/section_aliases.glyph +23 -23
- data/book/text/text_editing/sections.glyph +22 -22
- data/book/text/text_editing/stylesheets.glyph +33 -33
- data/book/text/text_editing/topics.glyph +6 -6
- data/book/text/text_editing/xml_fallback.glyph +1 -1
- data/book/text/troubleshooting/errors_command.glyph +4 -4
- data/book/text/troubleshooting/errors_generic.glyph +16 -10
- data/book/text/troubleshooting/errors_macro.glyph +18 -21
- data/book/text/troubleshooting/errors_parser.glyph +7 -7
- data/config.yml +51 -29
- data/document.glyph +18 -18
- data/glyph.gemspec +39 -287
- data/layouts/web5/topic.glyph +1 -1
- data/lib/glyph.rb +42 -10
- data/lib/glyph/analyzer.rb +5 -2
- data/lib/glyph/bookmark.rb +3 -1
- data/lib/glyph/commands.rb +11 -9
- data/lib/glyph/commands/add.rb +3 -1
- data/lib/glyph/commands/compile.rb +10 -7
- data/lib/glyph/commands/config.rb +7 -5
- data/lib/glyph/commands/init.rb +2 -0
- data/lib/glyph/commands/outline.rb +2 -0
- data/lib/glyph/commands/stats.rb +3 -0
- data/lib/glyph/commands/todo.rb +2 -0
- data/lib/glyph/config.rb +2 -0
- data/lib/glyph/document.rb +34 -9
- data/lib/glyph/interpreter.rb +2 -0
- data/lib/glyph/macro.rb +97 -25
- data/lib/glyph/macro_validators.rb +9 -6
- data/lib/glyph/node.rb +3 -1
- data/lib/glyph/parser.rb +68 -33
- data/lib/glyph/reporter.rb +3 -1
- data/lib/glyph/syntax_node.rb +23 -28
- data/lib/glyph/system_extensions.rb +21 -0
- data/lib/glyph/utils.rb +24 -4
- data/macros/block.rb +111 -0
- data/macros/core.rb +163 -33
- data/macros/filters.rb +3 -2
- data/macros/inline.rb +97 -0
- data/macros/reps/html.rb +180 -0
- data/macros/reps/html5.rb +100 -0
- data/macros/reps/web.rb +4 -0
- data/macros/reps/web5.rb +4 -0
- data/macros/structure.rb +229 -0
- data/macros/xml.rb +29 -24
- data/spec/config.yml +7 -0
- data/spec/files/article.glyph +2 -2
- data/spec/files/web_doc.glyph +9 -5
- data/spec/lib/commands_spec.rb +13 -9
- data/spec/lib/config_spec.rb +2 -2
- data/spec/lib/document_spec.rb +10 -0
- data/spec/lib/glyph_spec.rb +30 -8
- data/spec/lib/macro_spec.rb +39 -4
- data/spec/lib/macro_validators_spec.rb +3 -4
- data/spec/lib/parser_spec.rb +7 -0
- data/spec/lib/reporter_spec.rb +1 -0
- data/spec/lib/syntax_node_spec.rb +40 -6
- data/spec/macros/core_spec.rb +154 -21
- data/spec/macros/filters_spec.rb +1 -1
- data/spec/macros/html5_spec.rb +4 -5
- data/spec/macros/macros_spec.rb +6 -7
- data/spec/macros/web5_spec.rb +3 -3
- data/spec/macros/web_spec.rb +10 -7
- data/spec/macros/xml_spec.rb +11 -2
- data/spec/spec_helper.rb +11 -5
- data/spec/tasks/generate_spec.rb +40 -5
- data/spec/tasks/load_spec.rb +1 -13
- data/styles/coderay.css +147 -38
- data/styles/default.css +19 -22
- data/styles/pagination.css +30 -30
- data/tasks/generate.rake +54 -18
- data/tasks/load.rake +9 -24
- data/tasks/project.rake +0 -2
- metadata +208 -207
- data/.gitignore +0 -7
- data/VERSION +0 -1
- data/book/snippets.yml +0 -18
- data/lib/glyph/macro_helpers.rb +0 -282
- data/macros/html/block.rb +0 -124
- data/macros/html/inline.rb +0 -42
- data/macros/html/structure.rb +0 -191
- data/macros/html5/block.rb +0 -69
- data/macros/html5/inline.rb +0 -24
- data/macros/html5/structure.rb +0 -140
data/layouts/web5/topic.glyph
CHANGED
data/lib/glyph.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Copyright (c) 2009-2010 Fabio Cevasco
|
|
2
2
|
# website: http://www.h3rald.com/glyph
|
|
3
3
|
# license: MIT
|
|
4
|
+
# encoding: utf-8
|
|
4
5
|
|
|
5
6
|
require 'rubygems'
|
|
6
7
|
require 'pathname'
|
|
@@ -31,7 +32,6 @@ module Glyph
|
|
|
31
32
|
require LIB/'bookmark'
|
|
32
33
|
require LIB/'document'
|
|
33
34
|
require LIB/'macro_validators'
|
|
34
|
-
require LIB/'macro_helpers'
|
|
35
35
|
require LIB/'macro'
|
|
36
36
|
require LIB/'syntax_node'
|
|
37
37
|
require LIB/'parser'
|
|
@@ -40,8 +40,13 @@ module Glyph
|
|
|
40
40
|
require LIB/'reporter'
|
|
41
41
|
extend Glyph::Utils
|
|
42
42
|
|
|
43
|
+
# A generic Glyph error.
|
|
43
44
|
class Error < RuntimeError; end
|
|
45
|
+
|
|
46
|
+
# A syntax error.
|
|
44
47
|
class SyntaxError < Error; end
|
|
48
|
+
|
|
49
|
+
# A macro error.
|
|
45
50
|
class MacroError < Error
|
|
46
51
|
include Glyph::Utils
|
|
47
52
|
attr_reader :macro
|
|
@@ -62,17 +67,19 @@ module Glyph
|
|
|
62
67
|
msg "#{"-"*54}\n#{@macro.node.to_s.gsub(/\t/, ' ')}\n#{"-"*54}" if Glyph.debug?
|
|
63
68
|
end
|
|
64
69
|
end
|
|
70
|
+
|
|
71
|
+
# An infinite recursion error
|
|
65
72
|
class MutualInclusionError < MacroError; end
|
|
66
73
|
|
|
67
74
|
# The current version of Glyph
|
|
68
|
-
VERSION =
|
|
69
|
-
|
|
70
|
-
# All the currently-loaded snippets
|
|
71
|
-
SNIPPETS = {}
|
|
75
|
+
VERSION = "0.5.0"
|
|
72
76
|
|
|
73
77
|
# All the currently-loaded macros
|
|
74
78
|
MACROS = {}
|
|
75
79
|
|
|
80
|
+
# All the currently-loaded macro representations
|
|
81
|
+
REPS = {}
|
|
82
|
+
|
|
76
83
|
# All macro aliases
|
|
77
84
|
ALIASES = {:by_alias => {}, :by_def => {}}
|
|
78
85
|
|
|
@@ -110,10 +117,13 @@ module Glyph
|
|
|
110
117
|
CONFIG = Glyph::Config.new :resettable => true, :mutable => false
|
|
111
118
|
|
|
112
119
|
home_dir = Pathname.new(RUBY_PLATFORM.match(/win32|mingw/) ? ENV['HOMEPATH'] : ENV['HOME'])
|
|
120
|
+
# System configuration
|
|
113
121
|
SYSTEM_CONFIG =
|
|
114
122
|
Glyph::Config.new(:file => HOME/'config.yml')
|
|
123
|
+
# Global configuration
|
|
115
124
|
GLOBAL_CONFIG =
|
|
116
125
|
Glyph.test? ? Glyph::Config.new(:file => SPEC_DIR/'.glyphrc') : Glyph::Config.new(:file => home_dir/'.glyphrc')
|
|
126
|
+
# Project configuration
|
|
117
127
|
PROJECT_CONFIG =
|
|
118
128
|
Glyph::Config.new(:file => PROJECT/'config.yml', :resettable => true) rescue Glyph::Config.new(:resettable => true, :mutable => true)
|
|
119
129
|
|
|
@@ -168,7 +178,7 @@ module Glyph
|
|
|
168
178
|
self.enable_all
|
|
169
179
|
self.config_reset
|
|
170
180
|
MACROS.clear
|
|
171
|
-
|
|
181
|
+
REPS.clear
|
|
172
182
|
end
|
|
173
183
|
|
|
174
184
|
# Reenables all Glyph Rake tasks
|
|
@@ -203,11 +213,34 @@ module Glyph
|
|
|
203
213
|
MACROS[name.to_sym] = block
|
|
204
214
|
end
|
|
205
215
|
|
|
206
|
-
|
|
207
|
-
#
|
|
216
|
+
# Defines a new macro representation
|
|
217
|
+
# @since 0.5.0
|
|
218
|
+
# @param [Symbol, String] name the name of the macro
|
|
219
|
+
def self.rep(name, &block)
|
|
220
|
+
REPS[name.to_sym] = block
|
|
221
|
+
# Mirror aliases as well
|
|
222
|
+
ALIASES[:by_def][name.to_sym].to_a.each { |a| REPS[a] = block }
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
# Loads macro representations for a given output
|
|
226
|
+
# @since 0.5.0
|
|
227
|
+
# @param [Symbol, String] output a valid output format
|
|
228
|
+
def self.reps_for(output)
|
|
229
|
+
Glyph.instance_eval file_load(Glyph::HOME/"macros/reps/#{output}.rb") rescue nil
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# Loads project macro representations for a given output
|
|
233
|
+
# @since 0.5.0
|
|
234
|
+
# @param [Symbol, String] output a valid output format
|
|
235
|
+
def self.project_reps_for(output)
|
|
236
|
+
Glyph.instance_eval file_load(Glyph::PROJECT/"lib/macros/reps/#{output}.rb") rescue nil
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
#@since 0.5.0
|
|
240
|
+
# Defines a new macro in Glyph code.
|
|
208
241
|
# @param [Symbol, String] name the name of the macro
|
|
209
242
|
# @param [String] text the Glyph code used to define the macro
|
|
210
|
-
def self.
|
|
243
|
+
def self.define(name, text)
|
|
211
244
|
macro name do
|
|
212
245
|
body = text.dup
|
|
213
246
|
# Parameters
|
|
@@ -283,7 +316,6 @@ module Glyph
|
|
|
283
316
|
result
|
|
284
317
|
end
|
|
285
318
|
|
|
286
|
-
|
|
287
319
|
end
|
|
288
320
|
|
|
289
321
|
Glyph.setup
|
data/lib/glyph/analyzer.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
1
3
|
module Glyph
|
|
2
4
|
|
|
3
5
|
# @since 0.4.0
|
|
@@ -186,7 +188,8 @@ module Glyph
|
|
|
186
188
|
def stats_snippets
|
|
187
189
|
c = @stats[:snippets] = {}
|
|
188
190
|
snippets = {}
|
|
189
|
-
c[:definitions] =
|
|
191
|
+
c[:definitions] = @doc.snippets.keys.sort
|
|
192
|
+
c[:values] = @doc.snippets
|
|
190
193
|
c[:used] = []
|
|
191
194
|
c[:unused] = []
|
|
192
195
|
c[:total] = 0
|
|
@@ -204,7 +207,7 @@ module Glyph
|
|
|
204
207
|
def stats_snippet(name)
|
|
205
208
|
name = name.to_sym
|
|
206
209
|
snippets = {}
|
|
207
|
-
raise ArgumentError, "Snippet '#{name}' does not exist" unless
|
|
210
|
+
raise ArgumentError, "Snippet '#{name}' does not exist" unless @doc.snippet? name
|
|
208
211
|
with_macros(:snippet) do |n|
|
|
209
212
|
code = n.parameters[0].to_s.to_sym
|
|
210
213
|
if code == name then
|
data/lib/glyph/bookmark.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
1
3
|
module Glyph
|
|
2
4
|
|
|
3
5
|
# @since 0.4.0
|
|
@@ -31,7 +33,7 @@ module Glyph
|
|
|
31
33
|
|
|
32
34
|
# Returns true if the two bookmarks have the same ID and file
|
|
33
35
|
# @param [Glyph::Bookmark] b the bookmark to compare
|
|
34
|
-
# @
|
|
36
|
+
# @raise [RuntimeError] if the parameter supplied is not a bookmark
|
|
35
37
|
def ==(b)
|
|
36
38
|
raise RuntimeError, "#{b.inspect} is not a bookmark" unless b.is_a? Glyph::Bookmark
|
|
37
39
|
self.code == b.code && self.file == b.file
|
data/lib/glyph/commands.rb
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
# encoding: utf-8
|
|
2
2
|
|
|
3
|
+
include GLI
|
|
3
4
|
|
|
4
5
|
GLI.desc "Enable debugging"
|
|
5
6
|
switch [:d, :debug]
|
|
6
7
|
|
|
8
|
+
GLI.desc "Prints the version of the program"
|
|
9
|
+
switch [:v, :version]
|
|
10
|
+
|
|
7
11
|
require Glyph::LIB/'commands/init'
|
|
8
12
|
require Glyph::LIB/'commands/add'
|
|
9
13
|
require Glyph::LIB/'commands/compile'
|
|
@@ -17,17 +21,16 @@ Glyph.run 'load:commands'
|
|
|
17
21
|
|
|
18
22
|
pre do |global,command,options,args|
|
|
19
23
|
# Pre logic here
|
|
20
|
-
# Return true to proceed; false to
|
|
24
|
+
# Return true to proceed; false to abort and not call the
|
|
21
25
|
# chosen command
|
|
22
26
|
if global[:d] then
|
|
23
27
|
Glyph.debug_mode = true
|
|
24
28
|
end
|
|
25
|
-
if !command || command.name == :help then
|
|
26
|
-
puts "====================================="
|
|
29
|
+
if global[:v] || !command || command.name == :help then
|
|
27
30
|
puts "Glyph v#{Glyph::VERSION}"
|
|
28
|
-
|
|
31
|
+
puts
|
|
29
32
|
end
|
|
30
|
-
true
|
|
33
|
+
global[:v] ? false : true
|
|
31
34
|
end
|
|
32
35
|
|
|
33
36
|
post do |global,command,options,args|
|
|
@@ -38,10 +41,9 @@ on_error do |exception|
|
|
|
38
41
|
raise if Glyph.library?
|
|
39
42
|
if exception.is_a? Glyph::MacroError then
|
|
40
43
|
exception.display
|
|
41
|
-
false
|
|
42
44
|
else
|
|
45
|
+
Glyph.warning exception.message
|
|
43
46
|
if Glyph.debug? then
|
|
44
|
-
Glyph.warning exception.message
|
|
45
47
|
puts "\n"+"-"*20+"[ Backtrace: ]"+"-"*20
|
|
46
48
|
puts "Backtrace:"
|
|
47
49
|
exception.backtrace.each do |b|
|
|
@@ -49,6 +51,6 @@ on_error do |exception|
|
|
|
49
51
|
end
|
|
50
52
|
Glyph.debug_mode = false
|
|
51
53
|
end
|
|
52
|
-
true
|
|
53
54
|
end
|
|
55
|
+
false
|
|
54
56
|
end
|
data/lib/glyph/commands/add.rb
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
1
3
|
GLI.desc 'Add a new text file to the project'
|
|
2
4
|
arg_name "file_name"
|
|
3
5
|
command :add do |c|
|
|
4
6
|
c.action do |global_options,options,args|
|
|
5
|
-
|
|
7
|
+
exit_now! "Please specify a file name.", -20 if args.blank?
|
|
6
8
|
Glyph.run 'project:add', args[0]
|
|
7
9
|
end
|
|
8
10
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
1
3
|
GLI.desc 'Compile the project'
|
|
2
4
|
arg_name "[source_file] [destination_file]"
|
|
3
5
|
command :compile do |c|
|
|
@@ -8,7 +10,7 @@ command :compile do |c|
|
|
|
8
10
|
c.desc "Auto-regenerate output on file changes"
|
|
9
11
|
c.switch [:a, :auto]
|
|
10
12
|
c.action do |global_options, options, args|
|
|
11
|
-
|
|
13
|
+
exit_now! "Too many arguments", -12 if args.length > 2
|
|
12
14
|
Glyph.lite_mode = true unless args.blank?
|
|
13
15
|
Glyph.run! 'load:config'
|
|
14
16
|
original_config = Glyph::CONFIG.dup
|
|
@@ -18,14 +20,15 @@ command :compile do |c|
|
|
|
18
20
|
target = Glyph['document.output']
|
|
19
21
|
target = nil if target.blank?
|
|
20
22
|
target ||= Glyph["output.#{Glyph['document.output']}.filter_target"]
|
|
23
|
+
through = Glyph["output.#{target}.through"]
|
|
21
24
|
Glyph['document.source'] = options[:s] if options[:s]
|
|
22
25
|
if Glyph.multiple_output_files? then
|
|
23
26
|
Glyph["output.#{Glyph['document.output']}.base"] = Glyph::PROJECT/"output/#{Glyph['document.output']}/".to_s if Glyph["output.#{Glyph['document.output']}.base"].blank?
|
|
24
27
|
else
|
|
25
28
|
Glyph["output.#{Glyph['document.output']}.base"] = ""
|
|
26
29
|
end
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
exit_now! "Output target not specified", -30 unless target
|
|
31
|
+
exit_now! "Unknown output target '#{target}'", -31 unless output_targets.include? target.to_sym
|
|
29
32
|
|
|
30
33
|
# Lite mode
|
|
31
34
|
if Glyph.lite? then
|
|
@@ -35,15 +38,15 @@ command :compile do |c|
|
|
|
35
38
|
src_extension = Regexp.escape(source_file.extname)
|
|
36
39
|
dst_extension = "."+Glyph['document.output']
|
|
37
40
|
destination_file ||= Pathname.new(source_file.to_s.gsub(/#{src_extension}$/, dst_extension))
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
exit_now! "Source file '#{source_file}' does not exist", -32 unless source_file.exist?
|
|
42
|
+
exit_now! "Source and destination file are the same", -33 if source_file.to_s == destination_file.to_s
|
|
40
43
|
Glyph['document.filename'] = filename
|
|
41
44
|
Glyph['document.source'] = source_file.to_s
|
|
42
45
|
Glyph['document.output_dir'] = destination_file.parent.to_s # System use only
|
|
43
46
|
Glyph['document.output_file'] = destination_file.basename.to_s # System use only
|
|
44
47
|
end
|
|
45
48
|
begin
|
|
46
|
-
Glyph.run "generate:#{target}"
|
|
49
|
+
Glyph.run "generate:#{target}#{through ? "_through_#{through}" : ""}"
|
|
47
50
|
rescue Exception => e
|
|
48
51
|
message = e.message
|
|
49
52
|
if Glyph.debug? then
|
|
@@ -61,7 +64,7 @@ command :compile do |c|
|
|
|
61
64
|
begin
|
|
62
65
|
require 'directory_watcher'
|
|
63
66
|
rescue LoadError
|
|
64
|
-
|
|
67
|
+
exit_now! "DirectoryWatcher is not available. Install it with: gem install directory_watcher", -34
|
|
65
68
|
end
|
|
66
69
|
Glyph.info 'Auto-regeneration enabled'
|
|
67
70
|
Glyph.info 'Use ^C to interrupt'
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
1
3
|
GLI.desc 'Get/set configuration settings'
|
|
2
4
|
arg_name "setting [new_value]"
|
|
3
5
|
command :config do |c|
|
|
4
|
-
c.desc "Save to global configuration"
|
|
6
|
+
c.desc "Read from/Save to global configuration"
|
|
5
7
|
c.switch [:g, :global]
|
|
6
8
|
c.action do |global_options,options,args|
|
|
7
9
|
Glyph.run 'load:config'
|
|
@@ -12,14 +14,14 @@ command :config do |c|
|
|
|
12
14
|
end
|
|
13
15
|
case args.length
|
|
14
16
|
when 0 then
|
|
15
|
-
|
|
17
|
+
exit_now! "Too few arguments.", -10
|
|
16
18
|
when 1 then # read current config
|
|
17
19
|
setting = Glyph[args[0]]
|
|
18
|
-
|
|
20
|
+
exit_now! "Unknown setting '#{args[0]}'", -11 if setting == nil
|
|
19
21
|
Glyph.info setting.inspect
|
|
20
22
|
when 2 then
|
|
21
23
|
if args[0].match /^system\..+/ then
|
|
22
|
-
|
|
24
|
+
exit_now! "Cannot reset '#@value' setting (system use only).", -11
|
|
23
25
|
else
|
|
24
26
|
# Remove all overrides
|
|
25
27
|
Glyph.config_reset
|
|
@@ -32,7 +34,7 @@ command :config do |c|
|
|
|
32
34
|
Glyph.config_refresh
|
|
33
35
|
end
|
|
34
36
|
else
|
|
35
|
-
|
|
37
|
+
exit_now! "Too many arguments.", -12
|
|
36
38
|
end
|
|
37
39
|
end
|
|
38
40
|
end
|
data/lib/glyph/commands/init.rb
CHANGED
data/lib/glyph/commands/stats.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
1
3
|
GLI.desc 'Display statistics'
|
|
2
4
|
command :stats do |c|
|
|
3
5
|
c.desc "Display stats about macros"
|
|
@@ -32,6 +34,7 @@ command :stats do |c|
|
|
|
32
34
|
no_flags = true
|
|
33
35
|
[:macro, :bookmark, :link, :snippet].each do |f|
|
|
34
36
|
if options[f] then
|
|
37
|
+
analyzer.stats_for :snippets if f == :snippet
|
|
35
38
|
analyzer.stats_for f, options[f]
|
|
36
39
|
no_flags = false
|
|
37
40
|
end
|
data/lib/glyph/commands/todo.rb
CHANGED
data/lib/glyph/config.rb
CHANGED
data/lib/glyph/document.rb
CHANGED
|
@@ -9,9 +9,11 @@ module Glyph
|
|
|
9
9
|
# as well as replacing placeholders.
|
|
10
10
|
class Document
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
# A Regexp containing the characters to escape
|
|
13
|
+
ESCAPES = /\\([\\\]\[\|\/=])/
|
|
13
14
|
|
|
14
|
-
attr_reader :bookmarks, :placeholders, :headers, :styles, :context
|
|
15
|
+
attr_reader :bookmarks, :placeholders, :headers, :styles, :context
|
|
16
|
+
attr_reader :errors, :todos, :topics, :links, :toc, :fragments, :snippets
|
|
15
17
|
|
|
16
18
|
# Creates a new document
|
|
17
19
|
# @param [GlyphSyntaxNode] tree the syntax tree to be evaluate
|
|
@@ -24,6 +26,8 @@ module Glyph
|
|
|
24
26
|
@placeholders = {}
|
|
25
27
|
@bookmarks = {}
|
|
26
28
|
@headers = {}
|
|
29
|
+
@snippets = {}
|
|
30
|
+
@fragments = {}
|
|
27
31
|
@styles = []
|
|
28
32
|
@errors = []
|
|
29
33
|
@todos = []
|
|
@@ -49,12 +53,14 @@ module Glyph
|
|
|
49
53
|
def inherit_from(document, data={})
|
|
50
54
|
@bookmarks = document.bookmarks unless data[:bookmarks] == false
|
|
51
55
|
@headers = document.headers unless data[:headers] == false
|
|
56
|
+
@snippets = document.snippets unless data[:snippets] == false
|
|
52
57
|
@todos = document.todos unless data[:todos] == false
|
|
53
58
|
@styles = document.styles unless data[:styles] == false
|
|
54
59
|
@topics = document.topics unless data[:topics] == false
|
|
55
60
|
@placeholders = document.placeholders unless data[:placeholders] == false
|
|
56
61
|
@toc = document.toc unless data[:toc] == false
|
|
57
|
-
@links = document.links unless data[:links] ==
|
|
62
|
+
@links = document.links unless data[:links] == false
|
|
63
|
+
@fragments = document.fragments unless data[:fragments] == false
|
|
58
64
|
self
|
|
59
65
|
end
|
|
60
66
|
|
|
@@ -75,7 +81,8 @@ module Glyph
|
|
|
75
81
|
end
|
|
76
82
|
|
|
77
83
|
# Stores a new bookmark
|
|
78
|
-
# @param [Hash] hash the bookmark hash
|
|
84
|
+
# @param [Hash] hash the bookmark hash
|
|
85
|
+
# @example {:id => "BookmarkID", :title => "Bookmark Title", :file => "dir/preface.glyph"}
|
|
79
86
|
# @return [Glyph::Bookmark] the stored bookmark
|
|
80
87
|
# @raise [RuntimeError] if the bookmark is already defined.
|
|
81
88
|
def bookmark(hash)
|
|
@@ -86,7 +93,8 @@ module Glyph
|
|
|
86
93
|
end
|
|
87
94
|
|
|
88
95
|
# Stores a new header
|
|
89
|
-
# @param [Hash] hash the header hash
|
|
96
|
+
# @param [Hash] hash the header hash
|
|
97
|
+
# @example {:id => "Bookmark_ID", :title => "Bookmark Title", :level => 3}
|
|
90
98
|
# @return [Glyph::Header] the stored header
|
|
91
99
|
# @raise [RuntimeError] if the bookmark is already defined.
|
|
92
100
|
def header(hash)
|
|
@@ -104,10 +112,27 @@ module Glyph
|
|
|
104
112
|
@headers[key.to_sym]
|
|
105
113
|
end
|
|
106
114
|
|
|
115
|
+
# Stores a new snippet
|
|
116
|
+
# @param [Symbol, String] key the snippet identifier
|
|
117
|
+
# @param [string] value the snippet contents
|
|
118
|
+
# @return [String] the stored snippet
|
|
119
|
+
# @since 0.5.0
|
|
120
|
+
def snippet(key, value)
|
|
121
|
+
@snippets[key.to_sym] = value
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Returns a stored snippet or nil
|
|
125
|
+
# @param [String, Symbol] key the snippet identifier
|
|
126
|
+
# @return [String, nil] the snippet contents or nil if no snippet is found
|
|
127
|
+
# @since 0.5.0
|
|
128
|
+
def snippet?(key)
|
|
129
|
+
@snippets[key.to_sym]
|
|
130
|
+
end
|
|
131
|
+
|
|
107
132
|
# @since 0.4.0
|
|
108
133
|
# Stores a stylesheet
|
|
109
134
|
# @param [String] file the stylesheet file
|
|
110
|
-
# @
|
|
135
|
+
# @raise [RuntimeError] if the stylesheet is already specified for the document (unless the output has more than one file)
|
|
111
136
|
def style(file)
|
|
112
137
|
f = Pathname.new file
|
|
113
138
|
if @styles.include?(f) && !Glyph.multiple_output_files? then
|
|
@@ -152,10 +177,10 @@ module Glyph
|
|
|
152
177
|
end
|
|
153
178
|
end
|
|
154
179
|
# Substitute escape sequences
|
|
155
|
-
@output.gsub!(ESCAPES) { |match| ($1 == '
|
|
156
|
-
toc[:contents].gsub!(ESCAPES) { |match| ($1 == '
|
|
180
|
+
@output.gsub!(ESCAPES) { |match| ($1 == '/') ? '' : $1 }
|
|
181
|
+
toc[:contents].gsub!(ESCAPES) { |match| ($1 == '/') ? '' : $1 } rescue nil
|
|
157
182
|
@topics.each do |t|
|
|
158
|
-
t[:contents].gsub!(ESCAPES) { |match| ($1 == '
|
|
183
|
+
t[:contents].gsub!(ESCAPES) { |match| ($1 == '/') ? '' : $1 }
|
|
159
184
|
end
|
|
160
185
|
@state = :finalized
|
|
161
186
|
end
|