jekyll-antex 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|