glyph 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS.textile +8 -0
- data/CHANGELOG.textile +260 -0
- data/LICENSE.textile +26 -0
- data/README.textile +49 -21
- data/Rakefile +17 -7
- data/VERSION +1 -1
- data/book/config.yml +11 -5
- data/book/document.glyph +24 -13
- data/book/lib/macros/reference.rb +41 -14
- data/book/output/html/glyph.html +2298 -687
- data/book/output/pdf/glyph.pdf +6218 -2698
- data/book/script/authors +1 -0
- data/book/script/changelog +1 -0
- data/book/script/compile.rb +8 -0
- data/book/script/license +1 -0
- data/book/script/prof +1 -0
- data/book/script/prof_results.htm +21079 -0
- data/book/script/readme +1 -0
- data/book/snippets.yml +3 -4
- data/book/text/acknowledgement.glyph +8 -0
- data/book/text/authoring.glyph +548 -0
- data/book/text/changelog.glyph +76 -0
- data/book/text/extending.glyph +224 -0
- data/book/text/{getting_started.textile → getting_started.glyph} +30 -24
- data/book/text/{introduction.textile → introduction.glyph} +22 -12
- data/book/text/license.glyph +21 -0
- data/book/text/{ref_commands.textile → ref_commands.glyph} +30 -8
- data/book/text/ref_config.glyph +108 -0
- data/book/text/ref_macros.glyph +378 -0
- data/book/text/troubleshooting.glyph +179 -0
- data/config.yml +16 -4
- data/glyph.gemspec +83 -22
- data/lib/glyph.rb +164 -31
- data/lib/glyph/commands.rb +98 -23
- data/lib/glyph/document.rb +13 -7
- data/lib/glyph/glyph_language.rb +9 -1
- data/lib/glyph/glyph_language.treetop +1 -1
- data/lib/glyph/interpreter.rb +19 -9
- data/lib/glyph/macro.rb +88 -11
- data/lib/glyph/macro_validators.rb +48 -0
- data/lib/glyph/node.rb +13 -1
- data/lib/glyph/system_extensions.rb +0 -28
- data/macros/common.rb +125 -31
- data/macros/filters.rb +19 -13
- data/macros/html/block.rb +119 -68
- data/macros/html/inline.rb +29 -3
- data/macros/html/structure.rb +40 -40
- data/spec/files/article.glyph +5 -0
- data/spec/lib/commands_spec.rb +98 -3
- data/spec/lib/document_spec.rb +15 -2
- data/spec/lib/glyph_spec.rb +39 -10
- data/spec/lib/interpreter_spec.rb +8 -2
- data/spec/lib/macro_spec.rb +54 -6
- data/spec/lib/macro_validators_spec.rb +33 -0
- data/spec/lib/node_spec.rb +11 -3
- data/spec/macros/filters_spec.rb +5 -5
- data/spec/macros/macros_spec.rb +185 -8
- data/spec/macros/textile_spec.rb +217 -0
- data/spec/spec_helper.rb +25 -15
- data/spec/tasks/generate_spec.rb +3 -3
- data/spec/tasks/load_spec.rb +11 -1
- data/spec/tasks/project_spec.rb +0 -3
- data/styles/coderay.css +121 -0
- data/styles/default.css +54 -20
- data/{book/styles/css3.css → styles/pagination.css} +35 -7
- data/styles/ultraviolet/active4d.css +114 -0
- data/styles/ultraviolet/all_hallows_eve.css +72 -0
- data/styles/ultraviolet/amy.css +147 -0
- data/styles/ultraviolet/blackboard.css +88 -0
- data/styles/ultraviolet/brilliance_black.css +605 -0
- data/styles/ultraviolet/brilliance_dull.css +599 -0
- data/styles/ultraviolet/cobalt.css +149 -0
- data/styles/ultraviolet/dawn.css +121 -0
- data/styles/ultraviolet/eiffel.css +121 -0
- data/styles/ultraviolet/espresso_libre.css +109 -0
- data/styles/ultraviolet/idle.css +62 -0
- data/styles/ultraviolet/iplastic.css +80 -0
- data/styles/ultraviolet/lazy.css +73 -0
- data/styles/ultraviolet/mac_classic.css +123 -0
- data/styles/ultraviolet/magicwb_amiga.css +104 -0
- data/styles/ultraviolet/pastels_on_dark.css +188 -0
- data/styles/ultraviolet/slush_poppies.css +85 -0
- data/styles/ultraviolet/spacecadet.css +51 -0
- data/styles/ultraviolet/sunburst.css +180 -0
- data/styles/ultraviolet/twilight.css +137 -0
- data/styles/ultraviolet/zenburnesque.css +91 -0
- data/tasks/generate.rake +45 -26
- data/tasks/load.rake +21 -18
- data/tasks/project.rake +3 -1
- metadata +210 -41
- data/book/styles/default.css +0 -190
- data/book/text/authoring.textile +0 -351
- data/book/text/extending.textile +0 -148
- data/book/text/ref_config.textile +0 -0
- data/book/text/ref_macros.textile +0 -256
- data/book/text/troubleshooting.textile +0 -118
- data/styles/css3.css +0 -220
@@ -6,8 +6,7 @@ describe Glyph::Interpreter do
|
|
6
6
|
before do
|
7
7
|
delete_project
|
8
8
|
create_project
|
9
|
-
Glyph.run! 'load:
|
10
|
-
Glyph.run! 'load:snippets'
|
9
|
+
Glyph.run! 'load:all'
|
11
10
|
end
|
12
11
|
|
13
12
|
|
@@ -87,4 +86,11 @@ describe Glyph::Interpreter do
|
|
87
86
|
{:"@" => 1}, {:markdown => 2},{:section => 3}, {:header => 4}]
|
88
87
|
end
|
89
88
|
|
89
|
+
|
90
|
+
it "should provide diagnostic information on errors" do
|
91
|
+
failure = "Incorrect macro syntax\n -> -- [Line 1, Column 13]"
|
92
|
+
# This is probably the only type of error recognized which can occur at parser level
|
93
|
+
lambda { interpret "section[em[]" }.should raise_error(Glyph::SyntaxError, failure)
|
94
|
+
end
|
95
|
+
|
90
96
|
end
|
data/spec/lib/macro_spec.rb
CHANGED
@@ -4,8 +4,8 @@ require File.join(File.dirname(__FILE__), "..", "spec_helper")
|
|
4
4
|
describe Glyph::Macro do
|
5
5
|
|
6
6
|
before do
|
7
|
-
Glyph.macro :test do
|
8
|
-
"Test: #{
|
7
|
+
Glyph.macro :test do
|
8
|
+
"Test: #{@value}"
|
9
9
|
end
|
10
10
|
create_tree = lambda {|text| }
|
11
11
|
create_doc = lambda {|tree| }
|
@@ -17,14 +17,30 @@ describe Glyph::Macro do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should raise macro errors" do
|
20
|
-
lambda { @macro.macro_error "Error!" }.should raise_error(MacroError)
|
21
|
-
|
20
|
+
lambda { @macro.macro_error "Error!" }.should raise_error(Glyph::MacroError)
|
22
21
|
end
|
23
22
|
|
24
23
|
it "should interpret strings" do
|
25
24
|
@macro.interpret("test[--]").should == "Test: --"
|
26
25
|
end
|
27
26
|
|
27
|
+
it "should not interpret escaped macros" do
|
28
|
+
Glyph.macro :int_1 do
|
29
|
+
"->#{interpret(@value)}<-"
|
30
|
+
end
|
31
|
+
Glyph.macro :int_2 do
|
32
|
+
"=>#{interpret(@value)}<="
|
33
|
+
end
|
34
|
+
text1 = "int_1[int_2[Test]]"
|
35
|
+
text2 = "int_1[=int_2[Test]=]"
|
36
|
+
text3 = "int_1[=int_2\\[Test\\]=]"
|
37
|
+
text4 = "int_2[int_1[=int_1[wrong_macro[Test]]=]]"
|
38
|
+
@macro.interpret(text1).should == "->=>Test<=<-"
|
39
|
+
@macro.interpret(text2).should == "->int_2\\[Test\\]<-"
|
40
|
+
@macro.interpret(text3).should == "->int_2\\[Test\\]<-"
|
41
|
+
@macro.interpret(text4).should == "=>->int_1\\[wrong_macro\\[Test\\]\\]<-<="
|
42
|
+
end
|
43
|
+
|
28
44
|
it "should store and check bookmarks" do
|
29
45
|
h = { :id => "test2", :title => "Test 2" }
|
30
46
|
@macro.bookmark h
|
@@ -53,8 +69,40 @@ describe Glyph::Macro do
|
|
53
69
|
create_project
|
54
70
|
Glyph.run! 'load:macros'
|
55
71
|
Glyph::SNIPPETS[:inc] = "Test &[inc]"
|
56
|
-
|
72
|
+
lambda {interpret("&[inc] test").document}.should raise_error(Glyph::MutualInclusionError)
|
57
73
|
end
|
58
74
|
|
59
|
-
|
75
|
+
it "should encode and decode text" do
|
76
|
+
Glyph.run! "load:all"
|
77
|
+
Glyph.macro :sec_1 do
|
78
|
+
res = decode "section[header[Test1]\n#{@value}]"
|
79
|
+
interpret res
|
80
|
+
end
|
81
|
+
Glyph.macro :sec_2 do
|
82
|
+
encode "section[section[header[Test2]\n#@value]]"
|
83
|
+
end
|
84
|
+
text1 = %{sec_1[sec_2[Test]]}
|
85
|
+
interpret text1
|
86
|
+
res1 = @p.document.output.gsub(/\t/, '')
|
87
|
+
text2 = %{section[header[Test1]
|
88
|
+
section[section[header[Test2]
|
89
|
+
Test]]]}
|
90
|
+
interpret text2
|
91
|
+
res2 = @p.document.output.gsub(/\t/, '')
|
92
|
+
result = "<div class=\"section\">
|
93
|
+
<h2 id=\"h_1\">Test1</h2>
|
94
|
+
<div class=\"section\">
|
95
|
+
<div class=\"section\">
|
96
|
+
<h4 id=\"h_2\">Test2</h4>
|
97
|
+
Test
|
98
|
+
|
99
|
+
</div>
|
100
|
+
|
101
|
+
</div>
|
60
102
|
|
103
|
+
</div>".gsub(/\t/, '')
|
104
|
+
res1.should == result
|
105
|
+
res2.should == result
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require File.join(File.dirname(__FILE__), "..", "spec_helper")
|
3
|
+
|
4
|
+
describe Glyph::Macro::Validators do
|
5
|
+
|
6
|
+
before do
|
7
|
+
Glyph.run! 'load:all'
|
8
|
+
Glyph.macro :validated_test do
|
9
|
+
validate("Invalid Macro"){ @value == "valid" }
|
10
|
+
"Validated Test: #{@value}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should provide custom validation" do
|
15
|
+
lambda { interpret("section[validated_test[invalid]]").document.output }.should raise_error Glyph::MacroError
|
16
|
+
lambda { interpret("chapter[validated_test[valid]]").document.output }.should_not raise_error
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should validate the number of parameters" do
|
20
|
+
# exact
|
21
|
+
lambda { interpret("table[]").document.output }.should raise_error Glyph::MacroError
|
22
|
+
# none
|
23
|
+
lambda { interpret("toc[test]").document.output }.should raise_error Glyph::MacroError
|
24
|
+
# min
|
25
|
+
lambda { interpret("img[]").document.output }.should raise_error Glyph::MacroError
|
26
|
+
# max
|
27
|
+
lambda { interpret("not[a|b|c]").document.output }.should raise_error Glyph::MacroError
|
28
|
+
# correct
|
29
|
+
lambda { interpret("chapter[fmi[something|#something]]").document.output }.should_not raise_error Glyph::MacroError
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
data/spec/lib/node_spec.rb
CHANGED
@@ -26,7 +26,15 @@ describe Node do
|
|
26
26
|
lambda { @ht << {:e => 5, :f => 6}.to_node }.should_not raise_error
|
27
27
|
@ht.child(1) << {:g => 7, :h => 8}
|
28
28
|
@ht.child(1) << {:i => 9, :j => 10}
|
29
|
-
((@ht
|
29
|
+
((@ht&1&1)[:j]).should == 10
|
30
|
+
l = (@ht&1).length
|
31
|
+
orphan = @ht&1&0
|
32
|
+
orphan.parent.should == @ht&1
|
33
|
+
(@ht&1).children.include?(orphan).should == true
|
34
|
+
(@ht&1) >> orphan
|
35
|
+
(@ht&1).children.length.should == l-1
|
36
|
+
orphan.parent.should == nil
|
37
|
+
(@ht&1).children.include?(orphan).should == false
|
30
38
|
end
|
31
39
|
|
32
40
|
it "should support iteration" do
|
@@ -55,8 +63,8 @@ describe Node do
|
|
55
63
|
@ht << {:e => 5, :f => 6}
|
56
64
|
@ht.child(1) << {:g => 7, :h => 8}
|
57
65
|
@ht.child(1).child(0) << {:i => 9, :j => 10}
|
58
|
-
(@ht
|
59
|
-
(@ht
|
66
|
+
(@ht&1&0&0).parent.should == @ht&1&0
|
67
|
+
(@ht&1&0&0).root.should == @ht
|
60
68
|
end
|
61
69
|
|
62
70
|
it "should find child nodes" do
|
data/spec/macros/filters_spec.rb
CHANGED
@@ -17,11 +17,11 @@ describe "Filter Macros" do
|
|
17
17
|
text = "textile[This is a _TEST_(TM).]"
|
18
18
|
interpret text
|
19
19
|
@p.document.output.should == "<p>This is a <em><span class=\"caps\">TEST</span></em>™.</p>"
|
20
|
-
|
20
|
+
Glyph['filters.target'] = :latex
|
21
21
|
interpret text
|
22
22
|
@p.document.output.should == "This is a \\emph{TEST}\\texttrademark{}.\n\n"
|
23
|
-
|
24
|
-
|
23
|
+
Glyph['filters.target'] = :html
|
24
|
+
Glyph['filters.redcloth.restrictions'] = [:no_span_caps]
|
25
25
|
interpret text
|
26
26
|
@p.document.output.should == "<p>This is a <em>TEST</em>™.</p>"
|
27
27
|
end
|
@@ -33,10 +33,10 @@ describe "Filter Macros" do
|
|
33
33
|
- item 2
|
34
34
|
- item 3
|
35
35
|
|
36
|
-
|
36
|
+
etc.]"
|
37
37
|
interpret text
|
38
38
|
@p.document.output.gsub(/\n|\t/, '').should ==
|
39
|
-
"<p>This is a test:</p><ul><li>item 1</li><li>item 2</li><li>item 3</li></ul><p
|
39
|
+
"<p>This is a test:</p><ul><li>item 1</li><li>item 2</li><li>item 3</li></ul><p>etc.</p>"
|
40
40
|
end
|
41
41
|
|
42
42
|
end
|
data/spec/macros/macros_spec.rb
CHANGED
@@ -5,11 +5,11 @@ describe "Macro:" do
|
|
5
5
|
|
6
6
|
before do
|
7
7
|
create_project
|
8
|
-
Glyph.run! 'load:
|
9
|
-
Glyph.run! 'load:snippets'
|
8
|
+
Glyph.run! 'load:all'
|
10
9
|
end
|
11
10
|
|
12
11
|
after do
|
12
|
+
Glyph.lite_mode = false
|
13
13
|
delete_project
|
14
14
|
end
|
15
15
|
|
@@ -18,7 +18,7 @@ describe "Macro:" do
|
|
18
18
|
doc = @p.document
|
19
19
|
doc.output.should == "this is a <a id=\"test\">test</a>."
|
20
20
|
doc.bookmarks.has_key?(:test).should == true
|
21
|
-
lambda { interpret "this is a #[test|test]. #[test|This won't work!]"; @p.document }.should raise_error(MacroError)
|
21
|
+
lambda { interpret "this is a #[test|test]. #[test|This won't work!]"; @p.document }.should raise_error(Glyph::MacroError)
|
22
22
|
end
|
23
23
|
|
24
24
|
it "snippet" do
|
@@ -39,6 +39,50 @@ describe "Macro:" do
|
|
39
39
|
@p.document.output.should == %{Test. This is a link to something afterwards: <a href="#other">Test</a>. <a id="other">Test</a>.}
|
40
40
|
end
|
41
41
|
|
42
|
+
it "snippet:" do
|
43
|
+
interpret("&[t1] - &:[t1|Test #1] - &[t1]")
|
44
|
+
@p.document.output.should == "[SNIPPET 't1' NOT PROCESSED] - - Test #1"
|
45
|
+
Glyph::SNIPPETS[:t1].should == "Test #1"
|
46
|
+
Glyph::SNIPPETS.delete :t1
|
47
|
+
end
|
48
|
+
|
49
|
+
it "condition" do
|
50
|
+
define_em_macro
|
51
|
+
interpret("?[$[document.invalid]|em[test]]")
|
52
|
+
@p.document.output.should == ""
|
53
|
+
interpret("?[$[document.output]|em[test]]")
|
54
|
+
@p.document.output.should == "<em>test</em>"
|
55
|
+
interpret("?[not[eq[$[document.output]|]]|em[test]]")
|
56
|
+
@p.document.output.should == "<em>test</em>"
|
57
|
+
interpret %{?[
|
58
|
+
or[
|
59
|
+
eq[$[document.target]|htmls]|
|
60
|
+
not[eq[$[document.author]|x]]
|
61
|
+
]|em[test]]}
|
62
|
+
@p.document.output.should == "<em>test</em>"
|
63
|
+
# "false" should be regarded as false
|
64
|
+
interpret(%{?[%["test".blank?]|---]})
|
65
|
+
@p.document.output.should == ""
|
66
|
+
interpret("?[not[match[$[document.source]|/^docu/]]|em[test]]")
|
67
|
+
@p.document.output.should == ""
|
68
|
+
# Invalid regexp
|
69
|
+
lambda { interpret("?[match[$[document.source]|document]em[test]]").document.output }.should raise_error
|
70
|
+
interpret "?[%[lite?]|test]"
|
71
|
+
@p.document.output.should == ""
|
72
|
+
interpret "?[%[!lite?]|test]"
|
73
|
+
@p.document.output.should == "test"
|
74
|
+
interpret "?[%[lite?]|%[\"test\"]]"
|
75
|
+
@p.document.output.should == ""
|
76
|
+
# Condition not satisfied...
|
77
|
+
interpret "?[%[lite?]|*[= %[ Glyph\\['test_config'\\] = true ] =]]"
|
78
|
+
@p.document.output.should == ""
|
79
|
+
Glyph['test_config'].should_not == true
|
80
|
+
# Condition satisfied...
|
81
|
+
interpret "?[%[!lite?]|*[= --[%[ Glyph\\['test_config'\\] = true ]] =]]"
|
82
|
+
@p.document.output.should == ""
|
83
|
+
Glyph['test_config'].should == true
|
84
|
+
end
|
85
|
+
|
42
86
|
it "section, chapter, header" do
|
43
87
|
text = "chapter[header[Chapter X] ... section[header[Section Y|sec-y] ... section[header[Another section] ...]]]"
|
44
88
|
interpret text
|
@@ -57,7 +101,7 @@ describe "Macro:" do
|
|
57
101
|
end
|
58
102
|
|
59
103
|
it "include" do
|
60
|
-
Glyph
|
104
|
+
Glyph["filters.by_extension"] = true
|
61
105
|
text = file_load(Glyph::PROJECT/'text/container.textile')
|
62
106
|
interpret text
|
63
107
|
@p.document.output.gsub(/\n|\t|_\d{1,3}/, '').should == %{
|
@@ -72,12 +116,52 @@ describe "Macro:" do
|
|
72
116
|
}.gsub(/\n|\t|_\d{1,3}/, '')
|
73
117
|
end
|
74
118
|
|
119
|
+
it "include should not work in Lite mode" do
|
120
|
+
text = file_load(Glyph::PROJECT/'text/container.textile')
|
121
|
+
Glyph.lite_mode = true
|
122
|
+
lambda { interpret(text).document.output }.should raise_error Glyph::MacroError
|
123
|
+
Glyph.lite_mode = false
|
124
|
+
end
|
75
125
|
|
76
|
-
it "style" do
|
77
|
-
interpret "style[test.sass]"
|
78
|
-
@p.document.output.gsub(/\n|\t/, '').should ==
|
126
|
+
it "document, head, style" do
|
127
|
+
interpret "document[head[style[test.sass]]]"
|
128
|
+
@p.document.output.gsub(/\n|\t/, '').should == %{
|
129
|
+
<?xml version="1.0" encoding="utf-8"?>
|
130
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
131
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
132
|
+
<head>
|
133
|
+
<title>#{Glyph::CONFIG.get("document.title")}</title>
|
134
|
+
<meta name="author" content="#{Glyph["document.author"]}" />
|
135
|
+
<meta name="copyright" content="#{Glyph["document.author"]}" />
|
136
|
+
<meta name="generator" content="Glyph v#{Glyph::VERSION} (http://www.h3rald.com/glyph)" />
|
137
|
+
<style type=\"text/css\">#main { background-color: #0000ff; }</style>
|
138
|
+
</head>
|
139
|
+
</html>
|
140
|
+
}.gsub(/\n|\t/, '')
|
79
141
|
end
|
80
142
|
|
143
|
+
it "style should link files by absolute or relative path in Lite mode" do
|
144
|
+
result = %{
|
145
|
+
<?xml version="1.0" encoding="utf-8"?>
|
146
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
147
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
148
|
+
<head>
|
149
|
+
<title>#{Glyph::CONFIG.get("document.title")}</title>
|
150
|
+
<meta name="author" content="#{Glyph["document.author"]}" />
|
151
|
+
<meta name="copyright" content="#{Glyph["document.author"]}" />
|
152
|
+
<meta name="generator" content="Glyph v#{Glyph::VERSION} (http://www.h3rald.com/glyph)" />
|
153
|
+
<style type=\"text/css\">#main { background-color: #0000ff; }</style>
|
154
|
+
</head>
|
155
|
+
</html>
|
156
|
+
}.gsub(/\n|\t/, '')
|
157
|
+
Glyph.lite_mode = true
|
158
|
+
Dir.chdir Glyph::PROJECT
|
159
|
+
interpret "document[head[style[styles/test.sass]]]"
|
160
|
+
@p.document.output.gsub(/\n|\t/, '').should == result
|
161
|
+
interpret "document[head[style[#{Glyph::PROJECT}/styles/test.sass]]]"
|
162
|
+
@p.document.output.gsub(/\n|\t/, '').should == result
|
163
|
+
end
|
164
|
+
|
81
165
|
it "escape" do
|
82
166
|
define_em_macro
|
83
167
|
text = %{This is a test em[This can .[=contain test[macros em[test]]=]]}
|
@@ -88,12 +172,23 @@ describe "Macro:" do
|
|
88
172
|
it "ruby" do
|
89
173
|
interpret "2 + 2 = %[2+2]"
|
90
174
|
@p.document.output.should == %{2 + 2 = 4}
|
175
|
+
interpret "%[lite?]"
|
176
|
+
@p.document.output.should == %{false}
|
177
|
+
interpret "%[def test; end]"
|
91
178
|
end
|
92
179
|
|
93
180
|
it "config" do
|
94
|
-
Glyph
|
181
|
+
Glyph["test.setting"] = "TEST"
|
182
|
+
interpret "test.setting = $[test.setting]"
|
183
|
+
@p.document.output.should == %{test.setting = TEST}
|
184
|
+
end
|
185
|
+
|
186
|
+
it "config:" do
|
187
|
+
Glyph["test.setting"] = "TEST"
|
95
188
|
interpret "test.setting = $[test.setting]"
|
96
189
|
@p.document.output.should == %{test.setting = TEST}
|
190
|
+
interpret "test.setting = $:[test.setting|TEST2]$[test.setting]"
|
191
|
+
@p.document.output.should == %{test.setting = TEST2}
|
97
192
|
end
|
98
193
|
|
99
194
|
it "toc" do
|
@@ -146,6 +241,19 @@ describe "Macro:" do
|
|
146
241
|
}.gsub(/\n|\t/, '')
|
147
242
|
end
|
148
243
|
|
244
|
+
it "img should link files by absolute or relative path in Lite mode" do
|
245
|
+
result = %{
|
246
|
+
<img src="images/ligature.jpg"
|
247
|
+
width="90%" height="90%" alt="-"/>
|
248
|
+
}.gsub(/\n|\t/, '')
|
249
|
+
Glyph.lite_mode = true
|
250
|
+
Dir.chdir Glyph::PROJECT
|
251
|
+
interpret "img[images/ligature.jpg|90%|90%]"
|
252
|
+
@p.document.output.gsub(/\t|\n/, '').should == result
|
253
|
+
interpret "img[#{Glyph::PROJECT}/images/ligature.jpg|90%|90%]"
|
254
|
+
@p.document.output.gsub(/\t|\n/, '').gsub(Glyph::PROJECT.to_s+'/', '').should == result
|
255
|
+
end
|
256
|
+
|
149
257
|
it "fig" do
|
150
258
|
interpret "fig[ligature.jpg|Ligature]"
|
151
259
|
@p.document.output.gsub(/\t|\n/, '').should == %{
|
@@ -156,4 +264,73 @@ describe "Macro:" do
|
|
156
264
|
}.gsub(/\n|\t/, '')
|
157
265
|
end
|
158
266
|
|
267
|
+
it "fig should link files by absolute or relative path in Lite mode" do
|
268
|
+
result = %{
|
269
|
+
<div class="figure">
|
270
|
+
<img src="images/ligature.jpg" alt="-"/>
|
271
|
+
<div class="caption">Ligature</div>
|
272
|
+
</div>
|
273
|
+
}.gsub(/\n|\t/, '')
|
274
|
+
Glyph.lite_mode = true
|
275
|
+
Dir.chdir Glyph::PROJECT
|
276
|
+
interpret "fig[images/ligature.jpg|Ligature]"
|
277
|
+
@p.document.output.gsub(/\t|\n/, '').should == result
|
278
|
+
interpret "fig[#{Glyph::PROJECT}/images/ligature.jpg|Ligature]"
|
279
|
+
@p.document.output.gsub(/\t|\n/, '').gsub(Glyph::PROJECT.to_s+'/', '').should == result
|
280
|
+
end
|
281
|
+
|
282
|
+
it "draftcomment, todo" do
|
283
|
+
text1 = "dc[comment!]"
|
284
|
+
text2 = "![todo!]"
|
285
|
+
interpret text1
|
286
|
+
@p.document.output.should == ""
|
287
|
+
interpret text2
|
288
|
+
@p.document.output.should == ""
|
289
|
+
Glyph['document.draft'] = true
|
290
|
+
interpret text1
|
291
|
+
@p.document.output.should == %{<span class="comment"><span class="comment-pre"><strong>Comment:</strong> </span>comment!</span>}
|
292
|
+
interpret text2
|
293
|
+
@p.document.output.should == %{<span class="todo"><span class="todo-pre"><strong>TODO:</strong> </span>todo!</span>}
|
294
|
+
@p.document.todos.length.should == 1
|
295
|
+
Glyph['document.draft'] = false
|
296
|
+
end
|
297
|
+
|
298
|
+
it "highlight" do
|
299
|
+
cr = false
|
300
|
+
uv = false
|
301
|
+
begin
|
302
|
+
require 'coderay'
|
303
|
+
cr = true
|
304
|
+
rescue Exception
|
305
|
+
end
|
306
|
+
begin
|
307
|
+
require 'uv'
|
308
|
+
uv = true
|
309
|
+
rescue Exception
|
310
|
+
end
|
311
|
+
code = %{def test_method(a, b)
|
312
|
+
puts a+b
|
313
|
+
end}
|
314
|
+
cr_result = %{<div class=\"CodeRay\"> <div class=\"code\"><pre> <span class=\"r\">def</span>
|
315
|
+
<span class=\"fu\">test_method</span>(a, b) puts a+b <span class=\"r\">end</span></pre></div> </div>}
|
316
|
+
uv_result = %{<pre class=\"iplastic\"> <span class=\"Keyword\">def</span>
|
317
|
+
<span class=\"FunctionName\">test_method</span>(<span class=\"Arguments\">a<span class=\"Arguments\">,</span> b</span>)
|
318
|
+
puts a<span class=\"Keyword\">+</span>b <span class=\"Keyword\">end</span> </pre>}
|
319
|
+
Glyph['highlighters.ultraviolet.theme'] = 'iplastic'
|
320
|
+
check = lambda do |hl, result|
|
321
|
+
Glyph["highlighters.current"] = hl
|
322
|
+
Glyph.debug_mode = true
|
323
|
+
interpret("highlight[=ruby|\n#{code}=]")
|
324
|
+
@p.document.output.gsub(/\s+/, ' ').strip.should == result.gsub(/\s+/, ' ').strip
|
325
|
+
end
|
326
|
+
check.call 'ultraviolet', uv_result if uv
|
327
|
+
check.call 'coderay', cr_result if cr
|
328
|
+
end
|
329
|
+
|
330
|
+
it "macro:" do
|
331
|
+
interpret '%:[e_macro|
|
332
|
+
"Test: #@value"]e_macro[OK!]'
|
333
|
+
@p.document.output.should == "Test: OK!"
|
334
|
+
end
|
335
|
+
|
159
336
|
end
|