jekyll-language-plugin 1.1.4 → 1.1.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ffc4661d6aa87c92218872d982a6930d69132d1b
4
- data.tar.gz: 4248aeb04ae839ce437c3fb25d1cd97c886317ce
3
+ metadata.gz: 76a39471fe7e6ad748b7ddf255a6c254e4cb11c4
4
+ data.tar.gz: 7a1af5612ba9cc46c054bc19344bbefdcf1b2b0e
5
5
  SHA512:
6
- metadata.gz: fcb4dd807bdecbbbd307a2efd1d78caa3b28d8af0301609750f8f5554509cb7a6de8c7aa76414d26c1e5a4d6844018e3b10ea90acce97fe209e8c886abc7d3f0
7
- data.tar.gz: b22e65ac61d034a2fddbaff5f704cb8ae2a122dedc803f7031fca2805bc49240844ed265d25822d4a80fc7c6d2aecaff71b9d20192bf8d05453694b814afb435
6
+ metadata.gz: 88d6e2795d11668a803166accdc6b167f290464ffd94202ccbc5bd96f7671d289b05607c051a574706205ae26e059256d60788764ec35f9cc20ba6200ed54fcb
7
+ data.tar.gz: 1e9cdec599cf6801c27446668424b9893f0250b3d924298c4f04aafadbc7e72ccd26b17747beb0bf1cb2efad13e98b04cdf7f3b2f67e2b3ba3bb799c233e8041
@@ -1,18 +1,25 @@
1
- # require all files in jekyll-language-plugin subdirectory
2
- require 'jekyll-language-plugin/plugin_exception.rb'
3
- require 'jekyll-language-plugin/liquid_context.rb'
4
- require 'jekyll-language-plugin/date_localizer.rb'
1
+ module Jekyll
2
+
3
+ # internal requires for plugin
4
+ autoload :LanguageReader, 'jekyll/language_reader.rb'
5
+ autoload :LanguagePage, 'jekyll/language_page.rb'
6
+ autoload :LanguageDocument, 'jekyll/language_document.rb'
7
+ autoload :LanguagePageReader, 'jekyll/readers/language_page_reader.rb'
8
+ autoload :LanguagePostReader, 'jekyll/readers/language_post_reader.rb'
5
9
 
6
- # require all files in jekyll subdirectory
7
- require 'jekyll/language_reader.rb'
8
- require 'jekyll/language_page.rb'
9
- require 'jekyll/language_document.rb'
10
- require 'jekyll/readers/language_page_reader.rb'
11
- require 'jekyll/readers/language_post_reader.rb'
12
- require 'jekyll/filters/language_date.rb'
13
- require 'jekyll/tags/language.rb'
14
- require 'jekyll/tags/language_name.rb'
15
- require 'jekyll/tags/language_include.rb'
10
+ module LanguagePlugin
11
+
12
+ # plugin requires
13
+ autoload :PluginError, 'jekyll/language-plugin/plugin_error.rb'
14
+ autoload :LiquidContext, 'jekyll/language-plugin/liquid_context.rb'
15
+ autoload :DateLocalizer, 'jekyll/language-plugin/date_localizer.rb'
16
+ autoload :VERSION, 'jekyll/language-plugin/version'
17
+ end
18
+ end
19
+
20
+ # require liquid tags and filters
21
+ Dir[File.join(File.dirname(__FILE__), 'jekyll/language-plugin/tags/*.rb')].each{ |f| require f }
22
+ require 'jekyll/language-plugin/filters/language_date.rb'
16
23
 
17
24
  # replace Jekyll::Reader upon page reset with Jekyll::LanguageReader extension
18
25
  Jekyll::Hooks.register :site, :after_reset do |site|
@@ -22,17 +29,9 @@ end
22
29
  # monkey patch URL.sanitize_url for handling of triple slashes
23
30
  module Jekyll
24
31
  class URL
25
- def sanitize_url(in_url)
26
- url = in_url \
27
- # Remove empty URL segments and every URL segment that consists solely of dots
28
- .split('/').reject{ |s| s.empty? || s =~ /^\.+$/ }.join('/') \
29
- # Always add a leading slash
30
- .gsub(/\A([^\/])/, '/\1')
31
-
32
- # Append a trailing slash to the URL if the unsanitized URL had one
33
- url << "/" if in_url.end_with?("/")
34
-
35
- url
32
+ # optimized version by Jordon Bedwell
33
+ def sanitize_url(str)
34
+ "/" + str.gsub(/\/{2,}/, "/").gsub(%r!\.+\/|\A/+!, "")
36
35
  end
37
36
  end
38
37
  end
@@ -0,0 +1,41 @@
1
+ module Jekyll
2
+ module LanguagePlugin
3
+ module DateLocalizer
4
+ def self.localize_date(date, format, context)
5
+ translation = Jekyll::LanguagePlugin::LiquidContext.get_language_data(context, 'date')
6
+
7
+ # validate language translation
8
+ raise Jekyll::LanguagePlugin::PluginError.new('Localized date is missing translation.') if translation.nil? ||
9
+ !['abbr_daynames', 'daynames', 'abbr_monthnames', 'monthnames'].all? {|s| translation.key?(s) && translation[s].is_a?(Array) } ||
10
+ translation['abbr_daynames'].size < 7 || translation['daynames'].size < 7 ||
11
+ translation['abbr_monthnames'].size < 12 || translation['monthnames'].size < 12
12
+
13
+ #convert to extended Time class
14
+ date2 = JLPTime.at(date.to_i)
15
+ date2.strftime_translate(format, translation)
16
+ end
17
+
18
+ class JLPTime < Time
19
+ def strftime_translate(format = '%F', translation)
20
+ result = self.strftime(
21
+ #...you replaced the language dependent parts.
22
+ format.gsub(/%([aAbB])/){ |m|
23
+ case $1
24
+ when 'a'; translation['abbr_daynames'][self.wday]
25
+ when 'A'; translation['daynames'][self.wday]
26
+ when 'b'; translation['abbr_monthnames'][self.mon-1]
27
+ when 'B'; translation['monthnames'][self.mon-1]
28
+ else
29
+ raise Jekyll::LanguagePlugin::PluginError.new('Internal error.')
30
+ end
31
+ })
32
+ if defined? @@encoding_converter
33
+ @@encoding_converter.iconv(result)
34
+ else
35
+ result
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ module Jekyll
2
+ module LanguagePlugin
3
+ module Filters
4
+ module LanguageDateFilter
5
+ def tdate(input, fkey)
6
+ if ((input.is_a?(String) && !/^\d+$/.match(input).nil?) || input.is_a?(Integer)) && input.to_i > 0
7
+ date = Time.at(input.to_i)
8
+ elsif input.is_a?(String)
9
+ case input.downcase
10
+ when 'now', 'today'
11
+ date = Time.now
12
+ else
13
+ date = Time.parse(input)
14
+ end
15
+ elsif input.is_a?(Time)
16
+ date = input
17
+ else
18
+ date = nil
19
+ end
20
+
21
+ return "" if !date.is_a?(Time)
22
+ format = LiquidContext.get_language_string(@context, fkey)
23
+ return "" if format.nil?
24
+
25
+ Jekyll::LanguagePlugin::DateLocalizer.localize_date(date, format, @context).to_s
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ Liquid::Template.register_filter(Jekyll::LanguagePlugin::Filters::LanguageDateFilter)
@@ -0,0 +1,62 @@
1
+ module Jekyll
2
+ module LanguagePlugin
3
+ module LiquidContext
4
+ def self.get_language_data(context, keys = nil)
5
+ site = context.registers[:site]
6
+ language_data = site.config['language_data'].to_s || 'data.lang.%%'
7
+
8
+ page_language = context.registers[:page]['language']
9
+ return nil if page_language.to_s.empty?
10
+
11
+ keys2 = language_data.gsub("%%", page_language).split('.')
12
+ language_data = site.send(keys2.shift)
13
+ language_data = self.traverse_hash(language_data, keys2)
14
+ raise Jekyll::LanguagePlugin::PluginError.new('Invalid language data configuration.') if language_data.nil?
15
+
16
+ return language_data if keys.to_s.empty? # can also return nil
17
+
18
+ language_data = self.traverse_hash(language_data, keys)
19
+ raise Jekyll::LanguagePlugin::PluginError.new("Language subset #{keys.to_s} not found.") if language_data.nil?
20
+ language_data
21
+ end
22
+
23
+ def self.get_language_string(context, key)
24
+ data = self.get_language_data(context)
25
+ return "" if data.nil?
26
+
27
+ language_subset = context.registers[:page]['subset']
28
+ if (!language_subset.to_s.empty? &&
29
+ !(str = traverse_hash(traverse_hash(data, language_subset), key)).to_s.empty?) ||
30
+ !(str = traverse_hash(data, key)).to_s.empty?
31
+ return str
32
+ end
33
+
34
+ raise Jekyll::LanguagePlugin::PluginError.new("Language string #{key} not found.")
35
+ end
36
+
37
+ def self.get_language_name(context, name)
38
+ translation = self.get_language_data(context, 'lang')
39
+
40
+ raise Jekyll::LanguagePlugin::PluginError.new('Language name not found in translation.') if translation.nil? ||
41
+ !translation.key?(name)
42
+
43
+ translation[name]
44
+ end
45
+
46
+ def self.traverse_hash(hash, keys)
47
+ return nil if hash.nil? || keys.to_s.empty?
48
+ keys = keys.split('.') if keys.is_a?(String)
49
+
50
+ for key in keys
51
+ if !hash.is_a?(Hash)
52
+ return hash
53
+ elsif !hash.key?(key)
54
+ return nil
55
+ end
56
+ hash = hash[key]
57
+ end
58
+ hash
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,6 @@
1
+ module Jekyll
2
+ module LanguagePlugin
3
+ class PluginError < RuntimeError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,36 @@
1
+ module Jekyll
2
+ module LanguagePlugin
3
+ module Tags
4
+ class LanguageTag < Liquid::Tag
5
+ def initialize(tag_name, markup, tokens)
6
+ super
7
+ @markup = markup
8
+ end
9
+
10
+ def render(context)
11
+ p = Liquid::Parser.new(@markup)
12
+ name = Liquid::Expression.parse(exp = p.expression)
13
+ key = context.evaluate(name)
14
+ raise Liquid::SyntaxError.new("Invalid language key expression: #{exp}") if key.nil?
15
+
16
+ # get language string from evaluated key
17
+ str = Jekyll::LanguagePlugin::LiquidContext.get_language_string(context, key)
18
+
19
+ if p.consume?(:colon)
20
+ loop do
21
+ arg = Liquid::Expression.parse(exp = p.expression)
22
+ argstr = context.evaluate(arg)
23
+ raise Liquid::SyntaxError.new("Invalid parameter expression: #{exp}") if argstr.nil?
24
+ raise Jekyll::LanguagePlugin::PluginError.new("Language string is lacking parameter placeholder.") unless str.include?("%%")
25
+ str.sub!("%%", argstr)
26
+ break if !p.consume?(:comma)
27
+ end
28
+ end
29
+ str
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ Liquid::Template.register_tag('t', Jekyll::LanguagePlugin::Tags::LanguageTag)
@@ -0,0 +1,21 @@
1
+ module Jekyll
2
+ module LanguagePlugin
3
+ module Tags
4
+ class LanguageIncludeTag < Jekyll::Tags::IncludeTag
5
+ def tag_includes_dir(context)
6
+ (context.registers[:site].config['language_includes_dir'].to_s || '_i18n').freeze
7
+ end
8
+
9
+ def page_language(context)
10
+ context.registers[:page].nil? ? "." : context.registers[:page]["language"]
11
+ end
12
+
13
+ def resolved_includes_dir(context)
14
+ File.join(context.registers[:site].in_source_dir(@includes_dir), page_language(context))
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ Liquid::Template.register_tag('tinclude', Jekyll::LanguagePlugin::Tags::LanguageIncludeTag)
@@ -0,0 +1,24 @@
1
+ module Jekyll
2
+ module LanguagePlugin
3
+ module Tags
4
+ class LanguageNameTag < Liquid::Tag
5
+ def initialize(tag_name, markup, tokens)
6
+ super
7
+ @markup = markup
8
+ end
9
+
10
+ def render(context)
11
+ p = Liquid::Parser.new(@markup)
12
+ name = Liquid::Expression.parse(exp = p.expression)
13
+ key = context.evaluate(name)
14
+ raise Liquid::SyntaxError.new("Invalid language key expression: #{exp}") if key.nil?
15
+
16
+ # get language name string from evaluated key
17
+ Jekyll::LanguagePlugin::LiquidContext.get_language_string(context, "lang.#{key}")
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ Liquid::Template.register_tag('tl', Jekyll::LanguagePlugin::Tags::LanguageNameTag)
@@ -0,0 +1,5 @@
1
+ module Jekyll
2
+ module LanguagePlugin
3
+ VERSION = '1.1.7'
4
+ end
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-language-plugin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vincent Wochnik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-19 00:00:00.000000000 Z
11
+ date: 2015-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -74,18 +74,19 @@ extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
76
  - lib/jekyll-language-plugin.rb
77
- - lib/jekyll/filters/language_date.rb
77
+ - lib/jekyll/language-plugin/date_localizer.rb
78
+ - lib/jekyll/language-plugin/filters/language_date.rb
79
+ - lib/jekyll/language-plugin/liquid_context.rb
80
+ - lib/jekyll/language-plugin/plugin_error.rb
81
+ - lib/jekyll/language-plugin/tags/language.rb
82
+ - lib/jekyll/language-plugin/tags/language_include.rb
83
+ - lib/jekyll/language-plugin/tags/language_name.rb
84
+ - lib/jekyll/language-plugin/version.rb
78
85
  - lib/jekyll/language_document.rb
79
86
  - lib/jekyll/language_page.rb
80
87
  - lib/jekyll/language_reader.rb
81
88
  - lib/jekyll/readers/language_page_reader.rb
82
89
  - lib/jekyll/readers/language_post_reader.rb
83
- - lib/jekyll/tags/language.rb
84
- - lib/jekyll/tags/language_include.rb
85
- - lib/jekyll/tags/language_name.rb
86
- - lib/jekyll-language-plugin/date_localizer.rb
87
- - lib/jekyll-language-plugin/liquid_context.rb
88
- - lib/jekyll-language-plugin/plugin_exception.rb
89
90
  - README.md
90
91
  - LICENSE.md
91
92
  homepage: https://github.com/vwochnik/jekyll-language-plugin
@@ -1,39 +0,0 @@
1
- module JekyllLanguagePlugin
2
- module DateLocalizer
3
- def self.localize_date(date, format, context)
4
- translation = JekyllLanguagePlugin::LiquidContext.get_language_data(context, 'date')
5
-
6
- # validate language translation
7
- raise JekyllLanguagePlugin::PluginError.new('Localized date is missing translation.') if translation.nil? ||
8
- !['abbr_daynames', 'daynames', 'abbr_monthnames', 'monthnames'].all? {|s| translation.key?(s) && translation[s].is_a?(Array) } ||
9
- translation['abbr_daynames'].size < 7 || translation['daynames'].size < 7 ||
10
- translation['abbr_monthnames'].size < 12 || translation['monthnames'].size < 12
11
-
12
- #convert to extended Time class
13
- date2 = JLPTime.at(date.to_i)
14
- date2.strftime_translate(format, translation)
15
- end
16
-
17
- class JLPTime < Time
18
- def strftime_translate(format = '%F', translation)
19
- result = self.strftime(
20
- #...you replaced the language dependent parts.
21
- format.gsub(/%([aAbB])/){ |m|
22
- case $1
23
- when 'a'; translation['abbr_daynames'][self.wday]
24
- when 'A'; translation['daynames'][self.wday]
25
- when 'b'; translation['abbr_monthnames'][self.mon-1]
26
- when 'B'; translation['monthnames'][self.mon-1]
27
- else
28
- raise JekyllLanguagePlugin::PluginError.new('Internal error.')
29
- end
30
- })
31
- if defined? @@encoding_converter
32
- @@encoding_converter.iconv(result)
33
- else
34
- result
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,60 +0,0 @@
1
- module JekyllLanguagePlugin
2
- module LiquidContext
3
- def self.get_language_data(context, keys = nil)
4
- site = context.registers[:site]
5
- language_data = site.config['language_data'].to_s || 'data.lang.%%'
6
-
7
- page_language = context.registers[:page]['language']
8
- return nil if page_language.to_s.empty?
9
-
10
- keys2 = language_data.gsub("%%", page_language).split('.')
11
- language_data = site.send(keys2.shift)
12
- language_data = self.traverse_hash(language_data, keys2)
13
- raise JekyllLanguagePlugin::PluginError.new('Invalid language data configuration.') if language_data.nil?
14
-
15
- return language_data if keys.to_s.empty? # can also return nil
16
-
17
- language_data = self.traverse_hash(language_data, keys)
18
- raise JekyllLanguagePlugin::PluginError.new("Language subset #{keys.to_s} not found.") if language_data.nil?
19
- language_data
20
- end
21
-
22
- def self.get_language_string(context, key)
23
- data = self.get_language_data(context)
24
- return "" if data.nil?
25
-
26
- language_subset = context.registers[:page]['subset']
27
- if (!language_subset.to_s.empty? &&
28
- !(str = traverse_hash(traverse_hash(data, language_subset), key)).to_s.empty?) ||
29
- !(str = traverse_hash(data, key)).to_s.empty?
30
- return str
31
- end
32
-
33
- raise JekyllLanguagePlugin::PluginError.new("Language string #{key} not found.")
34
- end
35
-
36
- def self.get_language_name(context, name)
37
- translation = self.get_language_data(context, 'lang')
38
-
39
- raise JekyllLanguagePlugin::PluginError.new('Language name not found in translation.') if translation.nil? ||
40
- !translation.key?(name)
41
-
42
- translation[name]
43
- end
44
-
45
- def self.traverse_hash(hash, keys)
46
- return nil if hash.nil? || keys.to_s.empty?
47
- keys = keys.split('.') if keys.is_a?(String)
48
-
49
- for key in keys
50
- if !hash.is_a?(Hash)
51
- return hash
52
- elsif !hash.key?(key)
53
- return nil
54
- end
55
- hash = hash[key]
56
- end
57
- hash
58
- end
59
- end
60
- end
@@ -1,4 +0,0 @@
1
- module JekyllLanguagePlugin
2
- class PluginError < RuntimeError
3
- end
4
- end
@@ -1,30 +0,0 @@
1
- module Jekyll
2
- module Filters
3
- module LanguageDate
4
- def tdate(input, fkey)
5
- if ((input.is_a?(String) && !/^\d+$/.match(input).nil?) || input.is_a?(Integer)) && input.to_i > 0
6
- date = Time.at(input.to_i)
7
- elsif input.is_a?(String)
8
- case input.downcase
9
- when 'now', 'today'
10
- date = Time.now
11
- else
12
- date = Time.parse(input)
13
- end
14
- elsif input.is_a?(Time)
15
- date = input
16
- else
17
- date = nil
18
- end
19
-
20
- return "" if !date.is_a?(Time)
21
- format = JekyllLanguagePlugin::LiquidContext.get_language_string(@context, fkey)
22
- return "" if format.nil?
23
-
24
- JekyllLanguagePlugin::DateLocalizer.localize_date(date, format, @context).to_s
25
- end
26
- end
27
- end
28
- end
29
-
30
- Liquid::Template.register_filter(Jekyll::Filters::LanguageDate)
@@ -1,34 +0,0 @@
1
- module Jekyll
2
- module Tags
3
- class LanguageTag < Liquid::Tag
4
- def initialize(tag_name, markup, tokens)
5
- super
6
- @markup = markup
7
- end
8
-
9
- def render(context)
10
- p = Liquid::Parser.new(@markup)
11
- name = Liquid::Expression.parse(exp = p.expression)
12
- key = context.evaluate(name)
13
- raise Liquid::SyntaxError.new("Invalid language key expression: #{exp}") if key.nil?
14
-
15
- # get language string from evaluated key
16
- str = JekyllLanguagePlugin::LiquidContext.get_language_string(context, key)
17
-
18
- if p.consume?(:colon)
19
- loop do
20
- arg = Liquid::Expression.parse(exp = p.expression)
21
- argstr = context.evaluate(arg)
22
- raise Liquid::SyntaxError.new("Invalid parameter expression: #{exp}") if argstr.nil?
23
- raise JekyllLanguagePlugin::PluginError.new("Language string is lacking parameter placeholder.") unless str.include?("%%")
24
- str.sub!("%%", argstr)
25
- break if !p.consume?(:comma)
26
- end
27
- end
28
- str
29
- end
30
- end
31
- end
32
- end
33
-
34
- Liquid::Template.register_tag('t', Jekyll::Tags::LanguageTag)
@@ -1,19 +0,0 @@
1
- module Jekyll
2
- module Tags
3
- class LanguageIncludeTag < IncludeTag
4
- def tag_includes_dir(context)
5
- (context.registers[:site].config['language_includes_dir'].to_s || '_i18n').freeze
6
- end
7
-
8
- def page_language(context)
9
- context.registers[:page].nil? ? "en" : context.registers[:page]["language"]
10
- end
11
-
12
- def resolved_includes_dir(context)
13
- File.join(context.registers[:site].in_source_dir(@includes_dir), page_language(context))
14
- end
15
- end
16
- end
17
- end
18
-
19
- Liquid::Template.register_tag('tinclude', Jekyll::Tags::LanguageIncludeTag)
@@ -1,22 +0,0 @@
1
- module Jekyll
2
- module Tags
3
- class LanguageNameTag < Liquid::Tag
4
- def initialize(tag_name, markup, tokens)
5
- super
6
- @markup = markup
7
- end
8
-
9
- def render(context)
10
- p = Liquid::Parser.new(@markup)
11
- name = Liquid::Expression.parse(exp = p.expression)
12
- key = context.evaluate(name)
13
- raise Liquid::SyntaxError.new("Invalid language key expression: #{exp}") if key.nil?
14
-
15
- # get language name string from evaluated key
16
- JekyllLanguagePlugin::LiquidContext.get_language_string(context, "lang.#{key}")
17
- end
18
- end
19
- end
20
- end
21
-
22
- Liquid::Template.register_tag('tl', Jekyll::Tags::LanguageNameTag)