OSDN Git Service

PMD出力機能及びXML入出力機能のソースをマージ
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / pmdloader / MorphBuilder.java
1 /*\r
2  * building morph information\r
3  *\r
4  * License : The MIT License\r
5  * Copyright(c) 2010 MikuToga Partners\r
6  */\r
7 \r
8 package jp.sourceforge.mikutoga.pmd.pmdloader;\r
9 \r
10 import jp.sourceforge.mikutoga.corelib.ListUtil;\r
11 import java.util.ArrayList;\r
12 import java.util.Iterator;\r
13 import java.util.LinkedList;\r
14 import java.util.List;\r
15 import java.util.Map;\r
16 import jp.sourceforge.mikutoga.parser.ParseStage;\r
17 import jp.sourceforge.mikutoga.parser.pmd.PmdMorphHandler;\r
18 import jp.sourceforge.mikutoga.pmd.MorphPart;\r
19 import jp.sourceforge.mikutoga.pmd.MorphType;\r
20 import jp.sourceforge.mikutoga.pmd.MorphVertex;\r
21 import jp.sourceforge.mikutoga.pmd.PmdModel;\r
22 import jp.sourceforge.mikutoga.pmd.Pos3d;\r
23 import jp.sourceforge.mikutoga.pmd.Vertex;\r
24 \r
25 /**\r
26  * モーフ関係の通知をパーサから受け取る。\r
27  */\r
28 class MorphBuilder implements PmdMorphHandler {\r
29 \r
30     private final Map<MorphType, List<MorphPart>> morphMap;\r
31 \r
32     private List<MorphPart> morphPartList;\r
33     private Iterator<MorphPart> morphPartIt;\r
34     private MorphPart currentMorphPart;\r
35     private final List<Vertex> vertexList;\r
36 \r
37     private final List<Vertex> morphVertexList = new ArrayList<Vertex>();\r
38 \r
39     /**\r
40      * コンストラクタ。\r
41      * @param model モデル\r
42      */\r
43     MorphBuilder(PmdModel model){\r
44         super();\r
45         this.vertexList = model.getVertexList();\r
46         this.morphMap = model.getMorphMap();\r
47         return;\r
48     }\r
49 \r
50     /**\r
51      * PMDファイル中の出現順で各モーフを格納するためのリストを設定する。\r
52      * 主な用途はモーフ英名との突き合わせ作業。\r
53      * @param list モーフ格納リスト\r
54      */\r
55     void setMorphPartList(List<MorphPart> list){\r
56         this.morphPartList = list;\r
57         return;\r
58     }\r
59 \r
60     /**\r
61      * {@inheritDoc}\r
62      * @param stage {@inheritDoc}\r
63      * @param loops {@inheritDoc}\r
64      */\r
65     public void loopStart(ParseStage stage, int loops){\r
66         assert stage instanceof PmdMorphStage;\r
67 \r
68         if(stage == PmdMorphHandler.MORPH_LIST){\r
69             ListUtil.prepareDefConsList(this.morphPartList,\r
70                                         MorphPart.class,\r
71                                         loops );\r
72             ListUtil.assignIndexedSerial(this.morphPartList);\r
73 \r
74             this.morphPartIt = this.morphPartList.iterator();\r
75             if(this.morphPartIt.hasNext()){\r
76                 this.currentMorphPart = this.morphPartIt.next();\r
77             }\r
78         }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){\r
79             // NOTHING\r
80         }else if(stage == PmdMorphHandler.MORPHORDER_LIST){\r
81             // NOTHING\r
82         }\r
83 \r
84         return;\r
85     }\r
86 \r
87     /**\r
88      * {@inheritDoc}\r
89      * @param stage {@inheritDoc}\r
90      */\r
91     public void loopNext(ParseStage stage){\r
92         assert stage instanceof PmdMorphStage;\r
93 \r
94         if(stage == PmdMorphHandler.MORPH_LIST){\r
95             if(this.morphPartIt.hasNext()){\r
96                 this.currentMorphPart = this.morphPartIt.next();\r
97             }\r
98         }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){\r
99             // NOTHING\r
100         }else if(stage == PmdMorphHandler.MORPHORDER_LIST){\r
101             // NOTHING\r
102         }\r
103 \r
104         return;\r
105     }\r
106 \r
107     /**\r
108      * {@inheritDoc}\r
109      * @param stage {@inheritDoc}\r
110      */\r
111     public void loopEnd(ParseStage stage){\r
112         assert stage instanceof PmdMorphStage;\r
113         if(stage == PmdMorphHandler.MORPH_LIST){\r
114             // NOTHING\r
115         }else if(stage == PmdMorphHandler.MORPHVERTEX_LIST){\r
116             // NOTHING\r
117         }else if(stage == PmdMorphHandler.MORPHORDER_LIST){\r
118             // NOTHING\r
119         }\r
120         return;\r
121     }\r
122 \r
123     /**\r
124      * {@inheritDoc}\r
125      * @param morphName {@inheritDoc}\r
126      * @param morphType {@inheritDoc}\r
127      */\r
128     public void pmdMorphInfo(String morphName, byte morphType){\r
129         this.currentMorphPart.getMorphName().setPrimaryText(morphName);\r
130         MorphType type = MorphType.decode(morphType);\r
131         this.currentMorphPart.setMorphType(type);\r
132 \r
133         return;\r
134     }\r
135 \r
136     /**\r
137      * {@inheritDoc}\r
138      * @param serialId {@inheritDoc}\r
139      * @param xPos {@inheritDoc}\r
140      * @param yPos {@inheritDoc}\r
141      * @param zPos {@inheritDoc}\r
142      */\r
143     public void pmdMorphVertexInfo(int serialId,\r
144                                    float xPos, float yPos, float zPos){\r
145         MorphVertex morphVertex;\r
146         morphVertex = new MorphVertex();\r
147         Pos3d position = morphVertex.getOffset();\r
148         position.setXPos(xPos);\r
149         position.setYPos(yPos);\r
150         position.setZPos(zPos);\r
151 \r
152         Vertex vertex;\r
153         if(this.currentMorphPart.getMorphType().isBase()){\r
154             vertex = this.vertexList.get(serialId);\r
155             this.morphVertexList.add(vertex);\r
156         }else{\r
157             vertex = this.morphVertexList.get(serialId);\r
158         }\r
159         morphVertex.setBaseVertex(vertex);\r
160 \r
161         this.currentMorphPart.getMorphVertexList().add(morphVertex);\r
162 \r
163         return;\r
164     }\r
165 \r
166     /**\r
167      * {@inheritDoc}\r
168      * @param morphId {@inheritDoc}\r
169      */\r
170     public void pmdMorphOrderInfo(int morphId){\r
171         MorphPart part = this.morphPartList.get(morphId);\r
172         MorphType type = part.getMorphType();\r
173 \r
174         List<MorphPart> partList = this.morphMap.get(type);\r
175         if(partList == null){\r
176             partList = new LinkedList<MorphPart>();\r
177             this.morphMap.put(type, partList);\r
178         }\r
179         partList.add(part);\r
180 \r
181         return;\r
182     }\r
183 \r
184 }\r