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
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  macro :anchor do
4
- ident, title = @params
4
+ min_parameters 1
5
+ max_parameters 2
6
+ ident, title = params
5
7
  macro_error "Bookmark '#{ident}' already exists" if bookmark? ident
6
8
  bookmark :id => ident, :title => title
7
9
  %{<a id="#{ident}">#{title}</a>}
@@ -12,7 +14,9 @@ macro :codeph do
12
14
  end
13
15
 
14
16
  macro :link do
15
- href, title = @params
17
+ min_parameters 1
18
+ max_parameters 2
19
+ href, title = params
16
20
  if href.match /^#/ then
17
21
  anchor = href.gsub(/^#/, '').to_sym
18
22
  bmk = bookmark? anchor
@@ -31,13 +35,35 @@ macro :link do
31
35
  end
32
36
 
33
37
  macro :fmi do
34
- topic, href = @params
38
+ exact_parameters 2, :level => :warning
39
+ topic, href = params
35
40
  link = placeholder do |document|
36
41
  interpret "link[#{href}]"
37
42
  end
38
43
  %{<span class="fmi">for more information on #{topic}, see #{link}</span>}
39
44
  end
40
45
 
46
+ macro :draftcomment do
47
+ if Glyph['document.draft'] then
48
+ %{<span class="comment"><span class="comment-pre"><strong>Comment:</strong> </span>#{@value}</span>}
49
+ else
50
+ ""
51
+ end
52
+ end
53
+
54
+ macro :todo do
55
+ min_parameters 1
56
+ todo = "[#{@source}] -- #{@value}"
57
+ @node[:document].todos << todo unless @node[:document].todos.include? todo
58
+ if Glyph['document.draft'] then
59
+ %{<span class="todo"><span class="todo-pre"><strong>TODO:</strong> </span>#{@value}</span>}
60
+ else
61
+ ""
62
+ end
63
+ end
64
+
41
65
  macro_alias :bookmark => :anchor
42
66
  macro_alias '#' => :anchor
43
67
  macro_alias '=>' => :link
68
+ macro_alias '!' => :todo
69
+ macro_alias :dc => :draftcomment
@@ -1,61 +1,66 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  macro :div do
4
- %{<div class="#{@name}">
4
+ exact_parameters 1, :level => :warning
5
+ %{<div class="#{@name}">
6
+ #{@value}
5
7
 
6
- #{@value}
7
-
8
- </div>}
8
+ </div>}
9
9
  end
10
10
 
11
11
  macro :header do
12
- title = @params[0]
12
+ min_parameters 1
13
+ max_parameters 2
14
+ title = params[0]
15
+ h_id = params[1]
16
+ h_id = nil if h_id.blank?
13
17
  level = 1
14
18
  @node.ascend do |n|
15
- if cfg("structure.headers").include? n[:macro] then
19
+ if Glyph["structure.headers"].include? n[:macro] then
16
20
  level+=1
17
21
  end
18
22
  end
19
- h_id = @params[1]
20
23
  h_id ||= "h_#{@node[:document].headers.length+1}".to_sym
21
24
  header :title => title, :level => level, :id => h_id
22
25
  @node[:header] = h_id
23
26
  macro_error "Bookmark '#{h_id}' already exists" if bookmark? h_id
24
27
  bookmark :id => h_id, :title => title
25
- %{
26
- <h#{level} id="#{h_id}">#{title}</h#{level}>
27
- }
28
+ %{<h#{level} id="#{h_id}">#{title}</h#{level}>}
28
29
  end
29
30
 
30
31
  macro :document do
32
+ exact_parameters 1, :level => :warning
31
33
  %{<?xml version="1.0" encoding="utf-8"?>
32
34
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
33
35
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
34
- #{@value}
36
+ #{@value}
37
+
35
38
  </html>}
36
39
  end
37
40
 
38
41
  macro :body do
39
- %{
40
- <body>
41
- #{@value}
42
- </body>
43
- }
42
+ exact_parameters 1, :level => :warning
43
+ %{<body>
44
+ #{@value}
45
+
46
+ </body>}
44
47
  end
45
48
 
46
49
  macro :head do
47
- %{
48
- <head>
49
- <title>#{Glyph::CONFIG.get("document.title")}</title>
50
- <meta name="author" content="#{cfg("document.author")}" />
51
- <meta name="copyright" content="#{cfg("document.author")}" />
52
- #{@value}
53
- </head>
54
- }
50
+ exact_parameters 1, :level => :warning
51
+ %{<head>
52
+ <title>#{Glyph["document.title"]}</title>
53
+ <meta name="author" content="#{Glyph["document.author"]}" />
54
+ <meta name="copyright" content="#{Glyph["document.author"]}" />
55
+ <meta name="generator" content="Glyph v#{Glyph::VERSION} (http://www.h3rald.com/glyph)" />
56
+ #{@value}
57
+ </head>
58
+ }
55
59
  end
56
60
 
57
61
  macro :style do
58
- file = Glyph::PROJECT/"styles/#{@value}"
62
+ file = Glyph.lite? ? Pathname.new(@value) : Glyph::PROJECT/"styles/#{@value}"
63
+ file = Pathname.new Glyph::HOME/'styles'/@value unless file.exist?
59
64
  macro_error "Stylesheet '#{@value}' not found" unless file.exist?
60
65
  style = ""
61
66
  case file.extname
@@ -73,14 +78,13 @@ macro :style do
73
78
  else
74
79
  macro_error "Extension '#{file.extname}' not supported."
75
80
  end
76
- %{
77
- <style type="text/css">
78
- #{style}
79
- </style>
80
- }
81
+ %{<style type="text/css">
82
+ #{style}
83
+ </style>}
81
84
  end
82
85
 
83
86
  macro :toc do
87
+ no_parameters
84
88
  link_header = lambda do |header|
85
89
  %{<a href="##{header[:id]}">#{header[:title].gsub(/@(.+?)@/, '\1')}</a>}
86
90
  end
@@ -89,16 +93,13 @@ macro :toc do
89
93
  list = ""
90
94
  added_headers ||= []
91
95
  n1.descend do |n2, level|
92
- if cfg('structure.headers').include?(n2[:macro])
93
- next if n2.find_parent{|node| cfg('structure.special').include? node[:macro] }
96
+ if Glyph['structure.headers'].include?(n2[:macro])
97
+ next if n2.find_parent{|node| Glyph['structure.special'].include? node[:macro] }
94
98
  header_id = n2.children.select{|n| n[:header]}[0][:header] rescue nil
95
99
  next if added_headers.include? header_id
96
100
  added_headers << header_id
97
101
  # Check if part of frontmatter, bodymatter or backmatter
98
- container = n2.find_parent{|node| node[:macro] == :frontmatter}[:macro] rescue nil
99
- container ||= n2.find_parent{|node| node[:macro] == :bodymatter}[:macro] rescue nil
100
- container ||= n2.find_parent{|node| node[:macro] == :appendix}[:macro] rescue nil
101
- container ||= n2.find_parent{|node| node[:macro] == :backmatter}[:macro] rescue nil
102
+ container = n2.find_parent{|node| node[:macro].in? [:frontmatter, :bodymatter, :appendix, :backmatter]}[:macro] rescue nil
102
103
  list << "<li class=\"#{container} #{n2[:macro]}\">#{link_header.call(document.header?(header_id))}</li>\n" if header_id
103
104
  child_list = ""
104
105
  n2.children.each do |c|
@@ -109,11 +110,10 @@ macro :toc do
109
110
  end
110
111
  list
111
112
  end
112
- %{
113
- <div class="contents">
113
+ %{<div class="contents">
114
114
  <h2 class="toc-header" id="h_toc">Table of Contents</h2>
115
115
  <ol class="toc">
116
- #{descend_section.call(document.structure, nil)}
116
+ #{descend_section.call(document.structure, nil)}
117
117
  </ol>
118
118
  </div>}
119
119
  end
@@ -126,7 +126,7 @@ end
126
126
 
127
127
  macro_alias :section => :div
128
128
 
129
- (cfg('structure.frontmatter') + cfg('structure.bodymatter') + cfg('structure.backmatter')).
129
+ (Glyph['structure.frontmatter'] + Glyph['structure.bodymatter'] + Glyph['structure.backmatter']).
130
130
  each {|s| macro_alias s => :div }
131
131
 
132
132
  macro_alias :frontcover => :div
@@ -0,0 +1,5 @@
1
+ $:[document.author|Test]
2
+ &:[test|Test Snippet]
3
+ section[
4
+ $[document.author] -- &[test]
5
+ ]
@@ -9,12 +9,13 @@ describe "glyph" do
9
9
  end
10
10
 
11
11
  after do
12
+ Glyph.lite_mode = false
12
13
  delete_project
13
14
  end
14
15
 
15
16
  it "[init] should create a project in the current directory" do
17
+ delete_project
16
18
  Glyph.enable "project:create"
17
- run_command_successfully(['init']).should == false
18
19
  Dir.chdir Glyph::PROJECT.to_s
19
20
  run_command_successfully(['init']).should == true
20
21
  end
@@ -29,13 +30,19 @@ describe "glyph" do
29
30
  create_project
30
31
  run_command_successfully(["config", "test_setting", true]).should == true
31
32
  Glyph::CONFIG.get(:test_setting).should == true
33
+ Glyph::PROJECT_CONFIG.read
32
34
  Glyph::PROJECT_CONFIG.get('test_setting').should == true
35
+ Glyph::GLOBAL_CONFIG.read
33
36
  Glyph::GLOBAL_CONFIG.get('test_setting').should_not == true
34
37
  run_command_successfully(["config", "-g", "another.test", "something else"]).should == true
38
+ (Glyph::SPEC_DIR/'.glyphrc').exist?.should == true
35
39
  Glyph::CONFIG.get("another.test").should == "something else"
40
+ Glyph::PROJECT_CONFIG.read
36
41
  Glyph::PROJECT_CONFIG.get('another.test').should_not == "something else"
42
+ Glyph::GLOBAL_CONFIG.read
37
43
  Glyph::GLOBAL_CONFIG.get('another.test').should == "something else"
38
44
  run_command_successfully(["config", "-g", "yet.another.test", "something else", "extra argument"]).should == false
45
+ (Glyph::SPEC_DIR/'.glyphrc').unlink
39
46
  end
40
47
 
41
48
  it "[add] should create a new text file" do
@@ -57,7 +64,7 @@ describe "glyph" do
57
64
  (Glyph::PROJECT/'output/html/test_project.html').exist?.should == true
58
65
  end
59
66
 
60
- it "[compile] should continue execution in case of macro errors" do
67
+ it "[compile] should not continue execution in case of macro errors" do
61
68
  create_project
62
69
  text = %{
63
70
  =>[#invalid1]
@@ -68,16 +75,104 @@ describe "glyph" do
68
75
  #[valid|Valid bookmark]
69
76
  }
70
77
  file_write Glyph::PROJECT/'document.glyph', text
71
- res = run_command(['-d', "compile"])
78
+ res = run_command(["compile"])
72
79
  res.match(/Bookmark 'invalid1' does not exist/).should_not == nil
73
80
  res.match(/Bookmark 'invalid2' does not exist/).should_not == nil
74
81
  res.match(/Bookmark 'valid' does not exist/).should == nil
75
82
  res.match(/Snippet 'invalid3' does not exist/).should_not == nil
76
83
  end
77
84
 
85
+ it "[compile] should regenerate output with auto switch set" do
86
+ require 'timeout'
87
+ create_project
88
+ res = ''
89
+
90
+ compile_thread = Thread.new do
91
+ res = run_command(['-d', 'compile', '--auto'])
92
+ end
93
+
94
+ output_file = (Glyph::PROJECT/'output/html/test_project.html')
95
+ Timeout.timeout(5, StandardError) do loop do
96
+ break if output_file.file?
97
+ sleep 1
98
+ end end
99
+ output = file_load output_file
100
+ output_file.unlink
101
+
102
+ text_file = (Glyph::PROJECT/'text/container.textile')
103
+ text_file.unlink
104
+
105
+ file_write text_file, "section[\nheader[Container section]\nThis is another test.\n]\n"
106
+
107
+ Timeout.timeout(5, StandardError) do
108
+ loop do
109
+ break if output_file.file?
110
+ sleep 1
111
+ end
112
+ end
113
+ compile_thread.raise Interrupt
114
+ compile_thread.join
115
+
116
+ output2 = file_load output_file
117
+ output.should_not == output2
118
+ output2.match(/<p>This is another test.<\/p>/).should_not == nil
119
+
120
+ res.match(/Auto-regeneration enabled/).should_not == nil
121
+ res.match(/Regeneration started: 1 files changed/).should_not == nil
122
+ reset_quiet
123
+ end
124
+
78
125
  it "[compile] should not compile the project in case of an unknown output format" do
126
+ reset_quiet
79
127
  run_command_successfully(["compile", "-f", "wrong"]).should == false
80
128
  end
81
129
 
130
+ it "[compile] should compile a single source file" do
131
+ reset_quiet
132
+ Dir.chdir Glyph::PROJECT
133
+ file_copy "#{Glyph::PROJECT}/../files/article.glyph", "#{Glyph::PROJECT}/article.glyph"
134
+ file_copy "#{Glyph::PROJECT}/../files/ligature.jpg", "#{Glyph::PROJECT}/ligature.jpg"
135
+ run_command_successfully(["compile", "article.glyph"]).should == true
136
+ Pathname.new('article.html').exist?.should == true
137
+ file_load('article.html').gsub(/\t|\n/, '').should == %{
138
+ <div class="section">
139
+ Test -- Test Snippet
140
+ </div>
141
+ }.gsub(/\t|\n/, '')
142
+ Glyph.enable 'generate:html'
143
+ (Glyph::PROJECT/'article.html').unlink
144
+ Glyph['document.output'] = 'pdf'
145
+ run_command_successfully(["compile", "article.glyph"]).should == true
146
+ (Glyph::PROJECT/'article.html').exist?.should == true
147
+ (Glyph::PROJECT/'article.pdf').exist?.should == true
148
+ Glyph.lite_mode = false
149
+ end
150
+
151
+ it "[compile] should compile a single source file to a custom destination" do
152
+ reset_quiet
153
+ Dir.chdir Glyph::PROJECT
154
+ file_copy "#{Glyph::PROJECT}/../files/article.glyph", "#{Glyph::PROJECT}/article.glyph"
155
+ file_copy "#{Glyph::PROJECT}/../files/ligature.jpg", "#{Glyph::PROJECT}/ligature.jpg"
156
+ run_command_successfully(["compile", "article.glyph", "out/article.htm"]).should == true
157
+ Glyph.lite_mode = false
158
+ Pathname.new('out/article.htm').exist?.should == true
159
+ end
160
+
161
+ it "[compile] should finalize the document in case of errors in included files" do
162
+ create_project
163
+ file_write Glyph::PROJECT/'document.glyph', "section[header[Test]\n@[errors.glyph]\n@[syntax_error.glyph]]"
164
+ file_write Glyph::PROJECT/'text/errors.glyph', "not[a|b]"
165
+ file_write Glyph::PROJECT/'text/syntax_error.glyph', "$[a"
166
+ err = "Document cannot be finalized due to previous errors"
167
+ res = run_command(["compile"])
168
+ out = file_load Glyph::PROJECT/'output/html/test_project.html'
169
+ out.should == %{<div class="section">
170
+ <h2 id="h_1">Test</h2>
171
+ <span class="todo"><span class="todo-pre"><strong>TODO:</strong> </span>Correct errors in file 'errors.glyph'</span>
172
+ <span class="todo"><span class="todo-pre"><strong>TODO:</strong> </span>Correct errors in file 'syntax_error.glyph'</span>
173
+
174
+ </div>}
175
+ res.match("error: #{err}").should == nil
176
+ end
82
177
 
83
178
  end
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  #!/usr/bin/env ruby
2
4
  require File.join(File.dirname(__FILE__), "..", "spec_helper")
3
5
 
@@ -11,7 +13,6 @@ describe Glyph::Document do
11
13
  create_doc = lambda {|tree| }
12
14
  @tree = create_tree "test[test[test[Test\\|\\]...]]]"
13
15
  @doc = create_doc @tree
14
-
15
16
  end
16
17
 
17
18
  it "should expose document data" do
@@ -95,6 +96,18 @@ describe Glyph::Document do
95
96
  doc.output.gsub(/\n|\t/, '')[0..14].should == "Total: 4 tests."
96
97
  end
97
98
 
98
-
99
+ it "should substitute escaped pipes only when finalizing the document" do
100
+ define_em_macro
101
+ define_ref_macro
102
+ text = %{em[ref[link with ref[fake \\| parameter]]]}
103
+ # Nevermind the absurdity. It's just to test that the escaped pipes
104
+ # are handled properly.
105
+ result = %{<em><a href="link with <a href="fake | parameter"></a>"></a></em>}
106
+ tree = create_tree text
107
+ doc = create_doc tree
108
+ doc.analyze
109
+ doc.finalize
110
+ doc.output.should == result
111
+ end
99
112
  end
100
113
 
@@ -8,7 +8,7 @@ describe Glyph do
8
8
  end
9
9
 
10
10
  it "should initialize a rake app and tasks" do
11
- Glyph::APP.tasks.length.should > 0
11
+ Rake.application.tasks.length.should > 0
12
12
  end
13
13
 
14
14
  it "should run rake tasks" do
@@ -42,19 +42,28 @@ describe Glyph do
42
42
  create_project
43
43
  Glyph.run! 'load:macros'
44
44
  macros = [:anchor, :link, :codeph, :fmi, :note, :box, :code, :title, :subtitle,
45
- :img, :fig, :author, :pubdate, :table, :td, :tr, :th, :comment, :todo, :snippet,
46
- :include, :config, :ruby, :escape, :textile, :markdown, :div, :header, :document, :body,
47
- :head, :style, :toc, :section]
45
+ :img, :fig, :author, :pubdate, :table, :td, :tr, :th, :comment, :todo, :snippet, "snippet:",
46
+ :include, :config, "config:", :ruby, :escape, :textile, :markdown, :div, :header, :document, :body,
47
+ :head, :style, :toc, :section, :condition, :eq, :and, :or, :not, :match, :highlight, "macro:",
48
+ :encode, :decode, :draftcomment]
48
49
  aliases = [
49
50
  [[:bookmark, "#"], :anchor],
50
51
  [["=>"], :link],
51
52
  [[:important, :caution, :tip], :note],
52
53
  [["@"], :include],
53
54
  [["&"], :snippet],
55
+ [["&:"], "snippet:"],
56
+ [["%:"], "macro:"],
57
+ [["?"], "condition"],
54
58
  [["$"], :config],
59
+ [["$:"], "config:"],
55
60
  [["%"], :ruby],
56
61
  [["."], :escape],
57
62
  [["--"], :comment],
63
+ [[:dc], :draftcomment],
64
+ [["!"], :todo],
65
+ [["*"], :encode],
66
+ [["**"], :decode],
58
67
  [[:md], :markdown],
59
68
  [[:frontcover, :titlepage, :halftitlepage, :frontmatter, :bodymatter, :backmatter, :backcover], :div]]
60
69
  total = 0
@@ -63,14 +72,34 @@ describe Glyph do
63
72
  arr.each {|v| total += 1; Glyph::MACROS[v.to_sym].should == Glyph::MACROS[target.to_sym]}
64
73
  end
65
74
  aliases.each { |v| check_aliases.call v[0], v[1] }
66
- check_aliases.call cfg('structure.frontmatter'), :div
67
- check_aliases.call cfg('structure.bodymatter'), :div
68
- check_aliases.call cfg('structure.backmatter'), :div
69
- cfg('structure.frontmatter').length.should == 8
70
- cfg('structure.bodymatter').length.should == 4
71
- cfg('structure.backmatter').length.should == 13
75
+ check_aliases.call Glyph['structure.frontmatter'], :div
76
+ check_aliases.call Glyph['structure.bodymatter'], :div
77
+ check_aliases.call Glyph['structure.backmatter'], :div
78
+ Glyph['structure.frontmatter'].length.should == 8
79
+ Glyph['structure.bodymatter'].length.should == 4
80
+ Glyph['structure.backmatter'].length.should == 13
72
81
  #puts Glyph::MACROS.keys.map{|i| i.to_s}.sort.to_yaml
73
82
  total.should == Glyph::MACROS.length
74
83
  end
75
84
 
85
+ it "should provide a filter method to convert raw text into HTML" do
86
+ Glyph['document.title'] = "Test"
87
+ Glyph.filter("title[]").gsub(/\n|\t/, '').should == "<h1>Test</h1>"
88
+ end
89
+
90
+ it "should provide a compile method to compile files in lite mode" do
91
+ file_copy Glyph::PROJECT/'../files/article.glyph', Glyph::PROJECT/'article.glyph'
92
+ lambda { Glyph.compile Glyph::PROJECT/'article.glyph' }.should_not raise_error
93
+ reset_quiet
94
+ (Glyph::PROJECT/'article.html').exist?.should == true
95
+ end
96
+
97
+ it "should provide a reset method to remove config overrides, reenable tasks, clear macros and snippets." do
98
+ Glyph['test_setting'] = true
99
+ Glyph.reset
100
+ Glyph::SNIPPETS.length.should == 0
101
+ Glyph::MACROS.length.should == 0
102
+ Glyph['test_setting'].should == nil
103
+ end
104
+
76
105
  end