Skip to content

Commit 6e7b61c

Browse files
committed
後置型カタカナ変換で、カタカナを伸ばす機能追加
文字数指定でカタカナ置換後、指定した文字数が足りなかったので伸ばしたい場合用。
1 parent 9c850cd commit 6e7b61c

8 files changed

Lines changed: 92 additions & 22 deletions

File tree

README.md

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,11 @@ IMR_DOCUMENTFEEDにも対応していないアプリの場合は、tsf-tutcode
154154
→「例エバアプリケーション」l2(Kata>2機能:2文字縮める)
155155
→「例えばアプリケーション」
156156

157+
#### カタカナを伸ばす
158+
例)「例えばあぷりけーしょん」k7(Kata7機能)
159+
→「例えばあプリケーション」h1(Kata<1機能:1文字伸ばす)
160+
→「例えばアプリケーション」
161+
157162
### 後置型漢字→入力シーケンス変換
158163
指定した文字数を入力シーケンスに置換。
159164

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

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

303-
漢直Win等のkwmaze.dicを取込むには、文字コードをUTF-8等に変換した後、以下の2行をファイルの先頭に挿入しておいてください。
304-
305-
```
306-
;; okuri-ari entries.
307-
;; okuri-nasi entries.
308-
```
308+
漢直Win等のkwmaze.dicを取込むには、文字コードをUTF-8等に変換してください。
309309

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

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

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

@@ -916,12 +922,15 @@ pandoc 1.19.2.1
916922

917923
### 履歴
918924

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

926935
#### v0.6.0 (2016-10-24)
927936
* 後置型交ぜ書き変換を、読みの文字数指定無しでも開始可能に:`Maze0`,`MazeK0`

imcrvcnf/convtable.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,12 @@ const ROMAN_KANA_CONV roman_kana_conv_default[ROMAN_KANA_TBL_DEF_NUM] =
5252
{L"l4", L"Kata>4", L"Kata>4", L"Kata>4", FALSE, FALSE, TRUE},
5353
{L"l5", L"Kata>5", L"Kata>5", L"Kata>5", FALSE, FALSE, TRUE},
5454
{L"l6", L"Kata>6", L"Kata>6", L"Kata>6", FALSE, FALSE, TRUE},
55+
{L"h1", L"Kata<1", L"Kata<1", L"Kata<1", FALSE, FALSE, TRUE},
56+
{L"h2", L"Kata<2", L"Kata<2", L"Kata<2", FALSE, FALSE, TRUE},
57+
{L"h3", L"Kata<3", L"Kata<3", L"Kata<3", FALSE, FALSE, TRUE},
58+
{L"h4", L"Kata<4", L"Kata<4", L"Kata<4", FALSE, FALSE, TRUE},
59+
{L"h5", L"Kata<5", L"Kata<5", L"Kata<5", FALSE, FALSE, TRUE},
60+
{L"h6", L"Kata<6", L"Kata<6", L"Kata<6", FALSE, FALSE, TRUE},
5561
{L"z0", L"StoK0", L"StoK0", L"StoK0", FALSE, FALSE, TRUE},
5662
{L"z1", L"StoK1", L"StoK1", L"StoK1", FALSE, FALSE, TRUE},
5763
{L"z2", L"StoK2", L"StoK2", L"StoK2", FALSE, FALSE, TRUE},

imcrvcnf/convtable.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
#include "convtype.h"
66

7-
#define ROMAN_KANA_TBL_DEF_NUM 3135
7+
#define ROMAN_KANA_TBL_DEF_NUM 3141
88

99
//変換テーブル
1010
extern const ROMAN_KANA_CONV roman_kana_conv_default[ROMAN_KANA_TBL_DEF_NUM];

imcrvtip/KeyHandlerControl.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1219,14 +1219,24 @@ void CTextService::_HandleFunc(TfEditCookie ec, ITfContext *pContext, const ROMA
12191219
offset++;
12201220
isShrink = 1;
12211221
}
1222-
int count = _wtoi(rkc.hiragana + offset);
1223-
if(isShrink)
1222+
else if(rkc.hiragana[offset] == L'<') //カタカナを伸ばす
12241223
{
1225-
_HandlePostKataShrink(ec, pContext, count, postconvctx);
1224+
offset++;
1225+
isShrink = -1;
12261226
}
1227-
else
1227+
int count = _wtoi(rkc.hiragana + offset);
1228+
switch(isShrink)
12281229
{
1229-
_HandlePostKata(ec, pContext, count, postconvctx);
1230+
case 1:
1231+
_HandlePostKataShrink(ec, pContext, count, postconvctx);
1232+
break;
1233+
case -1:
1234+
_HandlePostKata(ec, pContext, count, postconvctx, true);
1235+
break;
1236+
case 0:
1237+
default:
1238+
_HandlePostKata(ec, pContext, count, postconvctx, false);
1239+
break;
12301240
}
12311241
return;
12321242
}

imcrvtip/KeyHandlerPostConv.cpp

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ void CTextService::_AcquirePrecedingYomi(ITfContext *pContext, PostConvContext p
9797
}
9898

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

128+
//文字列末尾にある連続するカタカナの最初の位置を返す
129+
static size_t _BackwardWhileKatakana(const std::wstring &text)
130+
{
131+
size_t st;
132+
size_t prevst = text.size();
133+
while((st = BackwardMoji(text, prevst, 1)) < prevst)
134+
{
135+
prevst = st;
136+
//TRUEの文字が続く間、戻る
137+
#define IN_KATARANGE(m) (0x30A0 <= (m[0]) && (m[0]) <= 0x30FF)
138+
if(!IN_KATARANGE(Get1Moji(text, st)))
139+
{
140+
// 先頭の「ー」は外す
141+
while((st = ForwardMoji(text, prevst, 1)) > prevst)
142+
{
143+
prevst = st;
144+
if(!TYOON(Get1Moji(text, st)))
145+
{
146+
break;
147+
}
148+
}
149+
break;
150+
}
151+
}
152+
return st;
153+
}
154+
128155
/**
129156
* 後置型かな漢字変換を開始する
130157
* @param isKatuyo 活用する語として変換を開始するか
@@ -136,7 +163,7 @@ HRESULT CTextService::_HandlePostKanaKan(TfEditCookie ec, ITfContext *pContext,
136163
//カーソル直前の文字列を取得
137164
std::wstring text;
138165
_AcquirePrecedingText(pContext, postconvctx, &text);
139-
size_t st = _BackwardWhileKana(text);
166+
size_t st = _BackwardWhileKana(text, text.size());
140167
if(st >= text.size())
141168
{
142169
if(postconvctx == PCC_APP)
@@ -157,7 +184,8 @@ HRESULT CTextService::_HandlePostKanaKan(TfEditCookie ec, ITfContext *pContext,
157184
}
158185

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

207+
size_t ed = size;
208+
if(skipKata) //連続するカタカナをとばす
209+
{
210+
ed = _BackwardWhileKatakana(text);
211+
}
179212
//ひらがなをカタカナに変換
180213
std::wstring kata;
181214
size_t st;
182215
if(count > 0)
183216
{
184-
st = BackwardMoji(text, size, count);
217+
st = BackwardMoji(text, ed, count);
185218
}
186219
else //count==0: ひらがなが続く間、負: ひらがなとして残す文字数指定
187220
{
188-
st = _BackwardWhileKana(text);
221+
st = _BackwardWhileKana(text, ed);
189222
if(count < 0) // 指定文字数を除いてカタカナに変換
190223
{
191224
st = ForwardMoji(text, st, -count);
192225
}
193226
}
194-
if(size > st)
227+
if(st < ed)
195228
{
196229
std::wstring todel(text.substr(st));
197230
_ConvKanaToKana(todel, im_hiragana, kata, im_katakana);

imcrvtip/TextService.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ class CTextService :
204204
HRESULT _HandlePostMaze(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx, bool isKatuyo, bool resizeWithInflection);
205205
void _AcquirePrecedingYomi(ITfContext *pContext, PostConvContext postconvctx, std::wstring *yomi, size_t count);
206206
HRESULT _HandlePostKanaKan(TfEditCookie ec, ITfContext *pContext, PostConvContext postconvctx, bool isKatuyo, bool resizeWithInflection);
207-
HRESULT _HandlePostKata(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx);
207+
HRESULT _HandlePostKata(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx, bool skipKata);
208208
HRESULT _HandlePostKataShrink(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx);
209209
HRESULT _HandlePostBushu(TfEditCookie ec, ITfContext *pContext, PostConvContext postconvctx);
210210
HRESULT _HandlePostSeq2Kanji(TfEditCookie ec, ITfContext *pContext, int count, PostConvContext postconvctx);

installer/config-sample/kanatable-tutcode.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ l3 Kata>3 Kata>3 Kata>3 4
4343
l4 Kata>4 Kata>4 Kata>4 4
4444
l5 Kata>5 Kata>5 Kata>5 4
4545
l6 Kata>6 Kata>6 Kata>6 4
46+
h1 Kata<1 Kata<1 Kata<1 4
47+
h2 Kata<2 Kata<2 Kata<2 4
48+
h3 Kata<3 Kata<3 Kata<3 4
49+
h4 Kata<4 Kata<4 Kata<4 4
50+
h5 Kata<5 Kata<5 Kata<5 4
51+
h6 Kata<6 Kata<6 Kata<6 4
4652
z0 StoK0 StoK0 StoK0 4
4753
z1 StoK1 StoK1 StoK1 4
4854
z2 StoK2 StoK2 StoK2 4

installer/config-share/config.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,12 @@
201201
<row ro="l4" hi="Kata>4" ka="Kata>4" an="Kata>4" so="4" />
202202
<row ro="l5" hi="Kata>5" ka="Kata>5" an="Kata>5" so="4" />
203203
<row ro="l6" hi="Kata>6" ka="Kata>6" an="Kata>6" so="4" />
204+
<row ro="h1" hi="Kata<1" ka="Kata<1" an="Kata<1" so="4" />
205+
<row ro="h2" hi="Kata<2" ka="Kata<2" an="Kata<2" so="4" />
206+
<row ro="h3" hi="Kata<3" ka="Kata<3" an="Kata<3" so="4" />
207+
<row ro="h4" hi="Kata<4" ka="Kata<4" an="Kata<4" so="4" />
208+
<row ro="h5" hi="Kata<5" ka="Kata<5" an="Kata<5" so="4" />
209+
<row ro="h6" hi="Kata<6" ka="Kata<6" an="Kata<6" so="4" />
204210
<row ro="z0" hi="StoK0" ka="StoK0" an="StoK0" so="4" />
205211
<row ro="z1" hi="StoK1" ka="StoK1" an="StoK1" so="4" />
206212
<row ro="z2" hi="StoK2" ka="StoK2" an="StoK2" so="4" />

0 commit comments

Comments
 (0)