本連載を執筆している伊藤
RedPenでの機能追加方法
先回RedPenの内部についての解説をしました。その知識をもとにRedPen内部の理解をもとに簡単な機能を実装してみます。実装する機能は半角カナ文字のチェックです。
機能追加:半角カナ機能
半角カナの混入は人目での判別が難しいため,
- Validatorの追加
- validateメソッドの実装
- メッセージの追加
- テストの作成
Validatorの追加
RedPenに機能を追加するには,
Validatorはいくつもメソッドを持ちますが,
validate(List<ValidationError> errorList, Document document)
validate(List<ValidationError> errors, Section section)
validate(List<ValidationError> errors, Sentence sentence)
通常機能を実現するにはValidationメソッドの一つを実装します。機能が一文を独立してチェックするだけで実現できるのであればSentenceを引数に取るメソッドを実装します。逆に文書の節間の関係等をチェックしたい場合にはSection,
今回実装する機能
public class HankakuKanaValidator extends Validator {
private static Pattern pattern = Pattern.compile("[\\uFF65-\\uFF9F\\s-]");
public HankakuKanaValidator() {}
@Override
public void validate(List<ValidationError> errors, Sentence sentence) {
Matcher matcher = pattern.matcher(sentence.getContent());
while (matcher.find()) {
errors.add(createValidationError(sentence,
sentence.getContent().charAt(matcher.start())));
}
}
}
上のコードではpatternというstatic変数に半角カナを検知する正規表現を代入しています。実際に検査を行うvalidateメソッドでは,
createValidationErrorの第一引数は入力文です。第二引数以降は次節で述べるエラーメッセージの引数として利用されます。HankakuKanaValidatorではマッチした半角文字を引数として渡しています。
メッセージの追加
RedPenではエラーが含まれる文だけでなく,
文長("80")が最大値 "100" を超えています。
出力するエラーメッセージにはパラメータを追加して文の具体的な情報を付加できます。たとえばHankakuKanaValidatorでは検知された半角カナ文字を出力します。付加する情報はcreateValidationErrorの第二引数以降で指定します。
先ほど作成したHankakuKanaValidatorでは第二引数に発見した半角文字を与えたことを思い出してください。HanakakuKana機能のエラーメッセージは以下のとおりです。
HankakuKanaValidator=半角カナの文字 "{0}" が見つかりました。
ここで,
テストの作成
では,
testRunValidaotrWithoutHanakakuKanaでは入力文に半角カナが含まれていない場合に,
public class HankakuKanaValidatorTest {
@Test
public void testDetectHankakuKana() {
Validator validator = new HankakuKanaValidator();
List<ValidationError> errors = new ArrayList<>();
validator.validate(errors, new Sentence("岩の木陰にハナが咲いている", 0));
assertEquals(2, errors.size());
}
@Test
public void testRunValidatorWithoutHanakakuKana() {
Validator validator = new HankakuKanaValidator();
List<ValidationError> errors = new ArrayList<>();
validator.validate(errors, new Sentence("岩の木陰にハナが咲いている", 0));
assertEquals(0, errors.size());
}
}
テストを実行するにはredpenのトップディレクトリ上でmvn test
コマンドを実行します。今回の変更を加えた状態でのテストの実行は次項で取り上げますが,