asciidoctor 1.5.8 → 2.0.0.rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|