glyph 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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/spec/tasks/load_spec.rb
CHANGED
@@ -16,18 +16,6 @@ describe "load" do
|
|
16
16
|
delete_project
|
17
17
|
lambda { Glyph.run! 'load:all' }.should raise_error
|
18
18
|
end
|
19
|
-
|
20
|
-
it "[snippets] should load snippet definitions" do
|
21
|
-
lambda { Glyph.run! 'load:snippets'}.should_not raise_error
|
22
|
-
Glyph::SNIPPETS[:test].blank?.should == false
|
23
|
-
end
|
24
|
-
|
25
|
-
it "[snippets] should not load snippets.xml in Lite mode" do
|
26
|
-
Glyph.lite_mode = true
|
27
|
-
lambda { Glyph.run! 'load:snippets'}.should_not raise_error
|
28
|
-
Glyph::SNIPPETS[:test].blank?.should == true
|
29
|
-
Glyph.lite_mode = false
|
30
|
-
end
|
31
19
|
|
32
20
|
it "[macros] should load macro definitions" do
|
33
21
|
lambda { Glyph.run! 'load:macros'}.should_not raise_error
|
@@ -64,7 +52,7 @@ describe "load" do
|
|
64
52
|
it "[layouts] should load layouts" do
|
65
53
|
Glyph['document.output'] = 'web'
|
66
54
|
Glyph.run! 'load:macros'
|
67
|
-
Glyph::MACROS[:"layout
|
55
|
+
Glyph::MACROS[:"layout/topic"].blank?.should == false
|
68
56
|
end
|
69
57
|
|
70
58
|
it "[tasks] should load tasks" do
|
data/styles/coderay.css
CHANGED
@@ -1,38 +1,147 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
.CodeRay .
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
.CodeRay
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
color: #
|
35
|
-
|
36
|
-
|
37
|
-
.CodeRay .
|
38
|
-
|
1
|
+
/*
|
2
|
+
* Based on: https://github.com/pie4dan/CodeRay-GitHub-Theme/blob/master/coderay.css
|
3
|
+
*/
|
4
|
+
.CodeRay {
|
5
|
+
background-color: #FFF;
|
6
|
+
border: 1px solid #CCC;
|
7
|
+
line-height: 1.3em;
|
8
|
+
font-size: 12px;
|
9
|
+
font-family: Monospace;
|
10
|
+
color: #000;
|
11
|
+
padding: 1em 0px 1em 1em;
|
12
|
+
}
|
13
|
+
.CodeRay pre, .CodeRay code {
|
14
|
+
padding: 0;
|
15
|
+
margin: 0;
|
16
|
+
}
|
17
|
+
|
18
|
+
div.CodeRay {
|
19
|
+
padding: 0;
|
20
|
+
}
|
21
|
+
|
22
|
+
span.CodeRay { white-space: pre; border: 0px; padding: 2px }
|
23
|
+
|
24
|
+
table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px }
|
25
|
+
table.CodeRay td {
|
26
|
+
padding: 1em 0.5em;
|
27
|
+
vertical-align: top;
|
28
|
+
}
|
29
|
+
|
30
|
+
.CodeRay .line_numbers, .CodeRay .no {
|
31
|
+
border: 1px solid #ECECEC;
|
32
|
+
margin: 0 inherit;
|
33
|
+
background-color: #ECECEC;
|
34
|
+
color: #AAA;
|
35
|
+
text-align: right;
|
36
|
+
}
|
37
|
+
.CodeRay .line_numbers tt { font-weight: bold }
|
38
|
+
.CodeRay .line_numbers .highlighted { color: red }
|
39
|
+
.CodeRay .line { display: block; float: left; width: 100%; }
|
40
|
+
.CodeRay .no { padding: 0px 4px }
|
41
|
+
.CodeRay .code { width: 100% }
|
42
|
+
|
43
|
+
ol.CodeRay { font-size: 10pt }
|
44
|
+
ol.CodeRay li { white-space: pre }
|
45
|
+
|
46
|
+
.CodeRay .code pre { overflow: auto }
|
47
|
+
|
48
|
+
.CodeRay .debug { color:white ! important; background:blue ! important; }
|
49
|
+
|
50
|
+
.CodeRay .af { color:#00C }
|
51
|
+
.CodeRay .an { color:#007 }
|
52
|
+
.CodeRay .at { color:#f08 }
|
53
|
+
.CodeRay .av { color:#700 }
|
54
|
+
.CodeRay .aw { color:#C00 }
|
55
|
+
.CodeRay .bi { color:#509; font-weight:bold }
|
56
|
+
.CodeRay .c { color:#998; font-style: italic;}
|
57
|
+
|
58
|
+
.CodeRay .ch { color:#04D }
|
59
|
+
.CodeRay .ch .k { color:#04D }
|
60
|
+
.CodeRay .ch .dl { color:#039 }
|
61
|
+
|
62
|
+
.CodeRay .cl { color:#458; font-weight:bold }
|
63
|
+
.CodeRay .cm { color:#A08; font-weight:bold }
|
64
|
+
.CodeRay .co { color:teal; }
|
65
|
+
.CodeRay .cr { color:#0A0 }
|
66
|
+
.CodeRay .cv { color:#369 }
|
67
|
+
.CodeRay .de { color:#B0B; }
|
68
|
+
.CodeRay .df { color:#099; font-weight:bold }
|
69
|
+
.CodeRay .di { color:#088; font-weight:bold }
|
70
|
+
.CodeRay .dl { color:black }
|
71
|
+
.CodeRay .do { color:#970 }
|
72
|
+
.CodeRay .dt { color:#34b }
|
73
|
+
.CodeRay .ds { color:#D42; font-weight:bold }
|
74
|
+
.CodeRay .e { color:#666; font-weight:bold }
|
75
|
+
.CodeRay .en { color:#800; font-weight:bold }
|
76
|
+
.CodeRay .er { color:#F00; background-color:#FAA }
|
77
|
+
.CodeRay .ex { color:#C00; font-weight:bold }
|
78
|
+
.CodeRay .fl { color:#099; }
|
79
|
+
.CodeRay .fu { color:#900; font-weight:bold }
|
80
|
+
.CodeRay .gv { color:teal; font-weight:bold }
|
81
|
+
.CodeRay .hx { color:#058; font-weight:bold }
|
82
|
+
.CodeRay .i { color:#099; }
|
83
|
+
.CodeRay .ic { color:#B44; font-weight:bold }
|
84
|
+
|
85
|
+
.CodeRay .il { color: black }
|
86
|
+
.CodeRay .il .il { background: #ccc }
|
87
|
+
.CodeRay .il .il .il { background: #bbb }
|
88
|
+
.CodeRay .il .idl { color: #D14; }
|
89
|
+
.CodeRay .idl { color: #D14; }
|
90
|
+
|
91
|
+
.CodeRay .im { color:#f00; }
|
92
|
+
.CodeRay .in { color:#B2B; font-weight:bold }
|
93
|
+
.CodeRay .iv { color:teal }
|
94
|
+
.CodeRay .la { color:#970; font-weight:bold }
|
95
|
+
.CodeRay .lv { color:#963 }
|
96
|
+
.CodeRay .oc { color:#40E; font-weight:bold }
|
97
|
+
.CodeRay .of { color:#000; font-weight:bold }
|
98
|
+
.CodeRay .op { }
|
99
|
+
.CodeRay .pc { font-weight:bold }
|
100
|
+
.CodeRay .pd { color:#369; font-weight:bold }
|
101
|
+
.CodeRay .pp { color:#579; }
|
102
|
+
.CodeRay .ps { color:#00C; font-weight:bold }
|
103
|
+
.CodeRay .pt { color:#074; font-weight:bold }
|
104
|
+
.CodeRay .r, .kw { color:#000; font-weight:bold }
|
105
|
+
|
106
|
+
.CodeRay .ke { color: #808; }
|
107
|
+
.CodeRay .ke .dl { color: #606; }
|
108
|
+
.CodeRay .ke .ch { color: #80f; }
|
109
|
+
.CodeRay .vl { color: #088; }
|
110
|
+
|
111
|
+
.CodeRay .rx { background-color:#fff0ff }
|
112
|
+
.CodeRay .rx .k { color:#808 }
|
113
|
+
.CodeRay .rx .dl { color:#404 }
|
114
|
+
.CodeRay .rx .mod { color:#C2C }
|
115
|
+
.CodeRay .rx .fu { color:#404; font-weight: bold }
|
116
|
+
|
117
|
+
.CodeRay .s { color: #D20; }
|
118
|
+
.CodeRay .s .s { }
|
119
|
+
.CodeRay .s .s .s { background-color:#ffd0d0 }
|
120
|
+
.CodeRay .s .k { color: #D14; }
|
121
|
+
.CodeRay .s .ch { color: #D14; }
|
122
|
+
.CodeRay .s .dl { color: #D14; }
|
123
|
+
|
124
|
+
.CodeRay .sh { color:#D14 }
|
125
|
+
.CodeRay .sh .k { }
|
126
|
+
.CodeRay .sh .dl { color:#D14 }
|
127
|
+
|
128
|
+
.CodeRay .sy { color:#990073 }
|
129
|
+
.CodeRay .sy .k { color:#A60 }
|
130
|
+
.CodeRay .sy .dl { color:#630 }
|
131
|
+
|
132
|
+
.CodeRay .ta { color:#070 }
|
133
|
+
.CodeRay .tf { color:#070; font-weight:bold }
|
134
|
+
.CodeRay .ts { color:#D70; font-weight:bold }
|
135
|
+
.CodeRay .ty { color:#339; font-weight:bold }
|
136
|
+
.CodeRay .v { color:#036 }
|
137
|
+
.CodeRay .xt { color:#444 }
|
138
|
+
|
139
|
+
.CodeRay .ins { background: #afa; }
|
140
|
+
.CodeRay .del { background: #faa; }
|
141
|
+
.CodeRay .chg { color: #aaf; background: #007; }
|
142
|
+
.CodeRay .head { color: #f8f; background: #505 }
|
143
|
+
|
144
|
+
.CodeRay .ins .ins { color: #080; font-weight:bold }
|
145
|
+
.CodeRay .del .del { color: #800; font-weight:bold }
|
146
|
+
.CodeRay .chg .chg { color: #66f; }
|
147
|
+
.CodeRay .head .head { color: #f4f; }
|
data/styles/default.css
CHANGED
@@ -38,20 +38,21 @@ body {
|
|
38
38
|
text-align: center; }
|
39
39
|
.titlepage h1 {
|
40
40
|
font-size: 2.5em;
|
41
|
+
line-height: 1.2em;
|
41
42
|
font-weight: bold;
|
42
|
-
line-height: 1.5em;
|
43
43
|
margin-bottom: 0.2em; }
|
44
44
|
|
45
45
|
.halftitlepage h1 {
|
46
46
|
font-size: 2.5em;
|
47
47
|
font-weight: bold;
|
48
|
-
line-height: 1.5em;
|
49
48
|
margin-bottom: 0.2em; }
|
50
49
|
.halftitlepage h2 {
|
51
50
|
font-size: 1.1em;
|
52
51
|
font-style: italic;
|
53
52
|
font-weight: bold;
|
54
|
-
|
53
|
+
padding-top: 0;
|
54
|
+
margin-top: 0;
|
55
|
+
line-height: 2.5em;
|
55
56
|
margin-bottom: 0.5em;
|
56
57
|
prince-bookmark-level: none; }
|
57
58
|
|
@@ -59,7 +60,9 @@ body {
|
|
59
60
|
font-size: 1.1em;
|
60
61
|
font-style: italic;
|
61
62
|
font-weight: bold;
|
62
|
-
|
63
|
+
padding-top: 0;
|
64
|
+
margin-top: 0;
|
65
|
+
line-height: 2.5em;
|
63
66
|
margin-bottom: 0.5em;
|
64
67
|
prince-bookmark-level: none; }
|
65
68
|
|
@@ -126,11 +129,16 @@ sup {
|
|
126
129
|
margin: auto;
|
127
130
|
text-align: center; }
|
128
131
|
|
132
|
+
code {
|
133
|
+
font-size: 0.8em;
|
134
|
+
}
|
135
|
+
|
129
136
|
.note, .important, .tip, .caution, .box {
|
130
|
-
border: 1px solid #
|
137
|
+
border: 1px solid #CCC;
|
131
138
|
display: block;
|
132
139
|
margin: 0.5em auto;
|
133
|
-
padding:
|
140
|
+
padding: 1em;
|
141
|
+
padding-top: 0em;
|
134
142
|
width: 600px;
|
135
143
|
background: #EEE;
|
136
144
|
color: #1F1F1F; }
|
@@ -146,7 +154,10 @@ sup {
|
|
146
154
|
.box-title {
|
147
155
|
display: block;
|
148
156
|
text-align: center;
|
149
|
-
font-weight: bold;
|
157
|
+
font-weight: bold;
|
158
|
+
font-size: 120%;
|
159
|
+
margin: 0.5em;
|
160
|
+
}
|
150
161
|
|
151
162
|
.comment {
|
152
163
|
display: block;
|
@@ -201,20 +212,6 @@ a {
|
|
201
212
|
a:hover {
|
202
213
|
color: #005b91; }
|
203
214
|
|
204
|
-
.code > pre {
|
205
|
-
-webkit-border-radius: 5px;
|
206
|
-
-moz-border-radius: 5px;
|
207
|
-
border-radius: 5px;
|
208
|
-
background-color: #222;
|
209
|
-
font-family: 'Courier New', 'Terminal', monospace;
|
210
|
-
color: #E6E0DB;
|
211
|
-
padding: 20px;
|
212
|
-
overflow: auto hidden;
|
213
|
-
margin: 20px 0 20px 0; }
|
214
|
-
|
215
|
-
code, .CodeRay {
|
216
|
-
font-size: 0.8em; }
|
217
|
-
|
218
215
|
span.line-numbers {
|
219
216
|
margin: 0;
|
220
217
|
padding: 3px; }
|
@@ -251,7 +248,7 @@ td p, td ul, td ol {
|
|
251
248
|
|
252
249
|
/* FONTS */
|
253
250
|
body {
|
254
|
-
font-family:
|
251
|
+
font-family: 'Crimson Text', 'Palatino', 'Bookman', 'Georgia', 'Times'; }
|
255
252
|
|
256
253
|
code, pre {
|
257
254
|
font-family: "Droid Sans Mono", "Consolas", "Monaco", "Courier", "Monospace"; }
|
data/styles/pagination.css
CHANGED
@@ -93,6 +93,36 @@ ol.toc {
|
|
93
93
|
.toc ol ol ol ol li[class~=appendix]::before {
|
94
94
|
content: counter(appendix1, upper-latin) "." counter(toc2) "." counter(toc3) "." counter(toc4) "." counter(toc5) " "; }
|
95
95
|
|
96
|
+
h2, section h1 {
|
97
|
+
padding-top: 2em;
|
98
|
+
string-set: chapter-title content();
|
99
|
+
page-break-before: always; }
|
100
|
+
|
101
|
+
.halftitlepage h2, .titlepage h2 {
|
102
|
+
page-break-before: avoid; }
|
103
|
+
|
104
|
+
.bodymatter .chapter h2, .bodymatter .chapter h1 {
|
105
|
+
counter-increment: h2;
|
106
|
+
counter-reset: h3; }
|
107
|
+
|
108
|
+
.backmatter h2, .backmatter h1 {
|
109
|
+
counter-increment: a2;
|
110
|
+
counter-reset: h3; }
|
111
|
+
|
112
|
+
.bodymatter h3, .backmatter h3, .bodymatter section h1, .backmatter section h1 {
|
113
|
+
counter-increment: h3;
|
114
|
+
counter-reset: h4; }
|
115
|
+
|
116
|
+
.bodymatter h4, .backmatter h4, .bodymatter section section h1, .backmatter section section h1 {
|
117
|
+
counter-increment: h4;
|
118
|
+
counter-reset: h5; }
|
119
|
+
|
120
|
+
.bodymatter h5, .backmatter h5, .bodymatter section section section h1, .backmatter section section section h1 {
|
121
|
+
counter-increment: h5; }
|
122
|
+
|
123
|
+
h1, h2, h3, h4, h5 {
|
124
|
+
page-break-after: avoid; }
|
125
|
+
|
96
126
|
div.frontmatter {
|
97
127
|
page: frontmatter; }
|
98
128
|
div.backmatter {
|
@@ -129,36 +159,6 @@ div.backmatter {
|
|
129
159
|
.backmatter h5::before, .bodymatter section section section section h2:before {
|
130
160
|
content: counter(a2, upper-latin) "." counter(h3) "." counter(h4) "." counter(h5) " "; }
|
131
161
|
|
132
|
-
h2, section h1 {
|
133
|
-
padding-top: 2em;
|
134
|
-
string-set: chapter-title content();
|
135
|
-
page-break-before: always; }
|
136
|
-
|
137
|
-
.halftitlepage h2, .titlepage h2 {
|
138
|
-
page-break-before: avoid; }
|
139
|
-
|
140
|
-
.bodymatter h2, .bodymatter h1 {
|
141
|
-
counter-increment: h2;
|
142
|
-
counter-reset: h3; }
|
143
|
-
|
144
|
-
.backmatter h2, .backmatter h1 {
|
145
|
-
counter-increment: a2;
|
146
|
-
counter-reset: h3; }
|
147
|
-
|
148
|
-
.bodymatter h3, .backmatter h3, .bodymatter section h1, .backmatter section h1 {
|
149
|
-
counter-increment: h3;
|
150
|
-
counter-reset: h4; }
|
151
|
-
|
152
|
-
.bodymatter h4, .backmatter h4, .bodymatter section section h1, .backmatter section section h1 {
|
153
|
-
counter-increment: h4;
|
154
|
-
counter-reset: h5; }
|
155
|
-
|
156
|
-
.bodymatter h5, .backmatter h5, .bodymatter section section section h1, .backmatter section section section h1 {
|
157
|
-
counter-increment: h5; }
|
158
|
-
|
159
|
-
h1, h2, h3, h4, h5 {
|
160
|
-
page-break-after: avoid; }
|
161
|
-
|
162
162
|
.box, .note, .important, .tip, .caution, .code {
|
163
163
|
page-break-inside: avoid; }
|
164
164
|
|
data/tasks/generate.rake
CHANGED
@@ -18,7 +18,7 @@ namespace :generate do
|
|
18
18
|
task :styles => [:document] do
|
19
19
|
if Glyph['document.styles'].in?(['link', 'import']) && !Glyph.lite? then
|
20
20
|
info "Copying stylesheets..."
|
21
|
-
output =
|
21
|
+
output = complex_output? ? 'tmp' : Glyph['document.output']
|
22
22
|
out_dir = Glyph::PROJECT/"output/#{output}/styles"
|
23
23
|
Glyph.document.styles.each do |f|
|
24
24
|
styles_dir = f.parent.to_s.include?(Glyph::HOME/'styles') ? Glyph::HOME/'styles' : Glyph::PROJECT/'styles'
|
@@ -27,7 +27,7 @@ namespace :generate do
|
|
27
27
|
dir.mkpath
|
28
28
|
case
|
29
29
|
when f.extname == ".css" then
|
30
|
-
file_copy f, dir/f.basename
|
30
|
+
file_copy f, dir/f.basename
|
31
31
|
when f.extname == ".sass" then
|
32
32
|
style = Sass::Engine.new(file_load(f.to_s)).render
|
33
33
|
out_file = dir/f.basename.to_s.gsub(/\.sass$/, '.css')
|
@@ -62,11 +62,11 @@ namespace :generate do
|
|
62
62
|
info "Generating HTML file..."
|
63
63
|
if Glyph.lite? then
|
64
64
|
out = Pathname.new Glyph['document.output_dir']
|
65
|
-
file =
|
65
|
+
file = complex_output? ? Glyph['document.filename']+".html" : Glyph['document.output_file']
|
66
66
|
else
|
67
|
-
out =
|
67
|
+
out = complex_output? ? 'tmp' : Glyph['document.output']
|
68
68
|
out = Glyph::PROJECT/"output/#{out}"
|
69
|
-
extension =
|
69
|
+
extension = complex_output? ? Glyph["output.html.extension"] : Glyph["output.#{Glyph['document.output']}.extension"]
|
70
70
|
file = "#{Glyph['document.filename']}#{extension}"
|
71
71
|
end
|
72
72
|
out.mkpath
|
@@ -77,6 +77,41 @@ namespace :generate do
|
|
77
77
|
desc "Create a standalone HTML 5 file"
|
78
78
|
task :html5 => [:html] do; end
|
79
79
|
|
80
|
+
task :calibre => [:html] do
|
81
|
+
out = Glyph['document.output']
|
82
|
+
output_cfg = "output.#{out}"
|
83
|
+
# TODO: support other e-book renderers
|
84
|
+
unless Glyph["#{output_cfg}.generator"] == "calibre" then
|
85
|
+
error "Glyph cannot generate e-book. At present, output.#{out}.generator can only be set to 'calibre'"
|
86
|
+
end
|
87
|
+
Glyph.info "Generating #{Glyph['document.output'].upcase} e-book..."
|
88
|
+
options = Glyph[output_cfg][:calibre].dup
|
89
|
+
options[:isbn] = Glyph['document.isbn'] unless Glyph["document.isbn"].blank?
|
90
|
+
options[:cover] = "#{Glyph::PROJECT}/images/#{Glyph['document.cover']}" unless Glyph["document.cover"].blank?
|
91
|
+
options[:title] = Glyph["document.title"]
|
92
|
+
options[:authors] = Glyph["document.author"]
|
93
|
+
html_file = "#{Glyph::PROJECT}/output/tmp/#{Glyph['document.filename']}.html"
|
94
|
+
out_dir = "#{Glyph::PROJECT}/output/#{out}"
|
95
|
+
out_file = "#{Glyph['document.filename']}.#{out}"
|
96
|
+
out_path = Pathname.new "#{out_dir}/#{out_file}"
|
97
|
+
Pathname.new(out_dir).mkpath
|
98
|
+
calibre_cmd = "ebook-convert #{html_file} #{out_path} #{options.to_options}"
|
99
|
+
run_external_command calibre_cmd
|
100
|
+
# Remove stylesheets and images (copied by default to output directory)
|
101
|
+
(Pathname.new(out_dir)/"images").rmtree rescue nil
|
102
|
+
(Pathname.new(out_dir)/"styles").rmtree rescue nil
|
103
|
+
if out_path.exist? then
|
104
|
+
info "'#{out_file}' generated successfully."
|
105
|
+
else
|
106
|
+
error "An error occurred while generating #{out_file}"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
[:mobi, :epub].each do |out|
|
111
|
+
desc "Create an e-book file in #{out} format"
|
112
|
+
task out => [:calibre] do; end
|
113
|
+
end
|
114
|
+
|
80
115
|
desc "Create multiple HTML files"
|
81
116
|
task :web => [:images, :styles] do
|
82
117
|
info "Generating HTML files..."
|
@@ -90,13 +125,13 @@ namespace :generate do
|
|
90
125
|
out.mkpath
|
91
126
|
index_layout = Glyph["output.#{Glyph['document.output']}.layouts.index"] || :index
|
92
127
|
# Generate index topic
|
93
|
-
context = {}
|
128
|
+
context = {}
|
94
129
|
context[:document] = Glyph::Document.new(Glyph::DocumentNode.new).inherit_from(Glyph.document, :topics => false)
|
95
|
-
context[:source] = {:name => "layout
|
130
|
+
context[:source] = {:name => "layout/#{index_layout}", :file => "layouts/#{index_layout}.glyph"}
|
96
131
|
# Do not display errors (already displayed when document is finalized).
|
97
132
|
q = Glyph['system.quiet']
|
98
133
|
Glyph['system.quiet'] = true
|
99
|
-
index_topic = Glyph::Interpreter.new("layout
|
134
|
+
index_topic = Glyph::Interpreter.new("layout/#{index_layout}[]", context).document.output
|
100
135
|
Glyph['system.quiet'] = q
|
101
136
|
file_write out/"index.html", index_topic
|
102
137
|
# Generate all topics
|
@@ -114,8 +149,8 @@ namespace :generate do
|
|
114
149
|
desc "Create multiple HTML 5 files"
|
115
150
|
task :web5 => [:web] do; end
|
116
151
|
|
117
|
-
desc "Create a pdf file"
|
118
|
-
task :pdf
|
152
|
+
desc "Create a pdf file (do not call directly)"
|
153
|
+
task :pdf do
|
119
154
|
info "Generating PDF file..."
|
120
155
|
if Glyph.lite? then
|
121
156
|
out = Pathname.new Glyph['document.output_dir']
|
@@ -123,18 +158,13 @@ namespace :generate do
|
|
123
158
|
file = Glyph['document.output_file']
|
124
159
|
else
|
125
160
|
out = Glyph::PROJECT/"output/pdf"
|
126
|
-
src = Glyph::PROJECT/"output/
|
161
|
+
src = Glyph::PROJECT/"output/tmp/#{Glyph['document.filename']}.html"
|
127
162
|
file = "#{Glyph['document.filename']}.pdf"
|
128
163
|
end
|
129
164
|
out.mkpath
|
130
165
|
generate_pdf = lambda do |path, cmd|
|
131
|
-
ENV['PATH'] += path if RUBY_PLATFORM.match /mswin/
|
132
|
-
|
133
|
-
pipe.sync = true
|
134
|
-
while str = pipe.gets do
|
135
|
-
puts str
|
136
|
-
end
|
137
|
-
end
|
166
|
+
ENV['PATH'] += path if RUBY_PLATFORM.match /mswin/
|
167
|
+
run_external_command cmd
|
138
168
|
if (out/file).exist? then
|
139
169
|
info "'#{file}' generated successfully."
|
140
170
|
else
|
@@ -152,4 +182,10 @@ namespace :generate do
|
|
152
182
|
end
|
153
183
|
end
|
154
184
|
|
185
|
+
desc "Create a pdf file through html"
|
186
|
+
task :pdf_through_html => [:html, :pdf] do; end
|
187
|
+
|
188
|
+
desc "Create a pdf file through html5"
|
189
|
+
task :pdf_through_html5 => [:html5, :pdf] do; end
|
190
|
+
|
155
191
|
end
|