1 /***********************************************************************
2     created:    30/5/2004
3     author:     Paul D Turner
4 
5     purpose:    Interface to a static class containing some utility
6                 functions for text / string operations
7 *************************************************************************/
8 /***************************************************************************
9  *   Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
10  *
11  *   Permission is hereby granted, free of charge, to any person obtaining
12  *   a copy of this software and associated documentation files (the
13  *   "Software"), to deal in the Software without restriction, including
14  *   without limitation the rights to use, copy, modify, merge, publish,
15  *   distribute, sublicense, and/or sell copies of the Software, and to
16  *   permit persons to whom the Software is furnished to do so, subject to
17  *   the following conditions:
18  *
19  *   The above copyright notice and this permission notice shall be
20  *   included in all copies or substantial portions of the Software.
21  *
22  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
25  *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
26  *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
27  *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
28  *   OTHER DEALINGS IN THE SOFTWARE.
29  ***************************************************************************/
30 #ifndef _CEGUITextUtils_h_
31 #define _CEGUITextUtils_h_
32 
33 #include "CEGUI/Base.h"
34 #include "CEGUI/String.h"
35 #include <vector>
36 
37 // Start of CEGUI namespace section
38 namespace CEGUI
39 {
40 /*!
41 \brief
42     Text utility support class.  This class is all static members.  You do not create instances of this class.
43 */
44 class CEGUIEXPORT TextUtils
45 {
46 public:
47     /*************************************************************************
48         Constants
49     *************************************************************************/
50     static const String DefaultWhitespace;      //!< The default set of whitespace
51     static const String DefaultAlphanumerical;  //!< default set of alphanumericals.
52     static const String DefaultWrapDelimiters;  //!< The default set of word-wrap delimiters
53 
54 
55     /*************************************************************************
56         Methods
57     *************************************************************************/
58     /*!
59     \brief
60         return a String containing the the next word in a String.
61 
62         This method returns a String object containing the the word, starting at index \a start_idx, of String \a str
63         as delimited by the code points specified in string \a delimiters (or the ends of the input string).
64 
65     \param str
66         String object containing the input data.
67 
68     \param start_idx
69         index into \a str where the search for the next word is to begin.  Defaults to start of \a str.
70 
71     \param delimiters
72         String object containing the set of delimiter code points to be used when determining the start and end
73         points of a word in string \a str.  Defaults to whitespace.
74 
75     \return
76         String object containing the next \a delimiters delimited word from \a str, starting at index \a start_idx.
77     */
78     static  String  getNextWord(const String& str, String::size_type start_idx = 0, const String& delimiters = DefaultWhitespace);
79 
80 
81     /*!
82     \brief
83         Return the index of the first character of the word at \a idx.
84 
85     /note
86         This currently uses DefaultWhitespace and DefaultAlphanumerical to determine groupings for what constitutes a 'word'.
87 
88     \param str
89         String containing text.
90 
91     \param idx
92         Index into \a str where search for start of word is to begin.
93 
94     \return
95         Index into \a str which marks the begining of the word at index \a idx.
96     */
97     static  String::size_type   getWordStartIdx(const String& str, String::size_type idx);
98 
99 
100     /*!
101     \brief
102         Return the index of the first character of the word after the word at \a idx.
103 
104     /note
105         This currently uses DefaultWhitespace and DefaultAlphanumerical to determine groupings for what constitutes a 'word'.
106 
107     \param str
108         String containing text.
109 
110     \param idx
111         Index into \a str where search is to begin.
112 
113     \return
114         Index into \a str which marks the begining of the word at after the word at index \a idx.
115         If \a idx is within the last word, then the return is the last index in \a str.
116     */
117     static  String::size_type   getNextWordStartIdx(const String& str, String::size_type idx);
118 
119 
120     /*!
121     \brief
122         Trim all characters from the set specified in \a chars from the begining of \a str.
123 
124     \param str
125         String object to be trimmed.
126 
127     \param chars
128         String object containing the set of code points to be trimmed.
129     */
130     static  void    trimLeadingChars(String& str, const String& chars);
131 
132 
133     /*!
134     \brief
135         Trim all characters from the set specified in \a chars from the end of \a str.
136 
137     \param str
138         String object to be trimmed.
139 
140     \param chars
141         String object containing the set of code points to be trimmed.
142     */
143     static  void    trimTrailingChars(String& str, const String& chars);
144 
145 private:
146     /*************************************************************************
147         Data
148     *************************************************************************/
149     static  String      d_delimiters;           //!< Current set of delimiters.
150     static  String      d_whitespace;           //!< Current set of whitespace.
151 
152 
153     /*************************************************************************
154         Construction / Destruction
155     *************************************************************************/
156     /*!
157     \brief
158         Constructor and Destructor are private.  This class has all static members.
159     */
160     TextUtils(void);
161     ~TextUtils(void);
162 };
163 
164 } // End of  CEGUI namespace section
165 
166 
167 #endif  // end of guard _CEGUITextUtils_h_
168