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
@@ -1,38 +1,38 @@
|
|
1
1
|
stats_for[
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
@title[all snippets]
|
3
|
+
@object[all snippets]
|
4
|
+
@command[--snippets]
|
5
|
+
@example[
|
6
6
|
===== Snippets
|
7
7
|
-- Total Snippets: 21
|
8
8
|
-- Total Used Snippets: 21
|
9
9
|
-- Total Unused Snippets: 0
|
10
10
|
-- Snippets:
|
11
|
-
bin_params called_on_files coderay filter_by_ext
|
12
|
-
glang htmlcode img_attrs img_file
|
13
|
-
markups only_after_declaration only_defined_through opt
|
14
|
-
referenced_with_path sq_esc unsafe uv
|
15
|
-
|
11
|
+
bin_params called_on_files coderay filter_by_ext
|
12
|
+
glang htmlcode img_attrs img_file
|
13
|
+
markups only_after_declaration only_defined_through opt
|
14
|
+
referenced_with_path sq_esc unsafe uv
|
15
|
+
rubydoc
|
16
16
|
-- Used Snippets:
|
17
|
-
bin_params called_on_files coderay filter_by_ext
|
18
|
-
glang htmlcode img_attrs img_file
|
19
|
-
markups only_after_declaration only_defined_through opt
|
20
|
-
referenced_with_path sq_esc unsafe uv
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
bin_params called_on_files coderay filter_by_ext
|
18
|
+
glang htmlcode img_attrs img_file
|
19
|
+
markups only_after_declaration only_defined_through opt
|
20
|
+
referenced_with_path sq_esc unsafe uv
|
21
|
+
rubydoc
|
22
|
+
]
|
23
|
+
@remarks[
|
24
24
|
* Information on snippet usage and definitions is available only when displaying statistics for a single snippet.
|
25
|
-
|
25
|
+
]
|
26
26
|
]
|
27
27
|
stats_for[
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
===== Snippet '
|
28
|
+
@title[a single snippet]
|
29
|
+
@object[a single snippet (e.g. code[rubydoc])]
|
30
|
+
@command[--snippet=rubydoc]
|
31
|
+
@example[
|
32
|
+
===== Snippet 'rubydoc'
|
33
33
|
-- Definition:
|
34
34
|
-------------------
|
35
|
-
http://
|
35
|
+
http://rubydoc.info/gems/glyph
|
36
36
|
-------------------
|
37
37
|
-- Total Used Instances: 18
|
38
38
|
-- Usage Details:
|
@@ -43,8 +43,8 @@ http://yardoc.org/docs/h3rald-glyph
|
|
43
43
|
- text/extending/validators.glyph (1)
|
44
44
|
- text/macros/macros_core.glyph (2)
|
45
45
|
- text/stats/macros.glyph (1)
|
46
|
-
|
47
|
-
|
46
|
+
]
|
47
|
+
@remarks[
|
48
48
|
* Nested snippets appear as within the file containing the top-level snippet.
|
49
|
-
|
49
|
+
]
|
50
50
|
]
|
data/book/text/stats/stats.glyph
CHANGED
@@ -1,25 +1,24 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
def:[stats_for|
|
2
|
+
section[
|
3
|
+
@title[Displaying stats about {{title}}]
|
4
|
+
txt[To display statistics about {{object}}, execute code[glyph stats {{command}}]. Glyph displays something like this:]
|
5
|
+
highlight[=html|
|
6
6
|
{{example}}
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
=]
|
8
|
+
section[
|
9
|
+
@title[Remarks]
|
10
|
+
txt[
|
11
11
|
{{remarks}}
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
]
|
13
|
+
]
|
14
|
+
]
|
15
15
|
]
|
16
16
|
p[Glyph includes a #>[stats] that can be used to display useful statistics about your Glyph project. If you try running Glyph's command help, you'll see that this command can take quite a few options:
|
17
17
|
]
|
18
18
|
highlight[html|
|
19
19
|
$ glyph help stats
|
20
|
-
|
21
|
-
|
22
|
-
=====================================
|
20
|
+
Glyph v0.5.0
|
21
|
+
|
23
22
|
stats \[options\]
|
24
23
|
Display statistics
|
25
24
|
|
@@ -1,22 +1,22 @@
|
|
1
|
-
|
1
|
+
txt[
|
2
2
|
Although a macro can take any number of parameters, they are often no more than two or three, for readibility reasons: parameters have no name, but their position within a macro is significant.
|
3
3
|
|
4
4
|
If you have something like this:
|
5
|
-
|
5
|
+
]
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
highlight[=html|custom_image[test.png\|50%\|50%\|Test Image]=]
|
8
|
+
txt[
|
9
9
|
it may still be easy enough to understand what each parameter is used for, but:
|
10
10
|
* you can easily forget that the third parameter is the image width
|
11
11
|
* if you don't want to resize the image, you still have to pass _empty parameters_ to the macro, like this: code[=custom_image[test2.png\|\|\|Test Image]=]
|
12
12
|
|
13
13
|
To avoid these situations, some macros which would normally take three or four parameters take optional attributes instead, so you can write:
|
14
|
-
|
15
|
-
|
14
|
+
]
|
15
|
+
highlight[=html|
|
16
16
|
image[test.png
|
17
17
|
@width[50%]
|
18
18
|
@alt[Test Image]
|
19
19
|
@height[50%]
|
20
20
|
]=]
|
21
|
-
|
22
|
-
|
21
|
+
p[More verbose, of course, but definitely more readable. In this way, if you won't want to scale an image, you can safely omit the code[@width] and code[@height] attributes.]
|
22
|
+
note[Like parameters, attributes can contain other macros, too.]
|
@@ -1,9 +1,9 @@
|
|
1
|
-
|
1
|
+
txt[
|
2
2
|
If you're a programmer, chances are that you're going to include some source code in your articles and books. Glyph offers two ways to format code blocks effortlessly: the %>[codeblock], which simply wraps text into @<pre>@ and @<code>@ tags, or the %>[highlight]. The last one requires either &[coderay] or &[uv], but it provides syntax highlighting for the most common programming languages.
|
3
3
|
|
4
4
|
Cosider the following piece of ruby code:
|
5
|
-
|
6
|
-
|
5
|
+
]
|
6
|
+
highlight[=mediawiki|
|
7
7
|
def find_child(&block)
|
8
8
|
children.each do \|c\|
|
9
9
|
c.descend do \|node, level\|
|
@@ -12,22 +12,22 @@ def find_child(&block)
|
|
12
12
|
end
|
13
13
|
nil
|
14
14
|
end
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
=]
|
16
|
+
p[It can be wrapped in a highlight macro, like so:]
|
17
|
+
highlight[=mediawiki|
|
18
18
|
highlight[\=ruby\|
|
19
19
|
def find_child(&block)
|
20
|
-
children.each do
|
21
|
-
c.descend do
|
20
|
+
children.each do \\\/\|c\\\/\|
|
21
|
+
c.descend do \\\/\|node, level\\\/\|
|
22
22
|
return node if block.call(node)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
nil
|
26
26
|
end
|
27
27
|
\=]
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
=]
|
29
|
+
p[...to produce the following, using the $[filters.highlighter] highlighter:]
|
30
|
+
highlight[=ruby|
|
31
31
|
def find_child(&block)
|
32
32
|
children.each do \|c\|
|
33
33
|
c.descend do \|node, level\|
|
@@ -36,11 +36,11 @@ def find_child(&block)
|
|
36
36
|
end
|
37
37
|
nil
|
38
38
|
end
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
=]
|
40
|
+
box[Some Remarks|
|
41
|
+
txt[
|
42
42
|
* Highlighters require some configuration. For more information on relevant configuration settings, see the =>[#cfg_filters|filters.*] configuration settings.
|
43
43
|
* If you're using the %>[highlight] together within the %>[textile], you must wrap the macro call within @<notextile>@ tags.
|
44
44
|
* You must always escape pipes (@\|@) with the code or the highlight macro.
|
45
|
-
|
46
|
-
|
45
|
+
]
|
46
|
+
]
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
txt[
|
2
2
|
Sometimes you may want text to be included in a document only if certain conditions are satisfied. For example, you may want to display a disclaimer section only if the document is a draft (see the $>[document.draft]), or use a particular stylesheet only if when you generate a PDF document.
|
3
3
|
|
4
4
|
To do so, you can use the %>[condition] (aliased by @?@), and a set of additional macros that can be used as conditional operators i.e.:
|
@@ -6,16 +6,15 @@ To do so, you can use the %>[condition] (aliased by @?@), and a set of additiona
|
|
6
6
|
* %>[not]
|
7
7
|
* %>[and]
|
8
8
|
* %>[or]
|
9
|
-
* %>[match]
|
10
9
|
|
11
10
|
Consider the following code:
|
12
|
-
|
13
|
-
|
11
|
+
]
|
12
|
+
highlight[=html|
|
14
13
|
?[$[document.draft]\|
|
15
14
|
This is a first draft of the Glyph Book\|
|
16
15
|
This is the official version of the Glyph Book]
|
17
|
-
|
18
|
-
|
16
|
+
=]
|
17
|
+
txt[
|
19
18
|
In this case, if @document.draft@ is set to @true@, "This is a first draft of the Glyph Book" will be displayed; if not, "This is the official version of the Glyph Book" will be displayed instead.
|
20
19
|
|
21
20
|
The %>[condition] takes up to three parameters:
|
@@ -24,8 +23,8 @@ The %>[condition] takes up to three parameters:
|
|
24
23
|
# _(Optional)_ the text to include in the document if the condition is _not_ satisfied.
|
25
24
|
|
26
25
|
Note that _all_ parameters can contain macros, of course, so you can write things like:
|
27
|
-
|
28
|
-
|
26
|
+
]
|
27
|
+
highlight[=html|
|
29
28
|
?[and[
|
30
29
|
eq[$[document.output]\|pdf]
|
31
30
|
\|
|
@@ -33,13 +32,13 @@ Note that _all_ parameters can contain macros, of course, so you can write thing
|
|
33
32
|
]
|
34
33
|
\|
|
35
34
|
style[pagination.css]]
|
36
|
-
|
37
|
-
|
35
|
+
=]
|
36
|
+
p[In this case, the code[pagination.css] stylesheet is included only when you're generating a PDF document using Prince XML.]
|
38
37
|
section[
|
39
|
-
|
40
|
-
|
38
|
+
@title[Results of conditional expressions]
|
39
|
+
txt[
|
41
40
|
The %>[condition] in Glyph works in a similar way as conditionals in programming languages: if the conditional expression (supplied as first parameter) is satisfied then the second parameter is executed or displayed. But when is a conditional expression satisfied? Glyph is a simple mini-language to perform text manipulation, and has no types, it can only understand text, therefore:
|
42
41
|
* A conditional expression is satisfied if it evaluates to a non-empty string except "false".
|
43
42
|
* A conditional expression is not satisfied if it evaluates to an empty string or the string "false".
|
44
|
-
|
43
|
+
]
|
45
44
|
]
|
@@ -47,7 +47,7 @@ This is another section.
|
|
47
47
|
]
|
48
48
|
tr[
|
49
49
|
td[code[\\\=]]
|
50
|
-
td[code[
|
50
|
+
td[code[\/=]]
|
51
51
|
td[Equal signs do not have to be escaped by default, but an escaped equal sign will evaluate to iself.]
|
52
52
|
]
|
53
53
|
tr[
|
@@ -56,9 +56,9 @@ This is another section.
|
|
56
56
|
td[Pipes must be escaped (even within quoting macros) unless they are used to separate macro parameters.]
|
57
57
|
]
|
58
58
|
tr[
|
59
|
-
td[code[
|
59
|
+
td[code[\\/]]
|
60
60
|
td[]
|
61
|
-
td[An escaped dot evaluates to nothing. Useful to separate macro identifiers from other characters: br[]code[=_
|
61
|
+
td[An escaped dot evaluates to nothing. Useful to separate macro identifiers from other characters: br[]code[=_\\/=>[#link\|This link is emphasized using Textile]_ =]
|
62
62
|
]
|
63
63
|
]
|
64
64
|
]
|
@@ -1,5 +1,59 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
§txt[
|
2
|
+
@title[Turing-completeness]
|
3
|
+
|
4
|
+
As of version 0.5.0, Glyph can be considered _Turing-complete_, as it satisfies the following =>[http://c2.com/cgi/wiki?LanguageRequirementsForTuringCompleteness|requirements for Turing-completeness]:
|
5
|
+
* A conditional construct, implemented via the %>[condition].
|
6
|
+
* Variable assignment, by setting the value of snippets using the %>[snippet:] and of attributes using the %>[attribute:].
|
7
|
+
* (infinite) iteration implemented through the %>[while] or recursion, which is possible thanks to the %>[define:].
|
8
|
+
* A memory model which emulates an infinite store: there are no enforced limits on attribute/snippets allocations and number of algorithms or parameters.
|
9
|
+
]
|
10
|
+
|
11
|
+
§txt[
|
12
|
+
@title[Operations on integer values]
|
13
|
+
|
14
|
+
Glyph can be used to perform operation on integer values (additions, subtractions and multiplications). For example, code[=\/add[2\|3\|7]=] will evaluate to @12@, and code[=\/multiply[add[3\|7]\|subtract[5\|1\|2]]=] will return 20.
|
15
|
+
|
16
|
+
As a more complex example, consider the following @factorial@ macro, which is able to calculate the factorial of a number recursively:
|
17
|
+
|
18
|
+
highlight[=html|
|
19
|
+
def:[factorial\|
|
20
|
+
?[
|
21
|
+
eq[{{0}}\|0]\|1\|
|
22
|
+
multiply[
|
23
|
+
{{0}} \| factorial[subtract[{{0}}\|1]]
|
24
|
+
]
|
25
|
+
]
|
26
|
+
]
|
27
|
+
=]
|
28
|
+
|
29
|
+
If you try executing code[=factorial[5]=], it will evaluate to @120@.
|
30
|
+
|
31
|
+
]
|
32
|
+
§txt[
|
33
|
+
@title[Lexically-scoped attribute assignment]
|
34
|
+
|
35
|
+
=>[#snippets] can be used in a similar way as _variables_ are used in programming languages. Or better, they can be used as _global variables_, as they are visible from anywhere in the Glyph document. If you need something more restricted to, say, a section and all its subsections, you can define your own attributes and use them in a very similar way.
|
36
|
+
|
37
|
+
Consider the following Glyph code:
|
38
|
+
]
|
39
|
+
highlight[=html|
|
40
|
+
let[
|
41
|
+
@:[a\|bits]
|
42
|
+
@:[b\|bobs]
|
43
|
+
section[
|
44
|
+
@title[Something more about attributes]
|
45
|
+
Attributes are like lexically scoped variables. You can use them to store @[a] and @[b].
|
46
|
+
]
|
47
|
+
]
|
48
|
+
=]
|
49
|
+
txt[
|
50
|
+
The %>[let] here only acts as a dummy macro (it does nothing really) to bind attributes using the %>[attribute:] (aliased by code[@:]). Attributes can then be used anywhere within the @let@ macro, so the content of the section reads: "Attributes are like lexically-scoped variables. You can use them to store bits and bobs".
|
51
|
+
|
52
|
+
Note that attributes defined through the %>[attribute:] are... well, attributes! Feel free to use the %>[attribute] to access standard attributes like @title@, etc.
|
53
|
+
]
|
54
|
+
§txt[
|
55
|
+
@title[Evaluating Ruby code]
|
56
|
+
For anything more complex than what described in the previous sections you can also evaluate simple ruby code snippets using the @ruby@ macro (aliased to @%@), like this:
|
3
57
|
* code[=%[2 + 2]=] → 4
|
4
58
|
* code[=%[Time.now]=] → %[Time.now]
|
5
59
|
* code[=%[Glyph::VERSION]=] → %[Glyph::VERSION]
|
@@ -7,4 +61,4 @@
|
|
7
61
|
The scope for the code evaluation is the Kernel module, (with all inclusions required by Glyph itself).
|
8
62
|
|
9
63
|
Although it is possible to retrieve Glyph configuration settings in this way (e.g. code[=%[cfg('document.author')]=]), the %>[config] (aliased to @$@) makes things slightly simpler (e.g. code[=$[document.author]=]).
|
10
|
-
|
64
|
+
]
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
§[
|
2
|
+
@title[File inclusions]
|
3
|
+
@id[file-inclusions]
|
4
|
+
txt[
|
2
5
|
If you're authoring a user manual, a long article, or a book, writing everything inside a single @document.glyph@ file may not be optimal. For this reason, Glyph provides an %>[include] that can be used to include the contents of any file within the @text/@ directory:
|
3
6
|
|
4
7
|
code[=include[general/introduction.textile]=]
|
@@ -10,31 +13,37 @@ When including a text file, an input filter macro is applied to its contents by
|
|
10
13
|
* @.markdown@ or @.md@ → %>[markdown]
|
11
14
|
|
12
15
|
You can override this behavior by setting the @filters.by_file_extensions@ configuration setting to @false@. If no extension is specified, @.glyph@ is assumed.
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
+
]
|
17
|
+
§txt[
|
18
|
+
@title[Remarks]
|
19
|
+
* The %>[include] can also be used to include (and evaluate) ruby files (with a @.rb@ extension). In this case, the ruby file must be placed within the @lib/@ directory of the current project.
|
20
|
+
* The %>[load] macro can be used to include the content of any file _without_ performing any evaluation.
|
21
|
+
]
|
22
|
+
]
|
23
|
+
§[
|
24
|
+
@title[Snippets]
|
25
|
+
@id[snippets]
|
26
|
+
txt[
|
16
27
|
While including the context of an entire file is definitely a useful feature for content reuse, sometimes it can be an overkill. What if, for example, you just want to reuse a short procedure or even a sentence or a single word? In this case, you may want to consider using a _snippet_ instead.
|
17
28
|
|
18
|
-
Snippets
|
29
|
+
Snippets can be defined using the %>[snippet:] (aliased by @&:@) and called by using the %>[snippet] (aliased by @&@). Consider the following simple example:
|
30
|
+
]
|
31
|
+
highlight[=html|
|
32
|
+
&:[markups\|Textile or Markdown]
|
19
33
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
highlight[=yaml|
|
25
|
-
---
|
26
|
-
:glang: Glyph Language
|
27
|
-
:macros: Glyph Macros
|
28
|
-
:sq_esc: \\\|-
|
29
|
-
Square brackets must be escaped
|
30
|
-
unless used as macro delimiters or within a quoting macro.
|
31
|
-
:markups: Textile or Markdown
|
32
|
-
:test: \\\|-
|
33
|
-
This is a
|
34
|
-
Test snippet
|
35
|
-
=]
|
36
|
-
p[You can use code[=&[markups]=] anywhere in your document instead of having to type "\.&[markups]" every time. Additionally, later on you can change the value of the code[markups] snippet only in the code[snippets.yml] file to change it everywhere else in the document.]
|
37
|
-
]
|
38
|
-
tip[
|
34
|
+
Glyph supports &[markups].
|
35
|
+
=]
|
36
|
+
p[You can use code[=&[markups]=] anywhere in your document instead of having to type "\/&[markups]" every time. Additionally, later on you can change the value of the code[markups] to change it everywhere else in the document.]
|
37
|
+
tip[
|
39
38
|
Snippets (or any other macro) can be nested within other snippets. Glyph takes care of checking if you nested snippets or macros mutually and warns you as necessary.
|
40
|
-
|
39
|
+
]
|
40
|
+
]
|
41
|
+
§[
|
42
|
+
@title[Fragments]
|
43
|
+
@id[fragments]
|
44
|
+
txt[As an even simpler alternative to snippets, consider using _fragments_. The %>[fragment] (aliased by @##@) can be used to mark a section of Glyph code as a fragment that can then be _embedded_ using the %>[embed] (aliased by @<=@), like this:]
|
45
|
+
|
46
|
+
highlight[=html|
|
47
|
+
Snippets and fragments ##[good_way\|are a good way to reuse] small chunks of content, while the include and load macros <=[good_way] entire files.
|
48
|
+
=]
|
49
|
+
]
|
@@ -0,0 +1,28 @@
|
|
1
|
+
txt[
|
2
|
+
Glyph macros can be _composed_ with other using the @/@ character. Macro composition can be used instead of nesting, provided that macro containers (also called _dispatchers_ in certain situations) take only one parameter and no attributes.
|
3
|
+
|
4
|
+
For example, the following code:
|
5
|
+
]
|
6
|
+
highlight[=html|
|
7
|
+
?[
|
8
|
+
not[output?[pdf]]\|
|
9
|
+
...
|
10
|
+
]
|
11
|
+
=]
|
12
|
+
|
13
|
+
p[Can be written like this:]
|
14
|
+
|
15
|
+
highlight[=html|
|
16
|
+
?[
|
17
|
+
not/output?[pdf]\|
|
18
|
+
...
|
19
|
+
]
|
20
|
+
=]
|
21
|
+
|
22
|
+
txt[
|
23
|
+
In this case, the %>[not] was composed with the %>[output?], thus removing one level of nesting.
|
24
|
+
|
25
|
+
Composition can be useful to simplify complex Glyph macro constructs, but also for _macro dispatching_. Currently, Glyph supports two _dispatchers_:
|
26
|
+
* The %>[s], used to call almost any method of the Ruby String class.
|
27
|
+
* The %>[xml], used to render raw XML tags.
|
28
|
+
]
|