2 * model listener from XML
4 * License : The MIT License
5 * Copyright(c) 2013 MikuToga Partners
8 package jp.sfjp.mikutoga.pmd.model.xml;
10 import jp.sfjp.mikutoga.corelib.I18nText;
23 * モデル関連のXML要素出現イベントを受信する。
25 class SaxModelListener extends SaxListener{
27 private String currentLang = null;
28 private StringBuilder currentBredTxt = null;
47 void addCharData(char[] ch, int start, int length){
48 if(this.currentBredTxt == null) return;
50 for(int idx = 0; idx < length; idx++){
51 int pos = start + idx;
52 char chData = ch[pos];
53 if(chData == '\n') continue;
54 if(chData == '\r') continue;
55 this.currentBredTxt.append(chData);
62 * pmdModelタグ開始の通知を受け取る。
64 @OpenXmlMark(PmdTag.PMD_MODEL)
66 I18nText modelName = getPmdModel().getModelName();
68 String name = getStringAttr(PmdAttr.NAME);
69 modelName.setPrimaryText(name);
75 * i18nTextタグ開始の通知を受け取る。
77 @OpenXmlMark(PmdTag.I18N_NAME)
79 String lang = getStringAttr(PmdAttr.LANG);
80 String name = getStringAttr(PmdAttr.NAME);
82 I18nText modelName = getPmdModel().getModelName();
83 modelName.setI18nText(lang, name);
89 * descriptionタグ開始の通知を受け取る。
91 @OpenXmlMark(PmdTag.DESCRIPTION)
92 void openDescription(){
93 this.currentLang = getStringAttr(PmdAttr.LANG);
94 this.currentBredTxt = new StringBuilder();
99 * descriptionタグ終了の通知を受け取る。
101 @CloseXmlMark(PmdTag.DESCRIPTION)
102 void closeDescription(){
103 String bredText = this.currentBredTxt.toString();
105 I18nText desc = getPmdModel().getDescription();
106 if(this.currentLang == null){
107 desc.setPrimaryText(bredText);
109 desc.setI18nText(this.currentLang, bredText);
112 this.currentLang = null;
113 this.currentBredTxt = null;
121 @OpenXmlMark(PmdTag.BR)
123 if(this.currentBredTxt == null) return;
124 this.currentBredTxt.append('\n');