Class: Twine::Formatters::Abstract
- Inherits:
-
Object
- Object
- Twine::Formatters::Abstract
show all
- Defined in:
- lib/twine/formatters/abstract.rb
Constant Summary
collapse
- LANGUAGE_CODE_WITH_OPTIONAL_REGION_CODE =
"[a-z]{2}(?:-[A-Za-z]{2})?"
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#can_handle_directory?(path) ⇒ Boolean
-
#default_file_name ⇒ Object
-
#determine_language_given_path(path) ⇒ Object
-
#escape_quotes(text) ⇒ Object
-
#extension ⇒ Object
-
#format_comment(definition, lang) ⇒ Object
-
#format_definition(definition, lang) ⇒ Object
-
#format_file(lang) ⇒ Object
-
#format_header(lang) ⇒ Object
-
#format_key(key) ⇒ Object
-
#format_key_value(definition, lang) ⇒ Object
-
#format_name ⇒ Object
-
#format_section(section, lang) ⇒ Object
-
#format_section_header(section) ⇒ Object
-
#format_sections(twine_file, lang) ⇒ Object
-
#format_value(value) ⇒ Object
-
#initialize ⇒ Abstract
constructor
A new instance of Abstract.
-
#key_value_pattern ⇒ Object
-
#output_path_for_language(lang) ⇒ Object
-
#read(io, lang) ⇒ Object
-
#set_comment_for_key(key, comment) ⇒ Object
-
#set_translation_for_key(key, lang, value) ⇒ Object
-
#should_include_definition(definition, lang) ⇒ Object
Constructor Details
Returns a new instance of Abstract.
11
12
13
14
|
# File 'lib/twine/formatters/abstract.rb', line 11
def initialize
@twine_file = TwineFile.new
@options = {}
end
|
Instance Attribute Details
#options ⇒ Object
Returns the value of attribute options.
9
10
11
|
# File 'lib/twine/formatters/abstract.rb', line 9
def options
@options
end
|
#twine_file ⇒ Object
Returns the value of attribute twine_file.
8
9
10
|
# File 'lib/twine/formatters/abstract.rb', line 8
def twine_file
@twine_file
end
|
Instance Method Details
#can_handle_directory?(path) ⇒ Boolean
24
25
26
|
# File 'lib/twine/formatters/abstract.rb', line 24
def can_handle_directory?(path)
Dir.entries(path).any? { |item| /^.+#{Regexp.escape(extension)}$/.match(item) }
end
|
#default_file_name ⇒ Object
28
29
30
|
# File 'lib/twine/formatters/abstract.rb', line 28
def default_file_name
raise NotImplementedError.new("You must implement default_file_name in your formatter class.")
end
|
#determine_language_given_path(path) ⇒ Object
80
81
82
83
84
85
86
87
|
# File 'lib/twine/formatters/abstract.rb', line 80
def determine_language_given_path(path)
only_language_and_region = /^#{LANGUAGE_CODE_WITH_OPTIONAL_REGION_CODE}$/i
basename = File.basename(path, File.extname(path))
return basename if basename =~ only_language_and_region
return basename if @twine_file.language_codes.include? basename
path.split(File::SEPARATOR).reverse.find { |segment| segment =~ only_language_and_region }
end
|
#escape_quotes(text) ⇒ Object
165
166
167
|
# File 'lib/twine/formatters/abstract.rb', line 165
def escape_quotes(text)
text.gsub('"', '\\\\"')
end
|
#extension ⇒ Object
20
21
22
|
# File 'lib/twine/formatters/abstract.rb', line 20
def extension
raise NotImplementedError.new("You must implement extension in your formatter class.")
end
|
145
146
|
# File 'lib/twine/formatters/abstract.rb', line 145
def (definition, lang)
end
|
141
142
143
|
# File 'lib/twine/formatters/abstract.rb', line 141
def format_definition(definition, lang)
[(definition, lang), format_key_value(definition, lang)].compact.join
end
|
97
98
99
100
101
102
103
104
105
106
107
|
# File 'lib/twine/formatters/abstract.rb', line 97
def format_file(lang)
output_processor = Processors::OutputProcessor.new(@twine_file, @options)
processed_twine_file = output_processor.process(lang)
return nil if processed_twine_file.definitions_by_key.empty?
= (lang)
result = ""
result += + "\n" if
result += format_sections(processed_twine_file, lang)
end
|
109
110
|
# File 'lib/twine/formatters/abstract.rb', line 109
def (lang)
end
|
157
158
159
|
# File 'lib/twine/formatters/abstract.rb', line 157
def format_key(key)
key
end
|
148
149
150
151
|
# File 'lib/twine/formatters/abstract.rb', line 148
def format_key_value(definition, lang)
value = definition.translation_for_lang(lang)
key_value_pattern % { key: format_key(definition.key.dup), value: format_value(value.dup) }
end
|
16
17
18
|
# File 'lib/twine/formatters/abstract.rb', line 16
def format_name
raise NotImplementedError.new("You must implement format_name in your formatter class.")
end
|
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
# File 'lib/twine/formatters/abstract.rb', line 124
def format_section(section, lang)
definitions = section.definitions.select { |definition| should_include_definition(definition, lang) }
return if definitions.empty?
result = ""
if section.name && section.name.length > 0
= (section)
result += "\n#{}" if
end
definitions.map! { |definition| format_definition(definition, lang) }
definitions.compact! definitions.map! { |definition| "\n#{definition}" } result += definitions.join
end
|
117
118
|
# File 'lib/twine/formatters/abstract.rb', line 117
def (section)
end
|
112
113
114
115
|
# File 'lib/twine/formatters/abstract.rb', line 112
def format_sections(twine_file, lang)
sections = twine_file.sections.map { |section| format_section(section, lang) }
sections.compact.join("\n")
end
|
161
162
163
|
# File 'lib/twine/formatters/abstract.rb', line 161
def format_value(value)
value
end
|
#key_value_pattern ⇒ Object
153
154
155
|
# File 'lib/twine/formatters/abstract.rb', line 153
def key_value_pattern
raise NotImplementedError.new("You must implement key_value_pattern in your formatter class.")
end
|
#output_path_for_language(lang) ⇒ Object
89
90
91
|
# File 'lib/twine/formatters/abstract.rb', line 89
def output_path_for_language(lang)
lang
end
|
#read(io, lang) ⇒ Object
93
94
95
|
# File 'lib/twine/formatters/abstract.rb', line 93
def read(io, lang)
raise NotImplementedError.new("You must implement read in your formatter class.")
end
|
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/twine/formatters/abstract.rb', line 66
def (key, )
return unless @options[:consume_comments]
if @twine_file.definitions_by_key.include?(key)
definition = @twine_file.definitions_by_key[key]
reference = @twine_file.definitions_by_key[definition.reference_key] if definition.reference_key
if !reference or != reference.
definition. =
end
end
end
|
#set_translation_for_key(key, lang, value) ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/twine/formatters/abstract.rb', line 32
def set_translation_for_key(key, lang, value)
value = value.gsub("\n", "\\n")
if @twine_file.definitions_by_key.include?(key)
definition = @twine_file.definitions_by_key[key]
reference = @twine_file.definitions_by_key[definition.reference_key] if definition.reference_key
if !reference or value != reference.translations[lang]
definition.translations[lang] = value
end
elsif @options[:consume_all]
Twine::stdout.puts "Adding new definition '#{key}' to twine file."
current_section = @twine_file.sections.find { |s| s.name == 'Uncategorized' }
unless current_section
current_section = TwineSection.new('Uncategorized')
@twine_file.sections.insert(0, current_section)
end
current_definition = TwineDefinition.new(key)
current_section.definitions << current_definition
if @options[:tags] && @options[:tags].length > 0
current_definition.tags = @options[:tags]
end
@twine_file.definitions_by_key[key] = current_definition
@twine_file.definitions_by_key[key].translations[lang] = value
else
Twine::stdout.puts "WARNING: '#{key}' not found in twine file."
end
if !@twine_file.language_codes.include?(lang)
@twine_file.add_language_code(lang)
end
end
|
#should_include_definition(definition, lang) ⇒ Object
120
121
122
|
# File 'lib/twine/formatters/abstract.rb', line 120
def should_include_definition(definition, lang)
return !definition.translation_for_lang(lang).nil?
end
|