konjac 0.2.9.5 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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