asciidoctor 1.5.8 → 2.0.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.adoc +162 -17
- data/LICENSE +1 -1
- data/README-de.adoc +12 -13
- data/README-fr.adoc +11 -12
- data/README-jp.adoc +11 -12
- data/README-zh_CN.adoc +12 -13
- data/README.adoc +6 -7
- data/asciidoctor.gemspec +19 -24
- data/bin/asciidoctor +5 -4
- data/data/reference/syntax.adoc +283 -0
- data/data/stylesheets/asciidoctor-default.css +56 -52
- data/data/stylesheets/coderay-asciidoctor.css +7 -9
- data/lib/asciidoctor.rb +171 -232
- data/lib/asciidoctor/abstract_block.rb +96 -105
- data/lib/asciidoctor/abstract_node.rb +118 -139
- data/lib/asciidoctor/attribute_list.rb +10 -14
- data/lib/asciidoctor/block.rb +20 -19
- data/lib/asciidoctor/callouts.rb +4 -2
- data/lib/asciidoctor/cli.rb +3 -2
- data/lib/asciidoctor/cli/invoker.rb +14 -21
- data/lib/asciidoctor/cli/options.rb +64 -54
- data/lib/asciidoctor/converter.rb +357 -185
- data/lib/asciidoctor/converter/composite.rb +40 -48
- data/lib/asciidoctor/converter/docbook5.rb +604 -640
- data/lib/asciidoctor/converter/html5.rb +949 -963
- data/lib/asciidoctor/converter/manpage.rb +569 -548
- data/lib/asciidoctor/converter/template.rb +231 -272
- data/lib/asciidoctor/core_ext.rb +5 -18
- data/lib/asciidoctor/core_ext/float/truncate.rb +19 -0
- data/lib/asciidoctor/core_ext/match_data/names.rb +7 -0
- data/lib/asciidoctor/core_ext/nil_or_empty.rb +1 -0
- data/lib/asciidoctor/core_ext/regexp/is_match.rb +4 -2
- data/lib/asciidoctor/document.rb +399 -377
- data/lib/asciidoctor/extensions.rb +72 -140
- data/lib/asciidoctor/helpers.rb +122 -83
- data/lib/asciidoctor/inline.rb +5 -1
- data/lib/asciidoctor/list.rb +13 -11
- data/lib/asciidoctor/logging.rb +17 -16
- data/lib/asciidoctor/parser.rb +390 -423
- data/lib/asciidoctor/path_resolver.rb +10 -5
- data/lib/asciidoctor/reader.rb +286 -263
- data/lib/asciidoctor/rouge_ext.rb +39 -0
- data/lib/asciidoctor/section.rb +9 -8
- data/lib/asciidoctor/stylesheets.rb +19 -37
- data/lib/asciidoctor/substitutors.rb +364 -509
- data/lib/asciidoctor/syntax_highlighter.rb +238 -0
- data/lib/asciidoctor/syntax_highlighter/coderay.rb +87 -0
- data/lib/asciidoctor/syntax_highlighter/highlightjs.rb +26 -0
- data/lib/asciidoctor/syntax_highlighter/html_pipeline.rb +10 -0
- data/lib/asciidoctor/syntax_highlighter/prettify.rb +27 -0
- data/lib/asciidoctor/syntax_highlighter/pygments.rb +149 -0
- data/lib/asciidoctor/syntax_highlighter/rouge.rb +129 -0
- data/lib/asciidoctor/table.rb +73 -66
- data/lib/asciidoctor/timings.rb +4 -2
- data/lib/asciidoctor/version.rb +2 -1
- data/lib/asciidoctor/writer.rb +30 -0
- data/man/asciidoctor.1 +19 -15
- data/man/asciidoctor.adoc +14 -12
- metadata +69 -216
- data/CONTRIBUTING.adoc +0 -185
- data/Gemfile +0 -60
- data/Rakefile +0 -129
- data/bin/asciidoctor-safe +0 -15
- data/features/open_block.feature +0 -92
- data/features/pass_block.feature +0 -66
- data/features/step_definitions.rb +0 -49
- data/features/text_formatting.feature +0 -57
- data/features/xref.feature +0 -1039
- data/lib/asciidoctor/converter/base.rb +0 -59
- data/lib/asciidoctor/converter/docbook45.rb +0 -93
- data/lib/asciidoctor/converter/factory.rb +0 -226
- data/lib/asciidoctor/core_ext/1.8.7/base64/strict_encode64.rb +0 -6
- data/lib/asciidoctor/core_ext/1.8.7/concurrent/hash.rb +0 -5
- data/lib/asciidoctor/core_ext/1.8.7/hash/key.rb +0 -4
- data/lib/asciidoctor/core_ext/1.8.7/io/binread.rb +0 -6
- data/lib/asciidoctor/core_ext/1.8.7/io/write.rb +0 -5
- data/lib/asciidoctor/core_ext/1.8.7/string/chr.rb +0 -6
- data/lib/asciidoctor/core_ext/1.8.7/string/limit_bytesize.rb +0 -29
- data/lib/asciidoctor/core_ext/1.8.7/symbol/empty.rb +0 -6
- data/lib/asciidoctor/core_ext/1.8.7/symbol/length.rb +0 -6
- data/lib/asciidoctor/core_ext/string/limit_bytesize.rb +0 -10
- data/test/api_test.rb +0 -1240
- data/test/attribute_list_test.rb +0 -242
- data/test/attributes_test.rb +0 -1623
- data/test/blocks_test.rb +0 -3870
- data/test/converter_test.rb +0 -470
- data/test/document_test.rb +0 -1853
- data/test/extensions_test.rb +0 -1560
- data/test/fixtures/asciidoc_index.txt +0 -521
- data/test/fixtures/basic-docinfo-footer.html +0 -6
- data/test/fixtures/basic-docinfo-footer.xml +0 -8
- data/test/fixtures/basic-docinfo.html +0 -1
- data/test/fixtures/basic-docinfo.xml +0 -4
- data/test/fixtures/basic.asciidoc +0 -5
- data/test/fixtures/chapter-a.adoc +0 -3
- data/test/fixtures/child-include.adoc +0 -5
- data/test/fixtures/circle.svg +0 -9
- data/test/fixtures/custom-backends/erb/html5/block_paragraph.html.erb +0 -6
- data/test/fixtures/custom-backends/haml/docbook45/block_paragraph.xml.haml +0 -6
- data/test/fixtures/custom-backends/haml/html5-tweaks/block_paragraph.html.haml +0 -1
- data/test/fixtures/custom-backends/haml/html5/block_paragraph.html.haml +0 -3
- data/test/fixtures/custom-backends/haml/html5/block_sidebar.html.haml +0 -5
- data/test/fixtures/custom-backends/slim/docbook45/block_paragraph.xml.slim +0 -6
- data/test/fixtures/custom-backends/slim/html5/block_paragraph.html.slim +0 -3
- data/test/fixtures/custom-backends/slim/html5/block_sidebar.html.slim +0 -5
- data/test/fixtures/custom-docinfodir/basic-docinfo.html +0 -1
- data/test/fixtures/custom-docinfodir/docinfo.html +0 -1
- data/test/fixtures/docinfo-footer.html +0 -1
- data/test/fixtures/docinfo-footer.xml +0 -9
- data/test/fixtures/docinfo.html +0 -1
- data/test/fixtures/docinfo.xml +0 -3
- data/test/fixtures/doctime-localtime.adoc +0 -2
- data/test/fixtures/dot.gif +0 -0
- data/test/fixtures/encoding.asciidoc +0 -13
- data/test/fixtures/file-with-missing-include.adoc +0 -1
- data/test/fixtures/grandchild-include.adoc +0 -3
- data/test/fixtures/hello-asciidoctor.pdf +0 -69
- data/test/fixtures/include-file.asciidoc +0 -24
- data/test/fixtures/include-file.jsx +0 -8
- data/test/fixtures/include-file.ml +0 -3
- data/test/fixtures/include-file.xml +0 -5
- data/test/fixtures/lists.adoc +0 -96
- data/test/fixtures/master.adoc +0 -5
- data/test/fixtures/mismatched-end-tag.adoc +0 -7
- data/test/fixtures/other-chapters.adoc +0 -11
- data/test/fixtures/outer-include.adoc +0 -5
- data/test/fixtures/parent-include-restricted.adoc +0 -5
- data/test/fixtures/parent-include.adoc +0 -5
- data/test/fixtures/sample.asciidoc +0 -30
- data/test/fixtures/section-a.adoc +0 -4
- data/test/fixtures/stylesheets/custom.css +0 -3
- data/test/fixtures/subdir/index.adoc +0 -3
- data/test/fixtures/subdir/inner-include.adoc +0 -3
- data/test/fixtures/subdir/middle-include.adoc +0 -5
- data/test/fixtures/subs-docinfo.html +0 -2
- data/test/fixtures/subs.adoc +0 -6
- data/test/fixtures/tagged-class-enclosed.rb +0 -25
- data/test/fixtures/tagged-class.rb +0 -23
- data/test/fixtures/tip.gif +0 -0
- data/test/fixtures/unclosed-tag.adoc +0 -3
- data/test/fixtures/unexpected-end-tag.adoc +0 -4
- data/test/invoker_test.rb +0 -745
- data/test/links_test.rb +0 -855
- data/test/lists_test.rb +0 -5151
- data/test/logger_test.rb +0 -211
- data/test/manpage_test.rb +0 -660
- data/test/options_test.rb +0 -262
- data/test/paragraphs_test.rb +0 -562
- data/test/parser_test.rb +0 -742
- data/test/paths_test.rb +0 -395
- data/test/preamble_test.rb +0 -173
- data/test/reader_test.rb +0 -2161
- data/test/sections_test.rb +0 -3575
- data/test/substitutions_test.rb +0 -2066
- data/test/tables_test.rb +0 -2036
- data/test/test_helper.rb +0 -447
- data/test/text_test.rb +0 -309
@@ -1,12 +1,12 @@
|
|
1
|
-
/* Asciidoctor default stylesheet | MIT License |
|
2
|
-
/* Uncomment @import statement
|
1
|
+
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
|
2
|
+
/* Uncomment @import statement when using as custom stylesheet */
|
3
3
|
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
|
4
4
|
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
|
5
5
|
audio,canvas,video{display:inline-block}
|
6
6
|
audio:not([controls]){display:none;height:0}
|
7
7
|
script{display:none!important}
|
8
8
|
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
|
9
|
-
a{background:
|
9
|
+
a{background:none}
|
10
10
|
a:focus{outline:thin dotted}
|
11
11
|
a:active,a:hover{outline:0}
|
12
12
|
h1{font-size:2em;margin:.67em 0}
|
@@ -59,7 +59,7 @@ select{width:100%}
|
|
59
59
|
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
|
60
60
|
a{color:#2156a5;text-decoration:underline;line-height:inherit}
|
61
61
|
a:hover,a:focus{color:#1d4b8f}
|
62
|
-
a img{border:
|
62
|
+
a img{border:0}
|
63
63
|
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
|
64
64
|
p aside{font-size:.875em;line-height:1.35;font-style:italic}
|
65
65
|
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
|
@@ -100,20 +100,23 @@ table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
|
|
100
100
|
table thead,table tfoot{background:#f7f8f7}
|
101
101
|
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
|
102
102
|
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
|
103
|
-
table tr.even,table tr.alt
|
103
|
+
table tr.even,table tr.alt{background:#f8f8f7}
|
104
104
|
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
|
105
105
|
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
|
106
106
|
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
|
107
107
|
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
|
108
108
|
.clearfix::after,.float-group::after{clear:both}
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
pre
|
109
|
+
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
|
110
|
+
:not(pre)>code.nobreak{word-wrap:normal}
|
111
|
+
:not(pre)>code.nowrap{white-space:nowrap}
|
112
|
+
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
|
113
|
+
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
|
114
|
+
pre>code{display:block}
|
115
|
+
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
|
113
116
|
em em{font-style:normal}
|
114
117
|
strong strong{font-weight:400}
|
115
118
|
.keyseq{color:rgba(51,51,51,.8)}
|
116
|
-
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background
|
119
|
+
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
|
117
120
|
.keyseq kbd:first-child{margin-left:0}
|
118
121
|
.keyseq kbd:last-child{margin-right:0}
|
119
122
|
.menuseq,.menuref{color:#000}
|
@@ -154,7 +157,7 @@ p a>code:hover{color:rgba(0,0,0,.9)}
|
|
154
157
|
#toctitle{color:#7a2518;font-size:1.2em}
|
155
158
|
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
|
156
159
|
body.toc2{padding-left:15em;padding-right:0}
|
157
|
-
#toc.toc2{margin-top:0!important;background
|
160
|
+
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
|
158
161
|
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
|
159
162
|
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
|
160
163
|
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
|
@@ -170,7 +173,7 @@ body.toc2.toc-right{padding-left:0;padding-right:20em}}
|
|
170
173
|
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
|
171
174
|
#content #toc>:first-child{margin-top:0}
|
172
175
|
#content #toc>:last-child{margin-bottom:0}
|
173
|
-
#footer{max-width:100%;background
|
176
|
+
#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}
|
174
177
|
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
|
175
178
|
#content{margin-bottom:.625em}
|
176
179
|
.sect1{padding-bottom:.625em}
|
@@ -197,32 +200,35 @@ table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font
|
|
197
200
|
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
|
198
201
|
.exampleblock>.content>:first-child{margin-top:0}
|
199
202
|
.exampleblock>.content>:last-child{margin-bottom:0}
|
200
|
-
.sidebarblock{border-style:solid;border-width:1px;border-color:#
|
203
|
+
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
|
201
204
|
.sidebarblock>:first-child{margin-top:0}
|
202
205
|
.sidebarblock>:last-child{margin-bottom:0}
|
203
206
|
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
|
204
207
|
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
|
205
|
-
.literalblock pre,.listingblock
|
206
|
-
|
207
|
-
.literalblock pre,.
|
208
|
-
|
209
|
-
|
210
|
-
.literalblock pre.nowrap,.literalblock pre.nowrap pre,.listingblock pre.nowrap,.listingblock pre.nowrap pre{white-space:pre;word-wrap:normal}
|
211
|
-
.literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
|
212
|
-
.listingblock pre.highlightjs{padding:0}
|
213
|
-
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
|
214
|
-
.listingblock pre.prettyprint{border-width:0}
|
208
|
+
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
|
209
|
+
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
|
210
|
+
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
|
211
|
+
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
|
212
|
+
.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
|
215
213
|
.listingblock>.content{position:relative}
|
216
|
-
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color
|
214
|
+
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
|
217
215
|
.listingblock:hover code[data-lang]::before{display:block}
|
218
|
-
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color
|
216
|
+
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
|
219
217
|
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
pre.
|
225
|
-
|
218
|
+
.listingblock pre.highlightjs{padding:0}
|
219
|
+
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
|
220
|
+
.listingblock pre.prettyprint{border-width:0}
|
221
|
+
.prettyprint{background:#f7f7f8}
|
222
|
+
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
|
223
|
+
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
|
224
|
+
pre.prettyprint li code[data-lang]::before{opacity:1}
|
225
|
+
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
|
226
|
+
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
|
227
|
+
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
|
228
|
+
table.linenotable td.code{padding-left:.75em}
|
229
|
+
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
|
230
|
+
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
|
231
|
+
pre.pygments .lineno::before{content:"";margin-right:-.125em}
|
226
232
|
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
|
227
233
|
.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
|
228
234
|
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
|
@@ -258,8 +264,7 @@ table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>t
|
|
258
264
|
table.frame-all{border-width:1px}
|
259
265
|
table.frame-sides{border-width:0 1px}
|
260
266
|
table.frame-topbot,table.frame-ends{border-width:1px 0}
|
261
|
-
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd){background:#f8f8f7}
|
262
|
-
table.stripes-none tr,table.stripes-odd tr:nth-of-type(even){background:none}
|
267
|
+
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
|
263
268
|
th.halign-left,td.halign-left{text-align:left}
|
264
269
|
th.halign-right,td.halign-right{text-align:right}
|
265
270
|
th.halign-center,td.halign-center{text-align:center}
|
@@ -271,7 +276,6 @@ tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
|
|
271
276
|
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
|
272
277
|
p.tableblock>code:only-child{background:none;padding:0}
|
273
278
|
p.tableblock{font-size:1em}
|
274
|
-
td>div.verse{white-space:pre}
|
275
279
|
ol{margin-left:1.75em}
|
276
280
|
ul li ol{margin-left:1.5em}
|
277
281
|
dl dd{margin-left:1.125em}
|
@@ -330,37 +334,37 @@ div.unbreakable{page-break-inside:avoid}
|
|
330
334
|
.overline{text-decoration:overline}
|
331
335
|
.line-through{text-decoration:line-through}
|
332
336
|
.aqua{color:#00bfbf}
|
333
|
-
.aqua-background{background
|
337
|
+
.aqua-background{background:#00fafa}
|
334
338
|
.black{color:#000}
|
335
|
-
.black-background{background
|
339
|
+
.black-background{background:#000}
|
336
340
|
.blue{color:#0000bf}
|
337
|
-
.blue-background{background
|
341
|
+
.blue-background{background:#0000fa}
|
338
342
|
.fuchsia{color:#bf00bf}
|
339
|
-
.fuchsia-background{background
|
343
|
+
.fuchsia-background{background:#fa00fa}
|
340
344
|
.gray{color:#606060}
|
341
|
-
.gray-background{background
|
345
|
+
.gray-background{background:#7d7d7d}
|
342
346
|
.green{color:#006000}
|
343
|
-
.green-background{background
|
347
|
+
.green-background{background:#007d00}
|
344
348
|
.lime{color:#00bf00}
|
345
|
-
.lime-background{background
|
349
|
+
.lime-background{background:#00fa00}
|
346
350
|
.maroon{color:#600000}
|
347
|
-
.maroon-background{background
|
351
|
+
.maroon-background{background:#7d0000}
|
348
352
|
.navy{color:#000060}
|
349
|
-
.navy-background{background
|
353
|
+
.navy-background{background:#00007d}
|
350
354
|
.olive{color:#606000}
|
351
|
-
.olive-background{background
|
355
|
+
.olive-background{background:#7d7d00}
|
352
356
|
.purple{color:#600060}
|
353
|
-
.purple-background{background
|
357
|
+
.purple-background{background:#7d007d}
|
354
358
|
.red{color:#bf0000}
|
355
|
-
.red-background{background
|
359
|
+
.red-background{background:#fa0000}
|
356
360
|
.silver{color:#909090}
|
357
|
-
.silver-background{background
|
361
|
+
.silver-background{background:#bcbcbc}
|
358
362
|
.teal{color:#006060}
|
359
|
-
.teal-background{background
|
363
|
+
.teal-background{background:#007d7d}
|
360
364
|
.white{color:#bfbfbf}
|
361
|
-
.white-background{background
|
365
|
+
.white-background{background:#fafafa}
|
362
366
|
.yellow{color:#bfbf00}
|
363
|
-
.yellow-background{background
|
367
|
+
.yellow-background{background:#fafa00}
|
364
368
|
span.icon>.fa{cursor:default}
|
365
369
|
a span.icon>.fa{cursor:inherit}
|
366
370
|
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
|
@@ -369,7 +373,7 @@ a span.icon>.fa{cursor:inherit}
|
|
369
373
|
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
|
370
374
|
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
|
371
375
|
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
|
372
|
-
.conum[data-value]{display:inline-block;color:#fff!important;background
|
376
|
+
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
|
373
377
|
.conum[data-value] *{color:#fff!important}
|
374
378
|
.conum[data-value]+b{display:none}
|
375
379
|
.conum[data-value]::after{content:attr(data-value)}
|
@@ -382,7 +386,7 @@ p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
|
|
382
386
|
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
|
383
387
|
p{margin-bottom:1.25rem}
|
384
388
|
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
|
385
|
-
.exampleblock>.content{background
|
389
|
+
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
|
386
390
|
.print-only{display:none!important}
|
387
391
|
@page{margin:1.25cm .75cm}
|
388
392
|
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
|
@@ -1,14 +1,12 @@
|
|
1
1
|
/* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
|
2
|
-
|
3
|
-
.CodeRay .line-numbers{border-right:1px solid
|
4
|
-
.CodeRay span.line-numbers{display:inline-block;margin-right:.
|
5
|
-
.CodeRay .line-numbers strong{color
|
6
|
-
table.CodeRay{border-collapse:separate;border
|
7
|
-
table.CodeRay td{vertical-align:
|
2
|
+
pre.CodeRay{background:#f7f7f8}
|
3
|
+
.CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0}
|
4
|
+
.CodeRay span.line-numbers{display:inline-block;margin-right:.75em}
|
5
|
+
.CodeRay .line-numbers strong{color:#000}
|
6
|
+
table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none}
|
7
|
+
table.CodeRay td{vertical-align:top;line-height:inherit}
|
8
8
|
table.CodeRay td.line-numbers{text-align:right}
|
9
|
-
table.CodeRay td.
|
10
|
-
table.CodeRay td.code{padding:0 0 0 .5em}
|
11
|
-
table.CodeRay td.code>pre{padding:0}
|
9
|
+
table.CodeRay td.code{padding:0 0 0 .75em}
|
12
10
|
.CodeRay .debug{color:#fff !important;background:#000080 !important}
|
13
11
|
.CodeRay .annotation{color:#007}
|
14
12
|
.CodeRay .attribute-name{color:#000080}
|
data/lib/asciidoctor.rb
CHANGED
@@ -1,10 +1,4 @@
|
|
1
|
-
#
|
2
|
-
RUBY_ENGINE = 'unknown' unless defined? RUBY_ENGINE
|
3
|
-
RUBY_ENGINE_OPAL = (RUBY_ENGINE == 'opal')
|
4
|
-
RUBY_ENGINE_JRUBY = (RUBY_ENGINE == 'jruby')
|
5
|
-
RUBY_MIN_VERSION_1_9 = (RUBY_VERSION >= '1.9')
|
6
|
-
RUBY_MIN_VERSION_2 = (RUBY_VERSION >= '2')
|
7
|
-
|
1
|
+
# frozen_string_literal: true
|
8
2
|
require 'set'
|
9
3
|
|
10
4
|
# NOTE RUBY_ENGINE == 'opal' conditional blocks like this are filtered by the Opal preprocessor
|
@@ -13,17 +7,13 @@ if RUBY_ENGINE == 'opal'
|
|
13
7
|
require 'asciidoctor/js'
|
14
8
|
else
|
15
9
|
autoload :Base64, 'base64'
|
16
|
-
|
10
|
+
require 'cgi/util'
|
17
11
|
autoload :OpenURI, 'open-uri'
|
18
12
|
autoload :Pathname, 'pathname'
|
19
13
|
autoload :StringScanner, 'strscan'
|
14
|
+
autoload :URI, 'uri'
|
20
15
|
end
|
21
16
|
|
22
|
-
# ideally we should use require_relative instead of modifying the LOAD_PATH
|
23
|
-
$:.unshift File.dirname __FILE__
|
24
|
-
|
25
|
-
require 'asciidoctor/logging'
|
26
|
-
|
27
17
|
# Public: Methods for parsing AsciiDoc input files and converting documents
|
28
18
|
# using eRuby templates.
|
29
19
|
#
|
@@ -51,15 +41,13 @@ require 'asciidoctor/logging'
|
|
51
41
|
#
|
52
42
|
# Use custom (Tilt-supported) templates:
|
53
43
|
#
|
54
|
-
# Asciidoctor.convert_file 'sample.adoc', :
|
44
|
+
# Asciidoctor.convert_file 'sample.adoc', template_dir: 'path/to/templates'
|
55
45
|
#
|
56
46
|
module Asciidoctor
|
57
|
-
|
58
|
-
|
59
|
-
RUBY_ENGINE = ::RUBY_ENGINE
|
47
|
+
# alias the RUBY_ENGINE constant inside the Asciidoctor namespace and define a precomputed alias for runtime
|
48
|
+
RUBY_ENGINE_OPAL = (RUBY_ENGINE = ::RUBY_ENGINE) == 'opal'
|
60
49
|
|
61
50
|
module SafeMode
|
62
|
-
|
63
51
|
# A safe mode level that disables any of the security features enforced
|
64
52
|
# by Asciidoctor (Ruby is still subject to its own restrictions).
|
65
53
|
UNSAFE = 0;
|
@@ -71,10 +59,10 @@ module Asciidoctor
|
|
71
59
|
|
72
60
|
# A safe mode level that disallows the document from setting attributes
|
73
61
|
# that would affect the conversion of the document, in addition to all the
|
74
|
-
# security features of SafeMode::SAFE. For instance, this level
|
75
|
-
# changing the backend or
|
76
|
-
# in the source document. This is the most fundamental level of
|
77
|
-
# for server
|
62
|
+
# security features of SafeMode::SAFE. For instance, this level forbids
|
63
|
+
# changing the backend or source-highlighter using an attribute defined
|
64
|
+
# in the source document header. This is the most fundamental level of
|
65
|
+
# security for server deployments (hence the name).
|
78
66
|
SERVER = 10;
|
79
67
|
|
80
68
|
# A safe mode level that disallows the document from attempting to read
|
@@ -86,7 +74,7 @@ module Asciidoctor
|
|
86
74
|
# be allowed to embed trusted content into the document).
|
87
75
|
#
|
88
76
|
# Since Asciidoctor is aiming for wide adoption, this level is the default
|
89
|
-
# and is recommended for server
|
77
|
+
# and is recommended for server deployments.
|
90
78
|
SECURE = 20;
|
91
79
|
|
92
80
|
# A planned safe mode level that disallows the use of passthrough macros and
|
@@ -97,12 +85,10 @@ module Asciidoctor
|
|
97
85
|
# enforced)!
|
98
86
|
#PARANOID = 100;
|
99
87
|
|
100
|
-
|
101
|
-
constants.each {|sym| rec[const_get sym] = sym.to_s.downcase }
|
102
|
-
@names_by_value = rec
|
88
|
+
@names_by_value = {}.tap {|accum| (constants false).each {|sym| accum[const_get sym, false] = sym.to_s.downcase } }
|
103
89
|
|
104
90
|
def self.value_for_name name
|
105
|
-
const_get name.upcase
|
91
|
+
const_get name.upcase, false
|
106
92
|
end
|
107
93
|
|
108
94
|
def self.name_for_value value
|
@@ -119,14 +105,14 @@ module Asciidoctor
|
|
119
105
|
@keys = ::Set.new
|
120
106
|
class << self
|
121
107
|
attr_reader :keys
|
122
|
-
end
|
123
108
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
109
|
+
# Defines a new compliance key and assigns an initial value.
|
110
|
+
def define key, value
|
111
|
+
instance_variable_set %(@#{key}), value
|
112
|
+
singleton_class.send :attr_accessor, key
|
113
|
+
@keys << key
|
114
|
+
nil
|
115
|
+
end
|
130
116
|
end
|
131
117
|
|
132
118
|
# AsciiDoc terminates paragraphs adjacent to
|
@@ -184,51 +170,46 @@ module Asciidoctor
|
|
184
170
|
define :markdown_syntax, true
|
185
171
|
end
|
186
172
|
|
187
|
-
# The absolute root
|
188
|
-
|
173
|
+
# The absolute root directory of the Asciidoctor RubyGem
|
174
|
+
ROOT_DIR = ::File.dirname ::File.absolute_path __dir__ unless defined? ROOT_DIR
|
189
175
|
|
190
|
-
# The absolute lib
|
191
|
-
|
176
|
+
# The absolute lib directory of the Asciidoctor RubyGem
|
177
|
+
LIB_DIR = ::File.join ROOT_DIR, 'lib'
|
192
178
|
|
193
|
-
# The absolute data
|
194
|
-
|
179
|
+
# The absolute data directory of the Asciidoctor RubyGem
|
180
|
+
DATA_DIR = ::File.join ROOT_DIR, 'data'
|
195
181
|
|
196
182
|
# The user's home directory, as best we can determine it
|
197
|
-
|
198
|
-
begin
|
199
|
-
USER_HOME = ::Dir.home
|
200
|
-
rescue
|
201
|
-
USER_HOME = ::ENV['HOME'] || ::Dir.pwd
|
202
|
-
end
|
183
|
+
USER_HOME = ::Dir.home
|
203
184
|
|
204
|
-
#
|
205
|
-
|
206
|
-
# Addresses failures performing string operations that are reported as "invalid byte sequence in US-ASCII"
|
207
|
-
# Ruby 1.8 doesn't seem to experience this problem (perhaps because it isn't validating the encodings)
|
208
|
-
COERCE_ENCODING = !::RUBY_ENGINE_OPAL && ::RUBY_MIN_VERSION_1_9
|
185
|
+
# The newline character used for output; stored in constant table as an optimization
|
186
|
+
LF = ?\n
|
209
187
|
|
210
|
-
#
|
211
|
-
|
188
|
+
# The null character to use for splitting attribute values
|
189
|
+
NULL = ?\0
|
190
|
+
|
191
|
+
# String for matching tab character
|
192
|
+
TAB = ?\t
|
193
|
+
|
194
|
+
# Maximum integer value for "boundless" operations; equal to MAX_SAFE_INTEGER in JavaScript
|
195
|
+
MAX_INT = 9007199254740991
|
196
|
+
|
197
|
+
# Alias UTF_8 encoding for convenience / speed
|
198
|
+
UTF_8 = ::Encoding::UTF_8
|
212
199
|
|
213
200
|
# Byte arrays for UTF-* Byte Order Marks
|
214
201
|
BOM_BYTES_UTF_8 = [0xef, 0xbb, 0xbf]
|
215
202
|
BOM_BYTES_UTF_16LE = [0xff, 0xfe]
|
216
203
|
BOM_BYTES_UTF_16BE = [0xfe, 0xff]
|
217
204
|
|
218
|
-
#
|
219
|
-
|
220
|
-
|
221
|
-
# The endline character used for output; stored in constant table as an optimization
|
222
|
-
LF = EOL = "\n"
|
223
|
-
|
224
|
-
# The null character to use for splitting attribute values
|
225
|
-
NULL = "\0"
|
205
|
+
# The mode to use when opening a file for reading
|
206
|
+
FILE_READ_MODE = RUBY_ENGINE_OPAL ? 'r' : 'rb:utf-8:utf-8'
|
226
207
|
|
227
|
-
#
|
228
|
-
|
208
|
+
# The mode to use when opening a URI for reading
|
209
|
+
URI_READ_MODE = FILE_READ_MODE
|
229
210
|
|
230
|
-
#
|
231
|
-
|
211
|
+
# The mode to use when opening a file for writing
|
212
|
+
FILE_WRITE_MODE = RUBY_ENGINE_OPAL ? 'w' : 'w:utf-8'
|
232
213
|
|
233
214
|
# The default document type
|
234
215
|
# Can influence markup generated by the converters
|
@@ -295,7 +276,6 @@ module Asciidoctor
|
|
295
276
|
'====' => [:example, ['admonition'].to_set],
|
296
277
|
'****' => [:sidebar, ::Set.new],
|
297
278
|
'____' => [:quote, ['verse'].to_set],
|
298
|
-
'""' => [:quote, ['verse'].to_set],
|
299
279
|
'++++' => [:pass, ['stem', 'latexmath', 'asciimath'].to_set],
|
300
280
|
'|===' => [:table, ::Set.new],
|
301
281
|
',===' => [:table, ::Set.new],
|
@@ -305,7 +285,8 @@ module Asciidoctor
|
|
305
285
|
'```' => [:fenced_code, ::Set.new]
|
306
286
|
}
|
307
287
|
|
308
|
-
DELIMITED_BLOCK_HEADS = DELIMITED_BLOCKS.
|
288
|
+
DELIMITED_BLOCK_HEADS = {}.tap {|accum| DELIMITED_BLOCKS.each_key {|k| accum[k.slice 0, 2] = true } }
|
289
|
+
DELIMITED_BLOCK_TAILS = {}.tap {|accum| DELIMITED_BLOCKS.each_key {|k| accum[k] = k[k.length - 1] if k.length == 4 } }
|
309
290
|
|
310
291
|
LAYOUT_BREAK_CHARS = {
|
311
292
|
'\'' => :thematic_break,
|
@@ -348,16 +329,14 @@ module Asciidoctor
|
|
348
329
|
|
349
330
|
LINE_CONTINUATION_LEGACY = ' +'
|
350
331
|
|
351
|
-
MATHJAX_VERSION = '2.7.4'
|
352
|
-
|
353
332
|
BLOCK_MATH_DELIMITERS = {
|
354
|
-
:
|
355
|
-
:
|
333
|
+
asciimath: ['\$', '\$'],
|
334
|
+
latexmath: ['\[', '\]'],
|
356
335
|
}
|
357
336
|
|
358
337
|
INLINE_MATH_DELIMITERS = {
|
359
|
-
:
|
360
|
-
:
|
338
|
+
asciimath: ['\$', '\$'],
|
339
|
+
latexmath: ['\(', '\)'],
|
361
340
|
}
|
362
341
|
|
363
342
|
(STEM_TYPE_ALIASES = {
|
@@ -368,6 +347,10 @@ module Asciidoctor
|
|
368
347
|
|
369
348
|
FONT_AWESOME_VERSION = '4.7.0'
|
370
349
|
|
350
|
+
HIGHLIGHT_JS_VERSION = '9.15.6'
|
351
|
+
|
352
|
+
MATHJAX_VERSION = '2.7.5'
|
353
|
+
|
371
354
|
# attributes which be changed within the content of the document (but not
|
372
355
|
# header) because it has semantic meaning; ex. sectnums
|
373
356
|
FLEXIBLE_ATTRIBUTES = ['sectnums']
|
@@ -387,37 +370,16 @@ module Asciidoctor
|
|
387
370
|
## Regular expression character classes (to ensure regexp compatibility between Ruby and JavaScript)
|
388
371
|
## CC stands for "character class", CG stands for "character class group"
|
389
372
|
|
390
|
-
|
391
|
-
CC_ANY = '[^\n]' unless defined? CC_ANY
|
392
|
-
else
|
373
|
+
unless RUBY_ENGINE == 'opal'
|
393
374
|
# CC_ALL is any character, including newlines (must be accompanied by multiline regexp flag)
|
394
375
|
CC_ALL = '.'
|
395
376
|
# CC_ANY is any character except newlines
|
396
377
|
CC_ANY = '.'
|
397
378
|
CC_EOL = '$'
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
CG_BLANK = '\p{Blank}'
|
403
|
-
CC_WORD = CG_WORD = '\p{Word}'
|
404
|
-
# character classes for the Regexp engine in Ruby < 2
|
405
|
-
else
|
406
|
-
CC_ALPHA = '[:alpha:]'
|
407
|
-
CG_ALPHA = '[[:alpha:]]'
|
408
|
-
CC_ALNUM = '[:alnum:]'
|
409
|
-
CG_ALNUM = '[[:alnum:]]'
|
410
|
-
if ::RUBY_MIN_VERSION_1_9
|
411
|
-
CG_BLANK = '[[:blank:]]'
|
412
|
-
CC_WORD = '[:word:]'
|
413
|
-
CG_WORD = '[[:word:]]'
|
414
|
-
else
|
415
|
-
# NOTE Ruby 1.8 cannot match word characters beyond the ASCII range; if you need this feature, upgrade!
|
416
|
-
CG_BLANK = '[ \t]'
|
417
|
-
CC_WORD = '[:alnum:]_'
|
418
|
-
CG_WORD = '[[:alnum:]_]'
|
419
|
-
end
|
420
|
-
end
|
379
|
+
CC_ALPHA = CG_ALPHA = '\p{Alpha}'
|
380
|
+
CC_ALNUM = CG_ALNUM = '\p{Alnum}'
|
381
|
+
CG_BLANK = '\p{Blank}'
|
382
|
+
CC_WORD = CG_WORD = '\p{Word}'
|
421
383
|
end
|
422
384
|
|
423
385
|
## Document header
|
@@ -537,7 +499,7 @@ module Asciidoctor
|
|
537
499
|
#
|
538
500
|
if RUBY_ENGINE == 'opal'
|
539
501
|
# NOTE In JavaScript, ^ and $ match the boundaries of the string when the m flag is not set
|
540
|
-
AttributeEntryPassMacroRx = /^pass:([a-z]+(?:,[a-z]+)*)?\[(
|
502
|
+
AttributeEntryPassMacroRx = /^pass:([a-z]+(?:,[a-z]+)*)?\[(#{CC_ALL}*)\]$/
|
541
503
|
else
|
542
504
|
AttributeEntryPassMacroRx = /\Apass:([a-z]+(?:,[a-z]+)*)?\[(.*)\]\Z/m
|
543
505
|
end
|
@@ -646,7 +608,7 @@ module Asciidoctor
|
|
646
608
|
|
647
609
|
# Matches the title only (first line) of an Setext (two-line) section title.
|
648
610
|
# The title cannot begin with a dot and must have at least one alphanumeric character.
|
649
|
-
SetextSectionTitleRx = /^((?!\.)#{CC_ANY}*?#{
|
611
|
+
SetextSectionTitleRx = /^((?!\.)#{CC_ANY}*?#{CG_ALNUM}#{CC_ANY}*)$/
|
650
612
|
|
651
613
|
# Matches an anchor (i.e., id + optional reference text) inside a section title.
|
652
614
|
#
|
@@ -662,13 +624,17 @@ module Asciidoctor
|
|
662
624
|
# NOTE uppercase chars not included since expression is only run on a lowercase string
|
663
625
|
InvalidSectionIdCharsRx = /<[^>]+>|&(?:[a-z][a-z]+\d{0,2}|#\d\d\d{0,4}|#x[\da-f][\da-f][\da-f]{0,3});|[^ #{CC_WORD}\-.]+?/
|
664
626
|
|
627
|
+
# Matches an explicit section level style like sect1
|
628
|
+
#
|
629
|
+
SectionLevelStyleRx = /^sect\d$/
|
630
|
+
|
665
631
|
## Lists
|
666
632
|
|
667
633
|
# Detects the start of any list item.
|
668
634
|
#
|
669
635
|
# NOTE we only have to check as far as the blank character because we know it means non-whitespace follows.
|
670
636
|
# IMPORTANT if this regexp does not agree with the regexp for each list type, the parser will hang.
|
671
|
-
AnyListRx = %r(^(?:[ \t]*(?:-|\*\**|\.\.*|\u2022|\d+\.|[a-zA-Z]\.|[IVXivx]+\))[ \t]|(?!//[^/])#{CC_ANY}*?(?::::{0,2}|;;)(?:$|[ \t])|<?\d+>[ \t]))
|
637
|
+
AnyListRx = %r(^(?:[ \t]*(?:-|\*\**|\.\.*|\u2022|\d+\.|[a-zA-Z]\.|[IVXivx]+\))[ \t]|(?!//[^/])[ \t]*[^ \t]#{CC_ANY}*?(?::::{0,2}|;;)(?:$|[ \t])|<?\d+>[ \t]))
|
672
638
|
|
673
639
|
# Matches an unordered list item (one level for hyphens, up to 5 levels for asterisks).
|
674
640
|
#
|
@@ -698,12 +664,12 @@ module Asciidoctor
|
|
698
664
|
|
699
665
|
# Matches the ordinals for each type of ordered list.
|
700
666
|
OrderedListMarkerRxMap = {
|
701
|
-
:
|
702
|
-
:
|
703
|
-
:
|
704
|
-
:
|
705
|
-
:
|
706
|
-
|
667
|
+
arabic: /\d+\./,
|
668
|
+
loweralpha: /[a-z]\./,
|
669
|
+
lowerroman: /[ivx]+\)/,
|
670
|
+
upperalpha: /[A-Z]\./,
|
671
|
+
upperroman: /[IVX]+\)/,
|
672
|
+
#lowergreek: /[a-z]\]/,
|
707
673
|
}
|
708
674
|
|
709
675
|
# Matches a description list entry.
|
@@ -730,15 +696,15 @@ module Asciidoctor
|
|
730
696
|
#
|
731
697
|
# NOTE we know trailing (.*) will match at least one character because we strip trailing spaces
|
732
698
|
# NOTE must skip line comment when looking for next list item inside list
|
733
|
-
DescriptionListRx = %r(^(?!//[^/])[ \t]*(#{CC_ANY}*?)(:::{0,2}|;;)(?:$|[ \t]+(#{CC_ANY}*)$))
|
699
|
+
DescriptionListRx = %r(^(?!//[^/])[ \t]*([^ \t]#{CC_ANY}*?)(:::{0,2}|;;)(?:$|[ \t]+(#{CC_ANY}*)$))
|
734
700
|
|
735
|
-
# Matches a sibling description list item (
|
701
|
+
# Matches a sibling description list item (excluding the delimiter specified by the key).
|
736
702
|
# NOTE must skip line comment when looking for sibling list item
|
737
703
|
DescriptionListSiblingRx = {
|
738
|
-
'::' => %r(^(?!//[^/])[ \t]*(#{CC_ANY}
|
739
|
-
':::' => %r(^(?!//[^/])[ \t]*(#{CC_ANY}
|
740
|
-
'::::' => %r(^(?!//[^/])[ \t]*(#{CC_ANY}
|
741
|
-
';;' => %r(^(?!//[^/])[ \t]*(#{CC_ANY}*?)(;;)(?:$|[ \t]+(#{CC_ANY}*)$))
|
704
|
+
'::' => %r(^(?!//[^/])[ \t]*([^ \t]#{CC_ANY}*?[^:]|[^ \t:])(::)(?:$|[ \t]+(#{CC_ANY}*)$)),
|
705
|
+
':::' => %r(^(?!//[^/])[ \t]*([^ \t]#{CC_ANY}*?[^:]|[^ \t:])(:::)(?:$|[ \t]+(#{CC_ANY}*)$)),
|
706
|
+
'::::' => %r(^(?!//[^/])[ \t]*([^ \t]#{CC_ANY}*?[^:]|[^ \t:])(::::)(?:$|[ \t]+(#{CC_ANY}*)$)),
|
707
|
+
';;' => %r(^(?!//[^/])[ \t]*([^ \t]#{CC_ANY}*?)(;;)(?:$|[ \t]+(#{CC_ANY}*)$))
|
742
708
|
}
|
743
709
|
|
744
710
|
# Matches a callout list item.
|
@@ -765,20 +731,20 @@ module Asciidoctor
|
|
765
731
|
# NOTE extract regexps are applied line-by-line, so we can use $ as end-of-line char
|
766
732
|
CalloutExtractRx = %r(((?://|#|--|;;) ?)?(\\)?<!?(|--)(\d+|\.)\3>(?=(?: ?\\?<!?\3(?:\d+|\.)\3>)*$))
|
767
733
|
CalloutExtractRxt = '(\\\\)?<()(\\d+|\\.)>(?=(?: ?\\\\?<(?:\\d+|\\.)>)*$)'
|
768
|
-
CalloutExtractRxMap = ::Hash.new {|h, k| h[k] = /(#{::Regexp.escape k} ?)?#{CalloutExtractRxt}/ }
|
734
|
+
CalloutExtractRxMap = ::Hash.new {|h, k| h[k] = /(#{k.empty? ? '' : "#{::Regexp.escape k} ?"})?#{CalloutExtractRxt}/ }
|
769
735
|
# NOTE special characters have not been replaced when scanning
|
770
736
|
CalloutScanRx = /\\?<!?(|--)(\d+|\.)\1>(?=(?: ?\\?<!?\1(?:\d+|\.)\1>)*#{CC_EOL})/
|
771
737
|
# NOTE special characters have already been replaced when converting to an SGML format
|
772
738
|
CalloutSourceRx = %r(((?://|#|--|;;) ?)?(\\)?<!?(|--)(\d+|\.)\3>(?=(?: ?\\?<!?\3(?:\d+|\.)\3>)*#{CC_EOL}))
|
773
739
|
CalloutSourceRxt = "(\\\\)?<()(\\d+|\\.)>(?=(?: ?\\\\?<(?:\\d+|\\.)>)*#{CC_EOL})"
|
774
|
-
CalloutSourceRxMap = ::Hash.new {|h, k| h[k] = /(#{::Regexp.escape k} ?)?#{CalloutSourceRxt}/ }
|
740
|
+
CalloutSourceRxMap = ::Hash.new {|h, k| h[k] = /(#{k.empty? ? '' : "#{::Regexp.escape k} ?"})?#{CalloutSourceRxt}/ }
|
775
741
|
|
776
742
|
# A Hash of regexps for lists used for dynamic access.
|
777
743
|
ListRxMap = {
|
778
|
-
:
|
779
|
-
:
|
780
|
-
:
|
781
|
-
:
|
744
|
+
ulist: UnorderedListRx,
|
745
|
+
olist: OrderedListRx,
|
746
|
+
dlist: DescriptionListRx,
|
747
|
+
colist: CalloutListRx,
|
782
748
|
}
|
783
749
|
|
784
750
|
## Tables
|
@@ -862,7 +828,7 @@ module Asciidoctor
|
|
862
828
|
#
|
863
829
|
# doc.writer@example.com
|
864
830
|
#
|
865
|
-
InlineEmailRx = %r(([\\>:/])?#{CG_WORD}[#{CC_WORD}.%+-]*@#{CG_ALNUM}[#{CC_ALNUM}.-]*\.#{CG_ALPHA}{2,4}\b)
|
831
|
+
InlineEmailRx = %r(([\\>:/])?#{CG_WORD}(?:&|[#{CC_WORD}.%+-])*@#{CG_ALNUM}[#{CC_ALNUM}.-]*\.#{CG_ALPHA}{2,4}\b)
|
866
832
|
|
867
833
|
# Matches an inline footnote macro, which is allowed to span multiple lines.
|
868
834
|
#
|
@@ -884,7 +850,7 @@ module Asciidoctor
|
|
884
850
|
# image:filename.png[More [Alt\] Text] (alt text becomes "More [Alt] Text")
|
885
851
|
# icon:github[large]
|
886
852
|
#
|
887
|
-
# NOTE be as non-greedy as possible by not allowing
|
853
|
+
# NOTE be as non-greedy as possible by not allowing newline or left square bracket in target
|
888
854
|
InlineImageMacroRx = /\\?i(?:mage|con):([^:\s\[](?:[^\n\[]*[^\s\[])?)\[(|#{CC_ALL}*?[^\\])\]/m
|
889
855
|
|
890
856
|
# Matches an indexterm inline macro, which may span multiple lines.
|
@@ -1084,14 +1050,14 @@ module Asciidoctor
|
|
1084
1050
|
ReplaceableTextRx = /[&']|--|\.\.\.|\([CRT]M?\)/
|
1085
1051
|
|
1086
1052
|
# Matches a whitespace delimiter, a sequence of spaces, tabs, and/or newlines.
|
1087
|
-
|
1053
|
+
# Matches the parsing rules of %w strings in Ruby.
|
1088
1054
|
#
|
1089
1055
|
# Examples
|
1090
1056
|
#
|
1091
1057
|
# one two three four
|
1092
1058
|
# five six
|
1093
1059
|
#
|
1094
|
-
# TODO change to /(?<!\\)[ \t\n]+/
|
1060
|
+
# TODO change to /(?<!\\)[ \t\n]+/ once lookbehind assertions are implemented in all modern browsers
|
1095
1061
|
SpaceDelimiterRx = /([^\\])[ \t\n]+/
|
1096
1062
|
|
1097
1063
|
# Matches a + or - modifier in a subs list
|
@@ -1102,17 +1068,11 @@ module Asciidoctor
|
|
1102
1068
|
#
|
1103
1069
|
# Examples
|
1104
1070
|
#
|
1105
|
-
#
|
1071
|
+
# docbook5
|
1106
1072
|
# html5
|
1107
1073
|
#
|
1108
1074
|
TrailingDigitsRx = /\d+$/
|
1109
1075
|
|
1110
|
-
# Matches any character with multibyte support explicitly enabled (length of multibyte char = 1)
|
1111
|
-
#
|
1112
|
-
unless RUBY_ENGINE == 'opal'
|
1113
|
-
UnicodeCharScanRx = /./u if FORCE_UNICODE_LINE_LENGTH
|
1114
|
-
end
|
1115
|
-
|
1116
1076
|
# Detects strings that resemble URIs.
|
1117
1077
|
#
|
1118
1078
|
# Examples
|
@@ -1237,9 +1197,7 @@ module Asciidoctor
|
|
1237
1197
|
quote_subs = nil
|
1238
1198
|
compat_quote_subs = nil
|
1239
1199
|
|
1240
|
-
# NOTE
|
1241
|
-
# so we need to match it explicitly
|
1242
|
-
# order is significant
|
1200
|
+
# NOTE order of replacements is significant
|
1243
1201
|
REPLACEMENTS = [
|
1244
1202
|
# (C)
|
1245
1203
|
[/\\?\(C\)/, '©', :none],
|
@@ -1247,8 +1205,8 @@ module Asciidoctor
|
|
1247
1205
|
[/\\?\(R\)/, '®', :none],
|
1248
1206
|
# (TM)
|
1249
1207
|
[/\\?\(TM\)/, '™', :none],
|
1250
|
-
# foo -- bar
|
1251
|
-
#
|
1208
|
+
# foo -- bar (where either space character can be a newline)
|
1209
|
+
# NOTE this necessarily drops the newline if it appears at end of line
|
1252
1210
|
[/(^|\n| |\\)--( |\n|$)/, ' — ', :none],
|
1253
1211
|
# foo--bar
|
1254
1212
|
[/(#{CG_WORD})\\?--(?=#{CG_WORD})/, '—​', :leading],
|
@@ -1298,63 +1256,49 @@ module Asciidoctor
|
|
1298
1256
|
|
1299
1257
|
if !(attrs = options[:attributes])
|
1300
1258
|
attrs = {}
|
1301
|
-
elsif ::Hash === attrs || (::
|
1259
|
+
elsif ::Hash === attrs || ((defined? ::Java::JavaUtil::Map) && ::Java::JavaUtil::Map === attrs)
|
1302
1260
|
attrs = attrs.dup
|
1303
1261
|
elsif ::Array === attrs
|
1304
|
-
attrs
|
1305
|
-
|
1306
|
-
|
1307
|
-
|
1262
|
+
attrs = {}.tap do |accum|
|
1263
|
+
attrs.each do |entry|
|
1264
|
+
k, _, v = entry.partition '='
|
1265
|
+
accum[k] = v
|
1266
|
+
end
|
1308
1267
|
end
|
1309
1268
|
elsif ::String === attrs
|
1310
1269
|
# condense and convert non-escaped spaces to null, unescape escaped spaces, then split on null
|
1311
|
-
attrs
|
1312
|
-
|
1313
|
-
|
1314
|
-
|
1270
|
+
attrs = {}.tap do |accum|
|
1271
|
+
attrs.gsub(SpaceDelimiterRx, '\1' + NULL).gsub(EscapedSpaceRx, '\1').split(NULL).each do |entry|
|
1272
|
+
k, _, v = entry.partition '='
|
1273
|
+
accum[k] = v
|
1274
|
+
end
|
1315
1275
|
end
|
1316
1276
|
elsif (attrs.respond_to? :keys) && (attrs.respond_to? :[])
|
1317
|
-
#
|
1318
|
-
attrs =
|
1277
|
+
# coerce attrs to a real Hash
|
1278
|
+
attrs = {}.tap {|accum| attrs.keys.each {|k| accum[k] = attrs[k] } }
|
1319
1279
|
else
|
1320
1280
|
raise ::ArgumentError, %(illegal type for attributes option: #{attrs.class.ancestors.join ' < '})
|
1321
1281
|
end
|
1322
1282
|
|
1323
|
-
lines = nil
|
1324
1283
|
if ::File === input
|
1325
|
-
|
1326
|
-
|
1327
|
-
|
1328
|
-
# NOTE
|
1329
|
-
|
1330
|
-
lines = input.readlines
|
1331
|
-
# hold off on setting infile and indir until we get a better sense of their purpose
|
1332
|
-
attrs['docfile'] = input_path
|
1284
|
+
options[:input_mtime] = input.mtime
|
1285
|
+
# TODO cli checks if input path can be read and is file, but might want to add check to API too
|
1286
|
+
input_path = ::File.absolute_path input.path
|
1287
|
+
# NOTE defer setting infile and indir until we get a better sense of their purpose
|
1288
|
+
attrs['docfile'] = input_path = ::File.absolute_path input.path
|
1333
1289
|
attrs['docdir'] = ::File.dirname input_path
|
1334
1290
|
attrs['docname'] = Helpers.basename input_path, (attrs['docfilesuffix'] = ::File.extname input_path)
|
1335
|
-
|
1336
|
-
|
1337
|
-
else
|
1338
|
-
docdate = attrs['docdate'] = (input_mtime.strftime '%F')
|
1339
|
-
attrs['docyear'] ||= input_mtime.year.to_s
|
1340
|
-
end
|
1341
|
-
# %Z is OS dependent and may contain characters that aren't UTF-8 encoded (see asciidoctor#2770 and asciidoctor.js#23)
|
1342
|
-
# Ruby 1.8 doesn't support %:z
|
1343
|
-
doctime = (attrs['doctime'] ||= input_mtime.strftime %(%T #{input_mtime.utc_offset == 0 ? 'UTC' : '%z'}))
|
1344
|
-
attrs['docdatetime'] = %(#{docdate} #{doctime})
|
1345
|
-
elsif input.respond_to? :readlines
|
1291
|
+
source = input.read
|
1292
|
+
elsif input.respond_to? :read
|
1346
1293
|
# NOTE tty, pipes & sockets can't be rewound, but can't be sniffed easily either
|
1347
1294
|
# just fail the rewind operation silently to handle all cases
|
1348
|
-
|
1349
|
-
|
1350
|
-
rescue
|
1351
|
-
end
|
1352
|
-
lines = input.readlines
|
1295
|
+
input.rewind rescue nil
|
1296
|
+
source = input.read
|
1353
1297
|
elsif ::String === input
|
1354
|
-
|
1298
|
+
source = input
|
1355
1299
|
elsif ::Array === input
|
1356
|
-
|
1357
|
-
|
1300
|
+
source = input.drop 0
|
1301
|
+
elsif input
|
1358
1302
|
raise ::ArgumentError, %(unsupported input type: #{input.class})
|
1359
1303
|
end
|
1360
1304
|
|
@@ -1364,7 +1308,7 @@ module Asciidoctor
|
|
1364
1308
|
end
|
1365
1309
|
|
1366
1310
|
options[:attributes] = attrs
|
1367
|
-
doc = options[:parse] == false ? (Document.new
|
1311
|
+
doc = options[:parse] == false ? (Document.new source, options) : (Document.new source, options).parse
|
1368
1312
|
|
1369
1313
|
timings.record :parse if timings
|
1370
1314
|
doc
|
@@ -1372,9 +1316,9 @@ module Asciidoctor
|
|
1372
1316
|
begin
|
1373
1317
|
context = %(asciidoctor: FAILED: #{attrs['docfile'] || '<stdin>'}: Failed to load AsciiDoc document)
|
1374
1318
|
if ex.respond_to? :exception
|
1375
|
-
# The original message must be
|
1319
|
+
# The original message must be explicitly preserved when wrapping a Ruby exception
|
1376
1320
|
wrapped_ex = ex.exception %(#{context} - #{ex.message})
|
1377
|
-
# JRuby automatically sets backtrace
|
1321
|
+
# JRuby automatically sets backtrace; MRI did not until 2.6
|
1378
1322
|
wrapped_ex.set_backtrace ex.backtrace
|
1379
1323
|
else
|
1380
1324
|
# Likely a Java exception class
|
@@ -1396,7 +1340,7 @@ module Asciidoctor
|
|
1396
1340
|
#
|
1397
1341
|
# Returns the Asciidoctor::Document
|
1398
1342
|
def load_file filename, options = {}
|
1399
|
-
::File.open(filename,
|
1343
|
+
::File.open(filename, FILE_READ_MODE) {|file| self.load file, options }
|
1400
1344
|
end
|
1401
1345
|
|
1402
1346
|
# Public: Parse the AsciiDoc source input into an Asciidoctor::Document and
|
@@ -1460,7 +1404,7 @@ module Asciidoctor
|
|
1460
1404
|
|
1461
1405
|
# NOTE outfile may be controlled by document attributes, so resolve outfile after loading
|
1462
1406
|
if write_to_same_dir
|
1463
|
-
input_path = ::File.
|
1407
|
+
input_path = ::File.absolute_path input.path
|
1464
1408
|
options[:to_dir] = (outdir = ::File.dirname input_path)
|
1465
1409
|
elsif write_to_target
|
1466
1410
|
if to_dir
|
@@ -1488,21 +1432,21 @@ module Asciidoctor
|
|
1488
1432
|
# QUESTION should the jail be the working_dir or doc.base_dir???
|
1489
1433
|
jail = doc.safe >= SafeMode::SAFE ? working_dir : nil
|
1490
1434
|
if to_dir
|
1491
|
-
outdir = doc.normalize_system_path(to_dir, working_dir, jail, :
|
1435
|
+
outdir = doc.normalize_system_path(to_dir, working_dir, jail, target_name: 'to_dir', recover: false)
|
1492
1436
|
if to_file
|
1493
|
-
outfile = doc.normalize_system_path(to_file, outdir, nil, :
|
1437
|
+
outfile = doc.normalize_system_path(to_file, outdir, nil, target_name: 'to_dir', recover: false)
|
1494
1438
|
# reestablish outdir as the final target directory (in the case to_file had directory segments)
|
1495
1439
|
outdir = ::File.dirname outfile
|
1496
1440
|
else
|
1497
1441
|
outfile = ::File.join outdir, %(#{doc.attributes['docname']}#{doc.outfilesuffix})
|
1498
1442
|
end
|
1499
1443
|
elsif to_file
|
1500
|
-
outfile = doc.normalize_system_path(to_file, working_dir, jail, :
|
1444
|
+
outfile = doc.normalize_system_path(to_file, working_dir, jail, target_name: 'to_dir', recover: false)
|
1501
1445
|
# establish outdir as the final target directory (in the case to_file had directory segments)
|
1502
1446
|
outdir = ::File.dirname outfile
|
1503
1447
|
end
|
1504
1448
|
|
1505
|
-
if ::File === input && outfile == (::File.
|
1449
|
+
if ::File === input && outfile == (::File.absolute_path input.path)
|
1506
1450
|
raise ::IOError, %(input file and output file cannot be the same: #{outfile})
|
1507
1451
|
end
|
1508
1452
|
|
@@ -1525,21 +1469,17 @@ module Asciidoctor
|
|
1525
1469
|
|
1526
1470
|
# NOTE document cannot control this behavior if safe >= SafeMode::SERVER
|
1527
1471
|
# NOTE skip if stylesdir is a URI
|
1528
|
-
if !stream_output && doc.safe < SafeMode::SECURE && (doc.attr? 'linkcss') &&
|
1529
|
-
(doc.
|
1530
|
-
|
1531
|
-
copy_asciidoctor_stylesheet = false
|
1532
|
-
copy_user_stylesheet = false
|
1533
|
-
if (stylesheet = (doc.attr 'stylesheet'))
|
1472
|
+
if !stream_output && doc.safe < SafeMode::SECURE && (doc.attr? 'linkcss') && (doc.attr? 'copycss') &&
|
1473
|
+
(doc.basebackend? 'html') && !((stylesdir = (doc.attr 'stylesdir')) && (Helpers.uriish? stylesdir))
|
1474
|
+
if (stylesheet = doc.attr 'stylesheet')
|
1534
1475
|
if DEFAULT_STYLESHEET_KEYS.include? stylesheet
|
1535
1476
|
copy_asciidoctor_stylesheet = true
|
1536
1477
|
elsif !(Helpers.uriish? stylesheet)
|
1537
1478
|
copy_user_stylesheet = true
|
1538
1479
|
end
|
1539
1480
|
end
|
1540
|
-
|
1541
|
-
|
1542
|
-
if copy_asciidoctor_stylesheet || copy_user_stylesheet || copy_coderay_stylesheet || copy_pygments_stylesheet
|
1481
|
+
copy_syntax_hl_stylesheet = (syntax_hl = doc.syntax_highlighter) && (syntax_hl.write_stylesheet? doc)
|
1482
|
+
if copy_asciidoctor_stylesheet || copy_user_stylesheet || copy_syntax_hl_stylesheet
|
1543
1483
|
stylesoutdir = doc.normalize_system_path(stylesdir, outdir, doc.safe >= SafeMode::SAFE ? outdir : nil)
|
1544
1484
|
if mkdirs
|
1545
1485
|
Helpers.mkdir_p stylesoutdir
|
@@ -1551,7 +1491,7 @@ module Asciidoctor
|
|
1551
1491
|
Stylesheets.instance.write_primary_stylesheet stylesoutdir
|
1552
1492
|
# FIXME should Stylesheets also handle the user stylesheet?
|
1553
1493
|
elsif copy_user_stylesheet
|
1554
|
-
if (stylesheet_src =
|
1494
|
+
if (stylesheet_src = doc.attr 'copycss').empty?
|
1555
1495
|
stylesheet_src = doc.normalize_system_path stylesheet
|
1556
1496
|
else
|
1557
1497
|
# NOTE in this case, copycss is a source location (but cannot be a URI)
|
@@ -1560,16 +1500,11 @@ module Asciidoctor
|
|
1560
1500
|
stylesheet_dest = doc.normalize_system_path stylesheet, stylesoutdir, (doc.safe >= SafeMode::SAFE ? outdir : nil)
|
1561
1501
|
# NOTE don't warn if src can't be read and dest already exists (see #2323)
|
1562
1502
|
if stylesheet_src != stylesheet_dest && (stylesheet_data = doc.read_asset stylesheet_src,
|
1563
|
-
:
|
1564
|
-
::
|
1503
|
+
warn_on_failure: !(::File.file? stylesheet_dest), label: 'stylesheet')
|
1504
|
+
::File.write stylesheet_dest, stylesheet_data, mode: FILE_WRITE_MODE
|
1565
1505
|
end
|
1566
1506
|
end
|
1567
|
-
|
1568
|
-
if copy_coderay_stylesheet
|
1569
|
-
Stylesheets.instance.write_coderay_stylesheet stylesoutdir
|
1570
|
-
elsif copy_pygments_stylesheet
|
1571
|
-
Stylesheets.instance.write_pygments_stylesheet stylesoutdir, (doc.attr 'pygments-style')
|
1572
|
-
end
|
1507
|
+
syntax_hl.write_stylesheet doc, stylesoutdir if copy_syntax_hl_stylesheet
|
1573
1508
|
end
|
1574
1509
|
end
|
1575
1510
|
doc
|
@@ -1592,7 +1527,7 @@ module Asciidoctor
|
|
1592
1527
|
# Returns the Document object if the converted String is written to a
|
1593
1528
|
# file, otherwise the converted String
|
1594
1529
|
def convert_file filename, options = {}
|
1595
|
-
::File.open(filename,
|
1530
|
+
::File.open(filename, FILE_READ_MODE) {|file| self.convert file, options }
|
1596
1531
|
end
|
1597
1532
|
|
1598
1533
|
# Alias render_file to convert_file to maintain backwards compatibility
|
@@ -1610,7 +1545,7 @@ module Asciidoctor
|
|
1610
1545
|
# Returns the resolved constant, if resolved, otherwise nothing.
|
1611
1546
|
def const_missing name
|
1612
1547
|
if name == :Extensions
|
1613
|
-
|
1548
|
+
require_relative 'asciidoctor/extensions'
|
1614
1549
|
Extensions
|
1615
1550
|
else
|
1616
1551
|
super
|
@@ -1619,40 +1554,44 @@ module Asciidoctor
|
|
1619
1554
|
|
1620
1555
|
end
|
1621
1556
|
|
1622
|
-
|
1623
|
-
|
1624
|
-
|
1625
|
-
else
|
1626
|
-
autoload :Timings, 'asciidoctor/timings'
|
1627
|
-
autoload :VERSION, 'asciidoctor/version'
|
1557
|
+
unless RUBY_ENGINE == 'opal'
|
1558
|
+
autoload :SyntaxHighlighter, %(#{LIB_DIR}/asciidoctor/syntax_highlighter)
|
1559
|
+
autoload :Timings, %(#{LIB_DIR}/asciidoctor/timings)
|
1628
1560
|
end
|
1629
1561
|
end
|
1630
1562
|
|
1631
1563
|
# core extensions
|
1632
|
-
|
1564
|
+
require_relative 'asciidoctor/core_ext'
|
1633
1565
|
|
1634
|
-
# modules
|
1635
|
-
|
1636
|
-
|
1566
|
+
# modules and helpers
|
1567
|
+
require_relative 'asciidoctor/helpers'
|
1568
|
+
require_relative 'asciidoctor/logging'
|
1569
|
+
require_relative 'asciidoctor/substitutors'
|
1570
|
+
require_relative 'asciidoctor/version'
|
1637
1571
|
|
1638
1572
|
# abstract classes
|
1639
|
-
|
1640
|
-
|
1573
|
+
require_relative 'asciidoctor/abstract_node'
|
1574
|
+
require_relative 'asciidoctor/abstract_block'
|
1641
1575
|
|
1642
1576
|
# concrete classes
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1652
|
-
|
1653
|
-
|
1654
|
-
|
1655
|
-
|
1656
|
-
|
1657
|
-
|
1658
|
-
|
1577
|
+
require_relative 'asciidoctor/attribute_list'
|
1578
|
+
require_relative 'asciidoctor/block'
|
1579
|
+
require_relative 'asciidoctor/callouts'
|
1580
|
+
require_relative 'asciidoctor/converter'
|
1581
|
+
require_relative 'asciidoctor/document'
|
1582
|
+
require_relative 'asciidoctor/inline'
|
1583
|
+
require_relative 'asciidoctor/list'
|
1584
|
+
require_relative 'asciidoctor/parser'
|
1585
|
+
require_relative 'asciidoctor/path_resolver'
|
1586
|
+
require_relative 'asciidoctor/reader'
|
1587
|
+
require_relative 'asciidoctor/section'
|
1588
|
+
require_relative 'asciidoctor/stylesheets'
|
1589
|
+
require_relative 'asciidoctor/table'
|
1590
|
+
require_relative 'asciidoctor/writer'
|
1591
|
+
|
1592
|
+
if RUBY_ENGINE == 'opal'
|
1593
|
+
require_relative 'asciidoctor/syntax_highlighter'
|
1594
|
+
require_relative 'asciidoctor/timings'
|
1595
|
+
# this require is satisfied by the Asciidoctor.js build; it supplies compile and runtime overrides for Asciidoctor.js
|
1596
|
+
require 'asciidoctor/js/postscript'
|
1597
|
+
end
|