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.
- data/konjac.gemspec +1 -0
- data/lib/konjac.rb +0 -3
- data/lib/konjac/cli.rb +2 -2
- data/lib/konjac/exception.rb +3 -0
- data/lib/konjac/office.rb +64 -257
- data/lib/konjac/office/generic.rb +76 -0
- data/lib/konjac/office/mac.rb +11 -0
- data/lib/konjac/office/mac/excel.rb +73 -0
- data/lib/konjac/office/mac/power_point.rb +68 -0
- data/lib/konjac/office/mac/shared.rb +36 -0
- data/lib/konjac/office/mac/word.rb +114 -0
- data/lib/konjac/office/os.rb +53 -0
- data/lib/konjac/office/tag.rb +91 -0
- data/lib/konjac/office/windows.rb +11 -0
- data/lib/konjac/office/windows/excel.rb +0 -0
- data/lib/konjac/office/windows/power_point.rb +0 -0
- data/lib/konjac/office/windows/shared.rb +2 -0
- data/lib/konjac/office/windows/word.rb +0 -0
- data/lib/konjac/office/xml.rb +11 -0
- data/lib/konjac/office/xml/shared.rb +262 -0
- data/lib/konjac/version.rb +1 -1
- data/lib/locales/en.yml +1 -0
- data/lib/locales/ja.yml +1 -0
- data/spec/office/generic_spec.rb +72 -0
- data/spec/office_spec.rb +37 -0
- metadata +58 -39
- data/lib/applescripts/konjac_excel_export +0 -120
- data/lib/applescripts/konjac_excel_import +0 -112
- data/lib/applescripts/konjac_powerpoint_export +0 -116
- data/lib/applescripts/konjac_powerpoint_import +0 -109
- data/lib/applescripts/konjac_word_export +0 -110
- data/lib/applescripts/konjac_word_import +0 -139
- data/lib/konjac/os.rb +0 -51
- data/lib/konjac/tag.rb +0 -50
- data/lib/konjac/tag_manager.rb +0 -65
- data/spec/tag_spec.rb +0 -63
@@ -1,110 +0,0 @@
|
|
1
|
-
#!/usr/bin/osascript
|
2
|
-
-- round up ASCII characters used for formatting in Word
|
3
|
-
global bell
|
4
|
-
global line_feed
|
5
|
-
global form_feed
|
6
|
-
global carriage_return
|
7
|
-
global format_chars
|
8
|
-
|
9
|
-
-- strip line breaks and formatting characters
|
10
|
-
to strip_line_breaks(this_line)
|
11
|
-
try
|
12
|
-
-- remove last character until no it's no longer an excluded character
|
13
|
-
repeat while last character of this_line is in format_chars
|
14
|
-
set this_line to characters 1 thru -2 of this_line as string
|
15
|
-
end repeat
|
16
|
-
return this_line as text
|
17
|
-
on error
|
18
|
-
return ""
|
19
|
-
end try
|
20
|
-
end strip_line_breaks
|
21
|
-
|
22
|
-
to get_posix_path(mac_path)
|
23
|
-
set result to POSIX path of mac_path
|
24
|
-
end get_posix_path
|
25
|
-
|
26
|
-
to extract(filename)
|
27
|
-
tell application "Microsoft Word"
|
28
|
-
activate
|
29
|
-
open filename
|
30
|
-
set active_document to active document
|
31
|
-
set ignored_content to {missing value, "", line_feed}
|
32
|
-
|
33
|
-
-- set tags path to full path to active presentation with a .tags extension
|
34
|
-
set tags_path to ((path of active_document) & ".diff")
|
35
|
-
|
36
|
-
-- delete tags file if it already exists
|
37
|
-
tell application "Finder"
|
38
|
-
if exists file tags_path then
|
39
|
-
delete file tags_path
|
40
|
-
end if
|
41
|
-
end tell
|
42
|
-
|
43
|
-
-- open tags file for writing
|
44
|
-
set tags_file to open for access file tags_path with write permission
|
45
|
-
set eof of tags_file to 0
|
46
|
-
|
47
|
-
write ("--- " & my get_posix_path(path of active_document)) to tags_file
|
48
|
-
write line_feed to tags_file
|
49
|
-
write ("+++ " & my get_posix_path(path of active_document)) to tags_file
|
50
|
-
write line_feed to tags_file
|
51
|
-
|
52
|
-
-- iterate through paragraphs
|
53
|
-
set paragraph_index to 1
|
54
|
-
set current_paragraph to paragraph 1 in active_document
|
55
|
-
|
56
|
-
-- save old delimiters
|
57
|
-
|
58
|
-
repeat
|
59
|
-
-- get text content if it's available
|
60
|
-
set text_content to my strip_line_breaks(content of text object of current_paragraph) as string
|
61
|
-
|
62
|
-
-- replace "soft returns" (vertical tabs) with real returns
|
63
|
-
set old_delimiters to AppleScript's text item delimiters
|
64
|
-
set AppleScript's text item delimiters to {ASCII character 11}
|
65
|
-
set split_content to every text item of text_content
|
66
|
-
set AppleScript's text item delimiters to old_delimiters
|
67
|
-
|
68
|
-
if text_content is not in ignored_content then
|
69
|
-
write ("@@ " & paragraph_index & " @@") to tags_file
|
70
|
-
write line_feed to tags_file
|
71
|
-
repeat with text_line in split_content
|
72
|
-
write ("-" & text_line) to tags_file as «class utf8»
|
73
|
-
write line_feed to tags_file
|
74
|
-
end repeat
|
75
|
-
repeat with text_line in split_content
|
76
|
-
write ("+" & text_line) to tags_file as «class utf8»
|
77
|
-
write line_feed to tags_file
|
78
|
-
end repeat
|
79
|
-
end if
|
80
|
-
|
81
|
-
-- increment paragraph index
|
82
|
-
set paragraph_index to (paragraph_index + 1)
|
83
|
-
|
84
|
-
-- try to find the next paragraph
|
85
|
-
try
|
86
|
-
set current_paragraph to next paragraph of current_paragraph
|
87
|
-
on error
|
88
|
-
exit repeat
|
89
|
-
end try
|
90
|
-
end repeat
|
91
|
-
|
92
|
-
-- close everything
|
93
|
-
close access tags_file
|
94
|
-
end tell
|
95
|
-
end extract
|
96
|
-
|
97
|
-
-- initialize global variables, just formatting characters here
|
98
|
-
to init_globals()
|
99
|
-
set bell to ASCII character 7
|
100
|
-
set line_feed to ASCII character 10
|
101
|
-
set form_feed to ASCII character 12
|
102
|
-
set carriage_return to ASCII character 13
|
103
|
-
set format_chars to {bell, line_feed, form_feed, carriage_return}
|
104
|
-
end init_globals
|
105
|
-
|
106
|
-
-- main()
|
107
|
-
on run argv
|
108
|
-
init_globals()
|
109
|
-
extract(item 1 of argv)
|
110
|
-
end
|
@@ -1,139 +0,0 @@
|
|
1
|
-
#!/usr/bin/osascript
|
2
|
-
global numbers_as_text
|
3
|
-
global line_feed
|
4
|
-
global vertical_tab
|
5
|
-
global carriage_return
|
6
|
-
|
7
|
-
-- parses the headers/separators inside the tags file
|
8
|
-
to parse_header(header)
|
9
|
-
set at_offset to 4
|
10
|
-
|
11
|
-
repeat while character at_offset of header is in my numbers_as_text
|
12
|
-
set at_offset to (at_offset + 1)
|
13
|
-
end repeat
|
14
|
-
|
15
|
-
return at_offset
|
16
|
-
end parse_header
|
17
|
-
|
18
|
-
to ends_with_forbidden_character(txt)
|
19
|
-
set last_character to character -1 of txt
|
20
|
-
|
21
|
-
if last_character is in {line_feed, carriage_return, vertical_tab}
|
22
|
-
return true
|
23
|
-
else
|
24
|
-
return false
|
25
|
-
end if
|
26
|
-
end ends_with_forbidden_character
|
27
|
-
|
28
|
-
to get_posix_path(mac_path)
|
29
|
-
set result to POSIX path of mac_path
|
30
|
-
end get_posix_path
|
31
|
-
|
32
|
-
to import(filename)
|
33
|
-
tell application "Microsoft Word"
|
34
|
-
activate
|
35
|
-
open filename
|
36
|
-
set active_document to active document
|
37
|
-
set ignored_content to {missing value, "", line_feed}
|
38
|
-
|
39
|
-
-- set tags path to full path to active presentation with a .tags extension
|
40
|
-
set tags_path to ((path of active_document) & ".diff")
|
41
|
-
|
42
|
-
-- read in tags
|
43
|
-
set tags_file to open for access file tags_path
|
44
|
-
set tags to (read tags_file for (get eof tags_file) ¬
|
45
|
-
as «class utf8» using delimiter line_feed)
|
46
|
-
set tag_index to 0
|
47
|
-
set tag_length to length of tags
|
48
|
-
close access tags_file
|
49
|
-
|
50
|
-
set text_content to ""
|
51
|
-
|
52
|
-
-- iterate through paragraphs
|
53
|
-
set paragraph_index to 0
|
54
|
-
set prev_paragraph_index to 0
|
55
|
-
set is_new_tag to false
|
56
|
-
|
57
|
-
repeat with current_line in tags
|
58
|
-
if current_line starts with "@@ " then
|
59
|
-
set space_offset to my parse_header(current_line)
|
60
|
-
set paragraph_index to text 4 thru space_offset ¬
|
61
|
-
of current_line as number
|
62
|
-
set is_new_tag to true
|
63
|
-
else if current_line starts with "+" then
|
64
|
-
if paragraph_index is not 0 then
|
65
|
-
set prev_paragraph_index to paragraph_index
|
66
|
-
|
67
|
-
-- handle blank lines with soft returns
|
68
|
-
if length of current_line is less than 2
|
69
|
-
set this_content to ""
|
70
|
-
else
|
71
|
-
set this_content to text 2 thru (length of current_line) ¬
|
72
|
-
of current_line
|
73
|
-
end if
|
74
|
-
|
75
|
-
-- add to text content, joining with a soft return for multiple lines
|
76
|
-
if text_content is "" then
|
77
|
-
set text_content to this_content
|
78
|
-
else
|
79
|
-
set text_content to (text_content & vertical_tab & this_content)
|
80
|
-
end if
|
81
|
-
set is_new_tag to false
|
82
|
-
end if
|
83
|
-
end if
|
84
|
-
|
85
|
-
-- increment tag index
|
86
|
-
set tag_index to tag_index + 1
|
87
|
-
|
88
|
-
-- write if we've moved to a new tag or reached the end of the file
|
89
|
-
if text_content is not "" and (tag_index is tag_length or is_new_tag)
|
90
|
-
try
|
91
|
-
set current_content to text object of paragraph prev_paragraph_index ¬
|
92
|
-
of active document
|
93
|
-
set my_range to create range active document ¬
|
94
|
-
start (start of content of current_content) ¬
|
95
|
-
end (end of content of current_content)
|
96
|
-
|
97
|
-
select my_range
|
98
|
-
|
99
|
-
-- FIXME: this is super-ugly
|
100
|
-
if count of paragraphs of selection is greater than 1
|
101
|
-
set my_range to create range active document ¬
|
102
|
-
start (start of content of text object of selection) ¬
|
103
|
-
end ((end of content of text object of selection) - 1)
|
104
|
-
select my_range
|
105
|
-
repeat while (count of paragraphs of selection is greater than 1)
|
106
|
-
-- maybe?
|
107
|
-
move start of range my_range by a line item
|
108
|
-
select my_range
|
109
|
-
end repeat
|
110
|
-
end if
|
111
|
-
|
112
|
-
repeat while my ends_with_forbidden_character(content of selection as text)
|
113
|
-
set my_range to create range active document ¬
|
114
|
-
start (start of content of text object of selection) ¬
|
115
|
-
end ((end of content of text object of selection) - 1)
|
116
|
-
select my_range
|
117
|
-
end repeat
|
118
|
-
|
119
|
-
type text selection text text_content
|
120
|
-
set text_content to ""
|
121
|
-
end try
|
122
|
-
end if
|
123
|
-
end repeat
|
124
|
-
end tell
|
125
|
-
end import
|
126
|
-
|
127
|
-
-- initialize global variables
|
128
|
-
to init_globals()
|
129
|
-
set numbers_as_text to {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}
|
130
|
-
set line_feed to ASCII character 10
|
131
|
-
set vertical_tab to ASCII character 11
|
132
|
-
set carriage_return to ASCII character 13
|
133
|
-
end init_globals
|
134
|
-
|
135
|
-
-- main()
|
136
|
-
on run argv
|
137
|
-
init_globals()
|
138
|
-
import(item 1 of argv)
|
139
|
-
end run
|
data/lib/konjac/os.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
module Konjac
|
2
|
-
# A module for determining what OS we're using
|
3
|
-
module OS
|
4
|
-
class << self
|
5
|
-
# Override string output
|
6
|
-
def to_s
|
7
|
-
RbConfig::CONFIG["host_os"]
|
8
|
-
end
|
9
|
-
|
10
|
-
# OS is a version of Mac
|
11
|
-
def mac?
|
12
|
-
@mac ||= is? /mac|darwin/
|
13
|
-
end
|
14
|
-
|
15
|
-
# OS is a version of Linux
|
16
|
-
def linux?
|
17
|
-
@linux ||= is? /linux|cygwin/
|
18
|
-
end
|
19
|
-
|
20
|
-
# OS is a version of Windows
|
21
|
-
def windows?
|
22
|
-
@windows ||= is? /mswin|^win|mingw/
|
23
|
-
end
|
24
|
-
|
25
|
-
# OS is POSIX (well, actually, this makes the somewhat bad assumption
|
26
|
-
# that non-Windows OSes are POSIX)
|
27
|
-
def posix?
|
28
|
-
!windows?
|
29
|
-
end
|
30
|
-
|
31
|
-
# Throws a message if the computer is using a command restricted to Macs
|
32
|
-
def not_a_mac
|
33
|
-
if mac?
|
34
|
-
return false
|
35
|
-
else
|
36
|
-
puts I18n.t(:mac_only)
|
37
|
-
return true
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
# Test whether the +host_os+ configuration parameter matches a specified
|
45
|
-
# regular expression
|
46
|
-
def is?(match)
|
47
|
-
match === RbConfig::CONFIG["host_os"]
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/lib/konjac/tag.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
module Konjac
|
3
|
-
# A tag containing original text and (if available) its translation, plus the
|
4
|
-
# index of the <w:t> tag extracted from its .docx document
|
5
|
-
class Tag
|
6
|
-
# The index of the <w:t> tag in the cleaned-up XML file output by
|
7
|
-
# Konjac::Word.export_docx_tags
|
8
|
-
attr_accessor :index
|
9
|
-
|
10
|
-
# The original text
|
11
|
-
attr_accessor :original
|
12
|
-
|
13
|
-
# The translated text
|
14
|
-
attr_accessor :translated
|
15
|
-
|
16
|
-
# Creates a new tag.
|
17
|
-
#
|
18
|
-
# t = Tag.new(1, "dog", "犬")
|
19
|
-
def initialize(index, original, translated)
|
20
|
-
@index, @original, @translated = index, original, translated
|
21
|
-
end
|
22
|
-
|
23
|
-
# Converts the Tag into a string for use in .konjac files
|
24
|
-
#
|
25
|
-
# <tt>Tag.new(1, "dog", "犬").to_s</tt> will output
|
26
|
-
#
|
27
|
-
# [[KJ-1]]
|
28
|
-
# > dog
|
29
|
-
# 犬
|
30
|
-
#
|
31
|
-
# whereas <tt>Tag.new(2, "cat").to_s</tt> will output
|
32
|
-
#
|
33
|
-
# [[KJ-2]]
|
34
|
-
# > cat
|
35
|
-
def to_s
|
36
|
-
"[[KJ-#{index}]]\n> #{original}#{"\n" + translated if translated?}"
|
37
|
-
end
|
38
|
-
|
39
|
-
# Whether the tag has been translated
|
40
|
-
#
|
41
|
-
# dog = Tag.new(1, "dog", "犬")
|
42
|
-
# dog.translated? # => true
|
43
|
-
#
|
44
|
-
# cat = Tag.new(1, "cat", "")
|
45
|
-
# cat.translated? # => false
|
46
|
-
def translated?
|
47
|
-
!translated.nil? && translated != ""
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
data/lib/konjac/tag_manager.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
module Konjac
|
2
|
-
# A class for managing the tags generated by extraction from {Microsoft
|
3
|
-
# Word}[http://office.microsoft.com/en-us/word/] 2003+ documents
|
4
|
-
class TagManager
|
5
|
-
# A list of the Tag objects current being managed
|
6
|
-
attr_accessor :tags
|
7
|
-
|
8
|
-
# A regex to match lines that start with <tt>-</tt>, that is, lines that
|
9
|
-
# indicate removed text in .diff files
|
10
|
-
OLD_TAG = /^-[^-]/
|
11
|
-
|
12
|
-
# A regex to match lines that start with <tt>+</tt>, that is, lines that
|
13
|
-
# indicate added text in .diff files
|
14
|
-
NEW_TAG = /^\+[^+]/
|
15
|
-
|
16
|
-
# Regex for matching index numbers
|
17
|
-
KONJAC_TAG = /^@@\s(\d+).*@@$/
|
18
|
-
|
19
|
-
# Creates a new TagManager
|
20
|
-
def initialize(path)
|
21
|
-
@tags = []
|
22
|
-
parse_lines File.readlines(path)
|
23
|
-
end
|
24
|
-
|
25
|
-
# Parses the lines of a file into Tag objects
|
26
|
-
def parse_lines(lines)
|
27
|
-
index = nil
|
28
|
-
orig = nil
|
29
|
-
trans = nil
|
30
|
-
|
31
|
-
lines.each do |line|
|
32
|
-
if line =~ KONJAC_TAG
|
33
|
-
# Handle instances where there is no translation
|
34
|
-
unless orig.nil?
|
35
|
-
@tags << Tag.new(index, orig, trans)
|
36
|
-
index = nil
|
37
|
-
orig = nil
|
38
|
-
end
|
39
|
-
|
40
|
-
index = line.match(KONJAC_TAG)[1].to_i
|
41
|
-
elsif line =~ OLD_TAG
|
42
|
-
orig = line[1..-1].chomp
|
43
|
-
elsif line =~ NEW_TAG
|
44
|
-
trans = line[1..-1].chomp
|
45
|
-
unless index.nil?
|
46
|
-
@tags << Tag.new(index, orig, trans)
|
47
|
-
index = nil
|
48
|
-
orig = nil
|
49
|
-
trans = nil
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
# A list of all the tags available
|
56
|
-
def all
|
57
|
-
@tags
|
58
|
-
end
|
59
|
-
|
60
|
-
# Finds the <em>nth</em> tag being managed
|
61
|
-
def [](index)
|
62
|
-
@tags[index]
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
data/spec/tag_spec.rb
DELETED
@@ -1,63 +0,0 @@
|
|
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
|
-
--- /path/to/old
|
10
|
-
+++ /path/to/new
|
11
|
-
@@ 0 @@
|
12
|
-
-犬
|
13
|
-
+dog
|
14
|
-
@@ 1 @@
|
15
|
-
-何ですか。
|
16
|
-
+What is it?
|
17
|
-
@@ 2 @@
|
18
|
-
-空白
|
19
|
-
@@ 3 comment @@
|
20
|
-
-コメント
|
21
|
-
+Comment
|
22
|
-
@@ 5 @@
|
23
|
-
-以上
|
24
|
-
+--- end --
|
25
|
-
eos
|
26
|
-
@tags_file.rewind
|
27
|
-
@manager = TagManager.new(@tags_file.path)
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should accurately read a tag" do
|
31
|
-
@manager.all.should_not == nil
|
32
|
-
@manager[0].index.should == 0
|
33
|
-
@manager[0].original.should == "犬"
|
34
|
-
@manager[0].translated.should == "dog"
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should succeed reading multiple tags" do
|
38
|
-
@manager[1].index.should == 1
|
39
|
-
@manager[1].original.should == "何ですか。"
|
40
|
-
@manager[1].translated.should == "What is it?"
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should ignore blank translations" do
|
44
|
-
@manager[2].index.should == 2
|
45
|
-
@manager[2].original.should == "空白"
|
46
|
-
@manager[2].translated.should == nil
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should know whether a tag has been translated" do
|
50
|
-
@manager[0].translated?.should == true
|
51
|
-
@manager[2].translated?.should == false
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should ignore comments and additional info after an index tag" do
|
55
|
-
@manager[3].index.should == 3
|
56
|
-
@manager[3].original.should == "コメント"
|
57
|
-
@manager[3].translated.should == "Comment"
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should skip over blank indexes" do
|
61
|
-
@manager[4].index.should == 5
|
62
|
-
end
|
63
|
-
end
|