RedPen version 1.7 をリリースしました
伊藤(takahi_i)
ATL の伊藤です。この度、RedPen version 1.7 をリリースしました。今回のバージョンで JavaScript で実装した機能(Validator)にプロパティを渡せる ようになりました。プロパティは機能の調整に利用できます。また、RedPen サーバに設定ファイルを指定するための変更 が取り込まれています。RedPen が提供する機能の修正、強化にも多くの時間を使いました。以下、各トピックについて紹介します。
JavaScript 拡張にプロパティをわたす
バージョン 1.7 より JavaScript で記述された機能にプロパティを渡せるようになりました。プロパティを渡すことで、機能の挙動を修正できます。プロパティは JavaScript 機能の設定ブロックに記述します。以下の例ではプロパティ max_char_num の値を 5 に設定しています。
1 2 3 |
<validator name="JavaScript"> <property name="max_char_num" value="5" /> </validator> |
JavaScript ブロックに登録されたプロパティは JavaScript 拡張から抽出できます。以下の JavaScript 機能拡張はプロパティ、 max_char_num の値を getInt メソッドで取り出しています。
1 2 3 4 5 6 7 8 9 10 11 |
function validateSentence(sentence) { var content = sentence.getContent().split(" "); var limit= getInt("max_char_num"); for(var i = 0; i<content.length;i++){ if(content[i].length >= limit){ addError("word [" + content[i] +"] is too long. length: " + content[i].length, sentence); } } } |
プロパティを取り出すメソッドは型ごとに存在します。以下、サポートしている get メソッドの一覧です。
メソッド名 | 型 |
---|---|
getInt | Int |
getFloat | Float |
getString | String |
getBoolean | Boolean |
getSet | Set |
今後の開発:JavaScript 拡張
JavaScript 拡張と Java で書いた拡張を比べると未だ JavaScript の方ができることが少ない状態です。たとえば、現状の JavaScript 拡張ではプロパティを設定一つの機能だけには送れません。今後 JavaScript で記述した機能でも Java と同等に、一つの機能として扱われる予定です。また、現在 RedPen 本体では Java を使って機能が実装されていますが、今後は JavaScript を使った実装に一部置き換わってゆく予定です。
RedPen サーバに設定ファイルを指定する
RedPen サーバ起動時にデフォルトの設定ファイルを指定できるようになりました。設定ファイルはサーバの起動スクリプト、redpen-server(ウィンドウズの場合には redpen-server.bat)を編集します。スクリプト内に、コメントアウトされた REDPEN_CONF_FILE について書かれた行がありますので、この行に設定ファイルへのパスを指定してください。ただし設定ファイルおよびリソース(JavaScript 拡張や辞書)が REDPEN_HOME (RedPen のインストールディレクトリ)以下にないと、ファイルを読み込めない点に注意してください。RedPen サーバの起動スクリプト(redpen-server)を修正した後、サーバを起動すると指定した設定ファイルがデフォルト設定として読み込まれます。
機能の強化
v1.7 では機能の強化と修正に多くの時間を使いました。とりいれた修正の多くは RedPen のユーザから頂いたコメントにもとづいています。また、以下二つの機能を新たにサポートしました。
連続する文を検知(SuccessiveSentence)
エディタを利用して執筆すると、コピーした文を誤って二回ペーストしてしまう場合があります。そこで新たに SuccessiveSentence という機能を作りました。SuccessiveSentence は同一の文が二回連続で使用されるとエラーを出力します。たとえば入力文書に以下のパラグラフが含まれていると、エラーを出力します。
1 2 |
いつも感じるのです。ポケモン Go はおもしろい。ポケモン Go はおもしろい。気がつくとレベル 20 になっていました。 |
上記のパラグラフには同一の文 “ポケモン Go はおもしろい。” が二回連続で出現しています。
接続助詞 “が” の多用(DoubledConjunctiveParticleGa)
DoubledConjunctiveParticleGa は一文に二回以上、接続助詞の が が出現するとエラーを出力します。この機能は、達人出版会の高橋さんが作成した textlint 用のプラグイン、textlint-rule-no-doubled-conjunctive-particle-ga を RedPen 用にポートした実装となっています。
たとえば、DoubledConjunctiveParticleGa は以下の文に対してエラーを出力します。
1 2 |
今日は早朝から出発したが、定刻通りではなかったが、無事会場に到着した。 |
まとめ
本稿は RedPen v1.7 の機能について紹介しました。上でも書きましたが、JavaScript での機能作成をサポートしてゆくように開発が進んでゆく予定です。