Skip to content

Commit

Permalink
後置型カタカナ変換で、カタカナを伸ばす機能追加
Browse files Browse the repository at this point in the history
文字数指定でカタカナ置換後、指定した文字数が足りなかったので伸ばしたい場合用。
  • Loading branch information
deton committed Apr 5, 2017
1 parent 9c850cd commit 6e7b61c
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 22 deletions.
25 changes: 17 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,11 @@ IMR_DOCUMENTFEEDにも対応していないアプリの場合は、tsf-tutcode
→「例エバアプリケーション」l2(Kata>2機能:2文字縮める)
→「例えばアプリケーション」

#### カタカナを伸ばす
例)「例えばあぷりけーしょん」k7(Kata7機能)
→「例えばあプリケーション」h1(Kata<1機能:1文字伸ばす)
→「例えばアプリケーション」

### 後置型漢字→入力シーケンス変換
指定した文字数を入力シーケンスに置換。

Expand Down Expand Up @@ -300,12 +305,7 @@ SKK辞書ファイルの文字コードは、EUC-JIS-2004、UTF-8 (BOMなし/あ

リストの選択されている行をクリックするとインライン編集することができます。

漢直Win等のkwmaze.dicを取込むには、文字コードをUTF-8等に変換した後、以下の2行をファイルの先頭に挿入しておいてください。

```
;; okuri-ari entries.
;; okuri-nasi entries.
```
漢直Win等のkwmaze.dicを取込むには、文字コードをUTF-8等に変換してください。

SKK辞書のURLを追加した場合は、取込処理のときにディレクトリ %TMP%\tsf-tutcode または %TEMP%\tsf-tutcode にダウンロードされてから取り込まれます。

Expand Down Expand Up @@ -592,6 +592,12 @@ Visual C++ 2015 の 正規表現で、文法は ECMAScript を使用していま
| Kata>2 | 後置型カタカナ変換。直前のカタカナ変換を2文字縮める |
| ... | |
| Kata>6 | 後置型カタカナ変換。直前のカタカナ変換を6文字縮める |
| Kata<0 | 後置型カタカナ変換。カタカナを伸ばす。連続するひらがな |
| Kata<-1 | 後置型カタカナ変換。カタカナを伸ばす。連続するひらがな(1文字残す) |
| Kata<1 | 後置型カタカナ変換。カタカナを1文字伸ばす |
| Kata<2 | 後置型カタカナ変換。カタカナを2文字伸ばす |
| ... | |
| Kata<6 | 後置型カタカナ変換。カタカナを6文字伸ばす |
| KtoS0 | 後置型漢字→入力シーケンス変換。改行/タブ/空白までを置換 |
| KtoS1 | 後置型漢字→入力シーケンス変換。1文字を置換 |
| KtoS2 | 後置型漢字→入力シーケンス変換。2文字を置換 |
Expand Down Expand Up @@ -879,7 +885,7 @@ tsf-tutcodeは未実装機能が多いため。
* Surrounding Text関係は、[Mozc](https://github.com/google/mozc)から一部ソースを取り込んでいます。
* 部首合成変換は、[漢直Win](https://github.com/kanchoku/kw)から一部ソースと部首合成変換辞書を取り込んでいます。
サンプルの部首合成変換ユーザー辞書bushudict.txtは、[tc2](https://github.com/kanchoku/tc)に含まれるbushu34h.helpに、bushu34h.revのコメントアウトされている文字を追加してUTF-8に変換したものです。
交ぜ書き変換辞書mazedict.txtは、漢直Winのkwmaze.dicの漢字コードを変換して、取込みできるように;; okuri-ari entries.等を追加して取込んだものです
交ぜ書き変換辞書mazedict.txtは、漢直Winのkwmaze.dicに対し76エントリを追加して漢字コードを変換して取込んだものです

### 制限事項、既知の問題

Expand Down Expand Up @@ -916,12 +922,15 @@ pandoc 1.19.2.1

### 履歴

#### v0.7.0 (2017-XXX)
#### v0.7.0 (2017-04-05)
* 後置型カタカナ変換で、カタカナを伸ばす機能(`Kata<1`等)
* 後置型かな漢字変換(連続するひらがなを漢字に変換):`KanaK`, `KanaKK`, `KanaKk`
(漢直でなくローマ字かな入力で、後置型変換を使いたいケース向け)
* 後置型交ぜ書き変換の、読み/語幹の伸縮関係:
+ キー設定の左移動と右移動キーでも可能に
+ キー設定の接辞キーに`<|>`設定時(CorvusSKKデフォルト)でも読み/語幹の伸縮可能に
* 辞書取込を、;; okuri-ari行の無いファイルに対応(mazegaki.dic等)
* ベースのCorvusSKKを2.5.1に更新。

#### v0.6.0 (2016-10-24)
* 後置型交ぜ書き変換を、読みの文字数指定無しでも開始可能に:`Maze0`,`MazeK0`
Expand Down
6 changes: 6 additions & 0 deletions imcrvcnf/convtable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@ const ROMAN_KANA_CONV roman_kana_conv_default[ROMAN_KANA_TBL_DEF_NUM] =
{L"l4", L"Kata>4", L"Kata>4", L"Kata>4", FALSE, FALSE, TRUE},
{L"l5", L"Kata>5", L"Kata>5", L"Kata>5", FALSE, FALSE, TRUE},
{L"l6", L"Kata>6", L"Kata>6", L"Kata>6", FALSE, FALSE, TRUE},
{L"h1", L"Kata<1", L"Kata<1", L"Kata<1", FALSE, FALSE, TRUE},
{L"h2", L"Kata<2", L"Kata<2", L"Kata<2", FALSE, FALSE, TRUE},
{L"h3", L"Kata<3", L"Kata<3", L"Kata<3", FALSE, FALSE, TRUE},
{L"h4", L"Kata<4", L"Kata<4", L"Kata<4", FALSE, FALSE, TRUE},
{L"h5", L"Kata<5", L"Kata<5", L"Kata<5", FALSE, FALSE, TRUE},
{L"h6", L"Kata<6", L"Kata<6", L"Kata<6", FALSE, FALSE, TRUE},
{L"z0", L"StoK0", L"StoK0", L"StoK0", FALSE, FALSE, TRUE},
{L"z1", L"StoK1", L"StoK1", L"StoK1", FALSE, FALSE, TRUE},
{L"z2", L"StoK2", L"StoK2", L"StoK2", FALSE, FALSE, TRUE},
Expand Down
2 changes: 1 addition & 1 deletion imcrvcnf/convtable.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#include "convtype.h"

#define ROMAN_KANA_TBL_DEF_NUM 3135
#define ROMAN_KANA_TBL_DEF_NUM 3141

//変換テーブル
extern const ROMAN_KANA_CONV roman_kana_conv_default[ROMAN_KANA_TBL_DEF_NUM];
Expand Down
20 changes: 15 additions & 5 deletions imcrvtip/KeyHandlerControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1219,14 +1219,24 @@ void CTextService::_HandleFunc(TfEditCookie ec, ITfContext *pContext, const ROMA
offset++;
isShrink = 1;
}
int count = _wtoi(rkc.hiragana + offset);
if(isShrink)
else if(rkc.hiragana[offset] == L'<') //カタカナを伸ばす
{
_HandlePostKataShrink(ec, pContext, count, postconvctx);
offset++;
isShrink = -1;
}
else
int count = _wtoi(rkc.hiragana + offset);
switch(isShrink)
{
_HandlePostKata(ec, pContext, count, postconvctx);
case 1:
_HandlePostKataShrink(ec, pContext, count, postconvctx);
break;
case -1:
_HandlePostKata(ec, pContext, count, postconvctx, true);
break;
case 0:
default:
_HandlePostKata(ec, pContext, count, postconvctx, false);
break;
}
return;
}
Expand Down
47 changes: 40 additions & 7 deletions imcrvtip/KeyHandlerPostConv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,10 @@ void CTextService::_AcquirePrecedingYomi(ITfContext *pContext, PostConvContext p
}

//文字列末尾にある連続するひらがなの最初の位置を返す
static size_t _BackwardWhileKana(const std::wstring &text)
static size_t _BackwardWhileKana(const std::wstring &text, size_t idx)
{
size_t st;
size_t prevst = text.size();
size_t prevst = idx;
while((st = BackwardMoji(text, prevst, 1)) < prevst)
{
prevst = st;
Expand All @@ -125,6 +125,33 @@ static size_t _BackwardWhileKana(const std::wstring &text)
return st;
}

//文字列末尾にある連続するカタカナの最初の位置を返す
static size_t _BackwardWhileKatakana(const std::wstring &text)
{
size_t st;
size_t prevst = text.size();
while((st = BackwardMoji(text, prevst, 1)) < prevst)
{
prevst = st;
//TRUEの文字が続く間、戻る
#define IN_KATARANGE(m) (0x30A0 <= (m[0]) && (m[0]) <= 0x30FF)
if(!IN_KATARANGE(Get1Moji(text, st)))
{
// 先頭の「ー」は外す
while((st = ForwardMoji(text, prevst, 1)) > prevst)
{
prevst = st;
if(!TYOON(Get1Moji(text, st)))
{
break;
}
}
break;
}
}
return st;
}

/**
* 後置型かな漢字変換を開始する
* @param isKatuyo 活用する語として変換を開始するか
Expand All @@ -136,7 +163,7 @@ HRESULT CTextService::_HandlePostKanaKan(TfEditCookie ec, ITfContext *pContext,
//カーソル直前の文字列を取得
std::wstring text;
_AcquirePrecedingText(pContext, postconvctx, &text);
size_t st = _BackwardWhileKana(text);
size_t st = _BackwardWhileKana(text, text.size());
if(st >= text.size())
{
if(postconvctx == PCC_APP)
Expand All @@ -157,7 +184,8 @@ HRESULT CTextService::_HandlePostKanaKan(TfEditCookie ec, ITfContext *pContext,
}

//後置型カタカナ変換
HRESULT CTextService::_HandlePostKata(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx)
// @param skipKata 末尾の連続するカタカナはスキップして、カタカナを伸ばす
HRESULT CTextService::_HandlePostKata(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx, bool skipKata)
{
//カーソル直前の文字列を取得
std::wstring text;
Expand All @@ -176,22 +204,27 @@ HRESULT CTextService::_HandlePostKata(TfEditCookie ec, ITfContext *pContext, int
return S_OK;
}

size_t ed = size;
if(skipKata) //連続するカタカナをとばす
{
ed = _BackwardWhileKatakana(text);
}
//ひらがなをカタカナに変換
std::wstring kata;
size_t st;
if(count > 0)
{
st = BackwardMoji(text, size, count);
st = BackwardMoji(text, ed, count);
}
else //count==0: ひらがなが続く間、負: ひらがなとして残す文字数指定
{
st = _BackwardWhileKana(text);
st = _BackwardWhileKana(text, ed);
if(count < 0) // 指定文字数を除いてカタカナに変換
{
st = ForwardMoji(text, st, -count);
}
}
if(size > st)
if(st < ed)
{
std::wstring todel(text.substr(st));
_ConvKanaToKana(todel, im_hiragana, kata, im_katakana);
Expand Down
2 changes: 1 addition & 1 deletion imcrvtip/TextService.h
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ class CTextService :
HRESULT _HandlePostMaze(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx, bool isKatuyo, bool resizeWithInflection);
void _AcquirePrecedingYomi(ITfContext *pContext, PostConvContext postconvctx, std::wstring *yomi, size_t count);
HRESULT _HandlePostKanaKan(TfEditCookie ec, ITfContext *pContext, PostConvContext postconvctx, bool isKatuyo, bool resizeWithInflection);
HRESULT _HandlePostKata(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx);
HRESULT _HandlePostKata(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx, bool skipKata);
HRESULT _HandlePostKataShrink(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx);
HRESULT _HandlePostBushu(TfEditCookie ec, ITfContext *pContext, PostConvContext postconvctx);
HRESULT _HandlePostSeq2Kanji(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx);
Expand Down
6 changes: 6 additions & 0 deletions installer/config-sample/kanatable-tutcode.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ l3 Kata>3 Kata>3 Kata>3 4
l4 Kata>4 Kata>4 Kata>4 4
l5 Kata>5 Kata>5 Kata>5 4
l6 Kata>6 Kata>6 Kata>6 4
h1 Kata<1 Kata<1 Kata<1 4
h2 Kata<2 Kata<2 Kata<2 4
h3 Kata<3 Kata<3 Kata<3 4
h4 Kata<4 Kata<4 Kata<4 4
h5 Kata<5 Kata<5 Kata<5 4
h6 Kata<6 Kata<6 Kata<6 4
z0 StoK0 StoK0 StoK0 4
z1 StoK1 StoK1 StoK1 4
z2 StoK2 StoK2 StoK2 4
Expand Down
6 changes: 6 additions & 0 deletions installer/config-share/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,12 @@
<row ro="l4" hi="Kata>4" ka="Kata>4" an="Kata>4" so="4" />
<row ro="l5" hi="Kata>5" ka="Kata>5" an="Kata>5" so="4" />
<row ro="l6" hi="Kata>6" ka="Kata>6" an="Kata>6" so="4" />
<row ro="h1" hi="Kata<1" ka="Kata<1" an="Kata<1" so="4" />
<row ro="h2" hi="Kata<2" ka="Kata<2" an="Kata<2" so="4" />
<row ro="h3" hi="Kata<3" ka="Kata<3" an="Kata<3" so="4" />
<row ro="h4" hi="Kata<4" ka="Kata<4" an="Kata<4" so="4" />
<row ro="h5" hi="Kata<5" ka="Kata<5" an="Kata<5" so="4" />
<row ro="h6" hi="Kata<6" ka="Kata<6" an="Kata<6" so="4" />
<row ro="z0" hi="StoK0" ka="StoK0" an="StoK0" so="4" />
<row ro="z1" hi="StoK1" ka="StoK1" an="StoK1" so="4" />
<row ro="z2" hi="StoK2" ka="StoK2" an="StoK2" so="4" />
Expand Down

0 comments on commit 6e7b61c

Please sign in to comment.