1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 // MARKER(update_precomp.py): autogen include statement, do not remove
23 #include "precompiled_svx.hxx"
24 #include "svx/EnhancedCustomShapeTypeNames.hxx"
25 #include <osl/mutex.hxx>
26 #include <hash_map>
27 
28 struct TCheck
29 {
operator ()TCheck30 	bool operator()( const char* s1, const char* s2 ) const
31 	{
32 		return strcmp( s1, s2 ) == 0;
33 	}
34 };
35 typedef std::hash_map< const char*, MSO_SPT, rtl::CStringHash, rtl::CStringEqual> TypeNameHashMap;
36 static TypeNameHashMap* pHashMap = NULL;
getHashMapMutex()37 static ::osl::Mutex& getHashMapMutex()
38 {
39 	static osl::Mutex s_aHashMapProtection;
40 	return s_aHashMapProtection;
41 }
42 
43 struct NameTypeTable
44 {
45 	const char*	pS;
46 	MSO_SPT		pE;
47 };
48 static const NameTypeTable pNameTypeTableArray[] =
49 {
50 	{ "non-primitive", mso_sptMin },
51 	{ "rectangle", mso_sptRectangle },
52 	{ "round-rectangle", mso_sptRoundRectangle },
53 	{ "ellipse", mso_sptEllipse },
54 	{ "diamond", mso_sptDiamond },
55 	{ "isosceles-triangle", mso_sptIsocelesTriangle },
56 	{ "right-triangle", mso_sptRightTriangle },
57 	{ "parallelogram", mso_sptParallelogram },
58 	{ "trapezoid", mso_sptTrapezoid },
59 	{ "hexagon", mso_sptHexagon },
60 	{ "octagon", mso_sptOctagon },
61 	{ "cross", mso_sptPlus },
62 	{ "star5", mso_sptStar },
63 	{ "right-arrow", mso_sptArrow },
64 	{ "mso-spt14", mso_sptThickArrow },
65 	{ "pentagon-right", mso_sptHomePlate },
66 	{ "cube", mso_sptCube },
67 	{ "mso-spt17", mso_sptBalloon },
68 	{ "mso-spt18", mso_sptSeal },
69 	{ "mso-spt19", mso_sptArc },
70 	{ "mso-spt20", mso_sptLine },
71 	{ "mso-spt21", mso_sptPlaque },
72 	{ "can", mso_sptCan },
73 	{ "ring", mso_sptDonut },
74 	{ "mso-spt24", mso_sptTextSimple },
75 	{ "mso-spt25", mso_sptTextOctagon },
76 	{ "mso-spt26", mso_sptTextHexagon },
77 	{ "mso-spt27", mso_sptTextCurve },
78 	{ "mso-spt28", mso_sptTextWave },
79 	{ "mso-spt29", mso_sptTextRing },
80 	{ "mso-spt30", mso_sptTextOnCurve },
81 	{ "mso-spt31", mso_sptTextOnRing },
82 	{ "mso-spt32", mso_sptStraightConnector1 },
83 	{ "mso-spt33", mso_sptBentConnector2 },
84 	{ "mso-spt34", mso_sptBentConnector3 },
85 	{ "mso-spt35", mso_sptBentConnector4 },
86 	{ "mso-spt36", mso_sptBentConnector5 },
87 	{ "mso-spt37", mso_sptCurvedConnector2 },
88 	{ "mso-spt38", mso_sptCurvedConnector3 },
89 	{ "mso-spt39", mso_sptCurvedConnector4 },
90 	{ "mso-spt40", mso_sptCurvedConnector5 },
91 	{ "mso-spt41", mso_sptCallout1 },
92 	{ "mso-spt42", mso_sptCallout2 },
93 	{ "mso-spt43", mso_sptCallout3 },
94 	{ "mso-spt44", mso_sptAccentCallout1 },
95 	{ "mso-spt45", mso_sptAccentCallout2 },
96 	{ "mso-spt46", mso_sptAccentCallout3 },
97 	{ "line-callout-1", mso_sptBorderCallout1 },
98 	{ "line-callout-2", mso_sptBorderCallout2 },
99 	{ "mso-spt49", mso_sptBorderCallout3 },
100 	{ "mso-spt50", mso_sptAccentBorderCallout1 },
101 	{ "mso-spt51", mso_sptAccentBorderCallout2 },
102 	{ "mso-spt52", mso_sptAccentBorderCallout3 },
103 	{ "mso-spt53", mso_sptRibbon },
104 	{ "mso-spt54", mso_sptRibbon2 },
105 	{ "chevron", mso_sptChevron },
106 	{ "pentagon", mso_sptPentagon },
107 	{ "forbidden", mso_sptNoSmoking },
108 	{ "star8", mso_sptSeal8 },
109 	{ "mso-spt59", mso_sptSeal16 },
110 	{ "mso-spt60", mso_sptSeal32 },
111 	{ "rectangular-callout", mso_sptWedgeRectCallout },
112 	{ "round-rectangular-callout", mso_sptWedgeRRectCallout },
113 	{ "round-callout", mso_sptWedgeEllipseCallout },
114 	{ "mso-spt64", mso_sptWave },
115 	{ "paper", mso_sptFoldedCorner },
116 	{ "left-arrow", mso_sptLeftArrow },
117 	{ "down-arrow", mso_sptDownArrow },
118 	{ "up-arrow", mso_sptUpArrow },
119 	{ "left-right-arrow", mso_sptLeftRightArrow },
120 	{ "up-down-arrow", mso_sptUpDownArrow },
121 	{ "mso-spt71", mso_sptIrregularSeal1 },
122 	{ "bang", mso_sptIrregularSeal2 },
123 	{ "lightning", mso_sptLightningBolt },
124 	{ "heart", mso_sptHeart },
125 	{ "mso-spt75", mso_sptPictureFrame },
126 	{ "quad-arrow", mso_sptQuadArrow },
127 	{ "left-arrow-callout", mso_sptLeftArrowCallout },
128 	{ "right-arrow-callout", mso_sptRightArrowCallout },
129 	{ "up-arrow-callout", mso_sptUpArrowCallout },
130 	{ "down-arrow-callout", mso_sptDownArrowCallout },
131 	{ "left-right-arrow-callout", mso_sptLeftRightArrowCallout },
132 	{ "up-down-arrow-callout", mso_sptUpDownArrowCallout },
133 	{ "quad-arrow-callout", mso_sptQuadArrowCallout },
134 	{ "quad-bevel", mso_sptBevel },
135 	{ "left-bracket", mso_sptLeftBracket },
136 	{ "right-bracket", mso_sptRightBracket },
137 	{ "left-brace", mso_sptLeftBrace },
138 	{ "right-brace", mso_sptRightBrace },
139 	{ "mso-spt89", mso_sptLeftUpArrow },
140 	{ "mso-spt90", mso_sptBentUpArrow },
141 	{ "mso-spt91", mso_sptBentArrow },
142 	{ "star24", mso_sptSeal24 },
143 	{ "striped-right-arrow", mso_sptStripedRightArrow },
144 	{ "notched-right-arrow", mso_sptNotchedRightArrow },
145 	{ "block-arc", mso_sptBlockArc },
146 	{ "smiley", mso_sptSmileyFace },
147 	{ "vertical-scroll", mso_sptVerticalScroll },
148 	{ "horizontal-scroll", mso_sptHorizontalScroll },
149 	{ "circular-arrow", mso_sptCircularArrow },
150 	{ "mso-spt100", mso_sptNotchedCircularArrow },
151 	{ "mso-spt101", mso_sptUturnArrow },
152 	{ "mso-spt102", mso_sptCurvedRightArrow },
153 	{ "mso-spt103", mso_sptCurvedLeftArrow },
154 	{ "mso-spt104", mso_sptCurvedUpArrow },
155 	{ "mso-spt105", mso_sptCurvedDownArrow },
156 	{ "cloud-callout", mso_sptCloudCallout },
157 	{ "mso-spt107", mso_sptEllipseRibbon },
158 	{ "mso-spt108", mso_sptEllipseRibbon2 },
159 	{ "flowchart-process", mso_sptFlowChartProcess },
160 	{ "flowchart-decision", mso_sptFlowChartDecision },
161 	{ "flowchart-data", mso_sptFlowChartInputOutput },
162 	{ "flowchart-predefined-process", mso_sptFlowChartPredefinedProcess },
163 	{ "flowchart-internal-storage", mso_sptFlowChartInternalStorage },
164 	{ "flowchart-document", mso_sptFlowChartDocument },
165 	{ "flowchart-multidocument", mso_sptFlowChartMultidocument },
166 	{ "flowchart-terminator", mso_sptFlowChartTerminator },
167 	{ "flowchart-preparation", mso_sptFlowChartPreparation },
168 	{ "flowchart-manual-input", mso_sptFlowChartManualInput },
169 	{ "flowchart-manual-operation", mso_sptFlowChartManualOperation },
170 	{ "flowchart-connector", mso_sptFlowChartConnector },
171 	{ "flowchart-card", mso_sptFlowChartPunchedCard },
172 	{ "flowchart-punched-tape", mso_sptFlowChartPunchedTape },
173 	{ "flowchart-summing-junction", mso_sptFlowChartSummingJunction },
174 	{ "flowchart-or", mso_sptFlowChartOr },
175 	{ "flowchart-collate", mso_sptFlowChartCollate },
176 	{ "flowchart-sort", mso_sptFlowChartSort },
177 	{ "flowchart-extract", mso_sptFlowChartExtract },
178 	{ "flowchart-merge", mso_sptFlowChartMerge },
179 	{ "mso-spt129", mso_sptFlowChartOfflineStorage },
180 	{ "flowchart-stored-data", mso_sptFlowChartOnlineStorage },
181 	{ "flowchart-sequential-access", mso_sptFlowChartMagneticTape },
182 	{ "flowchart-magnetic-disk", mso_sptFlowChartMagneticDisk },
183 	{ "flowchart-direct-access-storage", mso_sptFlowChartMagneticDrum },
184 	{ "flowchart-display", mso_sptFlowChartDisplay },
185 	{ "flowchart-delay", mso_sptFlowChartDelay },
186 	{ "fontwork-plain-text", mso_sptTextPlainText },
187 	{ "fontwork-stop", mso_sptTextStop },
188 	{ "fontwork-triangle-up", mso_sptTextTriangle },
189 	{ "fontwork-triangle-down", mso_sptTextTriangleInverted },
190 	{ "fontwork-chevron-up", mso_sptTextChevron },
191 	{ "fontwork-chevron-down", mso_sptTextChevronInverted },
192 	{ "mso-spt142", mso_sptTextRingInside },
193 	{ "mso-spt143", mso_sptTextRingOutside },
194 	{ "fontwork-arch-up-curve", mso_sptTextArchUpCurve },
195 	{ "fontwork-arch-down-curve", mso_sptTextArchDownCurve },
196 	{ "fontwork-circle-curve", mso_sptTextCircleCurve },
197 	{ "fontwork-open-circle-curve", mso_sptTextButtonCurve },
198 	{ "fontwork-arch-up-pour", mso_sptTextArchUpPour },
199 	{ "fontwork-arch-down-pour", mso_sptTextArchDownPour },
200 	{ "fontwork-circle-pour", mso_sptTextCirclePour },
201 	{ "fontwork-open-circle-pour", mso_sptTextButtonPour },
202 	{ "fontwork-curve-up", mso_sptTextCurveUp },
203 	{ "fontwork-curve-down", mso_sptTextCurveDown },
204 	{ "fontwork-fade-up-and-right", mso_sptTextCascadeUp },
205 	{ "fontwork-fade-up-and-left", mso_sptTextCascadeDown },
206 	{ "fontwork-wave", mso_sptTextWave1 },
207 	{ "mso-spt157", mso_sptTextWave2 },
208 	{ "mso-spt158", mso_sptTextWave3 },
209 	{ "mso-spt159", mso_sptTextWave4 },
210 	{ "fontwork-inflate", mso_sptTextInflate },
211 	{ "mso-spt161", mso_sptTextDeflate },
212 	{ "mso-spt162", mso_sptTextInflateBottom },
213 	{ "mso-spt163", mso_sptTextDeflateBottom },
214 	{ "mso-spt164", mso_sptTextInflateTop },
215 	{ "mso-spt165", mso_sptTextDeflateTop },
216 	{ "mso-spt166", mso_sptTextDeflateInflate },
217 	{ "mso-spt167", mso_sptTextDeflateInflateDeflate },
218 	{ "fontwork-fade-right", mso_sptTextFadeRight },
219 	{ "fontwork-fade-left", mso_sptTextFadeLeft },
220 	{ "fontwork-fade-up", mso_sptTextFadeUp },
221 	{ "fontwork-fade-down", mso_sptTextFadeDown },
222 	{ "fontwork-slant-up", mso_sptTextSlantUp },
223 	{ "fontwork-slant-down", mso_sptTextSlantDown },
224 	{ "mso-spt174", mso_sptTextCanUp },
225 	{ "mso-spt175", mso_sptTextCanDown },
226 	{ "flowchart-alternate-process", mso_sptFlowChartAlternateProcess },
227 	{ "flowchart-off-page-connector", mso_sptFlowChartOffpageConnector },
228 	{ "mso-spt178", mso_sptCallout90 },
229 	{ "mso-spt179", mso_sptAccentCallout90 },
230 	{ "mso-spt180", mso_sptBorderCallout90 },
231 	{ "line-callout-3", mso_sptAccentBorderCallout90 },
232 	{ "mso-spt182", mso_sptLeftRightUpArrow },
233 	{ "sun", mso_sptSun },
234 	{ "moon", mso_sptMoon },
235 	{ "bracket-pair", mso_sptBracketPair },
236 	{ "brace-pair", mso_sptBracePair },
237 	{ "star4", mso_sptSeal4 },
238 	{ "mso-spt188", mso_sptDoubleWave },
239 	{ "mso-spt189", mso_sptActionButtonBlank },
240 	{ "mso-spt190", mso_sptActionButtonHome },
241 	{ "mso-spt191", mso_sptActionButtonHelp },
242 	{ "mso-spt192", mso_sptActionButtonInformation },
243 	{ "mso-spt193", mso_sptActionButtonForwardNext },
244 	{ "mso-spt194", mso_sptActionButtonBackPrevious },
245 	{ "mso-spt195", mso_sptActionButtonEnd },
246 	{ "mso-spt196", mso_sptActionButtonBeginning },
247 	{ "mso-spt197", mso_sptActionButtonReturn },
248 	{ "mso-spt198", mso_sptActionButtonDocument },
249 	{ "mso-spt199", mso_sptActionButtonSound },
250 	{ "mso-spt200", mso_sptActionButtonMovie },
251 	{ "mso-spt201", mso_sptHostControl },
252 	{ "mso-spt202", mso_sptTextBox },
253 	{ "teardrop",   mso_sptTearDrop }
254 };
255 
256 	// gallery: quadrat
257 	// gallery: round-quadrat
258 	// gallery: circle
259 	// gallery: circle-pie
260 	// gallery: frame
261 	// gallery: flower
262 	// gallery: cloud
263 	// gallery: puzzle
264 	// gallery: octagon-bevel
265 	// gallery: diamond-bevel
266 	// gallery: up-right-arrow
267 	// gallery: up-right-down-arrow
268 	// gallery: corner-right-arrow
269 	// gallery: split-arrow
270 	// gallery: up-right-arrow-callout
271 	// gallery: split-round-arrow
272 	// gallery: s-sharped-arrow
273 	// Gallery: star6
274 	// Gallery: star12
275 	// Gallery: concave-star6
276 	// Gallery: signet
277 	// Gallery: doorplate
278 	// gallery: fontwork-arch-left-curve
279 	// gallery: fontwork-arch-right-curve
280 	// gallery: fontwork-arch-left-pour
281 	// gallery: fontwork-arch-right-pour
282 
Get(const rtl::OUString & rShapeType)283 MSO_SPT EnhancedCustomShapeTypeNames::Get( const rtl::OUString& rShapeType )
284 {
285 	if ( !pHashMap )
286 	{	// init hash map
287 		::osl::MutexGuard aGuard( getHashMapMutex() );
288 		if ( !pHashMap )
289 		{
290 			TypeNameHashMap* pH = new TypeNameHashMap;
291 			const NameTypeTable* pPtr = pNameTypeTableArray;
292 			const NameTypeTable* pEnd = pPtr + ( sizeof( pNameTypeTableArray ) / sizeof( NameTypeTable ) );
293 			for ( ; pPtr < pEnd; pPtr++ )
294 				(*pH)[ pPtr->pS ] = pPtr->pE;
295 			pHashMap = pH;
296 		}
297 	}
298 	MSO_SPT eRetValue = mso_sptNil;
299 	int i, nLen = rShapeType.getLength();
300 	char* pBuf = new char[ nLen + 1 ];
301 	for ( i = 0; i < nLen; i++ )
302 		pBuf[ i ] = (char)rShapeType[ i ];
303 	pBuf[ i ] = 0;
304 	TypeNameHashMap::iterator aHashIter( pHashMap->find( pBuf ) );
305 	delete[] pBuf;
306 	if ( aHashIter != pHashMap->end() )
307 		eRetValue = (*aHashIter).second;
308 	return eRetValue;
309 }
310 
Get(const MSO_SPT eShapeType)311 rtl::OUString EnhancedCustomShapeTypeNames::Get( const MSO_SPT eShapeType )
312 {
313 	return eShapeType <= mso_sptTextBox
314 		? rtl::OUString::createFromAscii( pNameTypeTableArray[ eShapeType ].pS )
315 		: rtl::OUString();
316 }
317 typedef std::hash_map< const char*, const char*, std::hash<const char*>, TCheck> TypeACCNameHashMap;
318 static TypeACCNameHashMap* pACCHashMap = NULL;
319 struct ACCNameTypeTable
320 {
321 	const char*	pS;
322 	const char*	pE;
323 };
324 static const ACCNameTypeTable pACCNameTypeTableArray[] =
325 {
326 	{ "non-primitive", "Non Primitive Shape" },
327 	{ "rectangle", "Rectangle" },
328 	{ "round-rectangle", "Rounded Rectangle" },
329 	{ "ellipse", "Ellipse" },
330 	{ "diamond", "Diamond" },
331 	{ "isosceles-triangle", "Triangle" },
332 	{ "right-triangle", "Right Triangle" },
333 	{ "parallelogram", "Parallelogram" },
334 	{ "trapezoid", "Trapezoid" },
335 	{ "hexagon", "Hexagon" },
336 	{ "octagon", "Octagon" },
337 	{ "cross", "Cross" },
338 	{ "star5", "5-Point Star" },
339 	{ "right-arrow", "Right Arrow" },
340 	//{ "mso-spt14", mso_sptThickArrow },
341 	{ "pentagon-right", "Pentagon" },
342 	{ "cube", "Cube" },
343 	{ "mso-spt21", "Doorplate" },
344 	/*{ "mso-spt17", mso_sptBalloon },
345 	{ "mso-spt18", mso_sptSeal },
346 	{ "mso-spt19", mso_sptArc },
347 	{ "mso-spt20", mso_sptLine },
348 	{ "mso-spt21", mso_sptPlaque },
349 	{ "can", mso_sptCan },*/
350 	{ "ring", "Ring" },
351 	/*{ "mso-spt24", mso_sptTextSimple },
352 	{ "mso-spt25", mso_sptTextOctagon },
353 	{ "mso-spt26", mso_sptTextHexagon },
354 	{ "mso-spt27", mso_sptTextCurve },
355 	{ "mso-spt28", mso_sptTextWave },
356 	{ "mso-spt29", mso_sptTextRing },
357 	{ "mso-spt30", mso_sptTextOnCurve },
358 	{ "mso-spt31", mso_sptTextOnRing },
359 	{ "mso-spt32", mso_sptStraightConnector1 },
360 	{ "mso-spt33", mso_sptBentConnector2 },
361 	{ "mso-spt34", mso_sptBentConnector3 },
362 	{ "mso-spt35", mso_sptBentConnector4 },
363 	{ "mso-spt36", mso_sptBentConnector5 },
364 	{ "mso-spt37", mso_sptCurvedConnector2 },
365 	{ "mso-spt38", mso_sptCurvedConnector3 },
366 	{ "mso-spt39", mso_sptCurvedConnector4 },
367 	{ "mso-spt40", mso_sptCurvedConnector5 },
368 	{ "mso-spt41", mso_sptCallout1 },
369 	{ "mso-spt42", mso_sptCallout2 },
370 	{ "mso-spt43", mso_sptCallout3 },
371 	{ "mso-spt44", mso_sptAccentCallout1 },
372 	{ "mso-spt45", mso_sptAccentCallout2 },
373 	{ "mso-spt46", mso_sptAccentCallout3 },*/
374 	{ "line-callout-1", "Line Callout 1" },
375 	{ "line-callout-2", "Line Callout 2" },
376 	/*{ "mso-spt49", mso_sptBorderCallout3 },
377 	{ "mso-spt50", mso_sptAccentBorderCallout1 },
378 	{ "mso-spt51", mso_sptAccentBorderCallout2 },
379 	{ "mso-spt52", mso_sptAccentBorderCallout3 },
380 	{ "mso-spt53", mso_sptRibbon },
381 	{ "mso-spt54", mso_sptRibbon2 },*/
382 	{ "chevron", "Chevron" },
383 	{ "pentagon", "Regular Pentagon" },
384 	{ "forbidden", "'No' Symbol" },
385 	{ "star8", "8-Point Star" },
386 	/*{ "mso-spt59", mso_sptSeal16 },
387 	{ "mso-spt60", mso_sptSeal32 },*/
388 	{ "rectangular-callout", "Rectangular Callout" },
389 	{ "round-rectangular-callout", "Rounded Rectangular Callout" },
390 	{ "round-callout", "Round Callout" },
391 	//{ "mso-spt64", mso_sptWave },
392 	{ "paper", "Folded Corner" },
393 	{ "left-arrow", "Left Arrow" },
394 	{ "down-arrow", "Down Arrow" },
395 	{ "up-arrow", "Up Arrow" },
396 	{ "left-right-arrow", "Left and Right Arrow" },
397 	{ "up-down-arrow", "Up and Down Arrow" },
398 	//{ "mso-spt71", mso_sptIrregularSeal1 },
399 	{ "bang", "Explosion" },
400 	{ "lightning", "Lighting Bolt" },
401 	{ "heart", "Heart" },
402 	//{ "mso-spt75", mso_sptPictureFrame },
403 	{ "quad-arrow", "4-Way Arrow" },
404 	{ "left-arrow-callout", "Left Arrow Callout" },
405 	{ "right-arrow-callout", "Right Arrow Callout" },
406 	{ "up-arrow-callout", "Up Arrow Callout" },
407 	{ "down-arrow-callout", "Down Arrow Callout" },
408 	{ "left-right-arrow-callout", "Left and Right Arrow Callout" },
409 	{ "up-down-arrow-callout", "Up and Down Arrow Callout" },
410 	{ "quad-arrow-callout", "4-Way Arrow Callout" },
411 	{ "quad-bevel", "Square Bevel" },
412 	{ "left-bracket", "Left Bracket" },
413 	{ "right-bracket", "Right Bracket" },
414 	{ "left-brace", "Left Brace" },
415 	{ "right-brace", "Right Brace" },
416 	{ "mso-spt89", "Up and Left Arrow" },
417 	//{ "mso-spt90", mso_sptBentUpArrow },
418 	//{ "mso-spt91", mso_sptBentArrow },
419 	{ "star24", "24-Point Star" },
420 	{ "striped-right-arrow", "Striped Right Arrow" },
421 	{ "notched-right-arrow", "Notched Right Arrow" },
422 	{ "block-arc", "Block Arc" },
423 	{ "smiley", "Smile Face" },
424 	{ "vertical-scroll", "Vertical Scroll" },
425 	{ "horizontal-scroll", "Horizontal Scroll" },
426 	{ "circular-arrow", "Circular Arrow" },
427 	{ "mso-spt100", "Notched Circular Arrow" },
428 	/*
429 	{ "mso-spt101", mso_sptUturnArrow },
430 	{ "mso-spt102", mso_sptCurvedRightArrow },
431 	{ "mso-spt103", mso_sptCurvedLeftArrow },
432 	{ "mso-spt104", mso_sptCurvedUpArrow },
433 	{ "mso-spt105", mso_sptCurvedDownArrow },*/
434 	{ "cloud-callout", "Cloud Callout" },
435 	/*{ "mso-spt107", mso_sptEllipseRibbon },
436 	{ "mso-spt108", mso_sptEllipseRibbon2 },*/
437 	{ "flowchart-process", "Flowchart:Process" },
438 	{ "flowchart-decision", "Flowchart:Decision" },
439 	{ "flowchart-data", "Flowchart:Data" },
440 	{ "flowchart-predefined-process", "Flowchart:Predefined Process" },
441 	{ "flowchart-internal-storage", "Flowchart:Internal Storage" },
442 	{ "flowchart-document", "Flowchart:Document" },
443 	{ "flowchart-multidocument", "Flowchart:Multidocument" },
444 	{ "flowchart-terminator", "Flowchart:Terminator" },
445 	{ "flowchart-preparation", "Flowchart:Preparation" },
446 	{ "flowchart-manual-input", "Flowchart:Manual Input" },
447 	{ "flowchart-manual-operation", "Flowchart:Manual Operation" },
448 	{ "flowchart-connector", "Flowchart:Connector" },
449 	{ "flowchart-card", "Flowchart:Card" },
450 	{ "flowchart-punched-tape", "Flowchart:Punched Tape" },
451 	{ "flowchart-summing-junction", "Flowchart:Summing Junction" },
452 	{ "flowchart-or", "Flowchart:Or" },
453 	{ "flowchart-collate", "Flowchart:Collate" },
454 	{ "flowchart-sort", "Flowchart:Sort" },
455 	{ "flowchart-extract", "Flowchart:Extract" },
456 	{ "flowchart-merge", "Flowchart:Merge" },
457 	//{ "mso-spt129", mso_sptFlowChartOfflineStorage },
458 	{ "flowchart-stored-data", "Flowchart:Stored Data" },
459 	{ "flowchart-sequential-access", "drawingbar.fc.25=Flowchart:Sequential Access" },
460 	{ "flowchart-magnetic-disk", "Flowchart:Magnetic Disk" },
461 	{ "flowchart-direct-access-storage", "Flowchart:Direct Access Storage" },
462 	{ "flowchart-display", "Flowchart:Display" },
463 	{ "flowchart-delay", "Flowchart:Delay" },
464 	/*{ "fontwork-plain-text", mso_sptTextPlainText },
465 	{ "fontwork-stop", mso_sptTextStop },
466 	{ "fontwork-triangle-up", mso_sptTextTriangle },
467 	{ "fontwork-triangle-down", mso_sptTextTriangleInverted },
468 	{ "fontwork-chevron-up", mso_sptTextChevron },
469 	{ "fontwork-chevron-down", mso_sptTextChevronInverted },
470 	{ "mso-spt142", mso_sptTextRingInside },
471 	{ "mso-spt143", mso_sptTextRingOutside },
472 	{ "fontwork-arch-up-curve", mso_sptTextArchUpCurve },
473 	{ "fontwork-arch-down-curve", mso_sptTextArchDownCurve },
474 	{ "fontwork-circle-curve", mso_sptTextCircleCurve },
475 	{ "fontwork-open-circle-curve", mso_sptTextButtonCurve },
476 	{ "fontwork-arch-up-pour", mso_sptTextArchUpPour },
477 	{ "fontwork-arch-down-pour", mso_sptTextArchDownPour },
478 	{ "fontwork-circle-pour", mso_sptTextCirclePour },
479 	{ "fontwork-open-circle-pour", mso_sptTextButtonPour },
480 	{ "fontwork-curve-up", mso_sptTextCurveUp },
481 	{ "fontwork-curve-down", mso_sptTextCurveDown },
482 	{ "fontwork-fade-up-and-right", mso_sptTextCascadeUp },
483 	{ "fontwork-fade-up-and-left", mso_sptTextCascadeDown },
484 	{ "fontwork-wave", mso_sptTextWave1 },
485 	{ "mso-spt157", mso_sptTextWave2 },
486 	{ "mso-spt158", mso_sptTextWave3 },
487 	{ "mso-spt159", mso_sptTextWave4 },
488 	{ "fontwork-inflate", mso_sptTextInflate },
489 	{ "mso-spt161", mso_sptTextDeflate },
490 	{ "mso-spt162", mso_sptTextInflateBottom },
491 	{ "mso-spt163", mso_sptTextDeflateBottom },
492 	{ "mso-spt164", mso_sptTextInflateTop },
493 	{ "mso-spt165", mso_sptTextDeflateTop },
494 	{ "mso-spt166", mso_sptTextDeflateInflate },
495 	{ "mso-spt167", mso_sptTextDeflateInflateDeflate },
496 	{ "fontwork-fade-right", mso_sptTextFadeRight },
497 	{ "fontwork-fade-left", mso_sptTextFadeLeft },
498 	{ "fontwork-fade-up", mso_sptTextFadeUp },
499 	{ "fontwork-fade-down", mso_sptTextFadeDown },
500 	{ "fontwork-slant-up", mso_sptTextSlantUp },
501 	{ "fontwork-slant-down", mso_sptTextSlantDown },
502 	{ "mso-spt174", mso_sptTextCanUp },
503 	{ "mso-spt175", mso_sptTextCanDown },*/
504 	{ "flowchart-alternate-process", "Flowchart:Alternate Process " },
505 	{ "flowchart-off-page-connector", "Flowchart:Off-page Connector" },
506 	/*{ "mso-spt178", mso_sptCallout90 },
507 	{ "mso-spt179", mso_sptAccentCallout90 },
508 	{ "mso-spt180", mso_sptBorderCallout90 },*/
509 	{ "line-callout-3", "Line Callout 3" },
510 	//{ "mso-spt182", mso_sptLeftRightUpArrow },
511 	{ "sun", "Sun" },
512 	{ "moon", "Moon" },
513 	{ "bracket-pair", "Double Bracket" },
514 	{ "brace-pair", "Double Brace" },
515 	{ "star4", "4-Point Star" },
516 	/*{ "mso-spt188", mso_sptDoubleWave },
517 	{ "mso-spt189", mso_sptActionButtonBlank },
518 	{ "mso-spt190", mso_sptActionButtonHome },
519 	{ "mso-spt191", mso_sptActionButtonHelp },
520 	{ "mso-spt192", mso_sptActionButtonInformation },
521 	{ "mso-spt193", mso_sptActionButtonForwardNext },
522 	{ "mso-spt194", mso_sptActionButtonBackPrevious },
523 	{ "mso-spt195", mso_sptActionButtonEnd },
524 	{ "mso-spt196", mso_sptActionButtonBeginning },
525 	{ "mso-spt197", mso_sptActionButtonReturn },
526 	{ "mso-spt198", mso_sptActionButtonDocument },
527 	{ "mso-spt199", mso_sptActionButtonSound },
528 	{ "mso-spt200", mso_sptActionButtonMovie },
529 	{ "mso-spt201", mso_sptHostControl },
530 	{ "mso-spt202", mso_sptTextBox },*/
531 	{ "frame", "Frame" },
532 	{ "col-60da8460", "Octagon Bevel" },
533 	{ "col-502ad400", "Diamond Bevel" }
534 };
GetAccName(const rtl::OUString & rShapeType)535 rtl::OUString EnhancedCustomShapeTypeNames::GetAccName( const rtl::OUString& rShapeType )
536 {
537 	if ( !pACCHashMap )
538 	{	// init hash map
539 		::osl::MutexGuard aGuard( getHashMapMutex() );
540 		if ( !pACCHashMap )
541 		{
542 			TypeACCNameHashMap* pH = new TypeACCNameHashMap;
543 			const ACCNameTypeTable* pPtr = pACCNameTypeTableArray;
544 			const ACCNameTypeTable* pEnd = pPtr + ( sizeof( pACCNameTypeTableArray ) / sizeof( ACCNameTypeTable ) );
545 			for ( ; pPtr < pEnd; pPtr++ )
546 				(*pH)[ pPtr->pS ] = pPtr->pE;
547 			pACCHashMap = pH;
548 		}
549 	}
550 	rtl::OUString sRetValue;
551 	int i, nLen = rShapeType.getLength();
552 	char* pBuf = new char[ nLen + 1 ];
553 	for ( i = 0; i < nLen; i++ )
554 		pBuf[ i ] = (char)rShapeType[ i ];
555 	pBuf[ i ] = 0;
556 	TypeACCNameHashMap::iterator aHashIter( pACCHashMap->find( pBuf ) );
557 	delete[] pBuf;
558 	if ( aHashIter != pACCHashMap->end() )
559 		sRetValue = rtl::OUString::createFromAscii( (*aHashIter).second );
560 	return sRetValue;
561 }
562