glyph 0.1.0 → 0.2.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 (97) hide show
  1. data/AUTHORS.textile +8 -0
  2. data/CHANGELOG.textile +260 -0
  3. data/LICENSE.textile +26 -0
  4. data/README.textile +49 -21
  5. data/Rakefile +17 -7
  6. data/VERSION +1 -1
  7. data/book/config.yml +11 -5
  8. data/book/document.glyph +24 -13
  9. data/book/lib/macros/reference.rb +41 -14
  10. data/book/output/html/glyph.html +2298 -687
  11. data/book/output/pdf/glyph.pdf +6218 -2698
  12. data/book/script/authors +1 -0
  13. data/book/script/changelog +1 -0
  14. data/book/script/compile.rb +8 -0
  15. data/book/script/license +1 -0
  16. data/book/script/prof +1 -0
  17. data/book/script/prof_results.htm +21079 -0
  18. data/book/script/readme +1 -0
  19. data/book/snippets.yml +3 -4
  20. data/book/text/acknowledgement.glyph +8 -0
  21. data/book/text/authoring.glyph +548 -0
  22. data/book/text/changelog.glyph +76 -0
  23. data/book/text/extending.glyph +224 -0
  24. data/book/text/{getting_started.textile → getting_started.glyph} +30 -24
  25. data/book/text/{introduction.textile → introduction.glyph} +22 -12
  26. data/book/text/license.glyph +21 -0
  27. data/book/text/{ref_commands.textile → ref_commands.glyph} +30 -8
  28. data/book/text/ref_config.glyph +108 -0
  29. data/book/text/ref_macros.glyph +378 -0
  30. data/book/text/troubleshooting.glyph +179 -0
  31. data/config.yml +16 -4
  32. data/glyph.gemspec +83 -22
  33. data/lib/glyph.rb +164 -31
  34. data/lib/glyph/commands.rb +98 -23
  35. data/lib/glyph/document.rb +13 -7
  36. data/lib/glyph/glyph_language.rb +9 -1
  37. data/lib/glyph/glyph_language.treetop +1 -1
  38. data/lib/glyph/interpreter.rb +19 -9
  39. data/lib/glyph/macro.rb +88 -11
  40. data/lib/glyph/macro_validators.rb +48 -0
  41. data/lib/glyph/node.rb +13 -1
  42. data/lib/glyph/system_extensions.rb +0 -28
  43. data/macros/common.rb +125 -31
  44. data/macros/filters.rb +19 -13
  45. data/macros/html/block.rb +119 -68
  46. data/macros/html/inline.rb +29 -3
  47. data/macros/html/structure.rb +40 -40
  48. data/spec/files/article.glyph +5 -0
  49. data/spec/lib/commands_spec.rb +98 -3
  50. data/spec/lib/document_spec.rb +15 -2
  51. data/spec/lib/glyph_spec.rb +39 -10
  52. data/spec/lib/interpreter_spec.rb +8 -2
  53. data/spec/lib/macro_spec.rb +54 -6
  54. data/spec/lib/macro_validators_spec.rb +33 -0
  55. data/spec/lib/node_spec.rb +11 -3
  56. data/spec/macros/filters_spec.rb +5 -5
  57. data/spec/macros/macros_spec.rb +185 -8
  58. data/spec/macros/textile_spec.rb +217 -0
  59. data/spec/spec_helper.rb +25 -15
  60. data/spec/tasks/generate_spec.rb +3 -3
  61. data/spec/tasks/load_spec.rb +11 -1
  62. data/spec/tasks/project_spec.rb +0 -3
  63. data/styles/coderay.css +121 -0
  64. data/styles/default.css +54 -20
  65. data/{book/styles/css3.css → styles/pagination.css} +35 -7
  66. data/styles/ultraviolet/active4d.css +114 -0
  67. data/styles/ultraviolet/all_hallows_eve.css +72 -0
  68. data/styles/ultraviolet/amy.css +147 -0
  69. data/styles/ultraviolet/blackboard.css +88 -0
  70. data/styles/ultraviolet/brilliance_black.css +605 -0
  71. data/styles/ultraviolet/brilliance_dull.css +599 -0
  72. data/styles/ultraviolet/cobalt.css +149 -0
  73. data/styles/ultraviolet/dawn.css +121 -0
  74. data/styles/ultraviolet/eiffel.css +121 -0
  75. data/styles/ultraviolet/espresso_libre.css +109 -0
  76. data/styles/ultraviolet/idle.css +62 -0
  77. data/styles/ultraviolet/iplastic.css +80 -0
  78. data/styles/ultraviolet/lazy.css +73 -0
  79. data/styles/ultraviolet/mac_classic.css +123 -0
  80. data/styles/ultraviolet/magicwb_amiga.css +104 -0
  81. data/styles/ultraviolet/pastels_on_dark.css +188 -0
  82. data/styles/ultraviolet/slush_poppies.css +85 -0
  83. data/styles/ultraviolet/spacecadet.css +51 -0
  84. data/styles/ultraviolet/sunburst.css +180 -0
  85. data/styles/ultraviolet/twilight.css +137 -0
  86. data/styles/ultraviolet/zenburnesque.css +91 -0
  87. data/tasks/generate.rake +45 -26
  88. data/tasks/load.rake +21 -18
  89. data/tasks/project.rake +3 -1
  90. metadata +210 -41
  91. data/book/styles/default.css +0 -190
  92. data/book/text/authoring.textile +0 -351
  93. data/book/text/extending.textile +0 -148
  94. data/book/text/ref_config.textile +0 -0
  95. data/book/text/ref_macros.textile +0 -256
  96. data/book/text/troubleshooting.textile +0 -118
  97. data/styles/css3.css +0 -220
@@ -0,0 +1,179 @@
1
+ This chapter lists the most common error messages that can be returned when running a Glyph command. It does not aim to be an exhaustive list, especially if you =>[#extending|extended] Glyph by creating your own macros or you're embedding Ruby code using the %>[ruby] macro.
2
+
3
+ tip[As a general rule, more diagnostic information is provided if Glyph is run in =>[#debug_switch|debug mode].]
4
+
5
+ section[header[Generic Errors]
6
+
7
+ error_table[
8
+ ref_error[Incorrect macro syntax|
9
+ This error is returned if the parsing of the document (or one of its included files) failed. In 99% of the cases, this means there is an extra or missing macro delimiter somewhere.
10
+ ]
11
+ ref_error[Invalid alias: macro '_macro-name_' already exists|
12
+ The alias name supplied to the @macro_alias@ method has already been used for another macro or alias.
13
+ ]
14
+ ref_error[Undefined macro '_macro-name_'|
15
+ The document contains a macro that does not exist, i.e. it is not a standard or used-defined =>[#macro_ref|Glyph macro or alias].
16
+ ]
17
+ ref_error[An error occurred when generating _file-name_.pdf|
18
+ Returned if Prince could not generate the PDF file or if Prince is not installed. Normally, Prince provides additional details on the specific error(s).
19
+ ]
20
+ ref_error[Glyph cannot generate PDF. Please specify a valid tools.pdf_generator setting|
21
+ Returned if the $>[tools.pdf_generator] has not be set to a valid PDF renderer. Currently, the only supported value for this setting is @prince@.
22
+ ]
23
+ ref_error[The current directory is not a valid Glyph project|
24
+ Returned if a glyph command was executed outside a valid glyph project directory.
25
+ ]
26
+ ref_error[Invalid snippet file|
27
+ The @snippet.yml@ file contains invalid data. Most likely, it does not evaluate to a Ruby @Hash@.
28
+ ]
29
+ ref_error[Directory '_directory-name_' is not empty|
30
+ Returned when executing the #>[init] in a directory that is not empty.
31
+ ]
32
+ ref_error[File '_file-name_' already exists|
33
+ Returned if the name of an existing file was specified as a parameter for the #>[add].
34
+ ]
35
+ ]
36
+ ] --[End Generic Errors]
37
+
38
+
39
+
40
+ section[header[Command Errors]
41
+
42
+ error_table[
43
+
44
+ ref_error[Source file '_source-file_' does not exist|
45
+ Returned if Glyph is running in =>[#lite_mode|lite mode] and the specified source file was not found.
46
+ ]
47
+
48
+ ref_error[Source and destination file are the same|
49
+ Returned if Glyph is running in =>[#lite_mode|lite mode] and you specified the same source and destination files.
50
+ ]
51
+
52
+ ref_error[DirectoryWatcher is not available. Install it with: gem install directory_watcher|
53
+ Returned if =>[#auto_regeneration|auto regeneration] is enabled but the @directory_watcher@ gem in not installed.
54
+ ]
55
+
56
+ ref_error[Document cannot be finalized due to previous errors|
57
+ Returned if one or more errors occurred in the document prevented finalization.
58
+ ]
59
+
60
+ ref_error[Please specify a file name|
61
+ No file name was specified for the #>[add].
62
+ ]
63
+
64
+ ref_error[Output target not specified|
65
+ Returned if no target was specified for the #>[compile] _and_ if the $>[document.output] is not set.
66
+ ]
67
+
68
+ ref_error[Unknown output target '_target-name_'|
69
+ An unsupported output target was specified for the #>[compile]. Only the following output targets are supported:
70
+ - @html@
71
+ - @pdf@
72
+ ]
73
+
74
+ ref_error[Too few/too many arguments|
75
+ Returned if the #>[config] was used with no arguments or more than two arguments respectively.
76
+ ]
77
+
78
+ ref_error[Unknown setting '_setting-name_'|
79
+ The name of an unknown setting was specified for the #>[config].
80
+ ]
81
+ ]
82
+ ] --[End Command Errors]
83
+
84
+
85
+
86
+ section[header[Macro Errors]
87
+
88
+ The following errors are displayed in the form:
89
+
90
+ _message_
91
+ -> source: _macro-source_
92
+ -> path: _macro-path_
93
+ -> value: _macro-value_
94
+
95
+ Where:
96
+ * _message_ is the error message.
97
+ * _macro-source_ is the file or snippet where the error occurred.
98
+ * _macro-path_ is the full path to the macro that returned the error, within the document syntax tree, e.g. @document/body/bodymatter/chapter/section/header/&@ if the error occurrent in a snippet within the header of a section in the @bodymatter@ part of the document.
99
+ * _macro-value_ is the value of the macro (shown only if Glyph is running in =>[#debug_switch|debug mode]).
100
+
101
+ error_table[
102
+
103
+ ref_error[Macro '_name_' takes up to _x_ parameter(s) (_y_ given)|
104
+ Returned if the macro was called with extra parameters.
105
+ ]
106
+
107
+ ref_error[Macro '_name_' takes at least _x_ parameter(s) (_y_ given)|
108
+ Returned if the macro was called with fewer parameters than expected.
109
+ ]
110
+
111
+ ref_error[Macro '_name_' takes exactly _x_ parameter(s) (_y_ given)|
112
+ Returned if the macro was called with a different number of parameters than.
113
+ ]
114
+
115
+ ref_error[Macro not available when compiling a single file.|
116
+ Returned by the %>[include] if used in =>[#lite_mode|lite mode].
117
+ ]
118
+
119
+ ref_error[Filter macro '_extension_' not available|
120
+ Returned by a filter macro if $>[filters.by_file_extension] is set to @true@, but the extension was not recognized.
121
+ ]
122
+
123
+ ref_error[Invalid regular expression: _regexp_|
124
+ Returned by the %>[match] macro if an invalid regular expression was supplied.
125
+ ]
126
+
127
+ ref_error[Macro '_name_' takes no parameters (_x_ given)|
128
+ Returned if the macro was called with parameters but none are requested.
129
+ ]
130
+
131
+ ref_error[No highlighter installed. Please run: gem install coderay|
132
+ Returned by the %>[highlight] macro if no highlighters are installed.
133
+ ]
134
+
135
+ ref_error[CodeRay highlighter not installed. Please run: gem install coderay|
136
+ Returned by the %>[highlight] macro if $>[highlighters.current] is set to @coderay@ but &[coderay] is not installed.
137
+ ]
138
+
139
+ ref_error[UltraViolet highlighter not installed. Please run: gem install ultraviolet|
140
+ Returned by the %>[highlight] macro if $>[highlighters.current] is set to @ultraviolet@ but &[uv] is not installed.
141
+ ]
142
+
143
+ ref_error[Mutual inclusion|
144
+ Returned if a catch-22 situation occurs with macro inclusion, for example if the body of a snippet includes a reference to the same snippet.
145
+ ]
146
+ ref_error[Snippet '_snippet-id_' does not exist|
147
+ Returned by the %>[snippet] if an invalid snippet was supplied.
148
+ ]
149
+ ref_error[File '_file-name_' not found|
150
+ Returned by the %>[include] if an invalid file was supplied.
151
+ ]
152
+ ref_error[Filter macro '_macro-name_' not found|
153
+ Returned by the %>[include] macro if the $>[filters.by_file_extension] is set to @true@ but the file extension of the included file is not recognized as a filter macro.
154
+ ]
155
+ ref_error[RedCloth gem not installed. Please run: gem insall RedCloth|
156
+ Returned by the %>[textile] if the RedCloth gem is not installed.
157
+ ]
158
+ ref_error[No MarkDown converter installed. Please run: gem insall bluecloth|
159
+ Returned by the %>[markdown] if no valid Markdown converter gem is installed.
160
+
161
+ Glyph checks for: BlueCloth, Maruku, Kramdown and RDiscount.
162
+ ]
163
+ ref_error[Image/Figure not found|
164
+ Retured by the %>[img] or the %>[fig] respectively, if the specified image file could not be found within the @images/@ folder.
165
+ ]
166
+ ref_error[Bookmark '_bookmark-name_' already exists|
167
+ Returned by the %>[anchor] or by the %>[header] if the anchor ID supplied as parameter has already been used in the document.
168
+ ]
169
+ ref_error[Bookmark '_bookmark-name_' already exists|
170
+ Returned by the %>[link] if the anchor ID supplied as parameter has not been used in the document.
171
+ ]
172
+ ref_error[Stylesheet '_file-name_' not found|
173
+ Returned by the %>[style] if the @.css@ or @.sass@ file supplied as parameter was not found in the @styles/@ directory.
174
+ ]
175
+ ref_error[Haml is not installed. Please run: gem install haml|
176
+ Returned by the %>[style] if a @.sass@ file was passed as parameter but the Haml gem is not installed.
177
+ ]
178
+ ]
179
+ ] --[End Macro Errors]
data/config.yml CHANGED
@@ -2,8 +2,10 @@
2
2
  :source: 'document.glyph'
3
3
  :author: ""
4
4
  :title: ""
5
+ :subtitle: ""
5
6
  :filename: ""
6
- :output: ""
7
+ :draft: false
8
+ :output: 'html'
7
9
  :output_targets: [:html, :pdf]
8
10
  :structure:
9
11
  :hidden:
@@ -14,9 +16,7 @@
14
16
  - :colophon
15
17
  - :promotion
16
18
  :special:
17
- - :preface
18
19
  - :foreword
19
- - :introduction
20
20
  - :acknowledgement
21
21
  - :prologue
22
22
  - :epilogue
@@ -55,9 +55,21 @@
55
55
  - :index
56
56
  - :lot
57
57
  - :lof
58
- :pdf_renderer: 'prince'
58
+ :tools:
59
+ :pdf_generator: 'prince'
60
+ :highlighters:
61
+ :target: 'html'
62
+ :current: 'coderay'
63
+ :coderay:
64
+ # See options at http://coderay.rubychan.de/doc/classes/CodeRay/Encoders/HTML.html
65
+ :css: :class
66
+ :ultraviolet:
67
+ :line_numbers: false
68
+ :theme: 'blackboard'
59
69
  :filters:
60
70
  :by_file_extension: true
61
71
  :target: 'html'
72
+ :markdown:
73
+ :converter: 'bluecloth'
62
74
  :redcloth:
63
75
  :restrictions: []
data/glyph.gemspec CHANGED
@@ -5,20 +5,24 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{glyph}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Fabio Cevasco"]
12
- s.date = %q{2010-04-09}
12
+ s.date = %q{2010-05-09}
13
13
  s.default_executable = %q{glyph}
14
14
  s.description = %q{Glyph is a framework for structured document authoring.}
15
15
  s.email = %q{h3rald@h3rald.com}
16
16
  s.executables = ["glyph"]
17
17
  s.extra_rdoc_files = [
18
- "README.textile"
18
+ "LICENSE.textile",
19
+ "README.textile"
19
20
  ]
20
21
  s.files = [
21
- "README.textile",
22
+ "AUTHORS.textile",
23
+ "CHANGELOG.textile",
24
+ "LICENSE.textile",
25
+ "README.textile",
22
26
  "Rakefile",
23
27
  "VERSION",
24
28
  "bin/glyph",
@@ -31,17 +35,25 @@ Gem::Specification.new do |s|
31
35
  "book/output/html/images/glyph.png",
32
36
  "book/output/html/images/glyph.svg",
33
37
  "book/output/pdf/glyph.pdf",
38
+ "book/script/authors",
39
+ "book/script/changelog",
40
+ "book/script/compile.rb",
41
+ "book/script/license",
42
+ "book/script/prof",
43
+ "book/script/prof_results.htm",
44
+ "book/script/readme",
34
45
  "book/snippets.yml",
35
- "book/styles/css3.css",
36
- "book/styles/default.css",
37
- "book/text/authoring.textile",
38
- "book/text/extending.textile",
39
- "book/text/getting_started.textile",
40
- "book/text/introduction.textile",
41
- "book/text/ref_commands.textile",
42
- "book/text/ref_config.textile",
43
- "book/text/ref_macros.textile",
44
- "book/text/troubleshooting.textile",
46
+ "book/text/acknowledgement.glyph",
47
+ "book/text/authoring.glyph",
48
+ "book/text/changelog.glyph",
49
+ "book/text/extending.glyph",
50
+ "book/text/getting_started.glyph",
51
+ "book/text/introduction.glyph",
52
+ "book/text/license.glyph",
53
+ "book/text/ref_commands.glyph",
54
+ "book/text/ref_config.glyph",
55
+ "book/text/ref_macros.glyph",
56
+ "book/text/troubleshooting.glyph",
45
57
  "config.yml",
46
58
  "document.glyph",
47
59
  "glyph.gemspec",
@@ -53,6 +65,7 @@ Gem::Specification.new do |s|
53
65
  "lib/glyph/glyph_language.treetop",
54
66
  "lib/glyph/interpreter.rb",
55
67
  "lib/glyph/macro.rb",
68
+ "lib/glyph/macro_validators.rb",
56
69
  "lib/glyph/node.rb",
57
70
  "lib/glyph/system_extensions.rb",
58
71
  "macros/common.rb",
@@ -60,6 +73,7 @@ Gem::Specification.new do |s|
60
73
  "macros/html/block.rb",
61
74
  "macros/html/inline.rb",
62
75
  "macros/html/structure.rb",
76
+ "spec/files/article.glyph",
63
77
  "spec/files/container.textile",
64
78
  "spec/files/document.glyph",
65
79
  "spec/files/document_with_toc.glyph",
@@ -73,15 +87,39 @@ Gem::Specification.new do |s|
73
87
  "spec/lib/glyph_spec.rb",
74
88
  "spec/lib/interpreter_spec.rb",
75
89
  "spec/lib/macro_spec.rb",
90
+ "spec/lib/macro_validators_spec.rb",
76
91
  "spec/lib/node_spec.rb",
77
92
  "spec/macros/filters_spec.rb",
78
93
  "spec/macros/macros_spec.rb",
94
+ "spec/macros/textile_spec.rb",
79
95
  "spec/spec_helper.rb",
80
96
  "spec/tasks/generate_spec.rb",
81
97
  "spec/tasks/load_spec.rb",
82
98
  "spec/tasks/project_spec.rb",
83
- "styles/css3.css",
99
+ "styles/coderay.css",
84
100
  "styles/default.css",
101
+ "styles/pagination.css",
102
+ "styles/ultraviolet/active4d.css",
103
+ "styles/ultraviolet/all_hallows_eve.css",
104
+ "styles/ultraviolet/amy.css",
105
+ "styles/ultraviolet/blackboard.css",
106
+ "styles/ultraviolet/brilliance_black.css",
107
+ "styles/ultraviolet/brilliance_dull.css",
108
+ "styles/ultraviolet/cobalt.css",
109
+ "styles/ultraviolet/dawn.css",
110
+ "styles/ultraviolet/eiffel.css",
111
+ "styles/ultraviolet/espresso_libre.css",
112
+ "styles/ultraviolet/idle.css",
113
+ "styles/ultraviolet/iplastic.css",
114
+ "styles/ultraviolet/lazy.css",
115
+ "styles/ultraviolet/mac_classic.css",
116
+ "styles/ultraviolet/magicwb_amiga.css",
117
+ "styles/ultraviolet/pastels_on_dark.css",
118
+ "styles/ultraviolet/slush_poppies.css",
119
+ "styles/ultraviolet/spacecadet.css",
120
+ "styles/ultraviolet/sunburst.css",
121
+ "styles/ultraviolet/twilight.css",
122
+ "styles/ultraviolet/zenburnesque.css",
85
123
  "tasks/generate.rake",
86
124
  "tasks/load.rake",
87
125
  "tasks/project.rake"
@@ -89,15 +127,17 @@ Gem::Specification.new do |s|
89
127
  s.homepage = %q{http://www.h3rald.com/glyph/}
90
128
  s.rdoc_options = ["--charset=UTF-8"]
91
129
  s.require_paths = ["lib"]
92
- s.rubygems_version = %q{1.3.5}
130
+ s.rubygems_version = %q{1.3.6}
93
131
  s.summary = %q{Glyph -- A Ruby-powered Document Authoring Framework}
94
132
  s.test_files = [
95
133
  "spec/macros/filters_spec.rb",
134
+ "spec/macros/textile_spec.rb",
96
135
  "spec/macros/macros_spec.rb",
97
136
  "spec/lib/interpreter_spec.rb",
98
137
  "spec/lib/commands_spec.rb",
99
138
  "spec/lib/node_spec.rb",
100
139
  "spec/lib/macro_spec.rb",
140
+ "spec/lib/macro_validators_spec.rb",
101
141
  "spec/lib/config_spec.rb",
102
142
  "spec/lib/glyph_spec.rb",
103
143
  "spec/lib/document_spec.rb",
@@ -116,23 +156,44 @@ Gem::Specification.new do |s|
116
156
  s.add_runtime_dependency(%q<extlib>, [">= 0.9.12"])
117
157
  s.add_runtime_dependency(%q<treetop>, [">= 0.4.3"])
118
158
  s.add_runtime_dependency(%q<rake>, [">= 0.8.7"])
119
- s.add_development_dependency(%q<rspec>, [">= 0"])
120
- s.add_development_dependency(%q<yard>, [">= 0"])
159
+ s.add_development_dependency(%q<rspec>, [">= 1.1.11"])
160
+ s.add_development_dependency(%q<yard>, [">= 1.5.4"])
161
+ s.add_development_dependency(%q<jeweler>, ["= 1.4.0"])
162
+ s.add_development_dependency(%q<directory_watcher>, [">= 1.3.2"])
163
+ s.add_development_dependency(%q<haml>, [">= 2.2.3"])
164
+ s.add_development_dependency(%q<RedCloth>, [">= 4.2.3"])
165
+ s.add_development_dependency(%q<bluecloth>, [">= 2.0.7"])
166
+ s.add_development_dependency(%q<coderay>, [">= 0.9.3"])
167
+ s.add_development_dependency(%q<ruby-prof>, [">= 0.8.1"])
121
168
  else
122
169
  s.add_dependency(%q<gli>, [">= 0.3.1"])
123
170
  s.add_dependency(%q<extlib>, [">= 0.9.12"])
124
171
  s.add_dependency(%q<treetop>, [">= 0.4.3"])
125
172
  s.add_dependency(%q<rake>, [">= 0.8.7"])
126
- s.add_dependency(%q<rspec>, [">= 0"])
127
- s.add_dependency(%q<yard>, [">= 0"])
173
+ s.add_dependency(%q<rspec>, [">= 1.1.11"])
174
+ s.add_dependency(%q<yard>, [">= 1.5.4"])
175
+ s.add_dependency(%q<jeweler>, ["= 1.4.0"])
176
+ s.add_dependency(%q<directory_watcher>, [">= 1.3.2"])
177
+ s.add_dependency(%q<haml>, [">= 2.2.3"])
178
+ s.add_dependency(%q<RedCloth>, [">= 4.2.3"])
179
+ s.add_dependency(%q<bluecloth>, [">= 2.0.7"])
180
+ s.add_dependency(%q<coderay>, [">= 0.9.3"])
181
+ s.add_dependency(%q<ruby-prof>, [">= 0.8.1"])
128
182
  end
129
183
  else
130
184
  s.add_dependency(%q<gli>, [">= 0.3.1"])
131
185
  s.add_dependency(%q<extlib>, [">= 0.9.12"])
132
186
  s.add_dependency(%q<treetop>, [">= 0.4.3"])
133
187
  s.add_dependency(%q<rake>, [">= 0.8.7"])
134
- s.add_dependency(%q<rspec>, [">= 0"])
135
- s.add_dependency(%q<yard>, [">= 0"])
188
+ s.add_dependency(%q<rspec>, [">= 1.1.11"])
189
+ s.add_dependency(%q<yard>, [">= 1.5.4"])
190
+ s.add_dependency(%q<jeweler>, ["= 1.4.0"])
191
+ s.add_dependency(%q<directory_watcher>, [">= 1.3.2"])
192
+ s.add_dependency(%q<haml>, [">= 2.2.3"])
193
+ s.add_dependency(%q<RedCloth>, [">= 4.2.3"])
194
+ s.add_dependency(%q<bluecloth>, [">= 2.0.7"])
195
+ s.add_dependency(%q<coderay>, [">= 0.9.3"])
196
+ s.add_dependency(%q<ruby-prof>, [">= 0.8.1"])
136
197
  end
137
198
  end
138
199
 
data/lib/glyph.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # Copyright (c) 2009-2010 Fabio Cevasco
2
2
  # website: http://www.h3rald.com/glyph
3
- # license: BSD
3
+ # license: MIT
4
4
 
5
5
  require 'rubygems'
6
6
  require 'pathname'
@@ -13,47 +13,76 @@ require 'rake'
13
13
  # Glyph is a Rapid Document Authoring Framework able to produce structured documents effortlessly.
14
14
  module Glyph
15
15
 
16
+ # The directory containing Glyph library files
16
17
  LIB = Pathname(__FILE__).dirname.expand_path/'glyph'
17
18
 
19
+ # The directory containing the full Glyph installation
18
20
  HOME = LIB/'../../'
19
21
 
22
+ # The directory containing all Glyph tests
23
+ SPEC_DIR = Pathname(__FILE__).dirname.expand_path/'../spec'
24
+
25
+ # The directory containing all Glyph Rake tasks
26
+ TASKS_DIR = Pathname(__FILE__).dirname.expand_path/'../tasks'
27
+
20
28
  require LIB/'system_extensions'
21
29
  require LIB/'config'
22
30
  require LIB/'node'
23
31
  require LIB/'document'
24
32
  require LIB/'glyph_language'
33
+ require LIB/'macro_validators'
25
34
  require LIB/'macro'
26
35
  require LIB/'interpreter'
27
36
 
28
- VERSION = file_load HOME/'VERSION'
29
-
30
- SPEC_DIR = Pathname(__FILE__).dirname.expand_path/'../spec'
31
-
32
- TASKS_DIR = Pathname(__FILE__).dirname.expand_path/'../tasks'
37
+ class Error < RuntimeError; end
38
+ class SyntaxError < Error; end
39
+ class MacroError < Error; end
40
+ class MutualInclusionError < MacroError; end
33
41
 
34
- APP = Rake.application
42
+ # The current version of Glyph
43
+ VERSION = file_load(HOME/'VERSION').strip
35
44
 
45
+ # All the currently-loaded snippets
36
46
  SNIPPETS = {}
37
47
 
48
+ # All the currently-loaded macros
38
49
  MACROS = {}
39
50
 
40
- TODOS = []
51
+ begin
52
+ unless const_defined? :MODE then
53
+ # Glyph's modes: debug/lite/test
54
+ MODE = {:debug => false, :lite => false, :test => false, :library => false}
55
+ end
56
+ rescue
57
+ end
41
58
 
42
- ERRORS = []
59
+ # The main document being generated by Glyph
60
+ @@document = nil
43
61
 
44
- # Returns true if Glyph is running in test mode
45
- def self.testing?
46
- const_defined? :TEST_MODE rescue false
62
+ (class << self; self; end).instance_eval do
63
+ ["test", "lite", "debug", "library"].each do |mode|
64
+ define_method((mode+"?").to_sym) do
65
+ MODE[mode.to_sym]
66
+ end
67
+ define_method((mode+"_mode=")) do |m|
68
+ MODE[mode.to_sym] = m
69
+ end
70
+ end
47
71
  end
48
72
 
49
- PROJECT = (Glyph.testing?) ? Glyph::SPEC_DIR/"test_project" : Pathname.new(Dir.pwd)
73
+ # The directory of the current Glyph project.
74
+ PROJECT = (Glyph.test?) ? Glyph::SPEC_DIR/"test_project" : Pathname.new(Dir.pwd)
50
75
 
76
+ # Glyph's configuration
51
77
  CONFIG = Glyph::Config.new :resettable => true, :mutable => false
52
78
 
53
79
  home_dir = Pathname.new(RUBY_PLATFORM.match(/win32|mingw/) ? ENV['HOMEPATH'] : ENV['HOME'])
54
- SYSTEM_CONFIG = Glyph::Config.new(:file => HOME/'config.yml')
55
- GLOBAL_CONFIG = Glyph.testing? ? Glyph::Config.new(:file => SPEC_DIR/'.glyphrc') : Glyph::Config.new(:file => home_dir/'.glyphrc')
56
- PROJECT_CONFIG = Glyph::Config.new(:file => PROJECT/'config.yml')
80
+ SYSTEM_CONFIG =
81
+ Glyph::Config.new(:file => HOME/'config.yml')
82
+ GLOBAL_CONFIG =
83
+ Glyph.test? ? Glyph::Config.new(:file => SPEC_DIR/'.glyphrc') : Glyph::Config.new(:file => home_dir/'.glyphrc')
84
+ PROJECT_CONFIG =
85
+ Glyph::Config.new(:file => PROJECT/'config.yml', :resettable => true) rescue Glyph::Config.new(:resettable => true, :mutable => true)
57
86
 
58
87
  # Loads all Rake tasks
59
88
  def self.setup
@@ -62,34 +91,72 @@ module Glyph
62
91
  end
63
92
  end
64
93
 
94
+ # Used to access @@document
95
+ def self.document
96
+ @@document
97
+ end
98
+
99
+ # Used to set @@document
100
+ def self.document=(document)
101
+ @@document = document
102
+ end
103
+
104
+ # Returns the value of a configuration setting
105
+ def self.[](setting)
106
+ Glyph::CONFIG.get(setting)
107
+ end
108
+
65
109
  # Overrides a configuration setting
66
- # @param setting [String, Symbol] the configuration setting to change
110
+ # @param [String, Symbol] setting the configuration setting to change
67
111
  # @param value the new value
68
- def self.config_override(setting, value)
112
+ def self.[]=(setting, value)
69
113
  PROJECT_CONFIG.set setting, value
70
- reset_config
114
+ self.config_refresh
71
115
  end
72
116
 
73
- # Resets Glyph configuration
74
- def self.reset_config
117
+ # Restores Glyph configuration (keeping all overrides and project settings)
118
+ def self.config_refresh
75
119
  CONFIG.merge!(SYSTEM_CONFIG.merge(GLOBAL_CONFIG.merge(PROJECT_CONFIG)))
76
120
  end
77
121
 
122
+ # Resets Glyph configuration (removing all overrides and project settings)
123
+ def self.config_reset
124
+ Glyph::CONFIG.reset
125
+ Glyph::PROJECT_CONFIG.reset
126
+ self.config_refresh
127
+ end
128
+
78
129
  # Returns true if the PROJECT constant is set to a valid Glyph project directory
79
130
  def self.project?
80
- children = ["styles", "text", "output", "snippets.yml", "config.yml", "document.glyph"].sort
131
+ children = ["text", "output", "snippets.yml", "config.yml", "document.glyph"].sort
81
132
  actual_children = PROJECT.children.map{|c| c.basename.to_s}.sort
82
133
  (actual_children & children) == children
83
134
  end
84
135
 
85
- # Enables a Rake task
86
- # @param task the task to enable
136
+ # Resets Glyph completely, i.e.:
137
+ # * Re-enables all Glyph Rake tasks
138
+ # * Resets the configuration to system defaults
139
+ # * Clears macros and snippets
140
+ def self.reset
141
+ self.enable_all
142
+ self.config_reset
143
+ MACROS.clear
144
+ SNIPPETS.clear
145
+ end
146
+
147
+ # Reenables all Glyph Rake tasks
148
+ def self.enable_all
149
+ Rake::Task.tasks.each {|t| t.reenable }
150
+ end
151
+
152
+ # Reenables a Rake task
153
+ # @param [Symbol, String] task the task to enable
87
154
  def self.enable(task)
88
155
  Rake::Task[task].reenable
89
156
  end
90
157
 
91
158
  # Reenables and runs a Rake task
92
- # @param task the task to enable
159
+ # @param [Symbol, String] task the task to run
93
160
  # @param *args the task arguments
94
161
  def self.run!(task, *args)
95
162
  Rake::Task[task].reenable
@@ -97,32 +164,98 @@ module Glyph
97
164
  end
98
165
 
99
166
  # Runs a Rake task
100
- # @param task the task to enable
167
+ # @param [Symbol, String] task the task to run
101
168
  # @param *args the task arguments
102
169
  def self.run(task, *args)
103
170
  Rake::Task[task].invoke *args
104
171
  end
105
172
 
106
173
  # Defines a new macro
107
- # @param name [Symbol, String] the name of the macro
174
+ # @param [Symbol, String] name the name of the macro
108
175
  def self.macro(name, &block)
109
- MACROS[name] = block
176
+ MACROS[name.to_sym] = block
110
177
  end
111
178
 
112
179
  # Defines an alias for an existing macro
113
- # @param [Hash] pair the single-key hash defining the alias
180
+ # @param [Hash] text the single-key hash defining the alias
114
181
  # @example
115
182
  # {:old_name => :new_name}
116
183
  def self.macro_alias(pair)
117
184
  name = pair.keys[0].to_sym
118
185
  found = MACROS[name]
119
186
  if found then
120
- warning "Invalid alias: macro '#{name}' already exists."
187
+ self.warning "Invalid alias: macro '#{name}' already exists."
121
188
  return
122
189
  end
123
190
  MACROS[name] = MACROS[pair.values[0].to_sym]
124
191
  end
125
-
192
+
193
+ # Compiles a single Glyph file
194
+ # @param [String] src the full or relative path to the source file
195
+ # @param [String] out the full or relative path to the output file
196
+ def self.compile(src, out=nil)
197
+ pwd = Dir.pwd
198
+ Dir.chdir Pathname.new(src).parent.to_s
199
+ begin
200
+ require 'glyph/commands'
201
+ self[:quiet] = true
202
+ self.library_mode = true
203
+ GLI.run ["compile", src.to_s, out].compact
204
+ rescue Exception => e
205
+ raise
206
+ ensure
207
+ Dir.chdir pwd
208
+ self.library_mode = false
209
+ self.lite_mode = false
210
+ self[:quiet] = false
211
+ end
212
+ end
213
+
214
+ # Converts a text containing Glyph markup language into the current Glyph output target.
215
+ #
216
+ # *Note* Only 'html' is supported as output target for now.
217
+ # @param [String] text the text to convert
218
+ # @return [String] the converted text
219
+ # @example
220
+ # require 'glyph'
221
+ # Glyph.filter "section[header[Test]\nA Test section...]"
222
+ def self.filter(text)
223
+ self.lite_mode = true
224
+ self.enable_all
225
+ result = ""
226
+ begin
227
+ self[:quiet] = true
228
+ self.library_mode = true
229
+ self.run 'load:all'
230
+ result = Interpreter.new(text).document.output
231
+ rescue Exception => e
232
+ raise
233
+ ensure
234
+ self.lite_mode = false
235
+ self.library_mode = false
236
+ self[:quiet] = false
237
+ end
238
+ result
239
+ end
240
+
241
+ # Prints a message
242
+ # @param [String] message the message to print
243
+ def self.info(message)
244
+ puts "#{message}" unless Glyph[:quiet]
245
+ end
246
+
247
+ # Prints a warning
248
+ # @param [String] message the message to print
249
+ def self.warning(message)
250
+ puts "--> warning: #{message}" unless Glyph[:quiet]
251
+ end
252
+
253
+ # Prints an error
254
+ # @param [String] message the message to print
255
+ def self.error(message)
256
+ puts "==> error: #{message}" unless Glyph[:quiet]
257
+ end
258
+
126
259
  end
127
260
 
128
261
  Glyph.setup