asciidoctor-templates-compiler 0.1.3 → 0.2.0
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/README.adoc +15 -12
- data/lib/asciidoctor/templates_compiler/base.rb +7 -8
- data/lib/asciidoctor/templates_compiler/converter_generator.rb +8 -3
- data/lib/asciidoctor/templates_compiler/slim.rb +13 -10
- data/lib/asciidoctor/templates_compiler/temple_ext.rb +20 -0
- data/lib/asciidoctor/templates_compiler/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad02dd81d47a7185c55b040d6a80af3f6fa5ba24
|
4
|
+
data.tar.gz: 26b3aaa536e7f76843fa4f7036c9d8d1901e4453
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5190bb978d148d33659d16ce2065f6455e7da03322fe8c45979403ef6f4fc1f60baf27765d5900e16d04019466ff3e55169301172f897715d55772d903f1423e
|
7
|
+
data.tar.gz: 27cb8c19f213138b057d998d8f1a53eae0a03798ba0d508053ae651750ecbeec2b321d3d922bf4ef32db521c3b36b7ff34d9120f2400ecccafa6147563c391e5
|
data/README.adoc
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
:source-language: ruby
|
3
3
|
// custom
|
4
4
|
:gem-name: asciidoctor-templates-compiler
|
5
|
-
:gem-version: 0.
|
5
|
+
:gem-version: 0.2.0
|
6
6
|
:gh-name: jirutka/{gem-name}
|
7
7
|
:gh-branch: master
|
8
8
|
:codacy-id: b23b8c6503474ea5b13537eaef0c73d5
|
@@ -43,9 +43,8 @@ $ bundle install
|
|
43
43
|
|
44
44
|
The main entry point is method `Asciidoctor::TemplatesCompiler::Slim#compile_converter` (for Slim) that accepts the following keyword arguments.
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
This argument is **required**.
|
46
|
+
backend_info::
|
47
|
+
A hash of keys for `backend_info`: `basebackend`, `outfilesuffix`, `filetype`, `htmlsyntax`.
|
49
48
|
|
50
49
|
class_name::
|
51
50
|
Full name of the converter class to generate (e.g. `My::HTML::Converter`).
|
@@ -55,20 +54,24 @@ delegate_backend::
|
|
55
54
|
Name of the backend (converter) to use as a fallback for AST nodes not supported by your converter.
|
56
55
|
If not specified (default), no fallback will be used and converter will raise `NoMethodError` when it try to convert an unsupported node.
|
57
56
|
|
58
|
-
|
59
|
-
|
60
|
-
Default is empty.
|
57
|
+
engine_opts::
|
58
|
+
A Hash of options to pass into the templating engine that compiles templates into Ruby code.
|
61
59
|
|
62
|
-
|
63
|
-
|
60
|
+
output::
|
61
|
+
An output stream (`IO` object like opened file, `$stdout`, …) to write the generated converter into.
|
62
|
+
Default is `StringIO.new` (it’s the return value of `#compile_converter`).
|
64
63
|
|
65
64
|
pretty::
|
66
65
|
Enable pretty-formatting of the generated Ruby code (generated by Slim/Temple)?
|
67
66
|
Default is `false`.
|
68
67
|
|
69
|
-
|
70
|
-
An
|
71
|
-
Default is
|
68
|
+
register_for::
|
69
|
+
An array of backend names that the generated converter should be registered in Asciidoctor to handle.
|
70
|
+
Default is empty.
|
71
|
+
|
72
|
+
templates_dir::
|
73
|
+
Path of the directory where to look for templates (`*.slim` files not starting with `_`, in the case of Slim) and (optional) `helpers.rb`.
|
74
|
+
This argument is **required**.
|
72
75
|
|
73
76
|
|
74
77
|
=== Examples
|
@@ -14,16 +14,15 @@ module Asciidoctor::TemplatesCompiler
|
|
14
14
|
alias call compile_converter
|
15
15
|
end
|
16
16
|
|
17
|
-
def compile_converter(
|
17
|
+
def compile_converter(templates_dir:, engine_opts: {}, pretty: false, **opts)
|
18
18
|
unless Dir.exist? templates_dir
|
19
19
|
raise "Templates directory '#{templates_dir}' does not exist"
|
20
20
|
end
|
21
21
|
|
22
|
-
backend_info = opts[:backend_info] || {}
|
23
22
|
templates = find_templates(templates_dir)
|
24
|
-
transforms_code = compile_templates(templates,
|
23
|
+
transforms_code = compile_templates(templates, engine_opts, pretty: pretty)
|
25
24
|
|
26
|
-
generate_class(
|
25
|
+
generate_class(transforms_code: transforms_code,
|
27
26
|
helpers_code: read_helpers(templates_dir), **opts)
|
28
27
|
end
|
29
28
|
|
@@ -32,7 +31,7 @@ module Asciidoctor::TemplatesCompiler
|
|
32
31
|
protected
|
33
32
|
|
34
33
|
# @abstract
|
35
|
-
def compile_template(filename,
|
34
|
+
def compile_template(filename, engine_opts = {})
|
36
35
|
end
|
37
36
|
|
38
37
|
# @abstract
|
@@ -43,9 +42,9 @@ module Asciidoctor::TemplatesCompiler
|
|
43
42
|
RubyBeautify.call(code, **opts)
|
44
43
|
end
|
45
44
|
|
46
|
-
def compile_templates(template_files,
|
45
|
+
def compile_templates(template_files, engine_opts = {}, pretty: false)
|
47
46
|
template_files.lazy.map do |path|
|
48
|
-
code = compile_template(path,
|
47
|
+
code = compile_template(path, engine_opts)
|
49
48
|
code = beautify_code(code) if pretty
|
50
49
|
|
51
50
|
[transform_name_from_tmpl_name(path), code]
|
@@ -58,7 +57,7 @@ module Asciidoctor::TemplatesCompiler
|
|
58
57
|
|
59
58
|
def read_helpers(templates_dir)
|
60
59
|
path = File.join(templates_dir, 'helpers.rb')
|
61
|
-
IO.read(path)
|
60
|
+
File.exist?(path) ? IO.read(path) : ''
|
62
61
|
end
|
63
62
|
|
64
63
|
def transform_name_from_tmpl_name(filename)
|
@@ -6,6 +6,7 @@ require 'stringio'
|
|
6
6
|
module Asciidoctor::TemplatesCompiler
|
7
7
|
class ConverterGenerator
|
8
8
|
using Corefines::String::indent
|
9
|
+
using Corefines::Object::blank?
|
9
10
|
|
10
11
|
class << self
|
11
12
|
def generate(output: StringIO.new, **opts)
|
@@ -20,14 +21,18 @@ module Asciidoctor::TemplatesCompiler
|
|
20
21
|
@class_name = class_name
|
21
22
|
@transforms_code = transforms_code
|
22
23
|
@helpers_code = helpers_code
|
23
|
-
@register_for = register_for
|
24
|
+
@register_for = Array(register_for)
|
24
25
|
@backend_info = backend_info
|
25
26
|
@delegate_backend = delegate_backend
|
27
|
+
|
28
|
+
if !helpers_code.blank? && helpers_code !~ /\bmodule Helpers[\s#]/
|
29
|
+
raise ArgumentError, 'The helpers_code does not contain module Helpers'
|
30
|
+
end
|
26
31
|
end
|
27
32
|
|
28
33
|
def generate(out = StringIO.new)
|
29
34
|
out << head_code << "\n"
|
30
|
-
out << helpers_code << "\n"
|
35
|
+
out << helpers_code << "\n" unless @helpers_code.blank?
|
31
36
|
out << initialization_code << "\n"
|
32
37
|
out << convert_method_code << "\n"
|
33
38
|
transform_methods_code(out)
|
@@ -142,7 +147,7 @@ module Asciidoctor::TemplatesCompiler
|
|
142
147
|
out << <<~EOF.indent(2, ' ')
|
143
148
|
|
144
149
|
def #{name}(node, opts = {})
|
145
|
-
|
150
|
+
#{' node.extend(Helpers)' unless @helpers_code.blank?}
|
146
151
|
node.instance_eval do
|
147
152
|
converter.set_local_variables(binding, opts) unless opts.empty?
|
148
153
|
#{code.indent(6, ' ')}
|
@@ -3,22 +3,29 @@ require 'asciidoctor/converter'
|
|
3
3
|
require 'asciidoctor/converter/template'
|
4
4
|
require 'asciidoctor/templates_compiler/version'
|
5
5
|
require 'asciidoctor/templates_compiler/base'
|
6
|
+
require 'asciidoctor/templates_compiler/temple_ext'
|
6
7
|
require 'corefines'
|
7
8
|
require 'slim'
|
8
9
|
require 'slim/include'
|
9
10
|
|
10
11
|
module Asciidoctor::TemplatesCompiler
|
11
12
|
class Slim < Base
|
12
|
-
|
13
|
+
|
14
|
+
DEFAULT_ENGINE_OPTS =
|
15
|
+
::Asciidoctor::Converter::TemplateConverter::DEFAULT_ENGINE_OPTIONS[:slim].dup.freeze
|
16
|
+
|
17
|
+
def compile_converter(backend_info: {}, engine_opts: {}, **)
|
18
|
+
engine_opts[:format] ||= backend_info.fetch('htmlsyntax', 'html').to_sym
|
19
|
+
super
|
20
|
+
end
|
13
21
|
|
14
22
|
protected
|
15
23
|
|
16
|
-
def compile_template(filename,
|
17
|
-
|
18
|
-
opts = engine_options.merge(file: filename, format: htmlsyntax.to_sym)
|
24
|
+
def compile_template(filename, engine_opts = {})
|
25
|
+
engine_opts = DEFAULT_ENGINE_OPTS.merge(**engine_opts, file: filename)
|
19
26
|
content = IO.read(filename)
|
20
27
|
|
21
|
-
::Slim::Engine.new(
|
28
|
+
::Slim::Engine.new(engine_opts).call(content).tap do |code|
|
22
29
|
code.scan(/::(?:Slim|Temple)(?:\:\:\w+)*/).uniq.each do |name|
|
23
30
|
$stderr.puts "WARNING: Compiled template '#{filename}' references constant #{name}"
|
24
31
|
end
|
@@ -30,11 +37,7 @@ module Asciidoctor::TemplatesCompiler
|
|
30
37
|
end
|
31
38
|
|
32
39
|
def read_helpers(templates_dir)
|
33
|
-
super.
|
34
|
-
end
|
35
|
-
|
36
|
-
def engine_options
|
37
|
-
::Asciidoctor::Converter::TemplateConverter::DEFAULT_ENGINE_OPTIONS[:slim]
|
40
|
+
super.sub('module Slim::Helpers', 'module Helpers')
|
38
41
|
end
|
39
42
|
end
|
40
43
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'temple'
|
3
|
+
|
4
|
+
module Temple
|
5
|
+
# Monkey-patch Temple::Generator to fix bugs/inconviences waiting to be
|
6
|
+
# merged into upstream.
|
7
|
+
class Generator
|
8
|
+
|
9
|
+
# XXX: Remove after https://github.com/judofyr/temple/pull/113 is merged.
|
10
|
+
def initialize(opts = {})
|
11
|
+
self.class.options[:capture_generator] = self.class
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
# XXX: Remove after https://github.com/judofyr/temple/pull/112 is merged.
|
16
|
+
def on_capture(name, exp)
|
17
|
+
capture_generator.new(**options, buffer: name).call(exp)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asciidoctor-templates-compiler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakub Jirutka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -143,6 +143,7 @@ files:
|
|
143
143
|
- lib/asciidoctor/templates_compiler/converter_generator.rb
|
144
144
|
- lib/asciidoctor/templates_compiler/ruby_beautify.rb
|
145
145
|
- lib/asciidoctor/templates_compiler/slim.rb
|
146
|
+
- lib/asciidoctor/templates_compiler/temple_ext.rb
|
146
147
|
- lib/asciidoctor/templates_compiler/version.rb
|
147
148
|
homepage: https://github.com/jirutka/asciidoctor-templates-compiler
|
148
149
|
licenses:
|
@@ -164,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
165
|
version: '0'
|
165
166
|
requirements: []
|
166
167
|
rubyforge_project:
|
167
|
-
rubygems_version: 2.6.
|
168
|
+
rubygems_version: 2.6.13
|
168
169
|
signing_key:
|
169
170
|
specification_version: 4
|
170
171
|
summary: Compile templates-based Asciidoctor converter (backend) into a single Ruby
|