konjac 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -63,6 +63,14 @@ Use multiple dictionaries:
63
63
 
64
64
  konjac translate financial_report_en.txt into japanese using finance
65
65
 
66
+ Extract text from a DOCX document (creates a plain-text `test.tags` file):
67
+
68
+ konjac extract test.docx
69
+
70
+ Import tags file back into DOCX document:
71
+
72
+ konjac import test.docx
73
+
66
74
  Extended Example
67
75
  ----------------
68
76
 
data/lib/konjac/tag.rb ADDED
@@ -0,0 +1,17 @@
1
+ module Konjac
2
+ class Tag
3
+ attr_accessor :index, :original, :translated
4
+
5
+ def initialize(index, original, translated)
6
+ @index, @original, @translated = index, original, translated
7
+ end
8
+
9
+ def to_s
10
+ "[[KJ-#{index}]]\n> #{original}#{"\n" + translated if translated?}"
11
+ end
12
+
13
+ def translated?
14
+ !!translated
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,50 @@
1
+ module Konjac
2
+ class TagManager
3
+ attr_accessor :tags
4
+
5
+ STARTS_WITH_CLOSE_TAG = /^\>/
6
+ KONJAC_TAG = /^\[\[KJ\-(\d+)\]\]/
7
+
8
+ def initialize(path)
9
+ @tags = []
10
+ parse_lines File.readlines(path)
11
+ end
12
+
13
+ def parse_lines(lines)
14
+ index = nil
15
+ orig = nil
16
+ trans = nil
17
+
18
+ lines.each do |line|
19
+ if line =~ KONJAC_TAG
20
+ # Handle instances where there is no translation
21
+ unless orig.nil?
22
+ @tags << Tag.new(index, orig, trans)
23
+ index = nil
24
+ orig = nil
25
+ end
26
+
27
+ index = line.match(KONJAC_TAG)[1].to_i
28
+ elsif line =~ STARTS_WITH_CLOSE_TAG
29
+ orig = line[2..-1].chomp
30
+ else
31
+ trans = line.chomp
32
+ unless index.nil?
33
+ @tags << Tag.new(index, orig, trans)
34
+ index = nil
35
+ orig = nil
36
+ trans = nil
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ def all
43
+ @tags
44
+ end
45
+
46
+ def [](index)
47
+ @tags[index]
48
+ end
49
+ end
50
+ end
@@ -1,3 +1,3 @@
1
1
  module Konjac
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/konjac/word.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # This really needs cleanup
2
+
1
3
  module Konjac
2
4
  module Word
3
5
  class << self
@@ -11,20 +13,25 @@ module Konjac
11
13
  basename = File.basename(sub_file, ".*")
12
14
  new_path = "#{dirname}/#{basename}_imported.docx"
13
15
  xml_path = "#{dirname}/#{basename}.xml"
14
- tags_path = "#{dirname}/#{basename}.tags"
16
+ tags_path = "#{dirname}/#{basename}.konjac"
15
17
  out_path = "#{dirname}/word/document.xml"
16
18
 
17
19
  # Open the original XML file and the updated tags
18
20
  writer = Nokogiri::XML(File.read(xml_path))
19
- tags = File.readlines(tags_path)
21
+ nodes = writer.xpath("//w:t")
22
+ tags = TagManager.new(tags_path)
20
23
 
21
24
  # Overwrite each <w:t> tag's content with the new tag
22
- writer.xpath("//w:t").each do |node|
23
- node.content = tags.shift.tr("\n", "")
25
+ tags.all.each do |tag|
26
+ if tag.translated?
27
+ nodes[tag.index].content = tag.translated
28
+ end
24
29
  end
25
30
 
26
31
  # Create a directory for word/document.xml if necessary
27
- FileUtils.mkdir "#{dirname}/word" unless File.directory?("#{dirname}/word")
32
+ unless File.directory?("#{dirname}/word")
33
+ FileUtils.mkdir "#{dirname}/word"
34
+ end
28
35
 
29
36
  # Write the modified XML to a file
30
37
  File.open(out_path, "w") do |file|
@@ -50,7 +57,7 @@ module Konjac
50
57
  basename = File.basename(sub_file, ".*")
51
58
  xml_path = "#{dirname}/#{basename}_orig.xml"
52
59
  clean_path = "#{dirname}/#{basename}.xml"
53
- tags_path = "#{dirname}/#{basename}.tags"
60
+ tags_path = "#{dirname}/#{basename}.konjac"
54
61
 
55
62
  # Unzip the DOCX's word/document.xml file and pipe the output into
56
63
  # an XML with the same base name as the DOCX
@@ -79,11 +86,16 @@ module Konjac
79
86
  prev = node
80
87
  end
81
88
 
89
+ # Write the tags file
90
+ index = 0
82
91
  cleaner.xpath("//w:t").each do |node|
83
- tags_file.puts node.content
92
+ tags_file.puts "[[KJ-%i]]%s" % [index, additional_info(node)]
93
+ tags_file.puts "> %s" % node.content
94
+ index += 1
84
95
  end
85
96
  end
86
97
 
98
+ # Write the cleaned-up XML to a file for inspection
87
99
  File.open(clean_path, "w") do |xml|
88
100
  xml.puts cleaner.to_xml
89
101
  end
@@ -148,6 +160,18 @@ module Konjac
148
160
  hash.delete :t
149
161
  hash[:rPr][:rFonts][:attributes].delete :hint
150
162
  end
163
+
164
+ # Get additional information on the node for context in tags file
165
+ def additional_info(node)
166
+ info = []
167
+ info << "hyperlink" if node.parent.parent.name == "hyperlink"
168
+
169
+ if info.empty?
170
+ ""
171
+ else
172
+ " #=> #{info.join(", ")}"
173
+ end
174
+ end
151
175
  end
152
176
  end
153
177
  end
data/lib/konjac.rb CHANGED
@@ -8,6 +8,8 @@ module Konjac
8
8
  autoload :CLI, "konjac/cli"
9
9
  autoload :Dictionary, "konjac/dictionary"
10
10
  autoload :Language, "konjac/language"
11
+ autoload :Tag, "konjac/tag"
12
+ autoload :TagManager, "konjac/tag_manager"
11
13
  autoload :Translator, "konjac/translator"
12
14
  autoload :Utils, "konjac/utils"
13
15
  autoload :Word, "konjac/word"
data/spec/tag_spec.rb ADDED
@@ -0,0 +1,47 @@
1
+ # coding: utf-8
2
+ require File.dirname(__FILE__) + "/spec_helper"
3
+ require "tempfile"
4
+
5
+ describe Tag do
6
+ before :each do
7
+ @tags_file = Tempfile.new(["tags", ".tags"])
8
+ @tags_file.write <<-eos.gsub(/^\s+/, "")
9
+ [[KJ-1]]
10
+ > 犬
11
+ dog
12
+ [[KJ-2]]
13
+ > 何ですか。
14
+ What is it?
15
+ [[KJ-3]]
16
+ > 空白
17
+ [[KJ-6]]
18
+ > 以上
19
+ -- end --
20
+ eos
21
+ @tags_file.rewind
22
+ @manager = TagManager.new(@tags_file.path)
23
+ end
24
+
25
+ it "should accurately read a tag file" do
26
+ @manager.all.should_not == nil
27
+ @manager[0].index.should == 1
28
+ @manager[0].original.should == "犬"
29
+ @manager[0].translated.should == "dog"
30
+ end
31
+
32
+ it "should succeed reading multiple lines" do
33
+ @manager[1].index.should == 2
34
+ @manager[1].original.should == "何ですか。"
35
+ @manager[1].translated.should == "What is it?"
36
+ end
37
+
38
+ it "should ignore blank translations" do
39
+ @manager[2].index.should == 3
40
+ @manager[2].original.should == "空白"
41
+ @manager[2].translated.should == nil
42
+ end
43
+
44
+ it "should skip over blank indexes" do
45
+ @manager[3].index.should == 6
46
+ end
47
+ 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.1.1
4
+ version: 0.1.2
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-01-12 00:00:00.000000000 Z
12
+ date: 2012-01-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
- requirement: &70314541350300 !ruby/object:Gem::Requirement
16
+ requirement: &70334829927100 !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: *70314541350300
24
+ version_requirements: *70334829927100
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &70314541347900 !ruby/object:Gem::Requirement
27
+ requirement: &70334829926260 !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: :development
34
34
  prerelease: false
35
- version_requirements: *70314541347900
35
+ version_requirements: *70334829926260
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70314541345520 !ruby/object:Gem::Requirement
38
+ requirement: &70334829925520 !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: :development
45
45
  prerelease: false
46
- version_requirements: *70314541345520
46
+ version_requirements: *70334829925520
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: sdoc
49
- requirement: &70314541340780 !ruby/object:Gem::Requirement
49
+ requirement: &70334829925000 !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: :development
56
56
  prerelease: false
57
- version_requirements: *70314541340780
57
+ version_requirements: *70334829925000
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: autotest
60
- requirement: &70314541332480 !ruby/object:Gem::Requirement
60
+ requirement: &70334829924120 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70314541332480
68
+ version_requirements: *70334829924120
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: autotest-fsevent
71
- requirement: &70314541323420 !ruby/object:Gem::Requirement
71
+ requirement: &70334829908620 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70314541323420
79
+ version_requirements: *70334829908620
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: autotest-growl
82
- requirement: &70314541318360 !ruby/object:Gem::Requirement
82
+ requirement: &70334829907660 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70314541318360
90
+ version_requirements: *70334829907660
91
91
  description: A Ruby command-line utility for translating files using a YAML wordlist
92
92
  email:
93
93
  - bryan.mckelvey@gmail.com
@@ -110,6 +110,8 @@ files:
110
110
  - lib/konjac/dictionary.rb
111
111
  - lib/konjac/exception.rb
112
112
  - lib/konjac/language.rb
113
+ - lib/konjac/tag.rb
114
+ - lib/konjac/tag_manager.rb
113
115
  - lib/konjac/translator.rb
114
116
  - lib/konjac/utils.rb
115
117
  - lib/konjac/version.rb
@@ -118,6 +120,7 @@ files:
118
120
  - spec/dictionary_spec.rb
119
121
  - spec/language_spec.rb
120
122
  - spec/spec_helper.rb
123
+ - spec/tag_spec.rb
121
124
  - spec/utils_spec.rb
122
125
  homepage: http://brymck.herokuapp.com/
123
126
  licenses: []
@@ -148,4 +151,5 @@ test_files:
148
151
  - spec/dictionary_spec.rb
149
152
  - spec/language_spec.rb
150
153
  - spec/spec_helper.rb
154
+ - spec/tag_spec.rb
151
155
  - spec/utils_spec.rb