asciidoctor 1.5.1 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.adoc +85 -0
  3. data/README.adoc +79 -6
  4. data/Rakefile +22 -1
  5. data/benchmark/benchmark.rb +3 -1
  6. data/compat/asciidoc.conf +2 -2
  7. data/data/stylesheets/asciidoctor-default.css +3 -3
  8. data/features/step_definitions.rb +12 -1
  9. data/lib/asciidoctor.rb +74 -42
  10. data/lib/asciidoctor/abstract_block.rb +5 -1
  11. data/lib/asciidoctor/abstract_node.rb +40 -23
  12. data/lib/asciidoctor/attribute_list.rb +14 -5
  13. data/lib/asciidoctor/block.rb +45 -12
  14. data/lib/asciidoctor/callouts.rb +1 -0
  15. data/lib/asciidoctor/cli/invoker.rb +6 -2
  16. data/lib/asciidoctor/cli/options.rb +23 -9
  17. data/lib/asciidoctor/converter.rb +9 -19
  18. data/lib/asciidoctor/converter/base.rb +11 -14
  19. data/lib/asciidoctor/converter/composite.rb +8 -19
  20. data/lib/asciidoctor/converter/docbook45.rb +1 -0
  21. data/lib/asciidoctor/converter/docbook5.rb +24 -2
  22. data/lib/asciidoctor/converter/factory.rb +1 -0
  23. data/lib/asciidoctor/converter/html5.rb +61 -25
  24. data/lib/asciidoctor/converter/template.rb +19 -26
  25. data/lib/asciidoctor/document.rb +73 -45
  26. data/lib/asciidoctor/extensions.rb +121 -9
  27. data/lib/asciidoctor/helpers.rb +1 -0
  28. data/lib/asciidoctor/inline.rb +1 -0
  29. data/lib/asciidoctor/list.rb +1 -0
  30. data/lib/asciidoctor/opal_ext.rb +22 -0
  31. data/lib/asciidoctor/opal_ext/file.rb +26 -13
  32. data/lib/asciidoctor/parser.rb +15 -18
  33. data/lib/asciidoctor/path_resolver.rb +18 -0
  34. data/lib/asciidoctor/reader.rb +8 -9
  35. data/lib/asciidoctor/section.rb +5 -8
  36. data/lib/asciidoctor/stylesheets.rb +1 -0
  37. data/lib/asciidoctor/substitutors.rb +18 -18
  38. data/lib/asciidoctor/table.rb +2 -1
  39. data/lib/asciidoctor/timings.rb +1 -0
  40. data/lib/asciidoctor/version.rb +1 -1
  41. data/man/asciidoctor.1 +10 -11
  42. data/man/asciidoctor.adoc +80 -99
  43. data/test/attributes_test.rb +42 -0
  44. data/test/blocks_test.rb +19 -7
  45. data/test/document_test.rb +114 -0
  46. data/test/extensions_test.rb +100 -0
  47. data/test/fixtures/custom-docinfodir/basic-docinfo.html +1 -0
  48. data/test/fixtures/custom-docinfodir/docinfo.html +1 -0
  49. data/test/fixtures/hello-asciidoctor.pdf +0 -0
  50. data/test/invoker_test.rb +4 -3
  51. data/test/lists_test.rb +31 -5
  52. data/test/options_test.rb +1 -1
  53. data/test/paths_test.rb +21 -0
  54. data/test/preamble_test.rb +33 -0
  55. data/test/reader_test.rb +13 -0
  56. data/test/sections_test.rb +22 -0
  57. data/test/substitutions_test.rb +49 -0
  58. data/test/tables_test.rb +76 -0
  59. data/test/test_helper.rb +4 -2
  60. metadata +7 -5
  61. data/lib/asciidoctor/debug.rb +0 -25
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a473039ade836811c48e7fee1ac92e81aaf93a17
4
- data.tar.gz: 7139cce18ff72d70e11424a7a4ab846173d93789
3
+ metadata.gz: 9c5d135474454be23b11dfdcc8b7d24d55e4638f
4
+ data.tar.gz: 909678f3db8d1468040ee56257e16910093d2f8c
5
5
  SHA512:
6
- metadata.gz: 8d096aea49af4c010647980e99d8219d25ad3b904bb746e62b3debe42891912f1b4b50426627b777487b058cd45208a6fc61e18c4ba75200a3cc3d1a53b670d9
7
- data.tar.gz: 329764ebeb51caaff10af1021fa4316c0590e6dbf45273011d6065846be1430daaea28b93518aea21ede0fd860706150f03b796389488f80b315d394ae4a8d7a
6
+ metadata.gz: 8c5883d45569bc9d4e5d55ba38abd919d6526f2762bccb28115d75ead73915b7688d75562f20ea65810fe0f2ff8f9d192cc4cbc96874acc857a86d8d704b725a
7
+ data.tar.gz: 3a8425493fe73e4125d43351e4a7f08df1c7ddbd927977efa36700b28f4665eb9f65dd0416c3d10240a464683a67a2f848e748a2186b6140f77836e1e16c5802
data/CHANGELOG.adoc CHANGED
@@ -11,6 +11,91 @@ endif::[]
11
11
  This document provides a high-level view of the changes introduced in Asciidoctor by release.
12
12
  For a detailed view of what has changed, refer to the https://github.com/asciidoctor/asciidoctor/commits/master[commit history] on GitHub.
13
13
 
14
+ == 1.5.2 (2014-11-27) - @mojavelinux
15
+
16
+ Enhancements::
17
+
18
+ * add docinfo extension (@mogztter) (#1162)
19
+ * allow docinfo to be in separate directory from content, specified by `docinfodir` attribute (@mogztter) (#511)
20
+ * enable TeX equation auto-numbering if `eqnums` attribute is set (@jxxcarlson) (#1110)
21
+
22
+ Improvements::
23
+
24
+ * recognize `--` as valid line comment for callout numbers; make line comment configurable (#1068)
25
+ * upgrade highlight.js to version 8.4 (#1216)
26
+ * upgrade Font Awesome to version 4.2.0 (@clojens) (#1201)
27
+ * define JAVASCRIPT_PLATFORM constant to simplify conditional logic in the JavaScript environment (#897)
28
+ * provide access to destination directory, outfile and outdir via Document object (#1203)
29
+ * print encoding information in version report produced by `asciidoctor -v` (#1210)
30
+ * add intrinsic attribute named `cpp` with value `C++` (#1208)
31
+ * preserve URI targets passed to `stylesheet` and related attributes (#1192)
32
+ * allow numeric characters in block attribute name (#1103)
33
+ * support custom YouTube playlists (#1105)
34
+ * make start number for unique id generation configurable (#1148)
35
+ * normalize and force UTF-8 encoding of docinfo content (#831)
36
+ * allow subs and default_subs to be specified in Block constructor (#749)
37
+ * enhance error message when reading binary input files (@mogztter) (#1158)
38
+ * add `append` method as alias to `<<` method on AbstractBlock (#1085)
39
+ * assign value of `preface-title` as title of preface node (#1090)
40
+ * fix spacing around checkbox in checklist (#1138)
41
+ * automatically load Slim's include plugin when using slim templates (@jirutka) (#1151)
42
+ * mixin Slim helpers into execution scope of slim templates (@jirutka) (#1143)
43
+ * improve DocBook output for manpage doctype (@bk2204) (#1134, #1142)
44
+
45
+ Compliance::
46
+
47
+ * substitute attribute entry value in attributes defined outside of header (#1130)
48
+ * allow empty cell to appear at end of table row (#1106)
49
+ * only produce one row for table in CSV or DSV format with a single cell (#1180)
50
+
51
+ Bug fixes::
52
+
53
+ * add explicit to_s call to generate delimiter settings for MathJax config (#1198)
54
+ * fix includes that reference absolute Windows paths (#1144)
55
+ * apply DSL to extension block in a way compatible with Opal
56
+
57
+ Distribution Packages::
58
+
59
+ * http://rubygems.org/gems/asciidoctor[RubyGem (asciidoctor)]
60
+ * https://apps.fedoraproject.org/packages/rubygem-asciidoctor[Fedora (rubygem-asciidoctor)]
61
+ * http://packages.debian.org/sid/asciidoctor[Debian (asciidoctor)]
62
+ * http://packages.ubuntu.com/saucy/asciidoctor[Ubuntu (asciidoctor)]
63
+
64
+ https://github.com/asciidoctor/asciidoctor/issues?q=milestone%3Av1.5.2[issues resolved] |
65
+ https://github.com/asciidoctor/asciidoctor/releases/tag/v1.5.2[git tag] |
66
+ https://github.com/asciidoctor/asciidoctor/compare/v1.5.0...v1.5.2[full diff]
67
+
68
+ == 1.5.1 (2014-09-29) - @mojavelinux
69
+
70
+ Bug fixes::
71
+
72
+ * recognize tag directives inside comments within XML files for including tagged regions
73
+ * restore passthroughs inside footnotes when more than one footnote appears on the same line
74
+ * -S flag in cli recognizes safe mode name as lowercase string
75
+ * do not match # in character reference when looking for marked text
76
+ * add namespace to lang attribute in DocBook 5 backend
77
+ * restore missing space before conum on last line of listing when highlighting with Pygments
78
+ * place conums on correct lines when line numbers are enabled when highlighting with Pygments
79
+ * don't expand mailto links in print styles
80
+
81
+ Improvements::
82
+
83
+ * implement File.read in Node (JavaScript) environment
84
+ * assign sectnumlevels and toclevels values to maxdepth attribute on AsciiDoc processing instructions in DocBook output
85
+ * add test for usage of image block macro with data URI
86
+ * use badges from shields.io in README
87
+
88
+ Distribution Packages::
89
+
90
+ * http://rubygems.org/gems/asciidoctor[RubyGem (asciidoctor)]
91
+ * https://apps.fedoraproject.org/packages/rubygem-asciidoctor[Fedora (rubygem-asciidoctor)]
92
+ * http://packages.debian.org/sid/asciidoctor[Debian (asciidoctor)]
93
+ * http://packages.ubuntu.com/saucy/asciidoctor[Ubuntu (asciidoctor)]
94
+
95
+ https://github.com/asciidoctor/asciidoctor/issues?q=milestone%3Av1.5.1[issues resolved] |
96
+ https://github.com/asciidoctor/asciidoctor/releases/tag/v1.5.1[git tag] |
97
+ https://github.com/asciidoctor/asciidoctor/compare/v1.5.0...v1.5.1[full diff]
98
+
14
99
  == 1.5.0 (2014-08-12) - @mojavelinux
15
100
 
16
101
  Performance::
data/README.adoc CHANGED
@@ -42,12 +42,11 @@ endif::[]
42
42
  :uri-freesoftware: https://www.gnu.org/philosophy/free-sw.html
43
43
  :uri-foundation: http://foundation.zurb.com
44
44
  :uri-tilt: https://github.com/rtomayko/tilt
45
- :uri-ruby: https://ruby-lang.org
46
45
  // images:
47
- :screenshot-img: screenshot.png
46
+ :image-uri-screenshot: https://raw.githubusercontent.com/asciidoctor/asciidoctor/master/screenshot.png
48
47
 
49
48
  {uri-project}[Asciidoctor] is a _fast_ text processor and publishing toolchain for converting {uri-what-is-asciidoc}[AsciiDoc] content to HTML5, DocBook 5 (or 4.5) and other formats.
50
- Asciidoctor is written in {uri-ruby}[Ruby], packaged as a RubyGem and published to {uri-rubygem}[RubyGems.org].
49
+ Asciidoctor is written in Ruby, packaged as a RubyGem and published to {uri-rubygem}[RubyGems.org].
51
50
  The gem is also included in several Linux distributions, including Fedora, Debian and Ubuntu.
52
51
  Asciidoctor is open source, {uri-repo}[hosted on GitHub] and released under the MIT license.
53
52
 
@@ -62,8 +61,19 @@ We use http://opalrb.org[Opal] to transcompile the Ruby source to JavaScript to
62
61
  Asciidoctor.js is used to power the AsciiDoc preview extensions for Chrome, Atom, Brackets and other web-based tooling.
63
62
  ====
64
63
 
64
+ .Key documentation
65
+ [square]
66
+ * {uri-docs}/what-is-asciidoc[What is Asciidoc?]
67
+ * {uri-docs}/asciidoc-writers-guide[AsciiDoc Writer's Guide]
68
+ * {uri-docs}/asciidoc-syntax-quick-reference[AsciiDoc Syntax Reference]
69
+ * {uri-docs}/user-manual[Asciidoctor User Manual]
70
+
65
71
  ifdef::env-github[]
66
- *Project health:* image:http://img.shields.io/travis/asciidoctor/asciidoctor/master.svg[Build Status, link="https://travis-ci.org/asciidoctor/asciidoctor"] image:http://img.shields.io/coveralls/asciidoctor/asciidoctor/master.svg["Coverage Status", link="https://coveralls.io/r/asciidoctor/asciidoctor"]
72
+ .*Project Health*
73
+ image:http://img.shields.io/travis/asciidoctor/asciidoctor/master.svg[Build Status, link=https://travis-ci.org/asciidoctor/asciidoctor]
74
+ //image:http://img.shields.io/coveralls/asciidoctor/asciidoctor/master.svg[Coverage Status, link=https://coveralls.io/r/asciidoctor/asciidoctor]
75
+ image:https://codeclimate.com/github/asciidoctor/asciidoctor/badges/gpa.svg[Code Climate, link="https://codeclimate.com/github/asciidoctor/asciidoctor"]
76
+ image:http://inch-ci.org/github/asciidoctor/asciidoctor.svg?branch=master[Inline docs, link="http://inch-ci.org/github/asciidoctor/asciidoctor"]
67
77
  endif::env-github[]
68
78
 
69
79
  == The Big Picture
@@ -71,7 +81,7 @@ endif::env-github[]
71
81
  Asciidoctor reads content written in plain text, as shown in the panel on the left in the image below, and converts it to HTML5, as shown rendered in the right panel.
72
82
  Asciidoctor adds a default stylesheet to the HTML5 document, as shown, to provide a pleasant out-of-the-box experience.
73
83
 
74
- image::{screenshot-img}[Preview of AsciiDoc source and corresponding rendered HTML]
84
+ image::{image-uri-screenshot}[Preview of AsciiDoc source and corresponding rendered HTML]
75
85
 
76
86
  == AsciiDoc Processing
77
87
 
@@ -86,7 +96,7 @@ Asciidoctor also offers a modern, responsive theme based on {uri-foundation}[Fou
86
96
 
87
97
  == Requirements
88
98
 
89
- Asciidoctor works on Linux, OSX (Mac) and Windows and requires one of the following implementations of {uri-ruby}[Ruby]:
99
+ Asciidoctor works on Linux, OSX (Mac) and Windows and requires one of the following implementations of Ruby:
90
100
 
91
101
  * MRI (Ruby 1.8.7, 1.9.3, 2.0.0 & 2.1.2)
92
102
  * JRuby 1.7 (Ruby 1.8 and 1.9 modes)
@@ -330,6 +340,69 @@ The project was initiated in 2012 by https://github.com/erebor[Ryan Waldron] and
330
340
 
331
341
  == Changelog
332
342
 
343
+ == 1.5.2 (2014-11-27) - @mojavelinux
344
+
345
+ Enhancements::
346
+
347
+ * add docinfo extension (@mogztter) (#1162)
348
+ * allow docinfo to be in separate directory from content, specified by `docinfodir` attribute (@mogztter) (#511)
349
+ * enable TeX equation auto-numbering if `eqnums` attribute is set (@jxxcarlson) (#1110)
350
+
351
+ Improvements::
352
+
353
+ * recognize `--` as valid line comment for callout numbers; make line comment configurable (#1068)
354
+ * upgrade highlight.js to version 8.4 (#1216)
355
+ * upgrade Font Awesome to version 4.2.0 (@clojens) (#1201)
356
+ * define JAVASCRIPT_PLATFORM constant to simplify conditional logic in the JavaScript environment (#897)
357
+ * provide access to destination directory, outfile and outdir via Document object (#1203)
358
+ * print encoding information in version report produced by `asciidoctor -v` (#1210)
359
+ * add intrinsic attribute named `cpp` with value `C++` (#1208)
360
+ * preserve URI targets passed to `stylesheet` and related attributes (#1192)
361
+ * allow numeric characters in block attribute name (#1103)
362
+ * support custom YouTube playlists (#1105)
363
+ * make start number for unique id generation configurable (#1148)
364
+ * normalize and force UTF-8 encoding of docinfo content (#831)
365
+ * allow subs and default_subs to be specified in Block constructor (#749)
366
+ * enhance error message when reading binary input files (@mogztter) (#1158)
367
+ * add `append` method as alias to `<<` method on AbstractBlock (#1085)
368
+ * assign value of `preface-title` as title of preface node (#1090)
369
+ * fix spacing around checkbox in checklist (#1138)
370
+ * automatically load Slim's include plugin when using slim templates (@jirutka) (#1151)
371
+ * mixin Slim helpers into execution scope of slim templates (@jirutka) (#1143)
372
+ * improve DocBook output for manpage doctype (@bk2204) (#1134, #1142)
373
+
374
+ Compliance::
375
+
376
+ * substitute attribute entry value in attributes defined outside of header (#1130)
377
+ * allow empty cell to appear at end of table row (#1106)
378
+ * only produce one row for table in CSV or DSV format with a single cell (#1180)
379
+
380
+ Bug fixes::
381
+
382
+ * add explicit to_s call to generate delimiter settings for MathJax config (#1198)
383
+ * fix includes that reference absolute Windows paths (#1144)
384
+ * apply DSL to extension block in a way compatible with Opal
385
+
386
+ == 1.5.1 (2014-09-29) - @mojavelinux
387
+
388
+ Bug fixes::
389
+
390
+ * recognize tag directives inside comments within XML files for including tagged regions
391
+ * restore passthroughs inside footnotes when more than one footnote appears on the same line
392
+ * -S flag in cli recognizes safe mode name as lowercase string
393
+ * do not match # in character reference when looking for marked text
394
+ * add namespace to lang attribute in DocBook 5 backend
395
+ * restore missing space before conum on last line of listing when highlighting with Pygments
396
+ * place conums on correct lines when line numbers are enabled when highlighting with Pygments
397
+ * don't expand mailto links in print styles
398
+
399
+ Improvements::
400
+
401
+ * implement File.read in Node (JavaScript) environment
402
+ * assign sectnumlevels and toclevels values to maxdepth attribute on AsciiDoc processing instructions in DocBook output
403
+ * add test for usage of image block macro with data URI
404
+ * use badges from shields.io in README
405
+
333
406
  === 1.5.0 (2014-08-12) - @mojavelinux
334
407
 
335
408
  Performance::
data/Rakefile CHANGED
@@ -19,7 +19,7 @@ begin
19
19
  require 'rake/testtask'
20
20
  Rake::TestTask.new(:test) do |test|
21
21
  prepare_test_env
22
- puts "LANG: #{ENV['LANG']}"
22
+ puts %(LANG: #{ENV['LANG']}) if ENV.key? 'TRAVIS_BUILD_ID'
23
23
  test.libs << 'test'
24
24
  test.pattern = 'test/**/*_test.rb'
25
25
  test.verbose = true
@@ -52,6 +52,27 @@ begin
52
52
  rescue LoadError
53
53
  end
54
54
 
55
+ def ci_setup_tasks
56
+ tasks = []
57
+ begin
58
+ require 'ci/reporter/rake/minitest'
59
+ tasks << 'ci:setup:minitest'
60
+ # FIXME reporter for Cucumber tests not activating
61
+ #require 'ci/reporter/rake/cucumber'
62
+ #tasks << 'ci:setup:cucumber'
63
+ rescue LoadError
64
+ end if ENV['SHIPPABLE'] && RUBY_VERSION >= '1.9.3'
65
+ tasks
66
+ end
67
+
68
+ desc 'Activates coverage and JUnit-style XML reports for tests'
69
+ task :coverage => ci_setup_tasks do
70
+ # exclude coverage run for Ruby 1.8.7 or (disabled) if running on Travis CI
71
+ ENV['COVERAGE'] = 'true' if RUBY_VERSION >= '1.9.3' # && (ENV['SHIPPABLE'] || !ENV['TRAVIS_BUILD_ID'])
72
+ ENV['CI_REPORTS'] = 'shippable/testresults'
73
+ ENV['COVERAGE_REPORTS'] = 'shippable/codecoverage'
74
+ end
75
+
55
76
  namespace :test do
56
77
  desc 'Run unit and feature tests'
57
78
  task :all => [:test,:features]
@@ -21,10 +21,12 @@ To get the best results under MRI, tune Ruby using environment variables as foll
21
21
  $ RUBY_GC_MALLOC_LIMIT=90000000 RUBY_FREE_MIN=650000 ruby benchmark.rb userguide-loop 10
22
22
 
23
23
  .Ruby >= 2.1
24
- $ RUBY_GC_MALLOC_LIMIT=128000000 RUBY_GC_OLDMALLOC_LIMIT=128000000 RUBY_GC_HEAP_INIT_SLOTS=800000 RUBY_GC_HEAP_FREE_SLOTS=800000 RUBY_GC_HEAP_GROWTH_MAX_SLOTS=250000 RUBY_GC_HEAP_GROWTH_FACTOR=1.5 ruby benchmark.rb userguide-loop 10
24
+ $ RUBY_GC_MALLOC_LIMIT=128000000 RUBY_GC_OLDMALLOC_LIMIT=128000000 RUBY_GC_HEAP_INIT_SLOTS=800000 RUBY_GC_HEAP_FREE_SLOTS=800000 RUBY_GC_HEAP_GROWTH_MAX_SLOTS=250000 RUBY_GC_HEAP_GROWTH_FACTOR=2 ruby benchmark.rb userguide-loop 10
25
25
 
26
26
  Asciidoctor starts with ~ 12,500 objects, adds ~ 300,000 each run, so tune RUBY_GC_HEAP_* accordingly
27
27
 
28
+ See http://globaldev.co.uk/2014/05/ruby-2-1-in-detail/#gc-tuning-environment-variables
29
+
28
30
  Execute Ruby using the `--disable=gems` flag to speed up the initial load time, as shown below:
29
31
 
30
32
  $ ruby --disable=gems ...
data/compat/asciidoc.conf CHANGED
@@ -10,15 +10,15 @@ newline=\n
10
10
  [attributes]
11
11
  # make html5 the default html backend
12
12
  backend-alias-html=html5
13
- apostrophe='
14
13
  asterisk=*
15
14
  backtick=`
16
15
  brvbar=&#166;
17
16
  caret=^
18
17
  # plus introduced in AsciiDoc 8.6.9
19
18
  plus=&#43;
20
- space=" "
19
+ blank=
21
20
  tilde=~
21
+ cpp=C++
22
22
  user-home={eval:os.path.expanduser('~')}
23
23
  vbar=|
24
24
  # NOTE use -a no-inline-literal to set compat-mode to default when using AsciiDoc Python
@@ -1,6 +1,6 @@
1
1
  /* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
2
2
  /* Remove the comments around the @import statement below when using this as a custom stylesheet */
3
- /*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic|Noto+Serif:400,400italic,700,700italic|Droid+Sans+Mono:400";*/
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";*/
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}
@@ -264,8 +264,8 @@ dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
264
264
  ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
265
265
  ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
266
266
  ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
267
- ul.checklist li>p:first-child>.fa-check-square-o:first-child,ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
268
- ul.checklist li>p:first-child>input[type="checkbox"]:first-child{position:relative;top:1px}
267
+ ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
268
+ ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
269
269
  ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
270
270
  ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
271
271
  ul.inline>li>*{display:block}
@@ -1,4 +1,15 @@
1
- require "#{File.dirname __FILE__}/../lib/asciidoctor"
1
+ # encoding: UTF-8
2
+ ASCIIDOCTOR_PROJECT_DIR = File.dirname File.dirname(__FILE__)
3
+ Dir.chdir ASCIIDOCTOR_PROJECT_DIR
4
+
5
+ if RUBY_VERSION < '1.9'
6
+ require 'rubygems'
7
+ end
8
+
9
+ require 'simplecov' if ENV['COVERAGE'] == 'true'
10
+
11
+ require File.join(ASCIIDOCTOR_PROJECT_DIR, 'lib', 'asciidoctor')
12
+
2
13
  require 'rspec/expectations'
3
14
  require 'tilt'
4
15
  require 'slim'
data/lib/asciidoctor.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # encoding: UTF-8
1
2
  RUBY_ENGINE = 'unknown' unless defined? RUBY_ENGINE
2
3
  RUBY_ENGINE_OPAL = (RUBY_ENGINE == 'opal')
3
4
  RUBY_ENGINE_JRUBY = (RUBY_ENGINE == 'jruby')
@@ -98,7 +99,7 @@ module Asciidoctor
98
99
 
99
100
  # Flags to control compliance with the behavior of AsciiDoc
100
101
  module Compliance
101
- @keys = [].to_set
102
+ @keys = ::Set.new
102
103
  class << self
103
104
  attr :keys
104
105
  end
@@ -106,7 +107,7 @@ module Asciidoctor
106
107
  # Defines a new compliance key and assigns an initial value.
107
108
  def self.define key, value
108
109
  if key == :keys || (self.respond_to? key)
109
- raise ::ArgumentError, %(Illegal key name: #{key})
110
+ raise ::ArgumentError, %(illegal key name: #{key})
110
111
  end
111
112
  instance_variable_set %(@#{key}), value
112
113
  class << self; self; end.send :attr_accessor, key
@@ -156,8 +157,14 @@ module Asciidoctor
156
157
 
157
158
  # Asciidoctor will allow the id, role and options to be set
158
159
  # on blocks using a shorthand syntax (e.g., #idname.rolename%optionname)
160
+ # Compliance value: false
159
161
  define :shorthand_property_syntax, true
160
162
 
163
+ # Asciidoctor will start counting at the following number
164
+ # when creating a unique id when there is a conflict
165
+ # Compliance value: 2
166
+ define :unique_id_start_index, 2
167
+
161
168
  # Asciidoctor will recognize commonly-used Markdown syntax
162
169
  # to the degree it does not interfere with existing
163
170
  # AsciiDoc syntax and behavior.
@@ -651,6 +658,7 @@ module Asciidoctor
651
658
  # * Foo
652
659
  # - Foo
653
660
  #
661
+ # NOTE we know trailing (.*) will match at least one character because we strip trailing spaces
654
662
  UnorderedListRx = /^#{CG_BLANK}*(-|\*{1,5})#{CG_BLANK}+(.*)$/
655
663
 
656
664
  # Matches an ordered list item (explicit numbering or up to 5 consecutive dots).
@@ -666,6 +674,7 @@ module Asciidoctor
666
674
  # I. Foo (upperroman)
667
675
  #
668
676
  # NOTE leading space match is not always necessary, but is used for list reader
677
+ # NOTE we know trailing (.*) will match at least one character because we strip trailing spaces
669
678
  OrderedListRx = /^#{CG_BLANK}*(\.{1,5}|\d+\.|[a-zA-Z]\.|[IVXivx]+\))#{CG_BLANK}+(.*)$/
670
679
 
671
680
  # Matches the ordinals for each type of ordered list.
@@ -720,20 +729,24 @@ module Asciidoctor
720
729
  #
721
730
  # <1> Foo
722
731
  #
732
+ # NOTE we know trailing (.*) will match at least one character because we strip trailing spaces
723
733
  CalloutListRx = /^<?(\d+)>#{CG_BLANK}+(.*)/
724
734
 
725
735
  # Matches a callout reference inside literal text.
726
736
  #
727
737
  # Examples
728
- # <1> (optionally prefixed by //, # or ;; line comment chars)
738
+ # <1> (optionally prefixed by //, #, -- or ;; line comment chars)
729
739
  # <1> <2> (multiple callouts on one line)
730
740
  # <!--1--> (for XML-based languages)
731
741
  #
732
- # NOTE special characters are already be replaced at this point during conversion to an SGML format
733
- CalloutConvertRx = /(?:(?:\/\/|#|;;) ?)?(\\)?&lt;!?(--|)(\d+)\2&gt;(?=(?: ?\\?&lt;!?\2\d+\2&gt;)*#{CC_EOL})/
734
- # NOTE (con't) ...but not while scanning
742
+ # NOTE extract regexps are applied line-by-line, so we can use $ as end-of-line char
743
+ CalloutExtractRx = /(?:(?:\/\/|#|--|;;) ?)?(\\)?<!?(--|)(\d+)\2>(?=(?: ?\\?<!?\2\d+\2>)*$)/
744
+ CalloutExtractRxt = "(\\\\)?<()(\\d+)>(?=(?: ?\\\\?<\\d+>)*$)"
745
+ # NOTE special characters have not been replaced when scanning
735
746
  CalloutQuickScanRx = /\\?<!?(--|)(\d+)\1>(?=(?: ?\\?<!?\1\d+\1>)*#{CC_EOL})/
736
- CalloutScanRx = /(?:(?:\/\/|#|;;) ?)?(\\)?<!?(--|)(\d+)\2>(?=(?: ?\\?<!?\2\d+\2>)*#{CC_EOL})/
747
+ # NOTE special characters have already been replaced when converting to an SGML format
748
+ CalloutSourceRx = /(?:(?:\/\/|#|--|;;) ?)?(\\)?&lt;!?(--|)(\d+)\2&gt;(?=(?: ?\\?&lt;!?\2\d+\2&gt;)*#{CC_EOL})/
749
+ CalloutSourceRxt = "(\\\\)?&lt;()(\\d+)&gt;(?=(?: ?\\\\?&lt;\\d+&gt;)*#{CC_EOL})"
737
750
 
738
751
  # A Hash of regexps for lists used for dynamic access.
739
752
  ListRxMap = {
@@ -1073,9 +1086,12 @@ module Asciidoctor
1073
1086
  # Examples
1074
1087
  # http://domain
1075
1088
  # https://domain
1089
+ # file:///path
1076
1090
  # data:info
1077
1091
  #
1078
- UriSniffRx = %r{^#{CG_ALPHA}[#{CC_ALNUM}.+-]*:/{0,2}}
1092
+ # not c:/sample.adoc or c:\sample.adoc
1093
+ #
1094
+ UriSniffRx = %r{^#{CG_ALPHA}[#{CC_ALNUM}.+-]+:/{0,2}}
1079
1095
 
1080
1096
  # Detects the end of an implicit URI in the text
1081
1097
  #
@@ -1125,12 +1141,11 @@ module Asciidoctor
1125
1141
  'asterisk' => '*',
1126
1142
  'tilde' => '~',
1127
1143
  'plus' => '&#43;',
1128
- 'apostrophe' => '\'',
1129
1144
  'backslash' => '\\',
1130
1145
  'backtick' => '`',
1146
+ 'blank' => '',
1131
1147
  'empty' => '',
1132
1148
  'sp' => ' ',
1133
- 'space' => ' ',
1134
1149
  'two-colons' => '::',
1135
1150
  'two-semicolons' => ';;',
1136
1151
  'nbsp' => '&#160;',
@@ -1144,6 +1159,7 @@ module Asciidoctor
1144
1159
  'rdquo' => '&#8221;',
1145
1160
  'wj' => '&#8288;',
1146
1161
  'brvbar' => '&#166;',
1162
+ 'cpp' => 'C++',
1147
1163
  'amp' => '&',
1148
1164
  'lt' => '<',
1149
1165
  'gt' => '>'
@@ -1269,15 +1285,15 @@ module Asciidoctor
1269
1285
 
1270
1286
  attributes = options[:attributes] = if !(attrs = options[:attributes])
1271
1287
  {}
1272
- elsif (attrs.is_a? ::Hash) || (::RUBY_ENGINE_JRUBY && (attrs.is_a? ::Java::JavaUtil::Map))
1288
+ elsif ::Hash === attrs || (::RUBY_ENGINE_JRUBY && ::Java::JavaUtil::Map === attrs)
1273
1289
  attrs.dup
1274
- elsif attrs.is_a? ::Array
1290
+ elsif ::Array === attrs
1275
1291
  attrs.inject({}) do |accum, entry|
1276
1292
  k, v = entry.split '=', 2
1277
1293
  accum[k] = v || ''
1278
1294
  accum
1279
1295
  end
1280
- elsif attrs.is_a? ::String
1296
+ elsif ::String === attrs
1281
1297
  # convert non-escaped spaces into null character, so we split on the
1282
1298
  # correct spaces chars, and restore escaped spaces
1283
1299
  capture_1 = ::RUBY_ENGINE_OPAL ? '$1' : '\1'
@@ -1301,11 +1317,11 @@ module Asciidoctor
1301
1317
  end
1302
1318
 
1303
1319
  lines = nil
1304
- if input.is_a? ::File
1305
- lines = input.readlines
1320
+ if ::File === input
1321
+ # TODO cli checks if input path can be read and is file, but might want to add check to API
1322
+ input_path = ::File.expand_path input.path
1306
1323
  input_mtime = input.mtime
1307
- input = ::File.new ::File.expand_path input.path
1308
- input_path = input.path
1324
+ lines = input.readlines
1309
1325
  # hold off on setting infile and indir until we get a better sense of their purpose
1310
1326
  attributes['docfile'] = input_path
1311
1327
  attributes['docdir'] = ::File.dirname input_path
@@ -1321,12 +1337,12 @@ module Asciidoctor
1321
1337
  rescue
1322
1338
  end
1323
1339
  lines = input.readlines
1324
- elsif input.is_a? ::String
1340
+ elsif ::String === input
1325
1341
  lines = input.lines.entries
1326
- elsif input.is_a? ::Array
1342
+ elsif ::Array === input
1327
1343
  lines = input.dup
1328
1344
  else
1329
- raise ::ArgumentError, %(Unsupported input type: #{input.class})
1345
+ raise ::ArgumentError, %(unsupported input type: #{input.class})
1330
1346
  end
1331
1347
 
1332
1348
  if timings
@@ -1334,9 +1350,16 @@ module Asciidoctor
1334
1350
  timings.start :parse
1335
1351
  end
1336
1352
 
1337
- doc = (options[:parse] == false ? (Document.new lines, options) : (Document.new lines,options).parse)
1353
+ if options[:parse] == false
1354
+ doc = Document.new lines, options
1355
+ else
1356
+ doc = (Document.new lines, options).parse
1357
+ end
1358
+
1338
1359
  timings.record :parse if timings
1339
1360
  doc
1361
+ rescue => e
1362
+ raise e.class, %(asciidoctor: FAILED: #{attributes.fetch 'docfile', '<stdin>'}: Failed to parse source, #{e.message})
1340
1363
  end
1341
1364
 
1342
1365
  # Public: Parse the contents of the AsciiDoc source file into an Asciidoctor::Document
@@ -1393,7 +1416,7 @@ module Asciidoctor
1393
1416
 
1394
1417
  case to_file
1395
1418
  when true, nil
1396
- write_to_same_dir = !to_dir && (input.is_a? ::File)
1419
+ write_to_same_dir = !to_dir && ::File === input
1397
1420
  stream_output = false
1398
1421
  write_to_target = to_dir
1399
1422
  to_file = nil
@@ -1402,27 +1425,43 @@ module Asciidoctor
1402
1425
  stream_output = false
1403
1426
  write_to_target = false
1404
1427
  to_file = nil
1428
+ when '/dev/null'
1429
+ return self.load input, options
1405
1430
  else
1406
1431
  write_to_same_dir = false
1407
1432
  stream_output = to_file.respond_to? :write
1408
1433
  write_to_target = stream_output ? false : to_file
1409
1434
  end
1410
1435
 
1411
- if !options.key?(:header_footer) && (write_to_same_dir || write_to_target)
1412
- options[:header_footer] = true
1436
+ unless options.key? :header_footer
1437
+ options[:header_footer] = true if write_to_same_dir || write_to_target
1438
+ end
1439
+
1440
+ # NOTE at least make intended target directory available, if there is one
1441
+ if write_to_same_dir
1442
+ input_path = ::File.expand_path input.path
1443
+ options[:to_dir] = (outdir = ::File.dirname input_path)
1444
+ elsif write_to_target
1445
+ if to_dir
1446
+ if to_file
1447
+ options[:to_dir] = ::File.dirname ::File.expand_path(::File.join to_dir, to_file)
1448
+ else
1449
+ options[:to_dir] = ::File.expand_path to_dir
1450
+ end
1451
+ elsif to_file
1452
+ options[:to_dir] = ::File.dirname ::File.expand_path to_file
1453
+ end
1454
+ else
1455
+ options[:to_dir] = nil
1413
1456
  end
1414
1457
 
1415
1458
  doc = self.load input, options
1416
1459
 
1417
- if to_file == '/dev/null'
1418
- return doc
1419
- elsif write_to_same_dir
1420
- infile = ::File.expand_path input.path
1421
- outfile = ::File.join ::File.dirname(infile), %(#{doc.attributes['docname']}#{doc.attributes['outfilesuffix']})
1422
- if outfile == infile
1423
- raise ::IOError, 'Input file and output file are the same!'
1460
+ if write_to_same_dir
1461
+ outfile = ::File.join outdir, %(#{doc.attributes['docname']}#{doc.attributes['outfilesuffix']})
1462
+ if outfile == input_path
1463
+ raise ::IOError, %(input file and output file cannot be the same: #{outfile})
1424
1464
  end
1425
- outdir = ::File.dirname outfile
1426
1465
  elsif write_to_target
1427
1466
  working_dir = options.has_key?(:base_dir) ? ::File.expand_path(options[:base_dir]) : ::File.expand_path(::Dir.pwd)
1428
1467
  # QUESTION should the jail be the working_dir or doc.base_dir???
@@ -1456,15 +1495,12 @@ module Asciidoctor
1456
1495
  end
1457
1496
 
1458
1497
  timings.start :convert if timings
1459
- output = doc.convert
1498
+ opts = outfile && !stream_output ? { 'outfile' => outfile, 'outdir' => outdir } : {}
1499
+ output = doc.convert opts
1460
1500
  timings.record :convert if timings
1461
1501
 
1462
1502
  if outfile
1463
1503
  timings.start :write if timings
1464
- unless stream_output
1465
- doc.attributes['outfile'] = outfile
1466
- doc.attributes['outdir'] = outdir
1467
- end
1468
1504
  doc.write output, outfile
1469
1505
  timings.record :write if timings
1470
1506
 
@@ -1476,9 +1512,7 @@ module Asciidoctor
1476
1512
  copy_coderay_stylesheet = (doc.attr? 'source-highlighter', 'coderay') && (doc.attr 'coderay-css', 'class') == 'class'
1477
1513
  copy_pygments_stylesheet = (doc.attr? 'source-highlighter', 'pygments') && (doc.attr 'pygments-css', 'class') == 'class'
1478
1514
  if copy_asciidoctor_stylesheet || copy_user_stylesheet || copy_coderay_stylesheet || copy_pygments_stylesheet
1479
- outdir = doc.attr('outdir')
1480
- stylesoutdir = doc.normalize_system_path(doc.attr('stylesdir'), outdir,
1481
- doc.safe >= SafeMode::SAFE ? outdir : nil)
1515
+ stylesoutdir = doc.normalize_system_path(doc.attr('stylesdir'), outdir, doc.safe >= SafeMode::SAFE ? outdir : nil)
1482
1516
  Helpers.mkdir_p stylesoutdir if mkdirs
1483
1517
 
1484
1518
  if copy_asciidoctor_stylesheet
@@ -1534,11 +1568,9 @@ module Asciidoctor
1534
1568
  end
1535
1569
 
1536
1570
  if RUBY_ENGINE == 'opal'
1537
- require 'asciidoctor/debug'
1538
1571
  require 'asciidoctor/version'
1539
1572
  require 'asciidoctor/timings'
1540
1573
  else
1541
- autoload :Debug, 'asciidoctor/debug'
1542
1574
  autoload :VERSION, 'asciidoctor/version'
1543
1575
  autoload :Timings, 'asciidoctor/timings'
1544
1576
  end