KiCad PCB EDA Suite
string_utils.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2004-2021 KiCad Developers, see change_log.txt for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, you may find one here:
18 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19 * or you may search the http://www.gnu.org website for the version 2 license,
20 * or you may write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22 */
23
24#ifndef STRING_UTILS_H
25#define STRING_UTILS_H
26
27#include "config.h"
28
29#include <string>
30#include <vector>
31#include <wx/string.h>
32#include <wx/filename.h>
33
34
35void ConvertMarkdown2Html( const wxString& aMarkdownInput, wxString& aHtmlOutput );
36
40wxString ConvertToNewOverbarNotation( const wxString& aOldStr );
41
47bool ConvertSmartQuotesAndDashes( wxString* aString );
48
53{
62 CTX_NO_SPACE // to replace spaces in names that do not accept spaces
63};
64
72wxString EscapeString( const wxString& aSource, ESCAPE_CONTEXT aContext );
73
74wxString UnescapeString( const wxString& aSource );
75
79wxString PrettyPrintForMenu( const wxString& aString );
80
84wxString TitleCaps( const wxString& aString );
85
99int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize );
100
109int ReadDelimitedText( wxString* aDest, const char* aSource );
110
120std::string EscapedUTF8( const wxString& aString );
121
125wxString EscapeHTML( const wxString& aString );
126
132char* GetLine( FILE* aFile, char* Line, int* LineNum = nullptr, int SizeLine = 255 );
133
137bool NoPrintableChars( const wxString& aString );
138
143int PrintableCharCount( const wxString& aString );
144
150char* StrPurge( char* text );
151
155wxString DateAndTime();
156
171int StrNumCmp( const wxString& aString1, const wxString& aString2, bool aIgnoreCase = false );
172
178bool WildCompareString( const wxString& pattern,
179 const wxString& string_to_tst,
180 bool case_sensitive = true );
181
189int ValueStringCompare( const wxString& strFWord, const wxString& strSWord );
190
197int SplitString( const wxString& strToSplit,
198 wxString* strBeginning,
199 wxString* strDigits,
200 wxString* strEnd );
201
208int GetTrailingInt( const wxString& aStr );
209
214
229bool ReplaceIllegalFileNameChars( std::string* aName, int aReplaceChar = 0 );
230bool ReplaceIllegalFileNameChars( wxString& aName, int aReplaceChar = 0 );
231
232#ifndef HAVE_STRTOKR
233// common/strtok_r.c optionally:
234extern "C" char* strtok_r( char* str, const char* delim, char** nextp );
235#endif
236
237
244{
245 bool operator() ( const wxString& strA, const wxString& strB ) const
246 {
247 wxString::const_reverse_iterator sA = strA.rbegin();
248 wxString::const_reverse_iterator eA = strA.rend();
249
250 wxString::const_reverse_iterator sB = strB.rbegin();
251 wxString::const_reverse_iterator eB = strB.rend();
252
253 if( strA.empty() )
254 {
255 if( strB.empty() )
256 return false;
257
258 // note: this rule implies that a null string is first in the sort order
259 return true;
260 }
261
262 if( strB.empty() )
263 return false;
264
265 while( sA != eA && sB != eB )
266 {
267 if( ( *sA ) == ( *sB ) )
268 {
269 ++sA;
270 ++sB;
271 continue;
272 }
273
274 if( ( *sA ) < ( *sB ) )
275 return true;
276 else
277 return false;
278 }
279
280 if( sB == eB )
281 return false;
282
283 return true;
284 }
285};
286
296static inline std::vector<std::string> split( const std::string& aStr, const std::string& aDelim )
297{
298 size_t pos = 0;
299 size_t last_pos = 0;
300 size_t len;
301
302 std::vector<std::string> tokens;
303
304 while( pos < aStr.size() )
305 {
306 pos = aStr.find_first_of( aDelim, last_pos );
307
308 if( pos == std::string::npos )
309 pos = aStr.size();
310
311 len = pos - last_pos;
312
313 tokens.push_back( aStr.substr( last_pos, len ) );
314
315 last_pos = pos + 1;
316 }
317
318 return tokens;
319}
320
322inline void AccumulateDescription( wxString& aDesc, const wxString& aItem )
323{
324 if( !aDesc.IsEmpty() )
325 aDesc << wxT( ", " );
326
327 aDesc << aItem;
328}
329
337void wxStringSplit( const wxString& aText, wxArrayString& aStrings, wxChar aSplitter );
338
345void StripTrailingZeros( wxString& aStringValue, unsigned aTrailingZeroAllowed = 1 );
346
356std::string UIDouble2Str( double aValue );
357
366std::string FormatDouble2Str( double aValue );
367
368#endif // STRING_UTILS_H
wxString DateAndTime()
wxString EscapeHTML(const wxString &aString)
Return a new wxString escaped for embedding in HTML.
wxString ConvertToNewOverbarNotation(const wxString &aOldStr)
Convert the old ~...~ overbar notation to the new ~{...} one.
int GetTrailingInt(const wxString &aStr)
Gets the trailing int, if any, from a string.
wxString UnescapeString(const wxString &aSource)
bool WildCompareString(const wxString &pattern, const wxString &string_to_tst, bool case_sensitive=true)
Compare a string against wild card (* and ?) pattern using the usual rules.
wxString GetIllegalFileNameWxChars()
bool ConvertSmartQuotesAndDashes(wxString *aString)
Convert curly quotes and em/en dashes to straight quotes and dashes.
char * GetLine(FILE *aFile, char *Line, int *LineNum=nullptr, int SizeLine=255)
Read one line line from aFile.
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
int StrNumCmp(const wxString &aString1, const wxString &aString2, bool aIgnoreCase=false)
Compare two strings with alphanumerical content.
char * strtok_r(char *str, const char *delim, char **nextp)
int ReadDelimitedText(char *aDest, const char *aSource, int aDestSize)
Copy bytes from aSource delimited string segment to aDest buffer.
wxString TitleCaps(const wxString &aString)
Capitalize the first letter in each word.
void StripTrailingZeros(wxString &aStringValue, unsigned aTrailingZeroAllowed=1)
Remove trailing zeros from a string containing a converted float number.
std::string UIDouble2Str(double aValue)
Print a float number without using scientific notation and no trailing 0 We want to avoid scientific ...
ESCAPE_CONTEXT
Escape/Unescape routines to safely encode reserved-characters in various contexts.
Definition: string_utils.h:53
@ CTX_FILENAME
Definition: string_utils.h:61
@ CTX_QUOTED_STR
Definition: string_utils.h:57
@ CTX_LINE
Definition: string_utils.h:59
@ CTX_NO_SPACE
Definition: string_utils.h:62
@ CTX_LIBID
Definition: string_utils.h:55
@ CTX_NETNAME
Definition: string_utils.h:54
@ CTX_CSV
Definition: string_utils.h:60
@ CTX_IPC
Definition: string_utils.h:56
@ CTX_JS_STR
Definition: string_utils.h:58
static std::vector< std::string > split(const std::string &aStr, const std::string &aDelim)
Split the input string into a vector of output strings.
Definition: string_utils.h:296
std::string FormatDouble2Str(double aValue)
Print a float number without using scientific notation and no trailing 0 This function is intended in...
int PrintableCharCount(const wxString &aString)
Return the number of printable (ie: non-formatting) chars.
std::string EscapedUTF8(const wxString &aString)
Return an 8 bit UTF8 string given aString in Unicode form.
wxString PrettyPrintForMenu(const wxString &aString)
Remove markup (such as overbar or subscript) that we can't render to menu items.
void ConvertMarkdown2Html(const wxString &aMarkdownInput, wxString &aHtmlOutput)
void AccumulateDescription(wxString &aDesc, const wxString &aItem)
Utility to build comma separated lists in messages.
Definition: string_utils.h:322
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
int ValueStringCompare(const wxString &strFWord, const wxString &strSWord)
Compare strings like the strcmp function but handle numbers and modifiers within the string text corr...
int SplitString(const wxString &strToSplit, wxString *strBeginning, wxString *strDigits, wxString *strEnd)
Break a string into three parts: he alphabetic preamble, the numeric part, and any alphabetic ending.
char * StrPurge(char *text)
Remove leading and training spaces, tabs and end of line chars in text.
bool NoPrintableChars(const wxString &aString)
Return true if the string is empty or contains only whitespace.
bool ReplaceIllegalFileNameChars(std::string *aName, int aReplaceChar=0)
Checks aName for illegal file name characters.
A helper for sorting strings from the rear.
Definition: string_utils.h:244
bool operator()(const wxString &strA, const wxString &strB) const
Definition: string_utils.h:245