Common LispによるSKK辞書サーバーとその拡張
Switch branches/tags
Clone or download
Latest commit a98f784 Feb 13, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cli change argument parser from trivial-argv to unix-opts Jan 13, 2018
core Bugfix for empty dictionary Feb 13, 2018
data add data directory Dec 27, 2017
google-ime add license notices Dec 29, 2017
mixed add license notices Dec 29, 2017
proxy send signal to close port Jan 13, 2018
roswell add cli module Jan 4, 2018
skk
tests add license notices Dec 29, 2017
user add license notices Dec 29, 2017
.gitignore
.travis.yml update installation script for Travis CI Dec 29, 2017
LICENSE.md
Makefile Update build script Feb 13, 2018
README.md Update README.md Feb 13, 2018
cl-skkserv.asd update version number Jan 13, 2018
index.html update link of title Dec 29, 2017

README.md

cl-skkserv

GitHub Build Status Quicklisp Amazon Wishlist

概要

cl-skkserv はSKKに影響を受けた日本語入力システムです。 既存のSKKサーバーとの互換性を保ちながらCommon Lispによるインテグレーションを可能にします。

cl-skkservはSKKサーバーとその辞書機能が完全に分離しており動的に辞書機能を書き換えることが可能です。 これにより辞書ファイルを事前に合成しておく必要がなくなります。 更にGoogleのCGIや他のSKKサーバーでさえ辞書として使うことができます。

なお、このソフトウェアは開発初期段階です。APIが変わる可能性があります。 Quicklispとの関係上developブランチ上で開発を行い、安定版の公開用にmasterブランチを使用しています。 最新の開発版APIはdevelopブランチを参照してください。

導入

Common Lisp開発ツールであるRoswellを使うことで以下のように簡単に導入できます。

$ ros install asciian/cl-skkserv

v0.2よりHomebrewおよびLinuxbrewでのインストールが可能になりました。

$ brew install asciian/lisp/cl-skkserv

使い方

基礎

$ skkserv start # skkservを起動する
$ skkserv stop  # skkservを停止する

応用

設定

~/.skkservrcで編集することができます。以下に一例を示します。

(in-package :skkserv-user)

(setf *dictionary* (make-instance 'skk-dictionary :pathname #p"/path/to/dictionary"))
Emacs

Emacsで使う場合は~/.emacsで以下を追記してください。

(setq skk-server-host "127.0.0.1")
(setq skk-server-portnum 1178)
Vim

Vimで使う場合は~/.vimrcで以下を追記してください。

let g:eskk#server = {
\	'host': 'localhost',
\	'port': 1178,
\}

辞書

すべての辞書はCLOSによって管理されており、必ずDICTIONARYクラスを継承しconvertメソッドが定義されています。 もしあなたが新しい辞書を作りたい場合はDICTIONARYクラスを継承しconvertメソッドを定義したクラスを作ることで辞書を作ることができます。

以下は入力をそのまま候補として返すEcho辞書の例です。 メソッドコンビネーションがappendになっていることに注意してください。

(defclass echo-dictionary (dictionary) ())
(defmethod convert append ((d echo-dictionary) (s string)) (declare (ignore d)) (list s))
(setq *dictionary* (make-instance 'echo-dictionary))

例えば、SKKの辞書にEcho辞書を合成したいならSKK辞書を継承して以下のようにすることができます。

(defclass echo-and-skk-dictionary (echo-dictionary skk-dictionary) ()) ;; skk-dicitonary はdictionaryクラスのサブクラスです。
(setq *dictionary* (make-instance 'echo-and-skk-dictionary :pathname #p"/path/to/dictionary"))

また、DICTIONARYクラスのサブクラスのインスタンス同士を合成するMIXED-DICTIONARYクラスを使うこともできます。

(defvar skk (make-instance 'skk-dictionary :pathname #p"/path/to/dictionary"))
(defvar echo (make-instance 'echo-dictionary))
(setq *dictionary* (make-instance 'mixed-dictionary :dictionaries (list skk echo)))

cl-skkservで既に定義されている辞書としては以下のクラスがあります。

  • dictionary
    • skk-text-dictionary
      • skk-dictionary
    • skk-lisp-dictionary
      • skk-dictionary
    • skk-pattern-dictionary
      • skk-dictionary
    • google-ime-dictionary
    • mixed-dictionary
    • proxy-dictionary

リファレンス

各システムはPapyrusによって文芸的プログラミングで作られています。 各ページへの目次は以下の通りです。

ライセンス

GPL第三版及びそれ以降のライセンスのもとで公開された自由ソフトウェアです。 ライセンスドキュメントはこちら

著作権表示

Copyright (c) 2017 asciian ALL Rights Reserved.