]> git.lyx.org Git - lyx.git/blobdiff - src/support/lstrings.h
Outliner: distinguish non-active refs from broken refs
[lyx.git] / src / support / lstrings.h
index ac310c59c43dcc598e6a6016c447e91a0bc274d2..f661fc5b85abc1e635348b6a484e5944fe1a2b65 100644 (file)
@@ -53,7 +53,7 @@ bool isHexChar(char_type);
 
 bool isHex(docstring const & str);
 
 
 bool isHex(docstring const & str);
 
-int hexToInt(docstring const & str);
+unsigned int hexToInt(docstring const & str);
 
 /// is \p str pure ascii?
 bool isAscii(docstring const & str);
 
 /// is \p str pure ascii?
 bool isAscii(docstring const & str);
@@ -151,8 +151,11 @@ inline bool contains(docstring const & a, char_type b)
        return a.find(b) != docstring::npos;
 }
 
        return a.find(b) != docstring::npos;
 }
 
-///
+/// Returns true if the first argument is made of ascii chars given in the
+/// second argument.
 bool containsOnly(std::string const &, std::string const &);
 bool containsOnly(std::string const &, std::string const &);
+///
+bool containsOnly(docstring const &, std::string const &);
 
 /** Extracts a token from this string at the nth delim.
     Doesn't modify the original string. Similar to strtok.
 
 /** Extracts a token from this string at the nth delim.
     Doesn't modify the original string. Similar to strtok.
@@ -193,13 +196,13 @@ std::string const subst(std::string const & a,
 docstring const subst(docstring const & a,
                docstring const & oldstr, docstring const & newstr);
 
 docstring const subst(docstring const & a,
                docstring const & oldstr, docstring const & newstr);
 
-/// Count all occurences of char \a chr inside \a str
+/// Count all occurrences of char \a chr inside \a str
 int count_char(std::string const & str, char chr);
 
 int count_char(std::string const & str, char chr);
 
-/// Count all occurences of char \a chr inside \a str
+/// Count all occurrences of char \a chr inside \a str
 int count_char(docstring const & str, docstring::value_type chr);
 
 int count_char(docstring const & str, docstring::value_type chr);
 
-/** Count all occurences of binary chars inside \a str.
+/** Count all occurrences of binary chars inside \a str.
     It is assumed that \a str is utf-8 encoded and that a binary char
     belongs to the unicode class names Zl, Zp, Cc, Cf, Cs, Co, or Cn
     (excluding white space characters such as '\t', '\n', '\v', '\f', '\r').
     It is assumed that \a str is utf-8 encoded and that a binary char
     belongs to the unicode class names Zl, Zp, Cc, Cf, Cs, Co, or Cn
     (excluding white space characters such as '\t', '\n', '\v', '\f', '\r').
@@ -238,7 +241,7 @@ docstring const rtrim(docstring const & a, char const * p = " ");
 std::string const ltrim(std::string const & a, char const * p = " ");
 docstring const ltrim(docstring const & a, char const * p = " ");
 
 std::string const ltrim(std::string const & a, char const * p = " ");
 docstring const ltrim(docstring const & a, char const * p = " ");
 
-/** Splits the string given in the first argument at the first occurence 
+/** Splits the string given in the first argument at the first occurence
     of the third argument, delim.
     What precedes delim is returned in the second argument, piece; this
     will be the whole of the string if no delimiter is found.
     of the third argument, delim.
     What precedes delim is returned in the second argument, piece; this
     will be the whole of the string if no delimiter is found.
@@ -266,9 +269,15 @@ docstring const rsplit(docstring const & a, char_type delim);
 /// problems in latex labels.
 docstring const escape(docstring const & lab);
 
 /// problems in latex labels.
 docstring const escape(docstring const & lab);
 
+/// Group contents of an argument if needed
+docstring const protectArgument(docstring & arg, char const l = '[',
+                         char const r = ']');
+
 /// Truncates a string with an ellipsis at the end.  Leaves str unchanged and
 /// returns false if it is shorter than len. Otherwise resizes str to len, with
 /// U+2026 HORIZONTAL ELLIPSIS at the end, and returns true.
 /// Truncates a string with an ellipsis at the end.  Leaves str unchanged and
 /// returns false if it is shorter than len. Otherwise resizes str to len, with
 /// U+2026 HORIZONTAL ELLIPSIS at the end, and returns true.
+/// If mid is true, the ellipsis will be put to the mid of the string, and the first
+/// and last half is appended/prepended. 
 ///
 /// Warning (Unicode): The cases where we want to truncate the text and it does
 /// not end up converted into a QString for UI display must be really
 ///
 /// Warning (Unicode): The cases where we want to truncate the text and it does
 /// not end up converted into a QString for UI display must be really
@@ -286,15 +295,16 @@ docstring const escape(docstring const & lab);
 /// be displayed in worst-case scenarios.
 ///
 /// FIXME: apply those principles in the current code.
 /// be displayed in worst-case scenarios.
 ///
 /// FIXME: apply those principles in the current code.
-/// 
-bool truncateWithEllipsis(docstring & str, size_t const len);
+///
+bool truncateWithEllipsis(docstring & str, size_t const len,
+                         bool const mid = false);
 
 /// Word-wraps the provided docstring, returning a line-broken string
 
 /// Word-wraps the provided docstring, returning a line-broken string
-/// of width no wider than width, with the string broken at spaces. 
-/// If the string cannot be broken appropriately, it returns something 
+/// of width no wider than width, with the string broken at spaces.
+/// If the string cannot be broken appropriately, it returns something
 /// with "..." at the end, again no wider than width.
 /// We assume here that str does not contain newlines.
 /// with "..." at the end, again no wider than width.
 /// We assume here that str does not contain newlines.
-/// If indent is positive, then the first line is indented that many 
+/// If indent is positive, then the first line is indented that many
 /// spaces. If it is negative, then successive lines are indented, as
 /// if the first line were "outdented".
 ///
 /// spaces. If it is negative, then successive lines are indented, as
 /// if the first line were "outdented".
 ///
@@ -317,11 +327,16 @@ docstring wrapParas(docstring const & str, int const indent = 0,
 
 /// gives a vector of stringparts which have the delimiter delim
 /// If \p keepempty is true, empty strings will be pushed to the vector as well
 
 /// gives a vector of stringparts which have the delimiter delim
 /// If \p keepempty is true, empty strings will be pushed to the vector as well
+/// If \p trimit is true, leading and trailing whitespace will be trimmed from
+/// all values. Note that this can affect what counts as "empty".
+/// NOTE: If you want to split a string on whitespace, then do:
+///    getVectorFromString(str, " ", false, true);
 std::vector<std::string> const getVectorFromString(std::string const & str,
 std::vector<std::string> const getVectorFromString(std::string const & str,
-                                             std::string const & delim = std::string(","),
-                                             bool keepempty = false);
+        std::string const & delim = std::string(","),
+        bool keepempty = false, bool trimit = true);
 std::vector<docstring> const getVectorFromString(docstring const & str,
 std::vector<docstring> const getVectorFromString(docstring const & str,
-               docstring const & delim = from_ascii(","), bool keepempty = false);
+        docstring const & delim = from_ascii(","),
+        bool keepempty = false, bool trimit = true);
 
 /// the same vice versa
 std::string const getStringFromVector(std::vector<std::string> const & vec,
 
 /// the same vice versa
 std::string const getStringFromVector(std::vector<std::string> const & vec,
@@ -341,34 +356,28 @@ int findToken(char const * const str[], std::string const & search_token);
 /// like "1000000.000000", and precision control would not be that easy either.
 std::string formatFPNumber(double);
 
 /// like "1000000.000000", and precision control would not be that easy either.
 std::string formatFPNumber(double);
 
+/// Returns an URI/URL-style percent-encoded copy of the string \p in.
+/// \p ex defines a string of characters that are excluded from the transformation
+docstring to_percent_encoding(docstring const & in, docstring const & ex = docstring());
 
 
-template <class Arg1>
-docstring bformat(docstring const & fmt, Arg1);
-
-template <class Arg1, class Arg2>
-docstring bformat(docstring const & fmt, Arg1, Arg2);
-
-template <class Arg1, class Arg2, class Arg3>
-docstring bformat(docstring const & fmt, Arg1, Arg2, Arg3);
-
-template <class Arg1, class Arg2, class Arg3, class Arg4>
-docstring bformat(docstring const & fmt, Arg1, Arg2, Arg3, Arg4);
-
+/// Returns a string decoded from an URI/URL-style percent-encoded string \p in.
+std::string from_percent_encoding(std::string const & in);
 
 
-template<> docstring bformat(docstring const & fmt, int arg1);
-template<> docstring bformat(docstring const & fmt, long arg1);
-#ifdef LYX_USE_LONG_LONG
-template<> docstring bformat(docstring const & fmt, long long arg1);
+docstring bformat(docstring const & fmt, int arg1);
+docstring bformat(docstring const & fmt, long arg1);
+#ifdef HAVE_LONG_LONG_INT
+docstring bformat(docstring const & fmt, long long arg1);
 #endif
 #endif
-template<> docstring bformat(docstring const & fmt, unsigned int arg1);
-template<> docstring bformat(docstring const & fmt, docstring arg1);
-template<> docstring bformat(docstring const & fmt, char * arg1);
-template<> docstring bformat(docstring const & fmt, docstring arg1, docstring arg2);
-template<> docstring bformat(docstring const & fmt, docstring arg1, int arg2);
-template<> docstring bformat(docstring const & fmt, char const * arg1, docstring arg2);
-template<> docstring bformat(docstring const & fmt, int arg1, int arg2);
-template<> docstring bformat(docstring const & fmt, docstring arg1, docstring arg2, docstring arg3);
-template<> docstring bformat(docstring const & fmt, docstring arg1, docstring arg2, docstring arg3, docstring arg4);
+docstring bformat(docstring const & fmt, unsigned int arg1);
+docstring bformat(docstring const & fmt, docstring const & arg1);
+docstring bformat(docstring const & fmt, char * arg1);
+docstring bformat(docstring const & fmt, docstring const & arg1, docstring const & arg2);
+docstring bformat(docstring const & fmt, docstring const & arg1, int arg2);
+docstring bformat(docstring const & fmt, char const * arg1, docstring const & arg2);
+docstring bformat(docstring const & fmt, int arg1, int arg2);
+docstring bformat(docstring const & fmt, docstring const & arg1, docstring const & arg2, docstring const & arg3);
+docstring bformat(docstring const & fmt, docstring const & arg1, docstring const & arg2, docstring const & arg3, docstring const & arg4);
+docstring bformat(docstring const & fmt, docstring const & arg1, docstring const & arg2, docstring const & arg3, docstring const & arg4, docstring const & arg5);
 
 
 } // namespace support
 
 
 } // namespace support