X-Git-Url: http://git.osdn.net/view?p=mikutoga%2FPmd2XML.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fjp%2Fsfjp%2Fmikutoga%2Fpmd%2Fmodel%2Fxml%2FSaxModelListener.java;fp=src%2Fmain%2Fjava%2Fjp%2Fsfjp%2Fmikutoga%2Fpmd%2Fmodel%2Fxml%2FSaxModelListener.java;h=99432e0aa91c27bbb164676c51de845e4bb5e74a;hp=0000000000000000000000000000000000000000;hb=b12782f3ce4b78faa618062b553cca3db556b406;hpb=d74afe519c138ab46218508457298a1dee92453b diff --git a/src/main/java/jp/sfjp/mikutoga/pmd/model/xml/SaxModelListener.java b/src/main/java/jp/sfjp/mikutoga/pmd/model/xml/SaxModelListener.java new file mode 100644 index 0000000..99432e0 --- /dev/null +++ b/src/main/java/jp/sfjp/mikutoga/pmd/model/xml/SaxModelListener.java @@ -0,0 +1,128 @@ +/* + * model listener from XML + * + * License : The MIT License + * Copyright(c) 2013 MikuToga Partners + */ + +package jp.sfjp.mikutoga.pmd.model.xml; + +import jp.sfjp.mikutoga.corelib.I18nText; + +/* + + pmdModel + + i18nName + + description + + license + + credits + + meta + ..... +*/ + +/** + * モデル関連のXML要素出現イベントを受信する。 + */ +class SaxModelListener extends SaxListener{ + + private String currentLang = null; + private StringBuilder currentBredTxt = null; + + + /** + * コンストラクタ。 + */ + SaxModelListener() { + super(); + return; + } + + + /** + * CharData出現の通知。 + * @param ch 文字配列 + * @param start 開始位置 + * @param length 長さ + */ + @Override + void addCharData(char[] ch, int start, int length){ + if(this.currentBredTxt == null) return; + + for(int idx = 0; idx < length; idx++){ + int pos = start + idx; + char chData = ch[pos]; + if(chData == '\n') continue; + if(chData == '\r') continue; + this.currentBredTxt.append(chData); + } + + return; + } + + /** + * pmdModelタグ開始の通知を受け取る。 + */ + @OpenXmlMark(PmdTag.PMD_MODEL) + void openPmdModel(){ + I18nText modelName = getPmdModel().getModelName(); + + String name = getStringAttr(PmdAttr.NAME); + modelName.setPrimaryText(name); + + return; + } + + /** + * i18nTextタグ開始の通知を受け取る。 + */ + @OpenXmlMark(PmdTag.I18N_NAME) + void openI18nText(){ + String lang = getStringAttr(PmdAttr.LANG); + String name = getStringAttr(PmdAttr.NAME); + + I18nText modelName = getPmdModel().getModelName(); + modelName.setI18nText(lang, name); + + return; + } + + /** + * descriptionタグ開始の通知を受け取る。 + */ + @OpenXmlMark(PmdTag.DESCRIPTION) + void openDescription(){ + this.currentLang = getStringAttr(PmdAttr.LANG); + this.currentBredTxt = new StringBuilder(); + return; + } + + /** + * descriptionタグ終了の通知を受け取る。 + */ + @CloseXmlMark(PmdTag.DESCRIPTION) + void closeDescription(){ + String bredText = this.currentBredTxt.toString(); + + I18nText desc = getPmdModel().getDescription(); + if(this.currentLang == null){ + desc.setPrimaryText(bredText); + }else{ + desc.setI18nText(this.currentLang, bredText); + } + + this.currentLang = null; + this.currentBredTxt = null; + + return; + } + + /** + * brタグ開始の通知を受け取る。 + */ + @OpenXmlMark(PmdTag.BR) + void openBr(){ + if(this.currentBredTxt == null) return; + this.currentBredTxt.append('\n'); + return; + } + +}