sekka 1.4.0 → 1.5.0

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.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NjIyNDQ3NjBhZmM1MzhiNGVkMTE1MDY0N2EwM2NlOTkxMjgyMGVmNQ==
5
- data.tar.gz: !binary |-
6
- ODM2ZWIzMjRhYmJmNGNhMGQ4ZWRhMGVhMThhMDRiZGYzY2Y1OTRmNA==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- MTZlYTYwNTE2MzU4YTRjNjdlY2NlYzJmZWU5MmU3NmE4ZWViZmE2Mjg3Zjc5
10
- Yzc3MDcwZGYwZGUxNTE5YjZhMDZkMTlhMDJhNmQ4MGViZmJhYzFhYjgwNGQ1
11
- ZGE4NzFjNzMyOThlYjZhMzkyNmFmMjk5ZTVjODg3NjE1YTY3YWY=
12
- data.tar.gz: !binary |-
13
- NTgzMTY4MWM2NzNmYWI3MjY4ZThjZjliNjBmYjgxZGFmNTcyZmVmN2NlNjNi
14
- ZTcyMDM5ZjkyOTNiNmFjNDI3Mzg3MzJmOGQ5ZTg5ZmFiZjg2Mjk0YzZiMDU1
15
- NDRlOTdhMWMzN2U5NTY3YTQzMmEwN2RhMWJmZDEzNWQ4OTQwNGY=
2
+ SHA1:
3
+ metadata.gz: 63653bf0ea892633864db0ac60ca1e1d08023440
4
+ data.tar.gz: 18a98c08d61e515eaee30cc6ee1b499ee68a51c3
5
+ SHA512:
6
+ metadata.gz: 3a6b9dd120e4279405218ea7423af020f9a7baee09bd5aaf2a766b3f171c50eded38c5c64ccb9377df99a0cb4815f8bedf02d0ec96f73e27748a3e6cce6f209c
7
+ data.tar.gz: 5b5d025e73f0d48a1a877d15068ade452e76984cf8328fff13b391b4f723822699e4a623fdf281cb54772db64a1b9abe46c54949514c23b31bafcffab8502381
data/Rakefile CHANGED
@@ -12,17 +12,18 @@
12
12
  #
13
13
  # Enviroment Variables:
14
14
  # Please select from
15
- # DB=dbm
15
+ # DB=gdbm
16
16
  # DB=tokyocabinet
17
17
  # DB=redis
18
18
  # DB= (default)
19
- # DB=all dbm/tokyocabinet/redis
19
+ # DB=all gdbm/tokyocabinet/redis
20
20
  #
21
21
 
22
22
  require 'rake'
23
23
 
24
24
  # generate `normal' and `azik' dictionary
25
- generateTypes = [ "N", "A" ]
25
+ # (generateTypes = [ "N", "A" ])
26
+ generateTypes = [ "N" ]
26
27
 
27
28
  begin
28
29
  require 'jeweler2'
@@ -108,8 +109,8 @@ task :compile do
108
109
  end
109
110
 
110
111
  task :test do
111
- sh "ruby -I ./lib ./bin/sekka-path > /tmp/path1"
112
- path1 = open( "/tmp/path1" ) {|f|
112
+ sh "ruby -I ./lib ./bin/sekka-path > ./path1.tmp"
113
+ path1 = open( "./path1.tmp" ) {|f|
113
114
  f.readline.chomp
114
115
  }
115
116
  path2 = File.dirname( __FILE__ )
@@ -118,7 +119,9 @@ task :test do
118
119
  exit 1
119
120
  end
120
121
 
121
- sh "/bin/rm -f test.record test.tch"
122
+ ["test.record", "test.tch", "test.db" ].each {|name|
123
+ File.unlink( name ) if File.exist?( name )
124
+ }
122
125
  files = []
123
126
  files << "./test/memcache.nnd"
124
127
  files << "./test/util.nnd"
@@ -130,8 +133,8 @@ task :test do
130
133
  files << "./test/google-ime.nnd"
131
134
  STDERR.printf( "Info: env DB=%s\n", ENV['DB'] )
132
135
  case ENV['DB']
133
- when 'dbm'
134
- files << "./test/henkan-main.nnd dbm"
136
+ when 'gdbm'
137
+ files << "./test/henkan-main.nnd gdbm"
135
138
  when 'tokyocabinet'
136
139
  files << "./test/henkan-main.nnd tokyocabinet"
137
140
  when 'redis'
@@ -140,7 +143,7 @@ task :test do
140
143
  when 'pure'
141
144
  files << "./test/henkan-main.nnd pure"
142
145
  when 'all'
143
- files << "./test/henkan-main.nnd dbm"
146
+ files << "./test/henkan-main.nnd gdbm"
144
147
  files << "./test/henkan-main.nnd tokyocabinet"
145
148
  files << "./test/henkan-main.nnd redis"
146
149
  files << "./test/henkan-main.nnd pure"
@@ -149,8 +152,7 @@ task :test do
149
152
  files << "./test/henkan-main.nnd pure"
150
153
  end
151
154
  files.each {|filename|
152
- nendopath = `which nendo`.chomp
153
- sh sprintf( "ruby -I ./lib %s %s", nendopath, filename )
155
+ sh sprintf( "ruby -I ./lib -S nendo %s", filename )
154
156
  }
155
157
  sh "cat test.record"
156
158
  end
@@ -166,46 +168,46 @@ task :alljisyoL => [ :jisyoL, :loadL, :dumpL ]
166
168
 
167
169
  task :jisyoS do
168
170
  generateTypes.each {|x|
169
- sh "time ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.L.201008 > ./data/SEKKA-JISYO.SMALL.#{x}"
170
- sh "time ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.L.hira-kata >> ./data/SEKKA-JISYO.SMALL.#{x}"
171
- sh "time ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.hiragana-phrase >> ./data/SEKKA-JISYO.SMALL.#{x}"
172
- sh "time ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.hiragana-phrase2 >> ./data/SEKKA-JISYO.SMALL.#{x}"
171
+ sh "ruby ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.L.201008 > ./data/SEKKA-JISYO.SMALL.#{x}"
172
+ sh "ruby ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.L.hira-kata >> ./data/SEKKA-JISYO.SMALL.#{x}"
173
+ sh "ruby ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.hiragana-phrase >> ./data/SEKKA-JISYO.SMALL.#{x}"
174
+ sh "ruby ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.hiragana-phrase2 >> ./data/SEKKA-JISYO.SMALL.#{x}"
173
175
  }
174
176
  end
175
177
 
176
178
  task :jisyoL do
177
179
  generateTypes.each {|x|
178
- sh "time ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.L.201008 > ./data/SEKKA-JISYO.LARGE.#{x}"
179
- sh "time ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.L.hira-kata >> ./data/SEKKA-JISYO.LARGE.#{x}"
180
- sh "time ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.fullname >> ./data/SEKKA-JISYO.LARGE.#{x}"
181
- sh "time ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.jinmei >> ./data/SEKKA-JISYO.LARGE.#{x}"
182
- sh "time ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.station >> ./data/SEKKA-JISYO.LARGE.#{x}"
183
- sh "time ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.hiragana-phrase >> ./data/SEKKA-JISYO.LARGE.#{x}"
184
- sh "time ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.hiragana-phrase2 >> ./data/SEKKA-JISYO.LARGE.#{x}"
180
+ sh "ruby ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.L.201008 > ./data/SEKKA-JISYO.LARGE.#{x}"
181
+ sh "ruby ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.L.hira-kata >> ./data/SEKKA-JISYO.LARGE.#{x}"
182
+ sh "ruby ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.fullname >> ./data/SEKKA-JISYO.LARGE.#{x}"
183
+ sh "ruby ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.jinmei >> ./data/SEKKA-JISYO.LARGE.#{x}"
184
+ sh "ruby ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.station >> ./data/SEKKA-JISYO.LARGE.#{x}"
185
+ sh "ruby ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.hiragana-phrase >> ./data/SEKKA-JISYO.LARGE.#{x}"
186
+ sh "ruby ./bin/sekka-jisyo convert#{x} ./data/SKK-JISYO.hiragana-phrase2 >> ./data/SEKKA-JISYO.LARGE.#{x}"
185
187
  }
186
188
  end
187
189
 
188
190
  task :loadS do
189
191
  generateTypes.each {|x|
190
- sh "time ./bin/sekka-jisyo load ./data/SEKKA-JISYO.SMALL.#{x} ./data/SEKKA-JISYO.SMALL.#{x}.tch"
192
+ sh "ruby ./bin/sekka-jisyo load ./data/SEKKA-JISYO.SMALL.#{x} ./data/SEKKA-JISYO.SMALL.#{x}.tch"
191
193
  }
192
194
  end
193
195
 
194
196
  task :loadL do
195
197
  generateTypes.each {|x|
196
- sh "time ./bin/sekka-jisyo load ./data/SEKKA-JISYO.LARGE.#{x} ./data/SEKKA-JISYO.LARGE.#{x}.tch"
198
+ sh "ruby ./bin/sekka-jisyo load ./data/SEKKA-JISYO.LARGE.#{x} ./data/SEKKA-JISYO.LARGE.#{x}.tch"
197
199
  }
198
200
  end
199
201
 
200
202
  task :dumpS do
201
203
  generateTypes.each {|x|
202
- sh "time ./bin/sekka-jisyo dump ./data/SEKKA-JISYO.SMALL.#{x}.tch > ./data/SEKKA-JISYO.SMALL.#{x}.tsv"
204
+ sh "ruby ./bin/sekka-jisyo dump ./data/SEKKA-JISYO.SMALL.#{x}.tch > ./data/SEKKA-JISYO.SMALL.#{x}.tsv"
203
205
  }
204
206
  end
205
207
 
206
208
  task :dumpL do
207
209
  generateTypes.each {|x|
208
- sh "time ./bin/sekka-jisyo dump ./data/SEKKA-JISYO.LARGE.#{x}.tch > ./data/SEKKA-JISYO.LARGE.#{x}.tsv"
210
+ sh "ruby ./bin/sekka-jisyo dump ./data/SEKKA-JISYO.LARGE.#{x}.tch > ./data/SEKKA-JISYO.LARGE.#{x}.tsv"
209
211
  }
210
212
  end
211
213
 
data/VERSION.yml CHANGED
@@ -1,5 +1,4 @@
1
1
  ---
2
2
  :major: 1
3
- :minor: 4
3
+ :minor: 5
4
4
  :patch: 0
5
-
data/bin/sekka-jisyo CHANGED
@@ -48,8 +48,9 @@ core.evalStr( <<";;END-OF-SCRIPT" )
48
48
  (let1 lines (with-open
49
49
  filename
50
50
  (lambda (f)
51
- (convert-skk-jisyo-f f)))
52
- (for-each print lines)))
51
+ (convert-skk-jisyo-f f))
52
+ "r:UTF-8")
53
+ (for-each print lines)))
53
54
 
54
55
 
55
56
  (define (load-sekka-jisyo sekka-file target)
@@ -59,7 +60,8 @@ core.evalStr( <<";;END-OF-SCRIPT" )
59
60
  (load-sekka-jisyo-f
60
61
  f
61
62
  (target.gsub #/[.]db$/ "") ;; drop ".db" suffix
62
- ))))
63
+ )))
64
+ "r:UTF-8")
63
65
 
64
66
 
65
67
  (define (dump-sekka-jisyo sekka-file)
@@ -72,7 +74,8 @@ core.evalStr( <<";;END-OF-SCRIPT" )
72
74
  (lambda (f)
73
75
  (restore-sekka-jisyo-f
74
76
  f
75
- target))))
77
+ target)))
78
+ "r:UTF-8")
76
79
 
77
80
 
78
81
  (define (display-help)
@@ -80,11 +83,11 @@ core.evalStr( <<";;END-OF-SCRIPT" )
80
83
  (print " sekka-jisyo convertA SKK-JISYO.X > SEKKA-JISYO.X ... output SEKKA-JISYO to STDOUT(AZIK data included)")
81
84
  (print " sekka-jisyo convertN SKK-JISYO.X > SEKKA-JISYO.X ... output SEKKA-JISYO to STDOUT(AZIK data excluded)")
82
85
  (print " sekka-jisyo load SEKKA-JISYO.X SEKKA-JISYO.X.tch ... load SEKKA-JISYO to Tokyo Cabinet DB")
83
- (print " sekka-jisyo load SEKKA-JISYO.X SEKKA-JISYO.X.db ... load SEKKA-JISYO to ndbm DB")
86
+ (print " sekka-jisyo load SEKKA-JISYO.X SEKKA-JISYO.X.db ... load SEKKA-JISYO to gdbm DB")
84
87
  (print " sekka-jisyo load SEKKA-JISYO.X redis:[hostname] ... load SEKKA-JISYO to redis DB on [hostname]")
85
88
  (print " sekka-jisyo load SEKKA-JISYO.X redis: ... load SEKKA-JISYO to redis DB on localhost")
86
89
  (print " sekka-jisyo dump SEKKA-JISYO.X.tch ... dump Tokyo Cabinet DB to DUMPDATA(STDOUT)")
87
- (print " sekka-jisyo dump SEKKA-JISYO.X.db ... dump ndbm to DUMPDATA(STDOUT)")
90
+ (print " sekka-jisyo dump SEKKA-JISYO.X.db ... dump gdbm to DUMPDATA(STDOUT)")
88
91
  (print " sekka-jisyo dump redis:[hostname] ... dump redis DB on [hostname] to DUMPDATA(STDOUT)")
89
92
  (print " sekka-jisyo dump redis: ... dump redis DB on localhost to DUMPDATE(STDOUT)")
90
93
  (print " sekka-jisyo restore SEKKA-JISYO.X.tsv SEKKA-JISYO.X.tch ... restore Tokyo Cabinet DB from tsv-file")
@@ -97,7 +100,7 @@ core.evalStr( <<";;END-OF-SCRIPT" )
97
100
  ((rxmatch #/[.]tch/ filename)
98
101
  (values 'tokyocabinet filename))
99
102
  ((rxmatch #/[.]db$/ filename)
100
- (values 'dbm filename))
103
+ (values 'gdbm filename))
101
104
  ((rxmatch #/^redis:(.*)$/ filename)
102
105
  => (lambda (m)
103
106
  (let1 str (rxmatch-substring m 1)
data/bin/sekka-server CHANGED
@@ -22,7 +22,11 @@ if ENV.has_key?( 'SEKKA_AZIK' )
22
22
  end
23
23
 
24
24
  DICTSIZE = if ENV.has_key?( 'SEKKA_LARGE' )
25
- "LARGE"
25
+ if 1 == ENV[ 'SEKKA_LARGE' ].to_i
26
+ "LARGE"
27
+ else
28
+ "SMALL"
29
+ end
26
30
  else
27
31
  "SMALL"
28
32
  end
@@ -32,6 +36,9 @@ TC_FILE = DICTDIR + "/SEKKA-JISYO.#{DICTSIZE}.#{DICTTYPE}.tch" + TC_OPTS
32
36
  TSVFILE = DICTDIR + "/SEKKA-JISYO.#{DICTSIZE}.#{DICTTYPE}.tsv"
33
37
  SUMFILE = DICTDIR + "/SEKKA-JISYO.#{DICTSIZE}.#{DICTTYPE}.md5"
34
38
 
39
+ GDBM_FILE = DICTDIR + "/SEKKA-JISYO.#{DICTSIZE}.#{DICTTYPE}.db"
40
+
41
+
35
42
  URLURL = DICTURL + "/SEKKA-JISYO.#{DICTSIZE}.#{DICTTYPE}.url"
36
43
  SUMURL = DICTURL + "/SEKKA-JISYO.#{DICTSIZE}.#{DICTTYPE}.md5"
37
44
 
@@ -49,6 +56,8 @@ def getSekkaDbInfo( env )
49
56
  [ :redis, dictSource ]
50
57
  elsif m = ENV['SEKKA_DB'].match( /^tokyo[a-z]+$/ )
51
58
  [ :tokyocabinet, nil ]
59
+ elsif m = ENV['SEKKA_DB'].match( /^gdbm$/i )
60
+ [ :gdbm, nil ]
52
61
  else
53
62
  raise RuntimeError, "Error: env var SEKKA_DB requires [redis:hostname] or [redis:] or [tokyocabinet]"
54
63
  end
@@ -62,6 +71,13 @@ def checkJisyoIsInstalled( dictType, dictSource )
62
71
  STDERR.printf( "Info: Checking SEKKA jisyo on #{dictType} server...\n" )
63
72
  begin
64
73
  result = case dictType
74
+ when :gdbm
75
+ require 'sekka/kvs'
76
+ tc = Kvs.new( :gdbm )
77
+ tc.open( dictSource )
78
+ ret = tc.get( key )
79
+ tc.close()
80
+ ret
65
81
  when :tokyocabinet
66
82
  require 'tokyocabinet'
67
83
  require 'sekka/kvs'
@@ -147,6 +163,19 @@ def main
147
163
  ( dictType, dictSource ) = getSekkaDbInfo( ENV )
148
164
 
149
165
  case dictType
166
+ when :gdbm
167
+ # GDBMに辞書が投入済みか確認する
168
+ ok = checkJisyoIsInstalled( dictType, GDBM_FILE )
169
+ unless ok
170
+ # tsvファイルをuploadする
171
+ STDERR.printf( "Info: Uploading...\n" )
172
+ cmd = sprintf( "sekka-jisyo restore %s %s", TSVFILE, GDBM_FILE )
173
+ STDERR.printf( "Command : %s\n", cmd )
174
+ system( cmd )
175
+ end
176
+ STDERR.printf( "Info: [OK]\n" )
177
+ dictSource = GDBM_FILE
178
+
150
179
  when :tokyocabinet
151
180
  # TokyoCabinetに辞書が投入済みか確認する
152
181
  ok = checkJisyoIsInstalled( dictType, TC_FILE )
data/emacs/sekka.el CHANGED
@@ -77,7 +77,7 @@
77
77
  :type 'integer
78
78
  :group 'sekka)
79
79
 
80
- (defcustom sekka-realtime-guide-limit-lines 5
80
+ (defcustom sekka-realtime-guide-limit-lines 3
81
81
  "最後に変換した行から N 行離れたらリアルタイムガイド表示が止まる"
82
82
  :type 'integer
83
83
  :group 'sekka)
@@ -280,14 +280,16 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
280
280
 
281
281
 
282
282
  (defun sekka-construct-curl-argstr (arg-alist)
283
- (apply 'concat
284
- (mapcar
285
- (lambda (x)
286
- (format "--data '%s=%s' " (car x)
287
- (if (stringp (cdr x))
288
- (http-url-encode (cdr x) 'utf-8)
289
- (cdr x))))
290
- arg-alist)))
283
+ (apply
284
+ 'append
285
+ (mapcar
286
+ (lambda (x)
287
+ (list "--data" (format "%s=%s"
288
+ (car x)
289
+ (if (stringp (cdr x))
290
+ (http-url-encode (cdr x) 'utf-8)
291
+ (cdr x)))))
292
+ arg-alist)))
291
293
 
292
294
  ;; test-code
293
295
  (when nil
@@ -296,7 +298,8 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
296
298
  ("yomi" . "kanji")
297
299
  ("limit" . 2)
298
300
  ("method" . "normal")
299
- )))
301
+ ))
302
+ )
300
303
 
301
304
 
302
305
  ;;
@@ -345,16 +348,63 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
345
348
  (sekka-next-sekka-server)
346
349
  nil)
347
350
  result)))
351
+ (let ((arg-alist
352
+ (cons
353
+ `(userid . ,sekka-login-name)
354
+ arg-alist)))
355
+ (or
356
+ (one-request func-name arg-alist)
357
+ (one-request func-name arg-alist)
358
+ (one-request func-name arg-alist)
359
+ (concat
360
+ "Error: All sekka-server are down. "
361
+ " " sekka-server-url
362
+ " " sekka-server-url-2
363
+ " " sekka-server-url-3))))
364
+
365
+ (defun sekka-rest-request-by-curl (func-name arg-alist)
366
+ (let* ((lst
367
+ (append
368
+ (if (< 0 (length sekka-no-proxy-hosts))
369
+ (list "--noproxy" sekka-no-proxy-hosts)
370
+ nil)
371
+ (sekka-construct-curl-argstr (cons
372
+ '(format . "sexp")
373
+ arg-alist))))
374
+ (buffername "*sekka-output*")
375
+ (result ""))
376
+ (sekka-debug-print (format "arg-lst :[%S]\n" lst))
377
+ (progn
378
+ (apply
379
+ 'call-process
380
+ sekka-curl
381
+ nil buffername nil
382
+ "--silent" "--show-error"
383
+ "--max-time" (format "%d" sekka-server-timeout)
384
+ "--insecure"
385
+ "--header" "Content-Type: application/x-www-form-urlencoded"
386
+ (concat current-sekka-server-url func-name)
387
+ lst)
388
+ (setq result
389
+ (with-current-buffer buffername
390
+ (buffer-substring-no-properties (point-min) (point-max))))
391
+ (kill-buffer buffername)
392
+ result)))
393
+
348
394
 
349
- (or
350
- (one-request func-name arg-alist)
351
- (one-request func-name arg-alist)
352
- (one-request func-name arg-alist)
353
- (concat
354
- "Error: All sekka-server are down. "
355
- " " sekka-server-url
356
- " " sekka-server-url-2
357
- " " sekka-server-url-3)))
395
+ (when nil
396
+ ;; unit test
397
+ (setq sekka-curl "curl")
398
+ (setq sekka-login-name (user-login-name))
399
+ (setq current-sekka-server-url "http://localhost:12929/")
400
+ (sekka-rest-request-by-curl
401
+ "henkan"
402
+ '(
403
+ ("yomi" . "Nihon")
404
+ (limit . "1")
405
+ (method . "normal")
406
+ ("userid" . "kiyoka")))
407
+ )
358
408
 
359
409
 
360
410
 
@@ -374,31 +424,8 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
374
424
  ;; "(\"初回起動\", \"諸快気堂\", \"諸開基堂\", \"しょかいきどう\", \"ショカイキドウ\")"
375
425
  ))
376
426
  ;; 実際のサーバに接続する
377
- (let ((command
378
- (concat
379
- sekka-curl " --silent --show-error "
380
- (if (< 0 (length sekka-no-proxy-hosts))
381
- (concat " --noproxy " sekka-no-proxy-hosts)
382
- "")
383
- (format " --max-time %d " sekka-server-timeout)
384
- " --insecure "
385
- " --header 'Content-Type: application/x-www-form-urlencoded' "
386
- (format "%s%s " current-sekka-server-url func-name)
387
- (sekka-construct-curl-argstr (cons
388
- '("format" . "sexp")
389
- arg-alist))
390
- (format "--data 'userid=%s' " sekka-login-name))))
391
-
392
- (sekka-debug-print (format "curl-command :%s\n" command))
393
-
394
- (let (
395
- (result
396
- (shell-command-to-string
397
- command)))
398
-
399
- (sekka-debug-print (format "curl-result-sexp :%s\n" result))
400
- result))))
401
-
427
+ (sekka-rest-request-by-curl func-name arg-alist)))
428
+
402
429
  ;;
403
430
  ;; 現在時刻をUNIXタイムを返す(単位は秒)
404
431
  ;;
@@ -422,7 +449,7 @@ non-nil で明示的に呼びだすまでGoogleIMEは起動しない。"
422
449
 
423
450
  (let (
424
451
  (result (sekka-rest-request "henkan" `((yomi . ,yomi)
425
- (limit . ,limit)
452
+ (limit . ,(format "%d" limit))
426
453
  (method . ,sekka-roman-method)))))
427
454
  (sekka-debug-print (format "henkan-result:%S\n" result))
428
455
  (if (eq (string-to-char result) ?\( )
@@ -1621,7 +1648,7 @@ point から行頭方向に同種の文字列が続く間を漢字変換しま
1621
1648
  (setq default-input-method "japanese-sekka")
1622
1649
 
1623
1650
  (defconst sekka-version
1624
- "1.4.0" ;;SEKKA-VERSION
1651
+ "1.5.0" ;;SEKKA-VERSION
1625
1652
  )
1626
1653
  (defun sekka-version (&optional arg)
1627
1654
  "入力モード変更"
@@ -252,6 +252,7 @@
252
252
  [output . ,STDERR]
253
253
  [format . ,progressbar-format]
254
254
  )))])
255
+ (f.set_encoding "utf-8" "utf-8")
255
256
  (kvs.open filename-or-hostname)
256
257
  (kvs.clear)
257
258
  (restore f kvs progress)
data/lib/sekka/kvs.rb CHANGED
@@ -49,11 +49,11 @@ class Kvs
49
49
  @redisFlag = false
50
50
  end
51
51
 
52
- @dbmFlag = true
52
+ @gdbmFlag = true
53
53
  begin
54
- require 'dbm'
54
+ require 'gdbm'
55
55
  rescue LoadError
56
- @dbmFlag = false
56
+ @gdbmFlag = false
57
57
  end
58
58
 
59
59
  @dbtype = dbtype
@@ -73,11 +73,11 @@ class Kvs
73
73
  when :memcache
74
74
  # do nothing
75
75
 
76
- when :dbm
77
- if @dbmFlag
76
+ when :gdbm
77
+ if @gdbmFlag
78
78
  # do nothing
79
79
  else
80
- raise RuntimeError, "Kvs.new() missed require( 'dbm' )."
80
+ raise RuntimeError, "Kvs.new() missed require( 'gdbm' )."
81
81
  end
82
82
 
83
83
  # do nothing
@@ -101,8 +101,11 @@ class Kvs
101
101
  @db = MemCache.new( name,
102
102
  :connect_timeout => 1000.0,
103
103
  :timeout => 1000.0 )
104
- when :dbm
105
- @db = DBM.new( name )
104
+ when :gdbm
105
+ if not name.match( /.db$/ )
106
+ name = name + ".db"
107
+ end
108
+ @db = GDBM.new( name, nil, GDBM::FAST | GDBM::WRCREAT )
106
109
  when :pure
107
110
  @name = name
108
111
  if File.exist?( @name )
@@ -138,7 +141,7 @@ class Kvs
138
141
  def pure_put!( key, value, timeout = 0 )
139
142
  if 0 < key.size
140
143
  case @dbtype
141
- when :tokyocabinet, :dbm, :redis
144
+ when :tokyocabinet, :gdbm, :redis
142
145
  @db[ key.force_encoding("ASCII-8BIT") ] = value.force_encoding("ASCII-8BIT")
143
146
  when :memcache
144
147
  @db.set( key.force_encoding("ASCII-8BIT"), value.force_encoding("ASCII-8BIT"), timeout )
@@ -176,7 +179,7 @@ class Kvs
176
179
 
177
180
  def clear()
178
181
  case @dbtype
179
- when :tokyocabinet, :dbm, :pure
182
+ when :tokyocabinet, :gdbm, :pure
180
183
  @db.clear
181
184
  when :redis
182
185
  @db.flushall
@@ -190,7 +193,7 @@ class Kvs
190
193
  # return array of key string
191
194
  def keys()
192
195
  case @dbtype
193
- when :tokyocabinet, :dbm, :redis
196
+ when :tokyocabinet, :gdbm, :redis
194
197
  @db.keys.map { |k|
195
198
  k.force_encoding("UTF-8")
196
199
  }
@@ -215,7 +218,7 @@ class Kvs
215
218
  }
216
219
  when :memcache
217
220
  raise RuntimeError, "Kvs#forward_match_keys method was not implemented for memcache."
218
- when :dbm, :pure
221
+ when :gdbm, :pure
219
222
  self.keys( ).select {|key|
220
223
  key.match( "^" + prefix )
221
224
  }
@@ -226,7 +229,7 @@ class Kvs
226
229
 
227
230
  def close()
228
231
  case @dbtype
229
- when :tokyocabinet, :dbm
232
+ when :tokyocabinet, :gdbm
230
233
  @db.close
231
234
  when :memcache, :redis
232
235
  # do nothing
@@ -1,4 +1,4 @@
1
1
  class SekkaVersion
2
- def self.version() "1.4.0" end
2
+ def self.version() "1.5.0" end
3
3
  def self.dictVersion() "1.4.0" end
4
4
  end
data/lib/sekkaserver.rb CHANGED
@@ -37,7 +37,6 @@
37
37
  require 'rack'
38
38
  require 'nendo'
39
39
  require 'eventmachine'
40
- require 'syslog'
41
40
  require 'uri'
42
41
  require 'date'
43
42
  require 'sekkaconfig'
@@ -51,7 +50,13 @@ module SekkaServer
51
50
  @core = Nendo::Core.new()
52
51
  @core.loadInitFile
53
52
  @core.disableRuntimeCheck( )
54
- @core.evalStr( "(use debug.syslog)" )
53
+ begin
54
+ require 'syslog'
55
+ @core.evalStr( "(use debug.syslog)" )
56
+ rescue LoadError
57
+ STDERR.printf( "Sekka Warning: this platform does not support 'syslog'...\n" )
58
+ @core.evalStr( "(use debug.null)" )
59
+ end
55
60
  @core.evalStr( "(use sekka.henkan)" )
56
61
  @core.evalStr( '(define (writeToString sexp) (write-to-string sexp))' )
57
62
  @core.evalStr( '(export-to-ruby writeToString)' )
@@ -58,7 +58,7 @@
58
58
 
59
59
 
60
60
  ;;-------------------------------------------------------------------
61
- (let1 kvs (Kvs.new 'dbm)
61
+ (let1 kvs (Kvs.new 'gdbm)
62
62
  (kvs.open "./test")
63
63
 
64
64
  (bench-task #f
data/test/henkan-main.nnd CHANGED
@@ -54,7 +54,7 @@
54
54
  (set! target "./test.tch"))
55
55
  ((eq? dbtype 'redis)
56
56
  (set! target "localhost"))
57
- ((eq? dbtype 'dbm)
57
+ ((eq? dbtype 'gdbm)
58
58
  (set! target "./test"))
59
59
  ((eq? dbtype 'pure)
60
60
  (set! target "./test.dump"))
@@ -70,22 +70,23 @@
70
70
  (with-open "./test/skk-jisyo-in-1.txt"
71
71
  (lambda (_input)
72
72
  (let1 sekka-jisyo-data
73
- (with-open "./test/sekka-jisyo-out-1.txt"
74
- (lambda (f)
75
- (read f)))
76
-
77
- (test* "Create test jisyo"
78
- sekka-jisyo-data
79
- (convert-skk-jisyo-f _input))
80
-
81
- (test* "default KVS type" 'tokyocabinet (get-kvs-type))
82
-
83
- (set-kvs-type dbtype)
84
- (test* "changed KVS type" dbtype (get-kvs-type))
85
-
86
- (let1 sio (StringIO.new (string-join sekka-jisyo-data "\n"))
87
- (sio.set_encoding "utf-8")
88
- (load-sekka-jisyo-f sio target)))))
73
+ (with-open #?="./test/sekka-jisyo-out-1.txt"
74
+ (lambda (f)
75
+ (read f))
76
+ "r:UTF-8")
77
+ (test* "Create test jisyo"
78
+ sekka-jisyo-data
79
+ (convert-skk-jisyo-f _input))
80
+
81
+ (test* "default KVS type" 'tokyocabinet (get-kvs-type))
82
+
83
+ (set-kvs-type #?=dbtype)
84
+ (test* "changed KVS type" dbtype (get-kvs-type))
85
+
86
+ (let1 sio (StringIO.new (string-join sekka-jisyo-data "\n"))
87
+ (sio.set_encoding "utf-8")
88
+ (load-sekka-jisyo-f sio target))))
89
+ "r:UTF-8")
89
90
 
90
91
 
91
92
  ;;-------------------------------------------------------------------
@@ -98,7 +99,7 @@
98
99
  (_output2.set_encoding "utf-8")
99
100
  (when (or (eq? dbtype 'tokyocabinet)
100
101
  (eq? dbtype 'redis)
101
- (eq? dbtype 'dbm)
102
+ (eq? dbtype 'gdbm)
102
103
  (eq? dbtype 'pure))
103
104
  (begin
104
105
  (test-section "dump db")
@@ -126,7 +127,9 @@
126
127
  (lambda (f) (f.write (_output2.string)))
127
128
  "w")
128
129
  (Digest::MD5.hexdigest
129
- (_output2.string)))))))))
130
+ (_output2.string))))))))
131
+ "r:UTF-8")
132
+
130
133
 
131
134
 
132
135
 
@@ -140,9 +143,9 @@
140
143
  ((eq? dbtype 'redis)
141
144
  (kvs.open target)
142
145
  (require "redis"))
143
- ((eq? dbtype 'dbm)
146
+ ((eq? dbtype 'gdbm)
144
147
  (kvs.open target)
145
- (require "dbm"))
148
+ (require "gdbm"))
146
149
  ((eq? dbtype 'pure)
147
150
  (kvs.open target))
148
151
  ((eq? dbtype 'memcache)
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sekka
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kiyoka Nishiyama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-07 00:00:00.000000000 Z
11
+ date: 2014-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: memcache-client
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
@@ -56,70 +56,70 @@ dependencies:
56
56
  name: distributed-trie
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rack
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: ruby-progressbar
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: eventmachine
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: memcache-client
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ! '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ! '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
@@ -140,42 +140,42 @@ dependencies:
140
140
  name: distributed-trie
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ! '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ! '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: rack
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ! '>='
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ! '>='
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: ruby-progressbar
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ! '>='
171
+ - - ">="
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - ! '>='
178
+ - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  description: Sekka is a SKK like input method. Sekka server provides REST Based API.
@@ -190,7 +190,7 @@ extensions: []
190
190
  extra_rdoc_files:
191
191
  - README.md
192
192
  files:
193
- - .gemtest
193
+ - ".gemtest"
194
194
  - COPYING
195
195
  - Rakefile
196
196
  - VERSION.yml
@@ -246,17 +246,17 @@ require_paths:
246
246
  - lib
247
247
  required_ruby_version: !ruby/object:Gem::Requirement
248
248
  requirements:
249
- - - ! '>='
249
+ - - ">="
250
250
  - !ruby/object:Gem::Version
251
251
  version: 1.9.2
252
252
  required_rubygems_version: !ruby/object:Gem::Requirement
253
253
  requirements:
254
- - - ! '>='
254
+ - - ">="
255
255
  - !ruby/object:Gem::Version
256
256
  version: '0'
257
257
  requirements: []
258
258
  rubyforge_project:
259
- rubygems_version: 2.0.3
259
+ rubygems_version: 2.0.14
260
260
  signing_key:
261
261
  specification_version: 4
262
262
  summary: Sekka is a SKK like input method.