jekyll-polyglot 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/polyglot.rb +168 -0
  3. metadata +64 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 804d1b4413eead1b3cb2ba61cf7756cf1ca5b474
4
+ data.tar.gz: f128e8f07eb56bcb3efe4c4e9f2c5190d1c5b759
5
+ SHA512:
6
+ metadata.gz: 9aaaf216dfc22f58e87f45ec21c8b8e7e03009374b4600ddee87b3576270f4c4c902a56ceb5a65e8c154a3ae3a8c7cffa7414c430a6801d66b2125ea07574abd
7
+ data.tar.gz: 47b49166bb5fc8a3eee76a86d6ebd9ac4ecd096028443d99fb38306ee95956e029465c10ac5d4aa5ace94b54daea072139ef5b137ff669240d86dc6e3839399c
@@ -0,0 +1,168 @@
1
+ include Process
2
+ module Jekyll
3
+ # Alteration to Jekyll Site class
4
+ # provides aliased methods to direct site.write to output into seperate
5
+ # language folders
6
+ class Site
7
+ attr_reader :default_lang, :languages, :exclude_from_localization
8
+ attr_accessor :file_langs, :active_lang
9
+
10
+ def prepare
11
+ @start_time = time
12
+ @file_langs = {}
13
+ @default_lang = config['default_lang'] || 'en'
14
+ @languages = config['languages'] || ['en']
15
+ (@keep_files << @languages - [@default_lang]).flatten!
16
+ @exclude_from_localization = config['exclude_from_localization'] || []
17
+ @active_lang = @default_lang
18
+ end
19
+
20
+ alias_method :process_orig, :process
21
+ def process
22
+ prepare
23
+ pids = {}
24
+ languages.each do |lang|
25
+ pids[lang] = fork do
26
+ process_language lang
27
+ end
28
+ end
29
+ Signal.trap('INT') do
30
+ languages.each do |lang|
31
+ puts "Killing #{pids[lang]} : #{lang}"
32
+ kill('INT', pids[lang])
33
+ end
34
+ end
35
+ languages.each do |lang|
36
+ waitpid pids[lang]
37
+ detach pids[lang]
38
+ end
39
+ end
40
+
41
+ alias_method :site_payload_orig, :site_payload
42
+ def site_payload
43
+ payload = site_payload_orig
44
+ payload['site']['default_lang'] = default_lang
45
+ payload['site']['languages'] = languages
46
+ payload['site']['active_lang'] = active_lang
47
+ payload
48
+ end
49
+
50
+ def process_language(lang)
51
+ @active_lang = lang
52
+ config['active_lang'] = @active_lang
53
+ return build_language(@active_lang) if @active_lang == @default_lang
54
+ process_active_language
55
+ end
56
+
57
+ def process_active_language
58
+ dest_orig = dest
59
+ exclude_orig = exclude
60
+ @dest = @dest + '/' + @active_lang
61
+ @exclude += config['exclude_from_localization']
62
+ build_language(@active_lang)
63
+ @dest = dest_orig
64
+ @exclude = exclude_orig
65
+ end
66
+
67
+ def build_language(lang)
68
+ reset
69
+ read
70
+ filter
71
+ generate
72
+ render
73
+ cleanup
74
+ puts "Building #{lang} Site"
75
+ write
76
+ end
77
+
78
+ def filter
79
+ langs = {}
80
+ approved = {}
81
+ posts.each do |post|
82
+ language = post.data['lang'] || @default_lang
83
+ next if langs[post.url] == @active_lang
84
+ if langs[post.url] == @default_lang
85
+ next if language != @active_lang
86
+ end
87
+ approved[post.url] = post
88
+ langs[post.url] = language
89
+ end
90
+ @posts = approved.values
91
+ end
92
+ end
93
+
94
+ # Alteration to Jekyll Convertible module
95
+ # provides aliased methods to direct Convertible to skip files for write under
96
+ # certain conditions
97
+ module Convertible
98
+ def lang
99
+ data['lang'] || site.config['default_lang']
100
+ end
101
+
102
+ def lang=(str)
103
+ data['lang'] = str
104
+ end
105
+
106
+ alias_method :write_orig, :write
107
+ def write(dest)
108
+ path = polypath(dest)
109
+ return if skip?(path)
110
+ output_orig = output.clone
111
+ relativize_urls(site.active_lang)
112
+ write_orig(dest)
113
+ self.output = output_orig
114
+ site.file_langs[path] = lang
115
+ end
116
+
117
+ def polypath(dest)
118
+ n = ''
119
+ site.languages.each do |lang|
120
+ n += "(\\\.#{lang}\\/)|"
121
+ end
122
+ n.chomp! '|'
123
+ destination(dest).gsub(%r{#{n}}, '/')
124
+ end
125
+
126
+ def skip?(path)
127
+ return false if site.file_langs[path].nil?
128
+ return false if lang == site.active_lang
129
+ if lang == site.default_lang
130
+ return site.file_langs[path] == site.active_lang
131
+ end
132
+ true
133
+ end
134
+
135
+ def relativize_urls(lang)
136
+ return if lang == site.default_lang
137
+ output.gsub!(relative_url_regex, "href=\"#{site.baseurl}/#{lang}/" + '\1"')
138
+ end
139
+
140
+ def relative_url_regex
141
+ n = ''
142
+ site.exclude.each do |x|
143
+ n += "(?!#{x}\/)"
144
+ end
145
+ # regex that looks for all relative urls except for excluded files
146
+ %r{href=\"\/#{site.baseurl.gsub(%r{\/}, '')}\/((?:#{n}[^,'\"\s\/?\.#-]+\.?)*(?:\/[^\]\[\)\(\"\'\s]*)?)\"}
147
+ end
148
+ end
149
+
150
+ # Alteration to Jekyll StaticFile
151
+ # provides aliased methods to direct write to skip files
152
+ # excluded from localization
153
+ class StaticFile
154
+ alias_method :write_orig, :write
155
+ def write(dest)
156
+ return false if exclude_from_localization?
157
+ write_orig(dest)
158
+ end
159
+
160
+ def exclude_from_localization?
161
+ return false if @site.active_lang == @site.default_lang
162
+ @site.exclude_from_localization.each do |e|
163
+ return true if relative_path[1..-1].start_with?(e)
164
+ end
165
+ false
166
+ end
167
+ end
168
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-polyglot
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Samuel Volin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-09-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: listen
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 3.0.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 3.0.0
33
+ description: Fast open source internationalization plugin for Jekyll blogs.
34
+ email: untra.sam@gmail.com
35
+ executables: []
36
+ extensions: []
37
+ extra_rdoc_files: []
38
+ files:
39
+ - lib/polyglot.rb
40
+ homepage: http://untra.github.io/polyglot
41
+ licenses:
42
+ - MIT
43
+ metadata: {}
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 2.4.8
61
+ signing_key:
62
+ specification_version: 4
63
+ summary: I18n plugin for Jekyll Blogs
64
+ test_files: []