ropencc 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: adaf5620e6399a717239d1a33c387d27d04697f3
4
+ data.tar.gz: e979d2ae3b6965605c2b3e7a1d8c15275bb2e715
5
+ SHA512:
6
+ metadata.gz: 54a7d7787c83f7978a186d16a90460c0d0af8f086c403d5461d23c6d04a5301d3521c5fa75ad2975b6154bde4da827bfe1bfc679cc2501ae3726c1186929710d
7
+ data.tar.gz: 658768813f7916feff7e102596bf3805b49504cc39af61cc3cbcf7a76bd9c9597936ae4073d93b132579520ab4f2c6bfe778ef1c937867490c865679181c114a
data/LICENSE ADDED
@@ -0,0 +1,27 @@
1
+ Copyright (c) 2013, Psi
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ - Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ - Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ - Neither the name of Thomas J Bradley nor the names of its contributors may
15
+ be used to endorse or promote products derived from this software without
16
+ specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md CHANGED
@@ -21,12 +21,14 @@ Install
21
21
  如果你正在使用Ubuntu 10.10 (Maverick) 以上的版本,opencc已經被加入到了官方源中,使用
22
22
 
23
23
  sudo apt-get install opencc
24
+ sudo apt-get install libopencc-dev
24
25
 
25
26
  如果你更願意體驗最新的版本,請使用ppa:
26
27
 
27
28
  sudo add-apt-repository ppa:byvoid-kcp/ppa
28
29
  sudo apt-get update
29
30
  sudo apt-get install opencc
31
+ sudo apt-get install libopencc-dev
30
32
 
31
33
 
32
34
  Mac OS X
@@ -44,17 +46,31 @@ Install
44
46
  Usage
45
47
  -----
46
48
 
47
- 简转繁
49
+ 简转繁 (Simple Interface)
48
50
 
49
51
  Ropencc.conv('simp_to_trad', str)
50
52
 
51
- 繁转简
53
+ 繁转简 (Simple Interface)
52
54
 
53
55
  Ropencc.conv('trad_to_simp', str)
54
56
 
57
+ 简转繁 (File-Class like Interface)
58
+
59
+ Ropencc.open 'zhs2zhtw_vp.ini' do |cc|
60
+ rs = cc.convert '新年快乐''
61
+ assert_equal '新年快樂', rs
62
+ end
63
+
64
+ 繁转简 (File-Class like Interface)
65
+
66
+ Ropencc.open 'zhtw2zhcn_s.ini' do |cc|
67
+ rs = cc.convert '新年快樂'
68
+ assert_equal '新年快乐', rs
69
+ end
70
+
55
71
 
56
72
  附:libopencc 作者简介
57
73
  --------------------
58
74
  BYVoid,清華大學計算機系二零一零級本科生,清華大學學生網絡管理委員會副會長,現於微軟亞洲研究院系統組實習。
59
75
 
60
- 出生於1991年末,年十九歲,河南安陽人。熱愛計算機科學、語言學、漢語音韻學。能說有入聲的老派安陽話,會用簡繁體流暢地閱讀書寫,能夠辨析漢字簡繁正異用法。認爲「正體字」不等於「臺灣正體字」,支持傳統正體字回歸主流,主張廢除簡體字, 希望陸、港、澳、臺、日、韓、越早日實現漢字統一。
76
+ 出生於1991年末,年十九歲,河南安陽人。熱愛計算機科學、語言學、漢語音韻學。能說有入聲的老派安陽話,會用簡繁體流暢地閱讀書寫,能夠辨析漢字簡繁正異用法。認爲「正體字」不等於「臺灣正體字」,支持傳統正體字回歸主流,主張廢除簡體字, 希望陸、港、澳、臺、日、韓、越早日實現漢字統一。
data/lib/ropencc.rb CHANGED
@@ -1,39 +1,93 @@
1
1
  # -*- encoding: utf-8 -*-
2
+
2
3
  require 'ffi'
3
- require "ropencc/version"
4
-
5
- module Ropencc
6
- module LibOpenCC
7
- extend FFI::Library
8
- ffi_lib 'opencc'
9
- attach_function :opencc_open, [:string], :pointer
10
- attach_function :opencc_close, [:pointer], :int
11
- attach_function :opencc_convert_utf8, [:pointer, :string, :int], :pointer
12
- attach_function :opencc_convert, [:pointer, :string, :int], :int
13
- attach_function :opencc_perror, [:string], :void
14
- attach_function :opencc_dict_load, [:pointer, :string, :int], :int
15
- end
16
- module LibC
17
- extend FFI::Library
18
- ffi_lib FFI::Library::LIBC
19
- attach_function :free, [:pointer], :void
20
- end # module LibC
21
-
22
- DICTS = {
23
- :simp_to_trad => ['simp_to_trad_characters.ocd','simp_to_trad_phrases.ocd','simp_to_trad_variant.ocd'],
24
- :trad_to_simp => ['trad_to_simp_characters.ocd','trad_to_simp_phrases.ocd','trad_to_simp_variant.ocd']
25
- }
26
-
27
- class << self
28
- def conv(dicttype, str)
29
- od = LibOpenCC.opencc_open nil
30
- DICTS[dicttype.to_sym].each { |dict| LibOpenCC.opencc_dict_load(od, dict, 1) }
31
- ptr = LibOpenCC.opencc_convert_utf8(od, str, str.bytesize)
32
- out_str = ptr.read_string
33
- LibC.free ptr
34
- LibOpenCC.opencc_close od
35
- out_str.force_encoding("UTF-8") if out_str.respond_to?(:force_encoding)
36
- out_str
4
+
5
+ class Ropencc
6
+ module LibOpenCC
7
+ extend FFI::Library
8
+ ffi_lib 'opencc'
9
+ attach_function :opencc_open, [:string], :pointer
10
+ attach_function :opencc_close, [:pointer], :int
11
+ attach_function :opencc_convert_utf8, [:pointer, :string, :int], :pointer
12
+ attach_function :opencc_convert, [:pointer, :string, :int], :int
13
+ attach_function :opencc_perror, [:string], :void
14
+ attach_function :opencc_dict_load, [:pointer, :string, :int], :int
15
+ end
16
+
17
+ module LibC
18
+ extend FFI::Library
19
+ ffi_lib FFI::Library::LIBC
20
+ attach_function :free, [:pointer], :void
21
+ end # module LibC
22
+
23
+ attr_accessor :descriptor
24
+
25
+ CONFIGS = ['zhs2zhtw_p.ini', 'zhs2zhtw_v.ini', 'zhs2zhtw_vp.ini', 'zht2zhtw_p.ini',
26
+ 'zht2zhtw_v.ini', 'zht2zhtw_vp.ini', 'zhtw2zhs.ini', 'zhtw2zht.ini',
27
+ 'zhtw2zhcn_s.ini', 'zhtw2zhcn_t.ini', 'zhs2zht.ini', 'zht2zhs.ini']
28
+
29
+ DICTS = {
30
+ :simp_to_trad => 'zhs2zhtw_vp.ini',
31
+ :trad_to_simp => 'zhtw2zhcn_s.ini'
32
+ }
33
+
34
+ def initialize(config_file)
35
+ @descriptor = LibOpenCC.opencc_open config_file
36
+ @is_open = true
37
+ end
38
+
39
+ private :initialize
40
+
41
+ def self.open(*args)
42
+ cc = new(*args)
43
+
44
+ return cc unless block_given?
45
+
46
+ begin
47
+ yield cc
48
+ ensure
49
+ begin
50
+ cc.close unless cc.closed?
51
+ rescue StandardError
52
+ # nothing, just swallow them
53
+ end
54
+ end
55
+ end
56
+
57
+ def self.conv(dicttype, str)
58
+ raise 'unknown simple conversion type' if DICTS.has_key?(dicttype)
59
+ od = LibOpenCC.opencc_open DICTS[dicttype.to_sym]
60
+ ptr = LibOpenCC.opencc_convert_utf8(od, str, str.bytesize)
61
+ out_str = ptr.read_string
62
+ LibC.free ptr
63
+ LibOpenCC.opencc_close od
64
+ out_str.force_encoding("UTF-8") if out_str.respond_to?(:force_encoding)
65
+ out_str
66
+
67
+ end
68
+
69
+ def convert(str)
70
+ if @is_open == false
71
+ raise IOError, 'not opened for conversion'
72
+ end
73
+
74
+ ptr = LibOpenCC.opencc_convert_utf8(@descriptor, str, str.bytesize)
75
+ out_str = ptr.read_string
76
+ LibC.free ptr
77
+ out_str.force_encoding("UTF-8") if out_str.respond_to?(:force_encoding)
78
+ out_str
79
+ end
80
+
81
+
82
+ def closed?
83
+ @is_open == false
84
+ end
85
+
86
+ def close
87
+ LibOpenCC.opencc_close @descriptor
88
+ @descriptor = nil
89
+ @is_open = false
90
+
91
+ return nil
37
92
  end
38
- end
39
93
  end
@@ -1,3 +1,3 @@
1
- module Ropencc
2
- VERSION = "0.0.4"
1
+ class Ropencc
2
+ VERSION = '0.0.5'
3
3
  end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ #$LOAD_PATH << File.expand_path(File.dirname(__FILE__) + '../lib')
4
+
5
+ require 'test/unit'
6
+ require '../lib/ropencc'
7
+
8
+ class RopenccTest < Test::Unit::TestCase
9
+ def test_ropencc_open
10
+ cc = Ropencc.open 'zhtw2zhcn_s.ini'
11
+ assert_not_nil cc, 'Ropencc.open should return a handle'
12
+ end
13
+
14
+ def test_ropencc_convert
15
+ Ropencc.open 'zhtw2zhcn_s.ini' do |cc|
16
+ rs = cc.convert '新年快樂'
17
+
18
+ assert_equal '新年快乐', rs
19
+ end
20
+ end
21
+
22
+ def test_ropencc_simple_conv
23
+ rs = Ropencc.conv 'trad_to_simp', '新年快樂'
24
+ assert_equal '新年快乐', rs
25
+ end
26
+ end
metadata CHANGED
@@ -1,64 +1,68 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ropencc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
5
- prerelease:
4
+ version: 0.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Psi
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2011-11-30 00:00:00.000000000 Z
11
+ date: 2014-11-03 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: ffi
16
- requirement: &2156308180 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '1.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *2156308180
25
- description: ! ' a project for conversion between Traditional and Simplified Chinese,
26
- wrapper in ruby. '
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ description: " a project for conversion between Traditional and Simplified Chinese,
28
+ wrapper in ruby. "
27
29
  email:
28
30
  - psi.xie@gmail.com
29
31
  executables: []
30
32
  extensions: []
31
33
  extra_rdoc_files: []
32
34
  files:
33
- - .gitignore
35
+ - ".gitignore"
34
36
  - Gemfile
37
+ - LICENSE
35
38
  - README.md
36
39
  - Rakefile
37
40
  - lib/ropencc.rb
38
41
  - lib/ropencc/version.rb
39
42
  - ropencc.gemspec
43
+ - test/test_ropencc.rb
40
44
  homepage: https://github.com/Psli/ropencc
41
45
  licenses: []
46
+ metadata: {}
42
47
  post_install_message:
43
48
  rdoc_options: []
44
49
  require_paths:
45
50
  - lib
46
51
  required_ruby_version: !ruby/object:Gem::Requirement
47
- none: false
48
52
  requirements:
49
- - - ! '>='
53
+ - - ">="
50
54
  - !ruby/object:Gem::Version
51
55
  version: '0'
52
56
  required_rubygems_version: !ruby/object:Gem::Requirement
53
- none: false
54
57
  requirements:
55
- - - ! '>='
58
+ - - ">="
56
59
  - !ruby/object:Gem::Version
57
60
  version: '0'
58
61
  requirements: []
59
62
  rubyforge_project:
60
- rubygems_version: 1.8.11
63
+ rubygems_version: 2.2.2
61
64
  signing_key:
62
- specification_version: 3
65
+ specification_version: 4
63
66
  summary: a project for conversion between Traditional and Simplified Chinese.
64
- test_files: []
67
+ test_files:
68
+ - test/test_ropencc.rb