jekyll-antex 0.4.0 → 0.5.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/lib/jekyll/antex/alias.rb +0 -1
- data/lib/jekyll/antex/block.rb +22 -18
- data/lib/jekyll/antex/dealiaser.rb +48 -0
- data/lib/jekyll/antex/version.rb +1 -1
- data/lib/jekyll/antex.rb +47 -6
- metadata +9 -9
- data/lib/jekyll/antex/generator.rb +0 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04f40e277c4a44f0177d6528c0b23cf3fe814d02b0d62bf8b33285649f6ff77a
|
4
|
+
data.tar.gz: 86af7068b8c90b17ddeed5e17ecb5406868374c8ab2516dd40805c1ef415fd73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bc58c1233337a4a117b66a6adf30398e166f5b2f87aef95dcac232031c8fd1911e3997a656f3b02d6ee587e5fb76fbe6095ecaba8aafa6527a2ba654c20f348
|
7
|
+
data.tar.gz: ad91f452823da9f27eb777238ae95cff9fea0803fe5a8dc0dc142d642aa818dd5192dd832a054526040cf6bbe1f79a49ee83cbdd72607ee99945a05ab7e5f6b7
|
data/lib/jekyll/antex/alias.rb
CHANGED
data/lib/jekyll/antex/block.rb
CHANGED
@@ -9,6 +9,10 @@ require 'jekyll/antex/options'
|
|
9
9
|
|
10
10
|
module Jekyll
|
11
11
|
module Antex
|
12
|
+
class << self
|
13
|
+
attr_accessor :jobs
|
14
|
+
end
|
15
|
+
|
12
16
|
class Block < Liquid::Block
|
13
17
|
def initialize(tag, markup, tokens)
|
14
18
|
@markup = markup
|
@@ -18,45 +22,47 @@ module Jekyll
|
|
18
22
|
def render(context)
|
19
23
|
options = build_options registers: context.registers, markup: @markup
|
20
24
|
job = ::Antex::Job.new snippet: super, options: options
|
21
|
-
job.
|
25
|
+
Jekyll::Antex.jobs.store(job.hash, job)
|
22
26
|
add_static_file context.registers[:site], job
|
23
|
-
render_html
|
27
|
+
self.class.render_html(job)
|
24
28
|
end
|
25
29
|
|
26
30
|
private
|
27
31
|
|
28
|
-
def render_html(job)
|
29
|
-
img_tag = render_img_tag
|
30
|
-
set_box: job.set_box
|
32
|
+
def self.render_html(job)
|
33
|
+
img_tag = render_img_tag job
|
31
34
|
classes = job.options['classes'].join(' ')
|
32
35
|
"<span class='#{classes}'>#{img_tag}</span>"
|
33
36
|
end
|
34
37
|
|
35
|
-
def render_img_tag(
|
38
|
+
def self.render_img_tag(job)
|
39
|
+
"<img data-antex='#{job.hash}' src='#{img_url(job)}' />"
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.render_style_attribute(job_set_box, precision: 3)
|
36
43
|
<<~IMG_TAG.gsub(/(\s\s+)/m, ' ').strip!
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
src='#{src}' />
|
44
|
+
style='margin: #{job_set_box.mt.round(precision)}ex
|
45
|
+
#{job_set_box.mr.round(precision)}ex
|
46
|
+
#{job_set_box.mb.round(precision)}ex
|
47
|
+
#{job_set_box.ml.round(precision)}ex;
|
48
|
+
height: #{job_set_box.th.round(precision)}ex;
|
49
|
+
width: #{job_set_box.wd.round(precision)}ex;'
|
44
50
|
IMG_TAG
|
45
51
|
end
|
46
52
|
|
47
53
|
def add_static_file(site, job)
|
48
54
|
site.static_files << Jekyll::StaticFile.new(
|
49
|
-
site, *static_file_paths(job)
|
55
|
+
site, *self.class.static_file_paths(job)
|
50
56
|
)
|
51
57
|
end
|
52
58
|
|
53
|
-
def img_url(job)
|
59
|
+
def self.img_url(job)
|
54
60
|
_, dest_dir, filename = static_file_paths job
|
55
61
|
url_path_prefix = job.options['url_path_prefix'] || '/'
|
56
62
|
File.join url_path_prefix, dest_dir, filename
|
57
63
|
end
|
58
64
|
|
59
|
-
def static_file_paths(job)
|
65
|
+
def self.static_file_paths(job)
|
60
66
|
work_dir_prefix = %r{^#{Regexp.escape job.dirs['work']}(?=\/|$)}
|
61
67
|
# base, dir, name
|
62
68
|
[
|
@@ -75,5 +81,3 @@ module Jekyll
|
|
75
81
|
end
|
76
82
|
end
|
77
83
|
end
|
78
|
-
|
79
|
-
Liquid::Template.register_tag('antex', Jekyll::Antex::Block)
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'jekyll/antex/alias'
|
4
|
+
require 'jekyll/antex/guard'
|
5
|
+
require 'jekyll/antex/stasher'
|
6
|
+
require 'jekyll/antex/options'
|
7
|
+
|
8
|
+
module Jekyll
|
9
|
+
module Antex
|
10
|
+
module Dealiaser
|
11
|
+
def self.run(resource)
|
12
|
+
options = build_options(resource)
|
13
|
+
guarder = build_guarder(options)
|
14
|
+
aliaser = build_aliaser(options)
|
15
|
+
content = aliaser.lift(guarder.lift(resource.content))
|
16
|
+
aliaser.bake(&method(:dealias_tag))
|
17
|
+
guarder.drop(aliaser.drop(content))
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.build_options(resource)
|
21
|
+
Jekyll::Antex::Options.build(
|
22
|
+
Jekyll::Antex::Options::DEFAULTS,
|
23
|
+
resource.site.config['antex'] || {},
|
24
|
+
resource.data['antex'] || {}
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.build_guarder(options)
|
29
|
+
Jekyll::Antex::Stasher.new(
|
30
|
+
options['guards'].values.map(&Guard.method(:new))
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.build_aliaser(options)
|
35
|
+
Jekyll::Antex::Stasher.new(
|
36
|
+
options['aliases'].values.map(&Alias.method(:new))
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.dealias_tag(match, matcher)
|
41
|
+
markup = YAML.safe_load match[:markup] if match.names.include?('markup')
|
42
|
+
markup = YAML.dump Options.build(matcher.options || {}, markup || {})
|
43
|
+
code = match['code']
|
44
|
+
"{% antex #{markup} %}#{code}{% endantex %}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/jekyll/antex/version.rb
CHANGED
data/lib/jekyll/antex.rb
CHANGED
@@ -3,10 +3,51 @@
|
|
3
3
|
require 'antex'
|
4
4
|
|
5
5
|
require 'jekyll/antex/version'
|
6
|
-
require 'jekyll/antex/
|
7
|
-
require 'jekyll/antex/options'
|
8
|
-
require 'jekyll/antex/guard'
|
9
|
-
require 'jekyll/antex/stasher'
|
10
|
-
require 'jekyll/antex/alias'
|
11
|
-
require 'jekyll/antex/generator'
|
6
|
+
require 'jekyll/antex/dealiaser'
|
12
7
|
require 'jekyll/antex/block'
|
8
|
+
|
9
|
+
require 'byebug'
|
10
|
+
|
11
|
+
module Jekyll
|
12
|
+
module Antex
|
13
|
+
def self.run_jobs
|
14
|
+
jobs_count = Jekyll::Antex.jobs.count
|
15
|
+
Jekyll.logger.writer << "Compiling TeX: ".rjust(20)
|
16
|
+
Jekyll::Antex.jobs.values.each_with_index do |job, i|
|
17
|
+
progress = "job " + i.next.to_s.rjust(jobs_count.to_s.length) + " of #{jobs_count} "
|
18
|
+
Jekyll.logger.writer << progress
|
19
|
+
job.run!
|
20
|
+
Jekyll.logger.writer << "\b" * progress.length
|
21
|
+
end
|
22
|
+
Jekyll.logger.writer << "#{jobs_count} jobs completed.\n"
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.inject_style_attributes(output)
|
26
|
+
output.gsub(/data-antex="(?<hash>.*?)"/) do
|
27
|
+
job = Jekyll::Antex.jobs[Regexp.last_match[:hash]]
|
28
|
+
Jekyll::Antex::Block.render_style_attribute(job.set_box)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# NOTE: I'm conflicted, but regexp flags in yaml must be easy to use.
|
35
|
+
SafeYAML::OPTIONS[:whitelisted_tags].push('!ruby/regexp')
|
36
|
+
|
37
|
+
Jekyll::Hooks.register :site, :pre_render do
|
38
|
+
Jekyll::Antex.jobs = {}
|
39
|
+
end
|
40
|
+
|
41
|
+
# NOTE: we're not registering :posts since they are included in :documents.
|
42
|
+
Jekyll::Hooks.register [:documents, :pages], :pre_render do |resource|
|
43
|
+
resource.content = Jekyll::Antex::Dealiaser.run(resource)
|
44
|
+
end
|
45
|
+
|
46
|
+
Liquid::Template.register_tag('antex', Jekyll::Antex::Block)
|
47
|
+
|
48
|
+
Jekyll::Hooks.register :site, :post_render do |site|
|
49
|
+
Jekyll::Antex.run_jobs
|
50
|
+
[*site.pages, *site.documents].each do |resource|
|
51
|
+
resource.output = Jekyll::Antex.inject_style_attributes(resource.output)
|
52
|
+
end
|
53
|
+
end
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-antex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paolo Brasolin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-09-
|
11
|
+
date: 2018-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: antex
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: jekyll
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3.8'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3.8'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: byebug
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,9 +162,9 @@ files:
|
|
162
162
|
- lib/jekyll/antex.rb
|
163
163
|
- lib/jekyll/antex/alias.rb
|
164
164
|
- lib/jekyll/antex/block.rb
|
165
|
+
- lib/jekyll/antex/dealiaser.rb
|
165
166
|
- lib/jekyll/antex/defaults.yml
|
166
167
|
- lib/jekyll/antex/error.rb
|
167
|
-
- lib/jekyll/antex/generator.rb
|
168
168
|
- lib/jekyll/antex/guard.rb
|
169
169
|
- lib/jekyll/antex/options.rb
|
170
170
|
- lib/jekyll/antex/stasher.rb
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'jekyll'
|
4
|
-
require 'jekyll/utils'
|
5
|
-
|
6
|
-
require 'jekyll/antex/alias'
|
7
|
-
require 'jekyll/antex/guard'
|
8
|
-
require 'jekyll/antex/stasher'
|
9
|
-
require 'jekyll/antex/options'
|
10
|
-
|
11
|
-
# NOTE: I'm pretty conflicted about this.
|
12
|
-
SafeYAML::OPTIONS[:whitelisted_tags].push('!ruby/regexp')
|
13
|
-
|
14
|
-
module Jekyll
|
15
|
-
module Antex
|
16
|
-
class Generator < Jekyll::Generator
|
17
|
-
def generate(site)
|
18
|
-
site.pages.each do |page|
|
19
|
-
dealias_resource_content! site: site, resource: page
|
20
|
-
end
|
21
|
-
|
22
|
-
# NOTE: jekyll deprecated direct access to site.posts.each
|
23
|
-
site.posts.docs.each do |post|
|
24
|
-
dealias_resource_content! site: site, resource: post
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def dealias_resource_content!(site:, resource:)
|
31
|
-
options = build_options site: site, resource: resource
|
32
|
-
guardian = Jekyll::Antex::Stasher.new(build_guards(options['guards']))
|
33
|
-
dealiaser = Jekyll::Antex::Stasher.new(build_aliases(options['aliases']))
|
34
|
-
resource.content = guardian.lift(resource.content)
|
35
|
-
resource.content = dealiaser.lift(resource.content)
|
36
|
-
dealiaser.bake(&self.class.method(:dealias_tag))
|
37
|
-
resource.content = dealiaser.drop(resource.content)
|
38
|
-
resource.content = guardian.drop(resource.content)
|
39
|
-
end
|
40
|
-
|
41
|
-
def build_options(site:, resource:)
|
42
|
-
Jekyll::Antex::Options.build Jekyll::Antex::Options::DEFAULTS,
|
43
|
-
site.config['antex'] || {},
|
44
|
-
resource.data['antex'] || {}
|
45
|
-
end
|
46
|
-
|
47
|
-
def build_guards(options_hash)
|
48
|
-
options_hash.values.map do |args|
|
49
|
-
Guard.new Jekyll::Utils.symbolize_hash_keys(args)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def build_aliases(options_hash)
|
54
|
-
options_hash.values.map do |args|
|
55
|
-
Alias.new Jekyll::Utils.symbolize_hash_keys(args)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def self.dealias_tag(match, matcher)
|
60
|
-
markup = YAML.safe_load match[:markup] if match.names.include?('markup')
|
61
|
-
markup = YAML.dump Options.build(matcher.options || {}, markup || {})
|
62
|
-
code = match['code']
|
63
|
-
"{% antex #{markup} %}#{code}{% endantex %}"
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|