corrade-nucleus-nucleons – Blame information for rev 20

Subversion Repositories:
Rev:
Rev Author Line No. Line
20 office 1 module Jekyll
2 @parsedlangs = {}
3 def self.langs
4 @parsedlangs
5 end
6 def self.setlangs(l)
7 @parsedlangs = l
8 end
9 class Site
10 alias :process_org :process
11 def process
12 if !self.config['baseurl']
13 self.config['baseurl'] = ""
14 end
15 #Variables
16 config['baseurl_root'] = self.config['baseurl']
17 baseurl_org = self.config['baseurl']
18 languages = self.config['languages']
19 exclude_org = self.exclude
20 dest_org = self.dest
21  
22 #Loop
23 self.config['lang'] = self.config['default_lang'] = languages.first
24 puts
25 puts "Building site for default language: \"#{self.config['lang']}\" to: #{self.dest}"
26 process_org
27 languages.drop(1).each do |lang|
28  
29 # Build site for language lang
30 @dest = @dest + "/" + lang
31 self.config['baseurl'] = self.config['baseurl'] + "/" + lang
32 self.config['lang'] = lang
33  
34 # exclude folders or files from beeing copied to all the language folders
35 exclude_from_localizations = self.config['exclude_from_localizations'] || []
36 @exclude = @exclude + exclude_from_localizations
37  
38 puts "Building site for language: \"#{self.config['lang']}\" to: #{self.dest}"
39 process_org
40  
41 #Reset variables for next language
42 @dest = dest_org
43 @exclude = exclude_org
44  
45 self.config['baseurl'] = baseurl_org
46 end
47 Jekyll.setlangs({})
48 puts 'Build complete'
49 end
50  
51 alias :read_posts_org :read_posts
52 def read_posts(dir)
53 if dir == ''
54 read_posts("_i18n/#{self.config['lang']}/")
55 else
56 read_posts_org(dir)
57 end
58 end
59 end
60  
61 class LocalizeTag < Liquid::Tag
62  
63 def initialize(tag_name, key, tokens)
64 super
65 @key = key.strip
66 end
67  
68 def render(context)
69 if "#{context[@key]}" != "" #Check for page variable
70 key = "#{context[@key]}"
71 else
72 key = @key
73 end
74 lang = context.registers[:site].config['lang']
75 unless Jekyll.langs.has_key?(lang)
76 puts "Loading translation from file #{context.registers[:site].source}/_i18n/#{lang}.yml"
77 Jekyll.langs[lang] = YAML.load_file("#{context.registers[:site].source}/_i18n/#{lang}.yml")
78 end
79 translation = Jekyll.langs[lang].access(key) if key.is_a?(String)
80 if translation.nil? or translation.empty?
81 translation = Jekyll.langs[context.registers[:site].config['default_lang']].access(key)
82 puts "Missing i18n key: #{lang}:#{key}"
83 puts "Using translation '%s' from default language: %s" %[translation, context.registers[:site].config['default_lang']]
84 end
85 translation
86 end
87 end
88  
89 module Tags
90 class LocalizeInclude < IncludeTag
91 def render(context)
92 if "#{context[@file]}" != "" #Check for page variable
93 file = "#{context[@file]}"
94 else
95 file = @file
96 end
97  
98 includes_dir = File.join(context.registers[:site].source, '_i18n/' + context.registers[:site].config['lang'])
99  
100 if File.symlink?(includes_dir)
101 return "Includes directory '#{includes_dir}' cannot be a symlink"
102 end
103 if file !~ /^[a-zA-Z0-9_\/\.-]+$/ || file =~ /\.\// || file =~ /\/\./
104 return "Include file '#{file}' contains invalid characters or sequences"
105 end
106  
107 Dir.chdir(includes_dir) do
108 choices = Dir['**/*'].reject { |x| File.symlink?(x) }
109 if choices.include?(file)
110 source = File.read(file)
111 partial = Liquid::Template.parse(source)
112  
113 context.stack do
114 context['include'] = parse_params(context) if @params
115 contents = partial.render(context)
116 site = context.registers[:site]
117 ext = File.extname(file)
118  
119 converter = site.converters.find { |c| c.matches(ext) }
120 contents = converter.convert(contents) unless converter.nil?
121  
122 contents
123 end
124 else
125 "Included file '#{file}' not found in #{includes_dir} directory"
126 end
127 end
128 end
129 end
130 end
131 end
132  
133 unless Hash.method_defined? :access
134 class Hash
135 def access(path)
136 ret = self
137 path.split('.').each do |p|
138 if p.to_i.to_s == p
139 ret = ret[p.to_i]
140 else
141 ret = ret[p.to_s] || ret[p.to_sym]
142 end
143 break unless ret
144 end
145 ret
146 end
147 end
148 end
149  
150 Liquid::Template.register_tag('t', Jekyll::LocalizeTag)
151 Liquid::Template.register_tag('translate', Jekyll::LocalizeTag)
152 Liquid::Template.register_tag('tf', Jekyll::Tags::LocalizeInclude)
153 Liquid::Template.register_tag('translate_file', Jekyll::Tags::LocalizeInclude)