konjac 0.2.9.5 → 0.3

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.
@@ -0,0 +1,11 @@
1
+ # coding: utf-8
2
+ module Konjac
3
+ module Office
4
+ module Windows
5
+ autoload :Excel, "konjac/office/windows/excel"
6
+ autoload :PowerPoint, "konjac/office/windows/power_point"
7
+ autoload :Shared, "konjac/office/windows/shared"
8
+ autoload :Word, "konjac/office/windows/word"
9
+ end
10
+ end
11
+ end
File without changes
File without changes
@@ -0,0 +1,2 @@
1
+ # coding: utf-8
2
+
File without changes
@@ -0,0 +1,11 @@
1
+ # coding: utf-8
2
+ module Konjac
3
+ module Office
4
+ module xml
5
+ autoload :Excel, "konjac/office/xml/excel"
6
+ autoload :PowerPoint, "konjac/office/xml/powerpoint"
7
+ autoload :Shared, "konjac/office/xml/shared"
8
+ autoload :Word, "konjac/office/xml/word"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,262 @@
1
+ # coding: utf-8
2
+ module Konjac
3
+ module Office
4
+ module XML
5
+ # Imports the text content of a tag file into a Word 2003+, utilizing a
6
+ # cleaned-up version of the document's original XML structure
7
+ def import_xml(files, opts = {})
8
+ sub_files = Utils.parse_files(files)
9
+ return if sub_files.empty?
10
+ sub_files.each do |sub_file|
11
+ case File.extname(sub_file)
12
+ when ".docx"
13
+ # Build the list of paths we need to work with
14
+ dirname = File.dirname(sub_file)
15
+ basename = File.basename(sub_file, ".*")
16
+ orig_docx = "#{dirname}/#{basename}.docx"
17
+ new_path = "#{dirname}/#{basename}_imported.docx"
18
+ xml_path = "#{dirname}/#{basename}.xml"
19
+ tags_path = "#{dirname}/#{basename}.docx.diff"
20
+ out_path = "#{dirname}/word/document.xml"
21
+
22
+ # Open the original XML file and the updated tags
23
+ writer = Nokogiri::XML(File.read(xml_path))
24
+ nodes = writer.xpath("//w:t")
25
+ tags = TagManager.new(tags_path)
26
+
27
+ # Overwrite each <w:t> tag's content with the new tag
28
+ tags.all.each do |tag|
29
+ if tag.translated?
30
+ nodes[tag.index].content = tag.translated
31
+ end
32
+ end
33
+
34
+ # Create a directory for word/document.xml if necessary
35
+ unless File.directory?("#{dirname}/word")
36
+ FileUtils.mkdir "#{dirname}/word"
37
+ end
38
+
39
+ # Write the modified XML to a file
40
+ File.open(out_path, "w") do |file|
41
+ file.write writer.to_xml.gsub(/\n\s*/, "").sub(/\?></, "?>\n<")
42
+ end
43
+
44
+ # Copy the original file
45
+ FileUtils.cp orig_docx, new_path
46
+
47
+ # Add the new document XML to the copied file
48
+ system "cd #{dirname} && zip -q #{new_path} word/document.xml"
49
+ else
50
+ puts I18n.t(:unknown) % sub_file
51
+ end
52
+ end
53
+ end
54
+
55
+ # Exports the text content of Microsoft Office document
56
+ def export_tags(files, opts = {})
57
+ # Determine whether to attempt translating
58
+ if opts[:from_given] && opts[:to_given]
59
+ from_lang = Language.find(opts[:from])
60
+ to_lang = Language.find(opts[:to])
61
+ unless from_lang.nil? || to_lang.nil?
62
+ Translator.load_dictionary from_lang, to_lang, opts
63
+ attempting_to_translate = true
64
+ end
65
+ end
66
+
67
+ sub_files = Utils.parse_files(files)
68
+ return if sub_files.empty?
69
+ sub_files.each do |sub_file|
70
+ case File.extname(sub_file)
71
+ when ".doc", ".docx"
72
+ return if OS.not_a_mac
73
+ break unless Utils.user_allows_overwrite?(sub_file + ".diff")
74
+
75
+ system File.join(File.dirname(__FILE__), "..", "applescripts", "konjac_word_export"), sub_file
76
+ when ".ppt", ".pptx"
77
+ return if OS.not_a_mac
78
+ break unless Utils.user_allows_overwrite?(sub_file + ".diff")
79
+
80
+ system File.join(File.dirname(__FILE__), "..", "applescripts", "konjac_powerpoint_export"), sub_file
81
+ when ".xls", ".xlsx"
82
+ return if OS.not_a_mac
83
+ break unless Utils.user_allows_overwrite?(sub_file + ".diff")
84
+
85
+ system File.join(File.dirname(__FILE__), "..", "applescripts", "konjac_excel_export"), sub_file
86
+ else
87
+ puts I18n.t(:unknown) % sub_file
88
+ end
89
+ end
90
+ end
91
+
92
+ # Exports the Word document in XML then extracts the tags and condenses
93
+ # like paragraphs
94
+ #
95
+ # I might deprecate this, but it exports XML. It's much faster, but
96
+ # supporting two methods might not be a great idea.
97
+ def export_xml(files, opts = {})
98
+ # Determine whether to attempt translating
99
+ if opts[:from_given] && opts[:to_given]
100
+ from_lang = Language.find(opts[:from])
101
+ to_lang = Language.find(opts[:to])
102
+ unless from_lang.nil? || to_lang.nil?
103
+ Translator.load_dictionary from_lang, to_lang, opts
104
+ attempting_to_translate = true
105
+ end
106
+ end
107
+
108
+ sub_files = Utils.parse_files(files)
109
+ return if sub_files.empty?
110
+ sub_files.each do |sub_file|
111
+ case File.extname(sub_file)
112
+ when ".docx"
113
+ # Build a list of all the paths we're working with
114
+ dirname = File.dirname(sub_file)
115
+ basename = File.basename(sub_file, ".*")
116
+ orig_docx = "#{dirname}/#{basename}.docx"
117
+ xml_path = "#{dirname}/#{basename}_orig.xml"
118
+ clean_path = "#{dirname}/#{basename}.xml"
119
+ tags_path = "#{dirname}/#{basename}.docx.diff"
120
+
121
+ break unless Utils.user_allows_overwrite?(tags_path)
122
+
123
+ # Unzip the DOCX's word/document.xml file and pipe the output into
124
+ # an XML with the same base name as the DOCX
125
+ system "unzip -p #{orig_docx} word/document.xml > #{xml_path}"
126
+
127
+ # Read in the XML file and extract the content from each <w:t> tag
128
+ cleaner = Nokogiri::XML(File.read(xml_path))
129
+ File.open(tags_path, "w") do |tags_file|
130
+ # Remove all grammar and spellcheck tags
131
+ cleaner.xpath("//w:proofErr").remove
132
+
133
+ nodes = cleaner.xpath("//w:r")
134
+ prev = nil
135
+ nodes.each do |node|
136
+ unless prev.nil?
137
+ if (prev.next_sibling == node) && compare_nodes(prev, node)
138
+ begin
139
+ node.at_xpath("w:t").content = prev.at_xpath("w:t").content +
140
+ node.at_xpath("w:t").content
141
+ prev.remove
142
+ rescue
143
+ end
144
+ end
145
+ end
146
+
147
+ prev = node
148
+ end
149
+
150
+ # Write the tags file
151
+ tags_file.puts "---" + orig_docx
152
+ tags_file.puts "+++" + orig_docx
153
+ cleaner.xpath("//w:t").each_with_index do |node, index|
154
+ tags_file.puts "@@ %i @@" % [index, additional_info(node)]
155
+ tags_file.puts "-" + node.content
156
+ if attempting_to_translate
157
+ tags_file.puts "+" + Translator.translate_content(node.content)
158
+ else
159
+ tags_file.puts "+" + node.content
160
+ end
161
+ end
162
+ end
163
+
164
+ # Write the cleaned-up XML to a file for inspection
165
+ File.open(clean_path, "w") do |xml|
166
+ xml.puts cleaner.to_xml
167
+ end
168
+ else
169
+ puts I18n.t(:unknown) % sub_file
170
+ end
171
+ end
172
+ end
173
+
174
+ private
175
+
176
+ # Performs a comparison between two nodes and accepts them as equivalent
177
+ # if the differences are very minor
178
+ def compare_nodes(a, b) # :doc:
179
+ c = clean_hash(xml_node_to_hash(a))
180
+ d = clean_hash(xml_node_to_hash(b))
181
+ c == d
182
+ end
183
+
184
+ # Converts an XML node into a Ruby hash
185
+ def xml_node_to_hash(node) # :doc:
186
+ # If we are at the root of the document, start the hash
187
+ if node.element?
188
+ result_hash = {}
189
+ if node.attributes != {}
190
+ result_hash[:attributes] = {}
191
+ node.attributes.keys.each do |key|
192
+ result_hash[:attributes][node.attributes[key].name.to_sym] = prepare(node.attributes[key].value)
193
+ end
194
+ end
195
+ if node.children.size > 0
196
+ node.children.each do |child|
197
+ result = xml_node_to_hash(child)
198
+
199
+ if child.name == "text"
200
+ unless child.next_sibling || child.previous_sibling
201
+ return prepare(result)
202
+ end
203
+ elsif result_hash[child.name.to_sym]
204
+ if result_hash[child.name.to_sym].is_a?(Array)
205
+ result_hash[child.name.to_sym] << prepare(result)
206
+ else
207
+ result_hash[child.name.to_sym] = [result_hash[child.name.to_sym]] << prepare(result)
208
+ end
209
+ else
210
+ result_hash[child.name.to_sym] = prepare(result)
211
+ end
212
+ end
213
+
214
+ return result_hash
215
+ else
216
+ return result_hash
217
+ end
218
+ else
219
+ return prepare(node.content.to_s)
220
+ end
221
+ end
222
+
223
+ # Prepares data according to whether it's string or integer content
224
+ def prepare(data) # :doc:
225
+ (data.class == String && data.to_i.to_s == data) ? data.to_i : data
226
+ end
227
+
228
+ # Delete extraneous attributes for comparison
229
+ def clean_hash(hash) # :doc:
230
+ delete_attribute_or_child hash, :t
231
+ delete_attribute_or_child hash, :rPr, :rFonts, :attributes, :hint
232
+ end
233
+
234
+ # Get additional information on the node for context in tags file
235
+ def additional_info(node) # :doc:
236
+ info = []
237
+ info << "hyperlink" if node.parent.parent.name == "hyperlink"
238
+
239
+ if info.empty?
240
+ ""
241
+ else
242
+ " #=> #{info.join(", ")}"
243
+ end
244
+ end
245
+
246
+ # Deletes the specified attribute or child node for the supplied node,
247
+ # following the hierarchy provided
248
+ #
249
+ # Delete <tt>hash[:rPr][:rFonts][:attributes][:hint]</tt>:
250
+ # delete_attribute_or_child hash, :rPr, :rFonts, :attributes, :hint
251
+ def delete_attribute_or_child(node, *hierarchy) # :doc:
252
+ last_member = hierarchy.pop
253
+
254
+ hierarchy.each do |member|
255
+ node = node[member] unless node.nil?
256
+ end
257
+
258
+ node.delete last_member unless node.nil?
259
+ end
260
+ end
261
+ end
262
+ end
@@ -1,4 +1,4 @@
1
1
  module Konjac
2
2
  # The current version number of Konjac
3
- VERSION = "0.2.9.5"
3
+ VERSION = "0.3"
4
4
  end
data/lib/locales/en.yml CHANGED
@@ -11,6 +11,7 @@ en:
11
11
  script_arg: dictionaries|vim
12
12
  script_not_found: "Script not found: %s"
13
13
  subcommand: subcommand
14
+ unimplemented_virtual: "Unimplemented virtual method: %s"
14
15
  unknown_subcommand: "Unknown subcommand: %s"
15
16
  usage: "Usage:"
16
17
  where_options: "where [%s] are:"
data/lib/locales/ja.yml CHANGED
@@ -11,6 +11,7 @@ ja:
11
11
  script_arg: dictionaries|vim
12
12
  script_not_found: "スクリプトは見つかりません:%s"
13
13
  subcommand: サブコマンド
14
+ unimplemented_virtual: "Unimplemented virtual method: %s"
14
15
  unknown_subcommand: 不明なサブコマンド:%s
15
16
  usage: 使い方:
16
17
  where_options: "使用可能な[%s]は、以下のとおりです:"
@@ -0,0 +1,72 @@
1
+ # coding: utf-8
2
+ require File.dirname(__FILE__) + "/../spec_helper"
3
+
4
+ describe Office::Generic do
5
+ before :each do
6
+ # Nuke initializer
7
+ class Office::Generic
8
+ def initialize
9
+ @parse_order = [:paragraph]
10
+ end
11
+ end
12
+
13
+ @generic = Office::Generic.new
14
+ end
15
+
16
+ describe "argument parsing" do
17
+ describe "the first time" do
18
+ it "should handle no arguments" do
19
+ @generic.send(:parse_args).should == nil
20
+ end
21
+
22
+ it "should handle one hash" do
23
+ @generic.send(:parse_args, :paragraph => 1).should == { :paragraph => 1 }
24
+ end
25
+
26
+ it "should handle one argument" do
27
+ @generic.send(:parse_args, 1).should == { :paragraph => 1 }
28
+ end
29
+
30
+ it "should give a hash precedence over another argument" do
31
+ @generic.send(:parse_args, 1, :paragraph => 2).should == { :paragraph => 2 }
32
+ end
33
+
34
+ describe "document types with multiple levels" do
35
+ before :each do
36
+ @generic.instance_variable_set :@parse_order, [:sheet, :row, :cell]
37
+ end
38
+
39
+ it "should handle a hash with several values" do
40
+ @generic.send(:parse_args, :sheet => 1, :row => 2, :cell => 3)
41
+ .should == { :sheet => 1, :row => 2, :cell => 3 }
42
+ end
43
+
44
+ it "should handle several arguments" do
45
+ @generic.send(:parse_args, 1, 2, 3).should == { :sheet => 1, :row => 2, :cell => 3 }
46
+ end
47
+ end
48
+ end
49
+
50
+ describe "multiple times" do
51
+ before :each do
52
+ @result = nil
53
+ @multiple = 3
54
+ end
55
+
56
+ it "should correctly handle no arguments" do
57
+ @multiple.times do
58
+ @result = @generic.send(:parse_args)
59
+ @result.should == nil
60
+ end
61
+ end
62
+
63
+ it "should correctly handle a completed hash" do
64
+ @generic.instance_variable_set :@parse_order, []
65
+ @multiple.times do
66
+ @result = @generic.send(:parse_args, :sheet => 1, :row => 2, :cell => 3)
67
+ @result.should == { :sheet => 1, :row => 2, :cell => 3 }
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe Office do
4
+ before :each do
5
+ @env = Office.environment
6
+
7
+ module Office::Mac
8
+ class Excel; def initialize; end; end
9
+ class PowerPoint; def initialize; end; end
10
+ class Word; def initialize; end; end
11
+ end
12
+
13
+ module Office::Windows
14
+ class Excel; def initialize; end; end
15
+ class PowerPoint; def initialize; end; end
16
+ class Word; def initialize; end; end
17
+ end
18
+ end
19
+
20
+ describe "dynamic methods" do
21
+ it "should fail to detect something made-up" do
22
+ lambda { Office.something_made_up }.should raise_error NoMethodError
23
+ end
24
+
25
+ it "should detect Excel" do
26
+ Office.excel.should be_an_instance_of @env::Excel
27
+ end
28
+
29
+ it "should detect PowerPoint" do
30
+ Office.power_point.should be_an_instance_of @env::PowerPoint
31
+ end
32
+
33
+ it "should detect Word" do
34
+ Office.word.should be_an_instance_of @env::Word
35
+ end
36
+ end
37
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: konjac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9.5
4
+ version: '0.3'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-08 00:00:00.000000000 Z
12
+ date: 2012-02-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: amatch
16
- requirement: &70336008294400 !ruby/object:Gem::Requirement
16
+ requirement: &70292199617680 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70336008294400
24
+ version_requirements: *70292199617680
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: git
27
- requirement: &70336008293040 !ruby/object:Gem::Requirement
27
+ requirement: &70292199617240 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70336008293040
35
+ version_requirements: *70292199617240
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: highline
38
- requirement: &70336008291780 !ruby/object:Gem::Requirement
38
+ requirement: &70292199616720 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70336008291780
46
+ version_requirements: *70292199616720
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: i18n
49
- requirement: &70336008288780 !ruby/object:Gem::Requirement
49
+ requirement: &70292199616220 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70336008288780
57
+ version_requirements: *70292199616220
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: nokogiri
60
- requirement: &70336008286240 !ruby/object:Gem::Requirement
60
+ requirement: &70292199615660 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,21 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70336008286240
68
+ version_requirements: *70292199615660
69
+ - !ruby/object:Gem::Dependency
70
+ name: rb-appscript
71
+ requirement: &70292199614620 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70292199614620
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: sdoc
71
- requirement: &70336008284120 !ruby/object:Gem::Requirement
82
+ requirement: &70292199613940 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,10 +87,10 @@ dependencies:
76
87
  version: '0'
77
88
  type: :runtime
78
89
  prerelease: false
79
- version_requirements: *70336008284120
90
+ version_requirements: *70292199613940
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: term-ansicolor
82
- requirement: &70336008283400 !ruby/object:Gem::Requirement
93
+ requirement: &70292199599480 !ruby/object:Gem::Requirement
83
94
  none: false
84
95
  requirements:
85
96
  - - ! '>='
@@ -87,10 +98,10 @@ dependencies:
87
98
  version: '0'
88
99
  type: :runtime
89
100
  prerelease: false
90
- version_requirements: *70336008283400
101
+ version_requirements: *70292199599480
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: trollop
93
- requirement: &70336008282660 !ruby/object:Gem::Requirement
104
+ requirement: &70292199598700 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ! '>='
@@ -98,10 +109,10 @@ dependencies:
98
109
  version: '0'
99
110
  type: :runtime
100
111
  prerelease: false
101
- version_requirements: *70336008282660
112
+ version_requirements: *70292199598700
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: autotest
104
- requirement: &70336008281420 !ruby/object:Gem::Requirement
115
+ requirement: &70292199597260 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,10 +120,10 @@ dependencies:
109
120
  version: '0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *70336008281420
123
+ version_requirements: *70292199597260
113
124
  - !ruby/object:Gem::Dependency
114
125
  name: autotest-fsevent
115
- requirement: &70336008280040 !ruby/object:Gem::Requirement
126
+ requirement: &70292199596780 !ruby/object:Gem::Requirement
116
127
  none: false
117
128
  requirements:
118
129
  - - ! '>='
@@ -120,10 +131,10 @@ dependencies:
120
131
  version: '0'
121
132
  type: :development
122
133
  prerelease: false
123
- version_requirements: *70336008280040
134
+ version_requirements: *70292199596780
124
135
  - !ruby/object:Gem::Dependency
125
136
  name: autotest-growl
126
- requirement: &70336008277940 !ruby/object:Gem::Requirement
137
+ requirement: &70292199596360 !ruby/object:Gem::Requirement
127
138
  none: false
128
139
  requirements:
129
140
  - - ! '>='
@@ -131,10 +142,10 @@ dependencies:
131
142
  version: '0'
132
143
  type: :development
133
144
  prerelease: false
134
- version_requirements: *70336008277940
145
+ version_requirements: *70292199596360
135
146
  - !ruby/object:Gem::Dependency
136
147
  name: bundler
137
- requirement: &70336008275980 !ruby/object:Gem::Requirement
148
+ requirement: &70292199595740 !ruby/object:Gem::Requirement
138
149
  none: false
139
150
  requirements:
140
151
  - - ! '>='
@@ -142,10 +153,10 @@ dependencies:
142
153
  version: '0'
143
154
  type: :development
144
155
  prerelease: false
145
- version_requirements: *70336008275980
156
+ version_requirements: *70292199595740
146
157
  - !ruby/object:Gem::Dependency
147
158
  name: rspec
148
- requirement: &70336008275180 !ruby/object:Gem::Requirement
159
+ requirement: &70292199594940 !ruby/object:Gem::Requirement
149
160
  none: false
150
161
  requirements:
151
162
  - - ! '>='
@@ -153,7 +164,7 @@ dependencies:
153
164
  version: '0'
154
165
  type: :development
155
166
  prerelease: false
156
- version_requirements: *70336008275180
167
+ version_requirements: *70292199594940
157
168
  description: A Ruby command-line utility for translating files using a YAML wordlist
158
169
  email:
159
170
  - bryan.mckelvey@gmail.com
@@ -172,12 +183,6 @@ files:
172
183
  - Rakefile
173
184
  - bin/konjac
174
185
  - konjac.gemspec
175
- - lib/applescripts/konjac_excel_export
176
- - lib/applescripts/konjac_excel_import
177
- - lib/applescripts/konjac_powerpoint_export
178
- - lib/applescripts/konjac_powerpoint_import
179
- - lib/applescripts/konjac_word_export
180
- - lib/applescripts/konjac_word_import
181
186
  - lib/konjac.rb
182
187
  - lib/konjac/cli.rb
183
188
  - lib/konjac/config.rb
@@ -186,10 +191,22 @@ files:
186
191
  - lib/konjac/installer.rb
187
192
  - lib/konjac/language.rb
188
193
  - lib/konjac/office.rb
189
- - lib/konjac/os.rb
194
+ - lib/konjac/office/generic.rb
195
+ - lib/konjac/office/mac.rb
196
+ - lib/konjac/office/mac/excel.rb
197
+ - lib/konjac/office/mac/power_point.rb
198
+ - lib/konjac/office/mac/shared.rb
199
+ - lib/konjac/office/mac/word.rb
200
+ - lib/konjac/office/os.rb
201
+ - lib/konjac/office/tag.rb
202
+ - lib/konjac/office/windows.rb
203
+ - lib/konjac/office/windows/excel.rb
204
+ - lib/konjac/office/windows/power_point.rb
205
+ - lib/konjac/office/windows/shared.rb
206
+ - lib/konjac/office/windows/word.rb
207
+ - lib/konjac/office/xml.rb
208
+ - lib/konjac/office/xml/shared.rb
190
209
  - lib/konjac/suggestor.rb
191
- - lib/konjac/tag.rb
192
- - lib/konjac/tag_manager.rb
193
210
  - lib/konjac/translator.rb
194
211
  - lib/konjac/utils.rb
195
212
  - lib/konjac/version.rb
@@ -199,8 +216,9 @@ files:
199
216
  - spec/config_spec.rb
200
217
  - spec/dictionary_spec.rb
201
218
  - spec/language_spec.rb
219
+ - spec/office/generic_spec.rb
220
+ - spec/office_spec.rb
202
221
  - spec/spec_helper.rb
203
- - spec/tag_spec.rb
204
222
  - spec/utils_spec.rb
205
223
  homepage: http://brymck.herokuapp.com/
206
224
  licenses: []
@@ -231,6 +249,7 @@ test_files:
231
249
  - spec/config_spec.rb
232
250
  - spec/dictionary_spec.rb
233
251
  - spec/language_spec.rb
252
+ - spec/office/generic_spec.rb
253
+ - spec/office_spec.rb
234
254
  - spec/spec_helper.rb
235
- - spec/tag_spec.rb
236
255
  - spec/utils_spec.rb