konjac 0.1.9.2 → 0.2
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/cli.rb +32 -9
- data/lib/konjac/dictionary.rb +2 -1
- data/lib/konjac/suggestor.rb +45 -0
- data/lib/konjac/version.rb +1 -1
- data/lib/konjac.rb +2 -0
- data/locales/en.yml +4 -1
- data/locales/ja.yml +12 -9
- metadata +33 -21
data/konjac.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
+
s.add_runtime_dependency "amatch"
|
22
23
|
s.add_runtime_dependency "i18n"
|
23
24
|
s.add_runtime_dependency "nokogiri"
|
24
25
|
s.add_runtime_dependency "sdoc"
|
data/lib/konjac/cli.rb
CHANGED
@@ -12,7 +12,8 @@ module Konjac
|
|
12
12
|
|
13
13
|
class << self
|
14
14
|
# A list of valid subcommands
|
15
|
-
SUB_COMMANDS = ["add", "edit", "export", "import", "language", "
|
15
|
+
SUB_COMMANDS = ["add", "edit", "export", "import", "language", "suggest",
|
16
|
+
"translate"]
|
16
17
|
|
17
18
|
# The banner to displaying when requesting help through the command line
|
18
19
|
BANNER = <<-eos
|
@@ -21,7 +22,7 @@ module Konjac
|
|
21
22
|
#{Color.bold "%s"}
|
22
23
|
|
23
24
|
#{Color.bold I18n.t :usage}
|
24
|
-
konjac %s [#{Color.underscore I18n.t :options}]
|
25
|
+
konjac %s [#{Color.underscore I18n.t :options}] %s
|
25
26
|
#{I18n.t(:where_options) % Color.underscore(I18n.t(:options))}
|
26
27
|
eos
|
27
28
|
|
@@ -34,6 +35,7 @@ eos
|
|
34
35
|
banner BANNER % [
|
35
36
|
I18n.t(:banner),
|
36
37
|
"[#{Color.underscore I18n.t :subcommand}]",
|
38
|
+
I18n.t(:filenames_or_word_arg),
|
37
39
|
"\n\n" + (I18n.t(:where_subcommand) % Color.underscore(I18n.t(:subcommand))) + ("\n%s\n" %
|
38
40
|
Konjac::CLI.describe_subcommands)
|
39
41
|
]
|
@@ -47,11 +49,11 @@ eos
|
|
47
49
|
# Get subcommand
|
48
50
|
cmd = ARGV.shift
|
49
51
|
ARGV << "-h" if ARGV.empty?
|
50
|
-
sc_banner = BANNER % [I18n.t(cmd, :scope => :subcommands), cmd, "\n"]
|
52
|
+
sc_banner = BANNER % [I18n.t(cmd, :scope => :subcommands), cmd, "%s", "\n"]
|
51
53
|
cmd_opts = case cmd
|
52
54
|
when "add"
|
53
55
|
opts = Trollop::options do
|
54
|
-
banner sc_banner
|
56
|
+
banner sc_banner % I18n.t(:filenames_arg)
|
55
57
|
opt :original, I18n.t(:original, :scope => :opts), :type => :string
|
56
58
|
opt :translation, I18n.t(:translation, :scope => :opts), :type => :string, :short => :r
|
57
59
|
opt :from, I18n.t(:from, :scope => :opts), :type => :string
|
@@ -63,14 +65,14 @@ eos
|
|
63
65
|
Dictionary.add_word opts
|
64
66
|
when "edit"
|
65
67
|
Trollop::options do
|
66
|
-
banner sc_banner
|
68
|
+
banner sc_banner % I18n.t(:filenames_arg)
|
67
69
|
opt :editor, I18n.t(:editor, :scope => :opts), :type => :string
|
68
70
|
opt :help, I18n.t(:help, :scope => :opts)
|
69
71
|
end
|
70
72
|
Word.edit_docx_tags ARGV, opts
|
71
73
|
when "export"
|
72
74
|
opts = Trollop::options do
|
73
|
-
banner sc_banner
|
75
|
+
banner sc_banner % I18n.t(:filenames_arg)
|
74
76
|
opt :from, I18n.t(:from, :scope => :opts), :type => :string
|
75
77
|
opt :to, I18n.t(:to, :scope => :opts), :type => :string
|
76
78
|
opt :using, I18n.t(:using, :scope => :opts), :type => :string,
|
@@ -80,20 +82,35 @@ eos
|
|
80
82
|
Word.export_docx_tags ARGV, opts
|
81
83
|
when "import"
|
82
84
|
Trollop::options do
|
83
|
-
banner sc_banner
|
85
|
+
banner sc_banner % I18n.t(:filenames_arg)
|
84
86
|
opt :help, I18n.t(:help, :scope => :opts)
|
85
87
|
end
|
86
88
|
Word.import_docx_tags ARGV
|
87
89
|
when "language"
|
88
90
|
Trollop::options do
|
89
|
-
banner sc_banner
|
91
|
+
banner sc_banner % I18n.t(:word_arg)
|
90
92
|
opt :help, I18n.t(:help, :scope => :opts)
|
91
93
|
end
|
92
94
|
Config.language = ARGV[0]
|
93
95
|
Config.save
|
96
|
+
when "suggest"
|
97
|
+
opts = Trollop::options do
|
98
|
+
banner sc_banner % I18n.t(:word_arg)
|
99
|
+
opt :from, I18n.t(:from, :scope => :opts), :type => :string
|
100
|
+
opt :to, I18n.t(:to, :scope => :opts), :type => :string
|
101
|
+
opt :using, I18n.t(:using, :scope => :opts), :type => :string,
|
102
|
+
:default => "dict", :multi => true
|
103
|
+
opt :use_cache, I18n.t(:use_cache, :scope => :opts),
|
104
|
+
:default => false, :short => :c
|
105
|
+
opt :help, I18n.t(:help, :scope => :opts)
|
106
|
+
end
|
107
|
+
results = suggest(ARGV[0].dup, opts)
|
108
|
+
results.each_with_index do |result, index|
|
109
|
+
puts "%i: %s (%i%%)" % [index + 1, result[2], result[0] * 100]
|
110
|
+
end
|
94
111
|
when "translate"
|
95
112
|
opts = Trollop::options do
|
96
|
-
banner sc_banner
|
113
|
+
banner sc_banner % I18n.t(:filenames_or_word_arg)
|
97
114
|
opt :from, I18n.t(:from, :scope => :opts), :type => :string
|
98
115
|
opt :to, I18n.t(:to, :scope => :opts), :type => :string
|
99
116
|
opt :using, I18n.t(:using, :scope => :opts), :type => :string,
|
@@ -126,6 +143,12 @@ eos
|
|
126
143
|
|
127
144
|
private
|
128
145
|
|
146
|
+
def suggest(word, opts = {})
|
147
|
+
to_lang = Language.find(opts[:to]).to_s
|
148
|
+
from_lang = Language.find(opts[:from]).to_s
|
149
|
+
Suggestor.new(from_lang, to_lang, opts).suggest word
|
150
|
+
end
|
151
|
+
|
129
152
|
# Parse commands to determine what should be translated and how
|
130
153
|
def translate(files, opts = {}) # :doc:
|
131
154
|
to_lang = Language.find(opts[:to]).to_s
|
data/lib/konjac/dictionary.rb
CHANGED
@@ -84,6 +84,7 @@ module Konjac
|
|
84
84
|
# create a regular expression in the dictionary file.
|
85
85
|
# Matching is case-insensitive unless the expression contains a
|
86
86
|
# capital letter.
|
87
|
+
from_fuzzy = from_term
|
87
88
|
unless from_term.is_a?(Regexp)
|
88
89
|
from_term = Regexp.new(from_template % from_term,
|
89
90
|
("i" unless from_term =~ /[A-Z]/))
|
@@ -91,7 +92,7 @@ module Konjac
|
|
91
92
|
|
92
93
|
to_term = to_template % to_term unless to_term =~ BLANK || no_space
|
93
94
|
|
94
|
-
return [ from_term, to_term ]
|
95
|
+
return [ from_term, to_term, from_fuzzy ]
|
95
96
|
end
|
96
97
|
end
|
97
98
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Konjac
|
2
|
+
# A class for suggesting translations
|
3
|
+
class Suggestor
|
4
|
+
# A list of all pairs available
|
5
|
+
attr_accessor :pairs
|
6
|
+
|
7
|
+
# The default suggested count
|
8
|
+
SUGGEST_COUNT = 10
|
9
|
+
|
10
|
+
# The default suggest cutoff
|
11
|
+
SUGGEST_CUTOFF = 0.5
|
12
|
+
|
13
|
+
# Creates a new Suggestor object
|
14
|
+
def initialize(from_lang, to_lang, opts = {})
|
15
|
+
@pairs = Dictionary.load(from_lang, to_lang, opts)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Provides suggested translations for a word, providing an array containing
|
19
|
+
# the pair distance, fuzzy match used and the suggested replacement
|
20
|
+
def suggest(word, opts = {})
|
21
|
+
# Set defaults for optional arguments
|
22
|
+
opts = {
|
23
|
+
:count => SUGGEST_COUNT,
|
24
|
+
:cutoff => SUGGEST_CUTOFF
|
25
|
+
}.merge opts
|
26
|
+
|
27
|
+
results = []
|
28
|
+
matcher = Amatch::PairDistance.new(word)
|
29
|
+
@pairs.each do |search, replace, fuzzy|
|
30
|
+
if fuzzy.is_a?(String)
|
31
|
+
value = matcher.match(fuzzy)
|
32
|
+
else
|
33
|
+
value = (search =~ word ? 1 : 0)
|
34
|
+
end
|
35
|
+
|
36
|
+
if (results.empty? || value > results[0][0]) && value >= opts[:cutoff]
|
37
|
+
results << [value, fuzzy, replace]
|
38
|
+
results.sort!
|
39
|
+
results.shift if results.length > opts[:count]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
results.reverse
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/konjac/version.rb
CHANGED
data/lib/konjac.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "konjac/version"
|
2
2
|
require "konjac/exception"
|
3
|
+
autoload :Amatch, "amatch"
|
3
4
|
autoload :FileUtils, "fileutils"
|
4
5
|
autoload :I18n, "i18n"
|
5
6
|
autoload :Nokogiri, "nokogiri"
|
@@ -12,6 +13,7 @@ module Konjac
|
|
12
13
|
autoload :Config, "konjac/config"
|
13
14
|
autoload :Dictionary, "konjac/dictionary"
|
14
15
|
autoload :Language, "konjac/language"
|
16
|
+
autoload :Suggestor, "konjac/suggestor"
|
15
17
|
autoload :Tag, "konjac/tag"
|
16
18
|
autoload :TagManager, "konjac/tag_manager"
|
17
19
|
autoload :Translator, "konjac/translator"
|
data/locales/en.yml
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
en:
|
2
2
|
banner: Konjac is a Ruby command-line utility for translating files using a YAML wordlist
|
3
|
-
|
3
|
+
filenames_arg: <filenames>+
|
4
|
+
filenames_or_word_arg: <filenames>+ OR <text>
|
4
5
|
me: Bryan McKelvey
|
5
6
|
options: options
|
6
7
|
subcommand: subcommand
|
@@ -8,6 +9,7 @@ en:
|
|
8
9
|
usage: "Usage:"
|
9
10
|
where_options: "where [%s] are:"
|
10
11
|
where_subcommand: "where [%s] is any one of:"
|
12
|
+
word_arg: <text>
|
11
13
|
opts:
|
12
14
|
dry_run: Don't actually do anything
|
13
15
|
editor: A command to run to pass the file to an editor (e.g. vi %s)
|
@@ -27,4 +29,5 @@ en:
|
|
27
29
|
export: Export text tags from a .docx file
|
28
30
|
import: Import text tags into a .docx file
|
29
31
|
language: Sets the default language
|
32
|
+
suggest: Suggest similar words using fuzzy matching
|
30
33
|
translate: Translate a file, word or phrase
|
data/locales/ja.yml
CHANGED
@@ -1,24 +1,26 @@
|
|
1
1
|
ja:
|
2
2
|
banner: KonjacはYAML辞書でファイルを翻訳するRubyのコマンドライン・ユーティリティです。
|
3
|
-
|
3
|
+
filenames_arg: <ファイル名>+
|
4
|
+
filenames_or_word_arg: <ファイル名>+ または <テキスト>
|
4
5
|
me: ブライアン・マッケルビー
|
5
6
|
options: オプション
|
6
7
|
subcommand: サブコマンド
|
7
8
|
unknown_subcommand: 不明なサブコマンド:%s
|
8
9
|
usage: 使い方:
|
9
|
-
where_options: "
|
10
|
-
where_subcommand: "
|
10
|
+
where_options: "使用可能な[%s]は、以下のとおりです:"
|
11
|
+
where_subcommand: "使用可能な[%s]は、以下のとおりです:"
|
12
|
+
word_arg: <テキスト>
|
11
13
|
opts:
|
12
|
-
dry_run:
|
14
|
+
dry_run: 実際には何も出力しない
|
13
15
|
editor: 結果ファイルをエディターで開くコマンド(例:vi %s)
|
14
|
-
from:
|
16
|
+
from: ソース言語
|
15
17
|
help: このメッセージを表示する
|
16
|
-
original:
|
18
|
+
original: ソーステキスト
|
17
19
|
quiet: エラーメッセージを抑止する
|
18
|
-
to:
|
19
|
-
translation:
|
20
|
+
to: ターゲット言語
|
21
|
+
translation: ターゲットテキスト
|
20
22
|
using: 使用したい辞書の名前
|
21
|
-
use_cache:
|
23
|
+
use_cache: キャッシュした翻訳メモリを適用する
|
22
24
|
version: バーションを表示し終了する
|
23
25
|
word: 文字列を翻訳する
|
24
26
|
subcommands:
|
@@ -27,4 +29,5 @@ ja:
|
|
27
29
|
export: .docxファイルからタグを抽出する
|
28
30
|
import: .docxファイルにタグをインポートする
|
29
31
|
language: 言語を設定する
|
32
|
+
suggest: Suggest similar words
|
30
33
|
translate: ファイル・文字列を翻訳する
|
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.
|
4
|
+
version: '0.2'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,9 +11,20 @@ bindir: bin
|
|
11
11
|
cert_chain: []
|
12
12
|
date: 2012-01-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: amatch
|
16
|
+
requirement: &70272603688640 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70272603688640
|
14
25
|
- !ruby/object:Gem::Dependency
|
15
26
|
name: i18n
|
16
|
-
requirement: &
|
27
|
+
requirement: &70272603688020 !ruby/object:Gem::Requirement
|
17
28
|
none: false
|
18
29
|
requirements:
|
19
30
|
- - ! '>='
|
@@ -21,10 +32,10 @@ dependencies:
|
|
21
32
|
version: '0'
|
22
33
|
type: :runtime
|
23
34
|
prerelease: false
|
24
|
-
version_requirements: *
|
35
|
+
version_requirements: *70272603688020
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: nokogiri
|
27
|
-
requirement: &
|
38
|
+
requirement: &70272603708460 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ! '>='
|
@@ -32,10 +43,10 @@ dependencies:
|
|
32
43
|
version: '0'
|
33
44
|
type: :runtime
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *70272603708460
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: sdoc
|
38
|
-
requirement: &
|
49
|
+
requirement: &70272603708020 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ! '>='
|
@@ -43,10 +54,10 @@ dependencies:
|
|
43
54
|
version: '0'
|
44
55
|
type: :runtime
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *70272603708020
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: term-ansicolor
|
49
|
-
requirement: &
|
60
|
+
requirement: &70272603707580 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
@@ -54,10 +65,10 @@ dependencies:
|
|
54
65
|
version: '0'
|
55
66
|
type: :runtime
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *70272603707580
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: trollop
|
60
|
-
requirement: &
|
71
|
+
requirement: &70272603707160 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ! '>='
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: '0'
|
66
77
|
type: :runtime
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *70272603707160
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: autotest
|
71
|
-
requirement: &
|
82
|
+
requirement: &70272603706740 !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: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *70272603706740
|
80
91
|
- !ruby/object:Gem::Dependency
|
81
92
|
name: autotest-fsevent
|
82
|
-
requirement: &
|
93
|
+
requirement: &70272603706300 !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: :development
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *70272603706300
|
91
102
|
- !ruby/object:Gem::Dependency
|
92
103
|
name: autotest-growl
|
93
|
-
requirement: &
|
104
|
+
requirement: &70272603705820 !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: :development
|
100
111
|
prerelease: false
|
101
|
-
version_requirements: *
|
112
|
+
version_requirements: *70272603705820
|
102
113
|
- !ruby/object:Gem::Dependency
|
103
114
|
name: bundler
|
104
|
-
requirement: &
|
115
|
+
requirement: &70272603705300 !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: *
|
123
|
+
version_requirements: *70272603705300
|
113
124
|
- !ruby/object:Gem::Dependency
|
114
125
|
name: rspec
|
115
|
-
requirement: &
|
126
|
+
requirement: &70272603704760 !ruby/object:Gem::Requirement
|
116
127
|
none: false
|
117
128
|
requirements:
|
118
129
|
- - ! '>='
|
@@ -120,7 +131,7 @@ dependencies:
|
|
120
131
|
version: '0'
|
121
132
|
type: :development
|
122
133
|
prerelease: false
|
123
|
-
version_requirements: *
|
134
|
+
version_requirements: *70272603704760
|
124
135
|
description: A Ruby command-line utility for translating files using a YAML wordlist
|
125
136
|
email:
|
126
137
|
- bryan.mckelvey@gmail.com
|
@@ -145,6 +156,7 @@ files:
|
|
145
156
|
- lib/konjac/dictionary.rb
|
146
157
|
- lib/konjac/exception.rb
|
147
158
|
- lib/konjac/language.rb
|
159
|
+
- lib/konjac/suggestor.rb
|
148
160
|
- lib/konjac/tag.rb
|
149
161
|
- lib/konjac/tag_manager.rb
|
150
162
|
- lib/konjac/translator.rb
|