asciidoctor-html5s 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.adoc +1 -1
- data/asciidoctor-html5s.gemspec +3 -4
- data/data/templates/_header.html.slim +1 -1
- data/data/templates/document.html.slim +12 -4
- data/data/templates/embedded.html.slim +1 -1
- data/data/templates/example.html.slim +11 -3
- data/data/templates/helpers.rb +85 -57
- data/data/templates/inline_anchor.html.slim +3 -5
- data/data/templates/inline_quoted.html.slim +11 -13
- data/data/templates/listing.html.slim +8 -4
- data/data/templates/olist.html.slim +1 -1
- data/data/templates/outline.html.slim +1 -1
- data/data/templates/table.html.slim +6 -8
- data/data/templates/ulist.html.slim +2 -2
- data/data/templates/video.html.slim +1 -0
- data/lib/asciidoctor/html5s.rb +4 -0
- data/lib/asciidoctor/html5s/attached_colist_treeprocessor.rb +2 -0
- data/lib/asciidoctor/html5s/converter.rb +148 -105
- data/lib/asciidoctor/html5s/html_pipeline_highlighter.rb +31 -0
- data/lib/asciidoctor/html5s/version.rb +1 -1
- metadata +9 -23
- data/lib/asciidoctor/html5s/logger.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e9dfca08be8f1cae2bc0477f473df93fb71c88a84396467342926852f1cc3c9
|
4
|
+
data.tar.gz: 80da368fe359dc4107302113a43b2e0ccbf62b782390de9a9883bbcc9f9e8a4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc1548921c0f4d7c9e8b53fe076505814f748336787cd339c0b93c2d66c7f3ebcb48ca472989b583cef5230f3e87d3f78fc6e552d9fb175495c449fdfd7e6bec
|
7
|
+
data.tar.gz: 5f01724b4123e60aeeb5b5a09668a67f7be6326d781ea5626a02e76d9966cc3fe63ab86d690b0e50937c874c8c656a7f17baf64e390e12bd12391e4e9ee282b8
|
data/README.adoc
CHANGED
@@ -133,7 +133,7 @@ ifndef::npm-readme[]
|
|
133
133
|
=== Ruby
|
134
134
|
|
135
135
|
* https://www.ruby-lang.org/[Ruby] 2.0+ or http://jruby.org/[JRuby] 9.1+
|
136
|
-
* https://rubygems.org/gems/asciidoctor/[Asciidoctor] 1.5.
|
136
|
+
* https://rubygems.org/gems/asciidoctor/[Asciidoctor] 1.5.7+
|
137
137
|
* https://rubygems.org/gems/thread_safe/[thread_safe] (not required, but recommended for Ruby MRI)
|
138
138
|
|
139
139
|
|
data/asciidoctor-html5s.gemspec
CHANGED
@@ -21,15 +21,14 @@ EOF
|
|
21
21
|
|
22
22
|
s.required_ruby_version = '>= 2.0'
|
23
23
|
|
24
|
-
s.add_runtime_dependency 'asciidoctor', '>= 1.5.
|
24
|
+
s.add_runtime_dependency 'asciidoctor', '>= 1.5.7', '< 3.0'
|
25
25
|
s.add_runtime_dependency 'thread_safe', '~> 0.3.4'
|
26
26
|
|
27
|
-
s.add_development_dependency 'asciidoctor-doctest', '= 2.0.0.beta.
|
27
|
+
s.add_development_dependency 'asciidoctor-doctest', '= 2.0.0.beta.7'
|
28
28
|
s.add_development_dependency 'asciidoctor-templates-compiler', '~> 0.6.0'
|
29
29
|
s.add_development_dependency 'bundler', '>= 1.6'
|
30
|
-
s.add_development_dependency 'coderay', '~> 1.1'
|
31
30
|
s.add_development_dependency 'pandoc-ruby', '~> 2.0'
|
32
|
-
s.add_development_dependency 'rake', '~>
|
31
|
+
s.add_development_dependency 'rake', '~> 13.0'
|
33
32
|
s.add_development_dependency 'slim', '~> 3.0'
|
34
33
|
s.add_development_dependency 'slim-htag', '~> 0.1.0'
|
35
34
|
end
|
@@ -1,9 +1,13 @@
|
|
1
1
|
doctype 5
|
2
2
|
html lang=(attr :lang, 'en' unless attr? :nolang)
|
3
|
+
/ Render the document content before styles_and_scripts -
|
4
|
+
/ SyntaxHighlighter#docinfo must be called after SyntaxHighlighter#highlight
|
5
|
+
/ because some highlighter plugins emit style/script tags only when
|
6
|
+
/ #highlight was called at least once.
|
7
|
+
- document_content = content
|
3
8
|
head
|
4
9
|
meta charset=(attr :encoding, 'UTF-8')
|
5
|
-
|
6
|
-
meta http-equiv="X-UA-Compatible" content="IE=edge"
|
10
|
+
meta http-equiv="X-UA-Compatible" content="IE=edge"
|
7
11
|
meta name='viewport' content='width=device-width, initial-scale=1.0'
|
8
12
|
meta name='generator' content="Asciidoctor #{attr 'asciidoctor-version'}"
|
9
13
|
= html_meta_if 'application-name', (attr 'app-name')
|
@@ -17,12 +21,16 @@ html lang=(attr :lang, 'en' unless attr? :nolang)
|
|
17
21
|
=docinfo_content
|
18
22
|
body [
|
19
23
|
id=id
|
20
|
-
class=[(attr :doctype),
|
24
|
+
class=[(attr :doctype),
|
25
|
+
("#{attr 'toc-class'} toc-#{attr 'toc-position', 'left'}" if (attr? 'toc-class') && (attr? :toc) && (attr? 'toc-placement', 'auto')),
|
26
|
+
(attr :docrole) || (attr :role)]
|
21
27
|
style=style_value(max_width: (attr 'max-width')) ]
|
28
|
+
- unless (docinfo_content = (docinfo :header)).empty?
|
29
|
+
=docinfo_content
|
22
30
|
- unless noheader
|
23
31
|
header
|
24
32
|
include _header.html
|
25
|
-
#content =
|
33
|
+
#content =document_content
|
26
34
|
- unless !footnotes? || (attr? :nofootnotes)
|
27
35
|
include _footnotes.html
|
28
36
|
- unless nofooter
|
@@ -1,3 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
- if option? :collapsible
|
2
|
+
details id=id class=role open=(option? :open)
|
3
|
+
- if title
|
4
|
+
summary
|
5
|
+
=title
|
6
|
+
.content
|
7
|
+
=content
|
8
|
+
- else
|
9
|
+
= block_with_caption :top, :class=>'example-block'
|
10
|
+
.example
|
11
|
+
=content
|
data/data/templates/helpers.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'asciidoctor/html5s'
|
2
|
-
require 'asciidoctor/html5s/logger'
|
3
2
|
require 'date' unless RUBY_PLATFORM == 'opal'
|
4
3
|
|
5
4
|
# Add custom functions to this module that you want to use in your Slim
|
@@ -8,10 +7,11 @@ require 'date' unless RUBY_PLATFORM == 'opal'
|
|
8
7
|
module Slim::Helpers
|
9
8
|
|
10
9
|
# URIs of external assets.
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
CDN_BASE_URI = 'https://cdnjs.cloudflare.com/ajax/libs' # for highlighters in Asciidoctor >=2.0.0
|
11
|
+
FONT_AWESOME_URI = 'https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css'
|
12
|
+
HIGHLIGHTJS_BASE_URI = 'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.15.1/build/'
|
13
|
+
KATEX_CSS_URI = 'https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css'
|
14
|
+
KATEX_JS_URI = 'https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js'
|
15
15
|
|
16
16
|
# Defaults
|
17
17
|
DEFAULT_HIGHLIGHTJS_THEME = 'github'
|
@@ -53,7 +53,7 @@ module Slim::Helpers
|
|
53
53
|
|
54
54
|
# @return [Logger]
|
55
55
|
def log
|
56
|
-
|
56
|
+
::Asciidoctor::LoggerManager.logger
|
57
57
|
end
|
58
58
|
|
59
59
|
##
|
@@ -376,15 +376,29 @@ module Slim::Helpers
|
|
376
376
|
# Returns the captioned section's title, optionally numbered.
|
377
377
|
#
|
378
378
|
# @param sec [Asciidoctor::Section] the section node (default: self).
|
379
|
+
# @param drop_anchors [Boolean] Remove +<a>+ tags from the title?
|
379
380
|
# @return [String]
|
380
381
|
#
|
381
|
-
def section_title(sec = self)
|
382
|
-
|
382
|
+
def section_title(sec = self, drop_anchors: false)
|
383
|
+
title =
|
384
|
+
if sec.caption
|
385
|
+
sec.captioned_title
|
386
|
+
elsif sec.numbered && sec.level <= document.attr(:sectnumlevels, DEFAULT_SECTNUMLEVELS).to_i
|
387
|
+
if sec.level < 2 && document.doctype == 'book' && %w[chapter part].include?(sec.sectname)
|
388
|
+
signifier = document.attr("#{sec.sectname}-signifier")
|
389
|
+
sectnum = sec.sectname == 'part' ? sec.sectnum(nil, ':') : sec.sectnum
|
390
|
+
"#{signifier&.+ ' '}#{sectnum} #{sec.title}"
|
391
|
+
else
|
392
|
+
"#{sec.sectnum} #{sec.title}"
|
393
|
+
end
|
394
|
+
else
|
395
|
+
sec.title
|
396
|
+
end
|
383
397
|
|
384
|
-
if
|
385
|
-
[
|
398
|
+
if drop_anchors && title.include?('<a')
|
399
|
+
title.gsub(/<(?:a[^>+]+|\/a)>/, '')
|
386
400
|
else
|
387
|
-
|
401
|
+
title
|
388
402
|
end
|
389
403
|
end
|
390
404
|
|
@@ -396,7 +410,12 @@ module Slim::Helpers
|
|
396
410
|
end
|
397
411
|
|
398
412
|
def link_rel
|
399
|
-
|
413
|
+
rel = [
|
414
|
+
('nofollow' if option?('nofollow')),
|
415
|
+
('noopener' if option?('noopener') || local_attr(:window) == '_blank')
|
416
|
+
].compact
|
417
|
+
|
418
|
+
rel.empty? ? nil : rel.join(' ')
|
400
419
|
end
|
401
420
|
|
402
421
|
#--------------------------------------------------------
|
@@ -455,15 +474,19 @@ module Slim::Helpers
|
|
455
474
|
#
|
456
475
|
|
457
476
|
##
|
458
|
-
#
|
459
|
-
#
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
477
|
+
# See {Asciidoctor::SyntaxHighlighter#format}.
|
478
|
+
#
|
479
|
+
# @return [String, nil] a rendered HTML.
|
480
|
+
def formatted_source
|
481
|
+
hl = document.syntax_highlighter or return nil
|
482
|
+
|
483
|
+
opts = { nowrap: nowrap? }
|
484
|
+
if hl.highlight?
|
485
|
+
opts[:css_mode] = document.attr("#{hl.name}-css", :class).to_sym
|
486
|
+
opts[:style] = document.attr("#{hl.name}-style")
|
487
|
+
end
|
488
|
+
|
489
|
+
hl.format(self, source_lang, opts)
|
467
490
|
end
|
468
491
|
|
469
492
|
##
|
@@ -481,6 +504,15 @@ module Slim::Helpers
|
|
481
504
|
local_attr :language, false
|
482
505
|
end
|
483
506
|
|
507
|
+
# This is needed only for Asciidoctor <2.0.0.
|
508
|
+
def source_code_class
|
509
|
+
if document.attr? 'source-highlighter', 'highlightjs'
|
510
|
+
"language-#{source_lang || 'none'} hljs"
|
511
|
+
elsif source_lang
|
512
|
+
"language-#{source_lang}"
|
513
|
+
end
|
514
|
+
end
|
515
|
+
|
484
516
|
#--------------------------------------------------------
|
485
517
|
# block_open
|
486
518
|
#
|
@@ -502,7 +534,7 @@ without a title when doctype is book. Excluding block content.'
|
|
502
534
|
def partintro_allowed?
|
503
535
|
if result = (level != 0 || parent.context != :section || document.doctype != 'book')
|
504
536
|
log.warn "asciidoctor: ERROR: partintro block can only be used when doctype
|
505
|
-
is book and
|
537
|
+
is book and must be a child of a book part. Excluding block content."
|
506
538
|
end
|
507
539
|
!result
|
508
540
|
end
|
@@ -511,13 +543,13 @@ is book and it's a child of a book part. Excluding block content."
|
|
511
543
|
# block_table
|
512
544
|
#
|
513
545
|
|
514
|
-
def autowidth?
|
515
|
-
option? :autowidth
|
546
|
+
def autowidth?(node = self)
|
547
|
+
node.option? :autowidth
|
516
548
|
end
|
517
549
|
|
518
|
-
def
|
550
|
+
def stretch?
|
519
551
|
if !autowidth? || local_attr?('width')
|
520
|
-
'
|
552
|
+
'stretch' if attr? :tablepcwidth, 100
|
521
553
|
end
|
522
554
|
end
|
523
555
|
|
@@ -535,7 +567,8 @@ is book and it's a child of a book part. Excluding block content."
|
|
535
567
|
when :vimeo
|
536
568
|
params = {
|
537
569
|
autoplay: (1 if option? 'autoplay'),
|
538
|
-
loop: (1 if option? 'loop')
|
570
|
+
loop: (1 if option? 'loop'),
|
571
|
+
muted: (1 if option? 'muted')
|
539
572
|
}
|
540
573
|
start_anchor = "#at=#{attr :start}" if attr? :start
|
541
574
|
"//player.vimeo.com/video/#{attr :target}#{start_anchor}#{url_query params}"
|
@@ -549,6 +582,7 @@ is book and it's a child of a book part. Excluding block content."
|
|
549
582
|
list: (attr :list, list_id),
|
550
583
|
autoplay: (1 if option? 'autoplay'),
|
551
584
|
loop: (1 if option? 'loop'),
|
585
|
+
muted: (1 if option? 'muted'),
|
552
586
|
controls: (0 if option? 'nocontrols')
|
553
587
|
}
|
554
588
|
"//www.youtube.com/embed/#{video_id}#{url_query params}"
|
@@ -603,10 +637,9 @@ is book and it's a child of a book part. Excluding block content."
|
|
603
637
|
stylesheet = attr :stylesheet
|
604
638
|
stylesdir = attr :stylesdir, ''
|
605
639
|
default_style = ::Asciidoctor::DEFAULT_STYLESHEET_KEYS.include? stylesheet
|
606
|
-
linkcss = attr?(:linkcss) || safe >= ::Asciidoctor::SafeMode::SECURE
|
607
640
|
ss = ::Asciidoctor::Stylesheets.instance
|
608
641
|
|
609
|
-
if linkcss
|
642
|
+
if attr?(:linkcss)
|
610
643
|
path = default_style ? ::Asciidoctor::DEFAULT_STYLESHEET_NAME : stylesheet
|
611
644
|
styles << { href: [stylesdir, path] }
|
612
645
|
elsif default_style
|
@@ -629,23 +662,15 @@ is book and it's a child of a book part. Excluding block content."
|
|
629
662
|
scripts << { text: KATEX_RENDER_CODE }
|
630
663
|
end
|
631
664
|
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
styles << { href: [stylesdir, ss.coderay_stylesheet_name] }
|
637
|
-
else
|
638
|
-
styles << { text: ss.coderay_stylesheet_data }
|
639
|
-
end
|
640
|
-
end
|
665
|
+
if !defined?(::Asciidoctor::SyntaxHighlighter) # Asciidoctor <2.0.0
|
666
|
+
if attr? 'source-highlighter', 'highlightjs'
|
667
|
+
hjs_base = attr :highlightjsdir, HIGHLIGHTJS_BASE_URI
|
668
|
+
hjs_theme = attr 'highlightjs-theme', DEFAULT_HIGHLIGHTJS_THEME
|
641
669
|
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
scripts << { src: [hjs_base, 'highlight.min.js'] }
|
647
|
-
scripts << { text: 'hljs.initHighlightingOnLoad()' }
|
648
|
-
styles << { href: [hjs_base, "styles/#{hjs_theme}.min.css"] }
|
670
|
+
scripts << { src: [hjs_base, 'highlight.min.js'] }
|
671
|
+
scripts << { text: 'hljs.initHighlightingOnLoad()' }
|
672
|
+
styles << { href: [hjs_base, "styles/#{hjs_theme}.min.css"] }
|
673
|
+
end
|
649
674
|
end
|
650
675
|
|
651
676
|
styles.each do |item|
|
@@ -664,6 +689,15 @@ is book and it's a child of a book part. Excluding block content."
|
|
664
689
|
end
|
665
690
|
end
|
666
691
|
|
692
|
+
if defined?(::Asciidoctor::SyntaxHighlighter) && (hl = syntax_highlighter) # Asciidoctor >=2.0.0
|
693
|
+
# XXX: We don't care about the declared location and put all to head.
|
694
|
+
[:head, :footer].each do |location|
|
695
|
+
if hl.docinfo?(location)
|
696
|
+
tags << hl.docinfo(location, self, cdn_base_url: CDN_BASE_URI, linkcss: attr?(:linkcss))
|
697
|
+
end
|
698
|
+
end
|
699
|
+
end
|
700
|
+
|
667
701
|
tags.join("\n")
|
668
702
|
end
|
669
703
|
|
@@ -678,27 +712,21 @@ is book and it's a child of a book part. Excluding block content."
|
|
678
712
|
text
|
679
713
|
elsif (path = local_attr :path)
|
680
714
|
path
|
681
|
-
|
715
|
+
else
|
682
716
|
ref = document.catalog[:refs][attr :refid]
|
683
717
|
if ref.kind_of? Asciidoctor::AbstractNode
|
684
|
-
ref.xreftext((
|
718
|
+
ref.xreftext(attr(:xrefstyle, nil, true))
|
685
719
|
end
|
686
|
-
else # Asciidoctor < 1.5.6
|
687
|
-
document.references[:ids][attr :refid || target]
|
688
720
|
end
|
689
721
|
(str || "[#{attr :refid}]").tr_s("\n", ' ')
|
690
722
|
end
|
691
723
|
|
692
724
|
# @return [String, nil] text of the bibref anchor, or +nil+ if not found.
|
693
725
|
def bibref_text
|
694
|
-
if
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
"[#{reftext || id}]"
|
699
|
-
end
|
700
|
-
else
|
701
|
-
"[#{target}]"
|
726
|
+
if ::Asciidoctor::VERSION[0] == '1'
|
727
|
+
text
|
728
|
+
else # Asciidoctor >= 2.0.0
|
729
|
+
"[#{reftext || id}]"
|
702
730
|
end
|
703
731
|
end
|
704
732
|
|
@@ -1,12 +1,10 @@
|
|
1
1
|
- case type
|
2
2
|
- when :xref
|
3
|
-
a href=target =xref_text
|
3
|
+
a href=target class=role =xref_text
|
4
4
|
- when :ref
|
5
|
-
|
6
|
-
a id=(id || target) aria-hidden='true'
|
5
|
+
a id=id aria-hidden='true'
|
7
6
|
- when :bibref
|
8
|
-
|
9
|
-
a id=(id || target) aria-hidden='true'
|
7
|
+
a id=id aria-hidden='true'
|
10
8
|
=bibref_text
|
11
9
|
- else
|
12
10
|
a id=id class=role href=target target=(attr :window) rel=link_rel title=(attr :title) =text
|
@@ -1,29 +1,27 @@
|
|
1
|
-
- unless id.nil?
|
2
|
-
a id=id aria-hidden='true'
|
3
1
|
- case type
|
4
2
|
- when :emphasis
|
5
|
-
em class=role =text
|
3
|
+
em id=id class=role =text
|
6
4
|
- when :strong
|
7
|
-
strong class=role =text
|
5
|
+
strong id=id class=role =text
|
8
6
|
- when :monospaced
|
9
|
-
code class=role =text
|
7
|
+
code id=id class=role =text
|
10
8
|
- when :superscript
|
11
|
-
sup class=role =text
|
9
|
+
sup id=id class=role =text
|
12
10
|
- when :subscript
|
13
|
-
sub class=role =text
|
11
|
+
sub id=id class=role =text
|
14
12
|
- when :mark
|
15
|
-
mark class=role =text
|
13
|
+
mark id=id class=role =text
|
16
14
|
- when :double
|
17
|
-
= html_tag_if role
|
15
|
+
= html_tag_if role? || id, :span, :id=>id, :class=>role
|
18
16
|
=(double_quoted text)
|
19
17
|
- when :single
|
20
|
-
= html_tag_if role
|
18
|
+
= html_tag_if role? || id, :span, :id=>id, :class=>role
|
21
19
|
=(single_quoted text)
|
22
20
|
- when :asciimath, :latexmath
|
23
|
-
span.math data-lang=stem_lang =(delimit_stem text, type)
|
21
|
+
span.math id=id data-lang=stem_lang =(delimit_stem text, type)
|
24
22
|
- else
|
25
23
|
- if role == 'line-through' || role == 'del'
|
26
|
-
del =text
|
24
|
+
del id=id =text
|
27
25
|
- else
|
28
|
-
= html_tag_if role
|
26
|
+
= html_tag_if role? || id, :span, :id=>id, :class=>role
|
29
27
|
=text
|
@@ -1,12 +1,16 @@
|
|
1
1
|
= block_with_caption :top, :class=>'listing-block'
|
2
2
|
- if style == 'source'
|
3
|
-
-
|
3
|
+
- highlighter = document.attr('source-highlighter')
|
4
|
+
/ Asciidoctor >=2.0.0
|
5
|
+
- if defined?(::Asciidoctor::SyntaxHighlighter) && document.syntax_highlighter
|
6
|
+
= formatted_source
|
7
|
+
/ Asciidoctor <2.0.0
|
8
|
+
- elsif highlighter == 'html-pipeline'
|
4
9
|
pre: code data-lang=source_lang =content
|
5
10
|
- else
|
6
|
-
|
7
|
-
- code_class = "language-#{source_lang}" if source_lang
|
11
|
+
/ The 1st and 3rd class element is for Asciidoctor <2.0.0
|
8
12
|
pre class=[highlighter, 'highlight', ('linenums' if attr? :linenums), nowrap?]
|
9
|
-
code class=
|
13
|
+
code class=source_code_class data-lang=source_lang =content
|
10
14
|
- else
|
11
15
|
pre class=nowrap? =content
|
12
16
|
/ Note: This is a hack to embed callout list into the listing element.
|