sekka 0.9.0 → 0.9.1

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/bin/sekka-path CHANGED
@@ -2,13 +2,6 @@
2
2
  # -*- coding: utf-8 -*-
3
3
 
4
4
  require 'rubygems'
5
- arr = Gem.latest_load_paths.select { |x|
6
- x.match( /\/sekka[-]/ )
7
- }
5
+ require 'sekka/path'
8
6
 
9
- if 0 == arr.size
10
- STDERR.puts "Error: gem of sekka is not installed yet..."
11
- exit( 1 )
12
- else
13
- puts arr[0].sub( /\/lib$/, "" )
14
- end
7
+ puts SekkaPath.path
data/bin/sekka-server CHANGED
@@ -16,8 +16,9 @@ DICTURL = "http://sumibi.org/sekka/dict/" + SekkaVersion.version
16
16
  PIDFILE = DICTDIR + "/pid"
17
17
 
18
18
  TC_FILE = DICTDIR + "/SEKKA-JISYO.SMALL.tch"
19
+ TSVFILE = DICTDIR + "/SEKKA-JISYO.SMALL.tsv"
19
20
  SUMFILE = DICTDIR + "/SEKKA-JISYO.SMALL.md5"
20
- TC_URL = DICTURL + "/SEKKA-JISYO.SMALL.tch"
21
+ TSVURL = DICTURL + "/SEKKA-JISYO.SMALL.tsv"
21
22
  SUMURL = DICTURL + "/SEKKA-JISYO.SMALL.md5"
22
23
 
23
24
  TC_FILE_LIST = [ DICTDIR + "/SEKKA-JISYO.CUSTOM.tch",
@@ -50,7 +51,7 @@ def main
50
51
  if not File.exist?( TC_FILE )
51
52
  STDERR.printf( "Info: Downloading SEKKA-JISYO\n" )
52
53
  # 辞書をダウンロードする
53
- cmd = sprintf( "curl -o %s %s", TC_FILE, TC_URL )
54
+ cmd = sprintf( "curl -o %s %s", TSVFILE, TSVURL )
54
55
  STDERR.printf( "Command : %s\n", cmd )
55
56
  system( cmd )
56
57
  cmd = sprintf( "curl -o %s %s", SUMFILE, SUMURL )
@@ -59,7 +60,7 @@ def main
59
60
 
60
61
  # チェックサムを確認する
61
62
  downloadSum = ""
62
- open( TC_FILE ) { |f|
63
+ open( TSVFILE ) { |f|
63
64
  dataBody = f.read
64
65
  downloadSum = Digest::MD5.hexdigest( dataBody )
65
66
  }
@@ -68,13 +69,26 @@ def main
68
69
  STDERR.printf( " downloaded file's MD5 : %s\n", downloadSum )
69
70
  STDERR.printf( " correct MD5 : %s\n", correctSum )
70
71
  if downloadSum == correctSum
71
- STDERR.printf( "Info: downloaded file [%s] verify OK.\n", TC_FILE )
72
+ STDERR.printf( "Info: downloaded file [%s] verify OK.\n", TSVFILE )
72
73
  else
73
- STDERR.printf( "Error: downloaded file [%s] verify NG.\n", TC_FILE )
74
- File.unlink( TC_FILE )
74
+ STDERR.printf( "Error: downloaded file [%s] verify NG.\n", TSVFILE )
75
+ File.unlink( TSVFILE )
75
76
  exit( 1 )
76
77
  end
77
78
  }
79
+
80
+ # tsvファイルをTokyo CabinetのHashDB化する
81
+ STDERR.printf( "Info: Converting TSV file to Tokyo Cabinet *.tch\n" )
82
+ cmd = sprintf( "tchmgr importtsv %s %s", TC_FILE, TSVFILE )
83
+ STDERR.printf( "Command : %s\n", cmd )
84
+ system( cmd )
85
+
86
+ # 中身を確認する(tchmgrで読めるものができている)
87
+ STDERR.printf( "Info: inform *.tch\n" )
88
+ cmd = sprintf( "tchmgr inform %s", TC_FILE )
89
+ STDERR.printf( "Command : %s\n", cmd )
90
+ system( cmd )
91
+
78
92
  end
79
93
 
80
94
  # 辞書ディレクトリに存在している辞書ファイルリストを作る
data/emacs/sekka.el CHANGED
@@ -730,8 +730,10 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
730
730
 
731
731
  (define-key map "\C-s" 'popup-isearch)
732
732
  (define-key map "\C-g" 'popup-close)
733
+ (define-key map "\C-r" 'popup-select)
733
734
  map))
734
735
 
736
+
735
737
  ;; 選択操作回数のインクリメント
736
738
  (defun sekka-select-operation-inc ()
737
739
  (incf sekka-select-operation-times)
@@ -856,7 +858,8 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
856
858
  (sekka-debug-print (format "filtered-lst = %S\n" (reverse lst)))
857
859
  (if (null lst)
858
860
  nil
859
- (car (reverse lst)))))
861
+ (reverse lst))))
862
+
860
863
 
861
864
  ;; 指定された type の候補が存在するか調べる
862
865
  (defun sekka-include-typep ( _type )
@@ -865,7 +868,7 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
865
868
  ;; 指定された type の候補に強制的に切りかえる
866
869
  ;; 切りかえが成功したかどうかを t or nil で返す。
867
870
  (defun sekka-select-by-type ( _type )
868
- (let ((kouho (sekka-select-by-type-filter _type)))
871
+ (let ((kouho (car (sekka-select-by-type-filter _type))))
869
872
  (if (not kouho)
870
873
  (progn
871
874
  (cond
@@ -926,7 +929,7 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
926
929
 
927
930
 
928
931
  ;; 登録語リストからユーザーに該当単語を選択してもらう
929
- (defun sekka-add-new-word-sub (yomi lst)
932
+ (defun sekka-add-new-word-sub (yomi lst hiragana-lst)
930
933
  (let* ((etc "(自分で入力する)")
931
934
  (lst (if (stringp lst)
932
935
  (progn
@@ -934,7 +937,8 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
934
937
  '())
935
938
  lst))
936
939
  (result (popup-menu*
937
- (append lst `(,etc))
940
+ (append hiragana-lst
941
+ (append lst `(,etc)))
938
942
  :margin t
939
943
  :keymap sekka-popup-menu-keymap))
940
944
  (b (copy-marker sekka-fence-start))
@@ -948,6 +952,11 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
948
952
  (sekka-replace-kakutei-word (marker-position b)
949
953
  (marker-position e)
950
954
  tango)
955
+
956
+ (when (member result hiragana-lst) ;; 平仮名フレーズの場合
957
+ (setq yomi result)
958
+ (setq tango ""))
959
+
951
960
  ;; .sekka-jisyoとサーバーの両方に新しい単語を登録する
952
961
  (let ((added (sekka-add-new-word-to-jisyo sekka-jisyo-filename yomi tango)))
953
962
  (if added
@@ -961,15 +970,40 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
961
970
  "変換候補のよみ(平仮名)に対応する新しい単語を追加する"
962
971
  (interactive)
963
972
  (setq case-fold-search nil)
964
- (when (sekka-select-by-type 'h)
973
+ (let ((type
974
+ (cond
975
+ ((string-match-p "^[A-Z][^A-Z]+$" sekka-last-roman)
976
+ (if (sekka-select-by-type 'h) ;; 平仮名候補に自動切り替え
977
+ 'H
978
+ nil))
979
+ ((string-match-p "^[a-z][^A-Z]+$" sekka-last-roman)
980
+ 'h)
981
+ (t
982
+ nil))))
965
983
  (let* ((kouho (nth sekka-cand-cur sekka-henkan-kouho-list))
966
984
  (hiragana (car kouho)))
967
985
  (sekka-debug-print (format "sekka-register-new-word: sekka-last-roman=[%s] hiragana=%s result=%S\n" sekka-last-roman hiragana (string-match-p "^[A-Z][^A-Z]+$" sekka-last-roman)))
968
- (when (string-match-p "^[A-Z][^A-Z]+$" sekka-last-roman)
986
+ (cond
987
+ ;; 漢字語彙をgoogleimeで取得
988
+ ((eq 'H type)
969
989
  (sekka-select-kakutei)
970
990
  (sekka-add-new-word-sub
971
991
  hiragana
972
- (sekka-googleime-request hiragana))))))
992
+ (sekka-googleime-request hiragana)
993
+ '()))
994
+ ;; 平仮名フレーズから選択
995
+ ((eq 'h type)
996
+ (sekka-select-kakutei)
997
+ (let ((kouho (sekka-select-by-type-filter 'h)))
998
+ (sekka-debug-print (format "sekka-register-new-word: kouho=%S\n" kouho))
999
+ (sekka-add-new-word-sub
1000
+ hiragana
1001
+ '()
1002
+ (cons
1003
+ hiragana ;; 確定値の平仮名文言を先頭に追加。
1004
+ (mapcar
1005
+ (lambda (x) (car x)) kouho))))))
1006
+ )))
973
1007
 
974
1008
 
975
1009
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1145,11 +1179,16 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
1145
1179
  (setq e (point))
1146
1180
  (sekka-display-function b e nil)
1147
1181
  (sekka-select-kakutei)
1148
- (when sekka-use-googleime
1149
- (when (not (sekka-include-typep 'j))
1150
- (sekka-add-new-word)))
1151
- )))))
1152
-
1182
+ (cond
1183
+ ((string-match-p "^[A-Z][^A-Z]+$" sekka-last-roman)
1184
+ ;; 漢字語彙
1185
+ (when sekka-use-googleime
1186
+ (if (not (sekka-include-typep 'j))
1187
+ (sekka-add-new-word))))
1188
+ (t
1189
+ ;; 平仮名フレーズはGoogleIMEの問い合わせの自動起動はしない
1190
+ )))))))
1191
+
1153
1192
  ((sekka-kanji (preceding-char))
1154
1193
  (sekka-debug-print (format "sekka-kanji(%s) => t\n" (preceding-char)))
1155
1194
 
@@ -1295,6 +1334,12 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
1295
1334
  (define-key sticky-map sticky-key '(lambda ()(interactive)(insert sticky-key))))
1296
1335
 
1297
1336
 
1337
+ (defun sekka-insert-space (times)
1338
+ (if (null times)
1339
+ (insert " ")
1340
+ (dotimes(i times)
1341
+ (insert " "))))
1342
+
1298
1343
  (defun sekka-spacekey-init-function ()
1299
1344
  (define-key global-map (kbd "SPC")
1300
1345
  '(lambda (&optional arg)(interactive "P")
@@ -1302,21 +1347,16 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
1302
1347
  sekka-kakutei-with-spacekey)
1303
1348
  (cond
1304
1349
  ((string= " " (char-to-string (preceding-char)))
1305
- (insert " "))
1350
+ (sekka-insert-space arg))
1306
1351
  ((eq 10 (preceding-char)) ;; 直前に改行があった
1307
- (insert " "))
1352
+ (sekka-insert-space arg))
1308
1353
  ((string= "/" (char-to-string (preceding-char)))
1309
1354
  (delete-region (- (point) 1) (point))
1310
- (insert " "))
1355
+ (sekka-insert-space arg))
1311
1356
  (t
1312
1357
  (sekka-rK-trans))))
1313
1358
  (t
1314
- (cond
1315
- ((null arg)
1316
- (insert " "))
1317
- (t
1318
- (dotimes(i arg)
1319
- (insert " ")))))))))
1359
+ (sekka-insert-space arg))))))
1320
1360
 
1321
1361
 
1322
1362
  (defun sekka-realtime-guide ()
@@ -1490,7 +1530,7 @@ point から行頭方向に同種の文字列が続く間を漢字変換しま
1490
1530
  (setq default-input-method "japanese-sekka")
1491
1531
 
1492
1532
  (defconst sekka-version
1493
- "0.9.0" ;;SEKKA-VERSION
1533
+ "0.9.1" ;;SEKKA-VERSION
1494
1534
  )
1495
1535
  (defun sekka-version (&optional arg)
1496
1536
  "入力モード変更"
data/lib/sekka/henkan.nnd CHANGED
@@ -171,24 +171,32 @@
171
171
  (let ([num-list (to-list (keyword.scan #/[0-9]+/))]
172
172
  [replaced (keyword.gsub #/[0-9]+/ "#")])
173
173
  ;; 辞書引きした結果の # 部分を 再度数値に戻す。
174
- (let1 result (henkan-okuri-nashi userid kvs replaced limit)
175
- (map
176
- (lambda (entry)
177
- (let* ([type-list (to-list (. (car entry) scan #/[#][0-9]/))]
178
- [converted-list
179
- (map
180
- (lambda (_type _num)
181
- (sekka-henkan-sharp-number _type _num))
182
- type-list
183
- num-list)]
184
- [format-str (. (car entry) gsub #/[#][0-9]/ "%s")])
185
- (cons
186
- (apply sprintf
187
- (cons format-str
188
- converted-list))
189
- (append (drop-right (cdr entry) 1)
190
- (list 'n)))))
191
- result))))
174
+ (let* ([result1 (henkan-okuri-nashi userid kvs replaced limit)]
175
+ [result2 (map
176
+ (lambda (entry)
177
+ (let* ([type-list (to-list (. (car entry) scan #/[#][0-9]/))]
178
+ [converted-list
179
+ (map
180
+ (lambda (_type _num)
181
+ (sekka-henkan-sharp-number _type _num))
182
+ type-list
183
+ num-list)]
184
+ [format-str (. (car entry) gsub #/[#][0-9]/ "%s")])
185
+ ;; ユーザ入力クエリ中の数字のリストと辞書の中の # の個数がマッチしないといけない
186
+ (if (= (length num-list)
187
+ (length type-list))
188
+ (cons
189
+ (apply sprintf
190
+ (cons format-str
191
+ converted-list))
192
+ (append (drop-right (cdr entry) 1)
193
+ (list 'n)))
194
+ #f)))
195
+ result1)])
196
+ (filter
197
+ (lambda (x) x)
198
+ result2))))
199
+
192
200
 
193
201
 
194
202
  ;; 送り仮名ありの変換
@@ -185,7 +185,7 @@
185
185
  (kvs.open filename)
186
186
  (for-each
187
187
  (lambda (key)
188
- (f.puts (+ key " " (kvs.get key))))
188
+ (f.puts (+ key "\t" (kvs.get key))))
189
189
  (kvs.keys.sort))
190
190
  (kvs.close)))
191
191
 
data/lib/sekka/path.rb ADDED
@@ -0,0 +1,6 @@
1
+ class SekkaPath
2
+ def self.path
3
+ libsekka = File.dirname( __FILE__ )
4
+ File.expand_path( libsekka + "/../.." )
5
+ end
6
+ end
@@ -1,6 +1,6 @@
1
1
  class SekkaVersion
2
2
  include Singleton
3
3
  def self.version
4
- "0.9.0"
4
+ "0.9.1"
5
5
  end
6
6
  end
data/test/henkan-main.nnd CHANGED
@@ -566,6 +566,36 @@
566
566
  '(("1000〜2000" #f "#から#" n))
567
567
  (henkan-okuri-nashi-and-number userid kvs "1000kara2000" 0))
568
568
 
569
+ (test* "okuri nashi and number 8"
570
+ '(("2011年" #f "#ねん" n) ("2011年" #f "#ねん" n) ("二千十一年" #f "#ねん" n) ("二〇一一年" #f "#ねん" n))
571
+ (henkan-okuri-nashi-and-number userid kvs "2011nen" 0))
572
+
573
+ (test* "okuri nashi and number 9"
574
+ '(("10000年" #f "#ねん" n) ("10000年" #f "#ねん" n) ("一万年" #f "#ねん" n) ("一〇〇〇〇年" #f "#ねん" n))
575
+ (henkan-okuri-nashi-and-number userid kvs "10000nen" 0))
576
+
577
+ (test* "okuri nashi and number 10"
578
+ '(("2011年10月10日" #f "#ねん#がつ#にち" n) ("2011年10月10日" #f "#ねん#がつ#にち" n))
579
+ (henkan-okuri-nashi-and-number userid kvs "2011nen10gatu10ka" 0))
580
+
581
+ (test* "okuri nashi and number 11"
582
+ '()
583
+ (henkan-okuri-nashi-and-number userid kvs "2011nen10gatu" 0))
584
+
585
+ (test* "okuri nashi and number 12"
586
+ '(("10月10日" #f "#がつ#か" n) ("10月10日" #f "#がつ#か" n) ("一〇月一〇日" #f "#がつ#か" n) ("一〇月10日" #f "#がつ#か" n))
587
+ (henkan-okuri-nashi-and-number userid kvs "10gatu10ka" 0))
588
+
589
+ (test* "okuri nashi and number 13"
590
+ '()
591
+ (henkan-okuri-nashi-and-number userid kvs "10ka" 0))
592
+
593
+ (test* "okuri nashi and number 14"
594
+ '()
595
+ (henkan-okuri-nashi-and-number userid kvs "2011nen10ka" 0))
596
+
597
+
598
+
569
599
 
570
600
  ;;-------------------------------------------------------------------
571
601
  (test-section "henkan (number)")
@@ -1091,6 +1121,7 @@
1091
1121
  (sekkaHenkan userid kvs #f "3chi-mu" 0 "normal"))
1092
1122
 
1093
1123
 
1124
+
1094
1125
  ;;-------------------------------------------------------------------
1095
1126
  (test-section "henkan kakutei")
1096
1127
  (test* "henkan kakutei(for Elisp) 1"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sekka
3
3
  version: !ruby/object:Gem::Version
4
- hash: 59
4
+ hash: 57
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 0
10
- version: 0.9.0
9
+ - 1
10
+ version: 0.9.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kiyoka Nishiyama
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-24 00:00:00 Z
18
+ date: 2011-09-02 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rspec
@@ -259,6 +259,7 @@ files:
259
259
  - lib/sekka/henkan.nnd
260
260
  - lib/sekka/jisyo-db.nnd
261
261
  - lib/sekka/kvs.rb
262
+ - lib/sekka/path.rb
262
263
  - lib/sekka/roman-lib.nnd
263
264
  - lib/sekka/sekkaversion.rb
264
265
  - lib/sekka/sharp-number.nnd