1/****************************************************************************************
2
3 Copyright (C) 2015 Autodesk, Inc.
4 All rights reserved.
5
6 Use of this software is subject to the terms of the Autodesk license agreement
7 provided at the time of installation or download, or which otherwise accompanies
8 this software in either electronic or hard copy form.
9
10****************************************************************************************/
11
12//! \file fbxrenamingstrategyutilities.h
13#ifndef _FBXSDK_UTILS_RENAMINGSTRATEGY_UTILITIES_H_
14#define _FBXSDK_UTILS_RENAMINGSTRATEGY_UTILITIES_H_
15
16#include <fbxsdk/fbxsdk_def.h>
17
18#include <fbxsdk/core/base/fbxstring.h>
19
20#include <fbxsdk/fbxsdk_nsbegin.h>
21
22#define NAMECLASH1_KEY "_ncl1_" // name (x)
23#define NAMECLASH2_KEY "_ncl2_" // Upper/lower cases clash
24
25#define UPPERTOLOWER_KEY "ul"
26#define LOWERTOUPPER_KEY "lu"
27
28/** \brief This class contains a set of utilities, which are used by the FBX renaming strategy.
29* \nosubgrouping
30*/
31class FBXSDK_DLL FbxRenamingStrategyUtils
32{
33public:
34
35 /** Check if the string has non alphanumeric characters and replace them with a special string containing a prefix and
36 * the character code.
37 * \param pString String to be processed. The result of the conversion is also returned in this string.
38 * \param pFirstCharMustBeAlphaOnly This flag tells whether the first char of the string must be alpha only. Its default
39 * value is \c false.
40 * \param pPermittedChars List of non alphanumeric characters that do not require to be converted because already
41 * supported by the destination application. When encountered, these characters are simply
42 * skipped and left as is.
43 * \param p8bitCharsOnly When \c true, this flag tells the routine that only 8 bit coded characters can be
44 * represented by the encoding format (see note below). If set to \c false, the range of supported
45 * character is increased and the memory usage may be less. But the routine will perform slower
46 * because of the internal conversions required.
47 * \return Returns \c true if at least one character in \c pString has been encoded.
48 * \note The encoding string depends on the value of \c p8bitCharsOnly argument. When this parameter value is \c true,
49 * each non-alphanumeric character is replaced with FBXASC### (where ### is the decimal code of the character).
50 * Inversely, when the value is \c false, each non-alphanumeric characters is replaced with FBXCHR##### (where
51 * ##### is the hexadecimal representation of the character code).
52 */
53 static bool EncodeNonAlpha(FbxString &pString, bool pFirstCharMustBeAlphaOnly=false, FbxString pPermittedChars="", bool p8bitCharsOnly = true);
54
55 /** Take a string that has been encoded by EncodeNonAlpha and re-extract the non-alphanumeric values.
56 * \param pString String to be processed. The result of the conversion is also returned in this string.
57 * \return Returns \c true if the \c pString argument has been decoded.
58 */
59 static bool DecodeNonAlpha(FbxString &pString);
60
61 /** This method will add the _ncl1_ with the provided pInstanceNumber to the string
62 * \param pString
63 * \param pInstanceNumber Its default value is 0.
64 * \return Always returns true.
65 * \remarks please ALWAYS call Encode Duplicate BEFORE Encode Case Insensitive.
66 */
67 static bool EncodeDuplicate(FbxString &pString, int pInstanceNumber=0);
68
69 /** This method will remove the _ncl1_xxx from the given string
70 * \param pString
71 * \return Returns true if the pString has been modified
72 */
73 static bool DecodeDuplicate(FbxString &pString);
74
75 /** This method will compare pString and pString2, set pString to pString2 and append the ncl2 suffix to it
76 * \param pString
77 * \param pString2
78 * \return Returns true if the pString has been modified
79 * \remarks pString and pString2 must be identical except for casing.
80 */
81 static bool EncodeCaseInsensitive(FbxString &pString, const FbxString pString2);
82
83 /** This method will decode a string that has a ncl2 to it
84 * \param pString
85 * \return Returns true if the pString has been modified
86 */
87 static bool DecodeCaseInsensitive(FbxString &pString);
88
89};
90
91#include <fbxsdk/fbxsdk_nsend.h>
92
93#endif /* _FBXSDK_UTILS_RENAMINGSTRATEGY_UTILITIES_H_ */
94