X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Flstrings.h;h=87e7f242fd7691785e12966ba4f5ad98f444537b;hb=e4c3ce462791c85922d919f8859e3408f57d10fa;hp=995d96b0809c15c815931fb3a2b24d5b11e24425;hpb=342cdf432246110db37bee4e0aebb4b72c933ddb;p=lyx.git diff --git a/src/support/lstrings.h b/src/support/lstrings.h index 995d96b080..87e7f242fd 100644 --- a/src/support/lstrings.h +++ b/src/support/lstrings.h @@ -16,8 +16,9 @@ #ifndef LSTRINGS_H #define LSTRINGS_H +#include "support/docstring.h" + #include -#include namespace lyx { @@ -25,10 +26,14 @@ namespace support { /// int compare_no_case(std::string const & s, std::string const & s2); +int compare_no_case(docstring const & s, docstring const & s2); /// int compare_ascii_no_case(std::string const & s, std::string const & s2); +/// +int compare_ascii_no_case(docstring const & s, docstring const & s2); + /// int compare_no_case(std::string const & s, std::string const & s2, unsigned int len); @@ -63,23 +68,39 @@ bool isStrUnsignedInt(std::string const & str); /// bool isStrDbl(std::string const & str); +bool isHex(lyx::docstring const & str); + +int hexToInt(lyx::docstring const & str); + +/// is \p str pure ascii? +bool isAscii(docstring const & str); + /// char lowercase(char c); /// char uppercase(char c); +/// changes the case only if c is a one-byte char +char_type lowercase(char_type c); + +/// changes the case only if c is a one-byte char +char_type uppercase(char_type c); + /// same as lowercase(), but ignores locale std::string const ascii_lowercase(std::string const &); +docstring const ascii_lowercase(docstring const &); /// std::string const lowercase(std::string const &); +docstring const lowercase(docstring const &); /// std::string const uppercase(std::string const &); /// Does the std::string start with this prefix? bool prefixIs(std::string const &, std::string const &); +bool prefixIs(lyx::docstring const &, lyx::docstring const &); /// Does the string end with this char? bool suffixIs(std::string const &, char); @@ -88,12 +109,26 @@ bool suffixIs(std::string const &, char); bool suffixIs(std::string const &, std::string const &); /// -template -bool contains(std::string const & a, B b) +inline bool contains(std::string const & a, std::string const & b) { return a.find(b) != std::string::npos; } +inline bool contains(docstring const & a, docstring const & b) +{ + return a.find(b) != docstring::npos; +} + +inline bool contains(std::string const & a, char b) +{ + return a.find(b) != std::string::npos; +} + +inline bool contains(docstring const & a, char_type b) +{ + return a.find(b) != docstring::npos; +} + /// bool containsOnly(std::string const &, std::string const &); @@ -107,6 +142,7 @@ bool containsOnly(std::string const &, std::string const &); */ std::string const token(std::string const & a, char delim, int n); +docstring const token(docstring const & a, char_type delim, int n); /** Search a token in this string using the delim. Doesn't modify the original string. Returns -1 in case of @@ -123,10 +159,24 @@ int tokenPos(std::string const & a, char delim, std::string const & tok); /// Substitute all \a oldchar with \a newchar std::string const subst(std::string const & a, char oldchar, char newchar); +/// Substitute all \a oldchar with \a newchar +docstring const subst(docstring const & a, char_type oldchar, char_type newchar); + /// substitutes all instances of \a oldstr with \a newstr std::string const subst(std::string const & a, std::string const & oldstr, std::string const & newstr); +/// substitutes all instances of \a oldstr with \a newstr +docstring const subst(docstring const & a, + docstring const & oldstr, docstring const & newstr); + +/** Trims characters off the end and beginning of a string. + \code + trim("ccabccc", "c") == "ab". + \endcode +*/ +docstring const trim(docstring const & a, char const * p = " "); + /** Trims characters off the end and beginning of a string. \code trim("ccabccc", "c") == "ab". @@ -140,13 +190,15 @@ std::string const trim(std::string const & a, char const * p = " "); \endcode */ std::string const rtrim(std::string const & a, char const * p = " "); +docstring const rtrim(docstring const & a, char const * p = " "); /** Trims characters off the beginning of a string. \code - ltrim("ababcdef", "ab") = "cdef" + ("ababcdef", "ab") = "cdef" \endcode */ std::string const ltrim(std::string const & a, char const * p = " "); +docstring const ltrim(docstring const & a, char const * p = " "); /** Splits the string by the first delim. Splits the string by the first appearance of delim. @@ -158,6 +210,7 @@ std::string const ltrim(std::string const & a, char const * p = " "); \endcode */ std::string const split(std::string const & a, std::string & piece, char delim); +docstring const split(docstring const & a, docstring & piece, char_type delim); /// Same as split but does not return a piece std::string const split(std::string const & a, char delim); @@ -165,62 +218,75 @@ std::string const split(std::string const & a, char delim); /// Same as split but uses the last delim. std::string const rsplit(std::string const & a, std::string & piece, char delim); -/// Escapes non ASCII chars -std::string const escape(std::string const & lab); +/// Escapes non ASCII chars and other problematic characters that cause +/// problems in latex labels. +docstring const escape(docstring const & lab); /// gives a vector of stringparts which have the delimiter delim std::vector const getVectorFromString(std::string const & str, std::string const & delim = std::string(",")); +std::vector const getVectorFromString(docstring const & str, + docstring const & delim = from_ascii(",")); // the same vice versa std::string const getStringFromVector(std::vector const & vec, std::string const & delim = std::string(",")); +/// Search \p search_token in \p str and return the position if it is +/// found, else -1. The last item in \p str must be "". +int findToken(char const * const str[], std::string const & search_token); + +/// Convert internal line endings to line endings as expected by the OS +docstring const externalLineEnding(docstring const & str); + +/// Convert line endings in any formnat to internal line endings +docstring const internalLineEnding(docstring const & str); + #ifdef I_AM_NOT_AFRAID_OF_HEADER_LIBRARIES #include template -string bformat(string const & fmt, Arg1 arg1) +docstring bformat(docstring const & fmt, Arg1 arg1) { - return (boost::format(fmt) % arg1).str(); + return (boost::basic_format(fmt) % arg1).str(); } template -string bformat(string const & fmt, Arg1 arg1, Arg2 arg2) +docstring bformat(docstring const & fmt, Arg1 arg1, Arg2 arg2) { - return (boost::format(fmt) % arg1 % arg2).str(); + return (boost::basic_format(fmt) % arg1 % arg2).str(); } template -string bformat(string const & fmt, Arg1 arg1, Arg2 arg2, Arg3 arg3) +docstring bformat(docstring const & fmt, Arg1 arg1, Arg2 arg2, Arg3 arg3) { - return (boost::format(fmt) % arg1 % arg2 % arg3).str(); + return (boost::basic_format(fmt) % arg1 % arg2 % arg3).str(); } template -string bformat(string const & fmt, Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) +docstring bformat(docstring const & fmt, Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4) { - return (boost::format(fmt) % arg1 % arg2 % arg3 % arg4).str(); + return (boost::basic_format(fmt) % arg1 % arg2 % arg3 % arg4).str(); } #else template -std::string bformat(std::string const & fmt, Arg1); +docstring bformat(docstring const & fmt, Arg1); template -std::string bformat(std::string const & fmt, Arg1, Arg2); +docstring bformat(docstring const & fmt, Arg1, Arg2); template -std::string bformat(std::string const & fmt, Arg1, Arg2, Arg3); +docstring bformat(docstring const & fmt, Arg1, Arg2, Arg3); template -std::string bformat(std::string const & fmt, Arg1, Arg2, Arg3, Arg4); +docstring bformat(docstring const & fmt, Arg1, Arg2, Arg3, Arg4); #endif