]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/string-convert.cc
lilypond-manuals.css: edit color scheme and some spacing
[lilypond.git] / flower / string-convert.cc
index d2fd21ce972df05e570bef412a19aec2bda7be18..e3e8bc824da7e3cc4b93937b093d07f04672d603 100644 (file)
@@ -2,16 +2,17 @@
   PROJECT: FlowerSoft C++ library
   FILE   : string-convert.cc
 
   PROJECT: FlowerSoft C++ library
   FILE   : string-convert.cc
 
---*/
+  --*/
 
 #include "string-convert.hh"
 
 #include <cstring>
 #include <cstdio>
 
 #include "string-convert.hh"
 
 #include <cstring>
 #include <cstdio>
+using namespace std;
 
 #include "libc-extension.hh"
 #include "rational.hh"
 
 #include "libc-extension.hh"
 #include "rational.hh"
-#include "array.hh"
+#include "std-vector.hh"
 
 /**
    A safe length for stringconversion buffers.
 
 /**
    A safe length for stringconversion buffers.
    2e318, this number would have approx 318 zero's in its string.
 
    Should enlarge buff dynamically.
    2e318, this number would have approx 318 zero's in its string.
 
    Should enlarge buff dynamically.
-   
+
    @see
    man 3 snprintf
    @see
    man 3 snprintf
-   */
-static const int STRING_BUFFER_LEN=1024;
+*/
+static const int STRING_BUFFER_LEN = 1024;
 
 
-String
+string
 String_convert::bool_string (bool b)
 {
 String_convert::bool_string (bool b)
 {
-  return String (b ? "true" : "false");
+  return string (b ? "true" : "false");
+}
+
+string
+String_convert::bin2hex (Byte bin_char)
+{
+  string str;
+  str += ::to_string ((char) nibble2hex_byte ((Byte) (bin_char >> 4)));
+  str += ::to_string ((char) nibble2hex_byte (bin_char++));
+  return str;
 }
 
 }
 
-String
-String_convert::bin2hex (String bin_string)
+string
+String_convert::bin2hex (const string &bin_string)
 {
 {
-  String str;
-  Byte const* byte = bin_string.to_bytes ();
-  for (int i = 0; i < bin_string.length (); i++) 
+  string str;
+  Byte const *byte = (Byte const *)bin_string.data ();
+  for (ssize i = 0; i < bin_string.length (); i++)
     {
     {
-      str += to_string ((char)nibble2hex_byte (*byte >> 4));
-      str += to_string ((char)nibble2hex_byte (*byte++));
+      str += ::to_string ((char)nibble2hex_byte ((Byte) (*byte >> 4)));
+      str += ::to_string ((char)nibble2hex_byte (*byte++));
     }
   return str;
 }
 
 int
     }
   return str;
 }
 
 int
-String_convert::bin2int (String bin_string)
+String_convert::bin2int (const string &bin_string)
 {
   return bin2unsigned (bin_string);
 }
 
 unsigned
 {
   return bin2unsigned (bin_string);
 }
 
 unsigned
-String_convert::bin2unsigned (String bin_string)
+String_convert::bin2unsigned (const string &bin_string)
 {
   assert (bin_string.length () <= (int)sizeof (unsigned));
 
   unsigned result_u = 0;
 {
   assert (bin_string.length () <= (int)sizeof (unsigned));
 
   unsigned result_u = 0;
-  for (int i = 0; i < bin_string.length (); i++) 
+  for (ssize i = 0; i < bin_string.length (); i++)
     {
       result_u <<= 8;
       result_u += (Byte)bin_string[ i ];
     {
       result_u <<= 8;
       result_u += (Byte)bin_string[ i ];
@@ -65,74 +75,74 @@ String_convert::bin2unsigned (String bin_string)
   return result_u;
 }
 
   return result_u;
 }
 
-// breendet imp from String
 int
 int
-String_convert::dec2int (String dec_string)
+String_convert::dec2int (const string &dec_string)
 {
   if (!dec_string.length ())
     return 0;
 
   long l = 0;
 {
   if (!dec_string.length ())
     return 0;
 
   long l = 0;
-  int conv = sscanf (dec_string.to_str0 (), "%ld", &l);
-  assert (conv);
+  if (!sscanf (dec_string.c_str (), "%ld", &l))
+    assert (false);
 
   return (int)l;
 }
 
 
   return (int)l;
 }
 
-String
-String_convert::i64_string (I64 i64, char constfmt)
+string
+String_convert::i64_string (I64 i64, char const *fmt)
 {
   char buffer[STRING_BUFFER_LEN];
   snprintf (buffer, STRING_BUFFER_LEN,
 {
   char buffer[STRING_BUFFER_LEN];
   snprintf (buffer, STRING_BUFFER_LEN,
- (fmt ? fmt : "%Ld"), i64);     // assume radix 10
-  return String (buffer);
-
+            (fmt ? fmt : "%Ld"), i64); // assume radix 10
+  return string (buffer);
 }
 }
-// breendet imp from String
+// breendet imp from string
 double
 double
-String_convert::dec2double (String dec_string)
+String_convert::dec2double (const string &dec_string)
 {
   if (!dec_string.length ())
     return 0;
 {
   if (!dec_string.length ())
     return 0;
-  double d = 0;
-  int conv = sscanf (dec_string.to_str0 (), "%lf", &d);
-  assert (conv);
+
+  double d = 0.0;
+  if (!sscanf (dec_string.c_str (), "%lf", &d))
+    assert (false);
+
   return d;
 }
 
 int
   return d;
 }
 
 int
-String_convert::hex2bin (String hex_string, String& bin_string_r)
+String_convert::hex2bin (string hex_string, string &bin_string_r)
 {
   if (hex_string.length () % 2)
     hex_string = "0" + hex_string;
 
   bin_string_r = "";
 {
   if (hex_string.length () % 2)
     hex_string = "0" + hex_string;
 
   bin_string_r = "";
-  Byte const* byte= hex_string.to_bytes ();
-  int i = 0;
-  while (i < hex_string.length ()) 
+  Byte const *byte = (Byte const *) hex_string.data ();
+  ssize i = 0;
+  while (i < hex_string.length ())
     {
       int high_i = hex2nibble (*byte++);
       int low_i = hex2nibble (*byte++);
       if (high_i < 0 || low_i < 0)
     {
       int high_i = hex2nibble (*byte++);
       int low_i = hex2nibble (*byte++);
       if (high_i < 0 || low_i < 0)
-       return 1; // illegal char
-      bin_string_r += to_string ((char) (high_i << 4 | low_i), 1 );
+        return 1; // invalid char
+      bin_string_r += ::to_string ((char) (high_i << 4 | low_i), 1);
       i += 2;
     }
   return 0;
 }
 
       i += 2;
     }
   return 0;
 }
 
-String 
-String_convert::hex2bin (String hex_string)
+string
+String_convert::hex2bin (const string &hex_string)
 {
 {
-  String str;
-  //  silly, asserts should alway be "on"!
-  //    assert (!hex2bin (hex_string, str) );
-  int error_i = hex2bin (hex_string, str);
-  assert (!error_i);
+  string str;
+
+  if (hex2bin (hex_string, str))
+    assert (false);
+
   return str;
 }
 
   return str;
 }
 
-int 
+int
 String_convert::hex2nibble (Byte byte)
 {
   if (byte >= '0' && byte <= '9')
 String_convert::hex2nibble (Byte byte)
 {
   if (byte >= '0' && byte <= '9')
@@ -145,48 +155,47 @@ String_convert::hex2nibble (Byte byte)
 }
 
 // stupido.  Should use int_string ()
 }
 
 // stupido.  Should use int_string ()
-String 
-String_convert::int2dec (int i, int length_i, char ch)
+string
+String_convert::int2dec (int i, size_t length_i, char ch)
 {
   char fill_char = ch;
   if (fill_char)
     fill_char = '0';
 
   // ugh
 {
   char fill_char = ch;
   if (fill_char)
     fill_char = '0';
 
   // ugh
-  String dec_string = to_string (i);
-  
+  string dec_string = ::to_string (i);
+
   // ugh
   // ugh
-  return to_string (fill_char, length_i - dec_string.length ()) + dec_string;
+  return ::to_string (fill_char, ssize_t (length_i - dec_string.length ())) + dec_string;
 }
 
 }
 
-
 // stupido.  Should use int_string ()
 // stupido.  Should use int_string ()
-String 
-String_convert::unsigned2hex (unsigned u, int length_i, char fill_char)
+string
+String_convert::unsigned2hex (unsigned u, size_t length, char fill_char)
 {
 {
-  String str;
+  string str;
   if (!u)
     str = "0";
 
 #if 1 // both go...
   if (!u)
     str = "0";
 
 #if 1 // both go...
-  while (u) 
+  while (u)
     {
     {
-      str = to_string ((char) ((u % 16)["0123456789abcdef"] ) ) + str;
+      str = ::to_string ((char) ((u % 16)["0123456789abcdef"])) + str;
       u /= 16;
     }
 #else
       u /= 16;
     }
 #else
-  str += int_string (u, "%x"); // hmm. %lx vs. %x -> portability?
+  str += int_string (u, "%x");  // hmm. %lx vs. %x -> portability?
 #endif
 
 #endif
 
-  str = to_string (fill_char, length_i - str.length ()) + str;
-  while ((str.length () > length_i) && (str[ 0 ] == 'f' ) )
-    str = str.cut_string (2, INT_MAX);
+  str = ::to_string (fill_char, ssize_t (length - str.length ())) + str;
+  while ((str.length () > length) && (str[ 0 ] == 'f'))
+    str = str.substr (2);
 
   return str;
 }
 
 
   return str;
 }
 
-String 
-String_convert::int2hex (int i, int length_i, char fill_char)
+string
+String_convert::int2hex (int i, size_t length_i, char fill_char)
 {
   return unsigned2hex ((unsigned)i, length_i, fill_char);
 }
 {
   return unsigned2hex ((unsigned)i, length_i, fill_char);
 }
@@ -194,157 +203,172 @@ String_convert::int2hex (int i, int length_i, char fill_char)
 Byte
 String_convert::nibble2hex_byte (Byte byte)
 {
 Byte
 String_convert::nibble2hex_byte (Byte byte)
 {
-  if ((byte & 0x0f) <= 9 )
-    return (byte & 0x0f) + '0';
+  if ((byte & 0x0f) <= 9)
+    return (Byte) ((byte & 0x0f) + '0');
   else
   else
-    return (byte & 0x0f) - 10 + 'a';
+    return (Byte) ((byte & 0x0f) - 10 + 'a');
 }
 /**
 }
 /**
-  Convert an integer to a string
+   Convert an integer to a string
 
 
-  @param
-  #fmt# is a printf style format, default assumes "%d" as format. 
-  */
-String
-String_convert::int_string (int i, char constfmt)
+   @param
+   #fmt# is a printf style format, default assumes "%d" as format.
+*/
+string
+String_convert::int_string (int i, char const *fmt)
 {
   char buffer[STRING_BUFFER_LEN];
   snprintf (buffer, STRING_BUFFER_LEN,
 {
   char buffer[STRING_BUFFER_LEN];
   snprintf (buffer, STRING_BUFFER_LEN,
(fmt ? fmt : "%d"), i);     // assume radix 10
-  return String (buffer);
           (fmt ? fmt : "%d"), i); // assume radix 10
+  return string (buffer);
 }
 
 }
 
-String
-String_convert::form_string (char constformat, ...)
+string
+String_convert::form_string (char const *format, ...)
 {
   va_list args;
   va_start (args, format);
   char buffer[STRING_BUFFER_LEN];
   vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
   va_end (args);
 {
   va_list args;
   va_start (args, format);
   char buffer[STRING_BUFFER_LEN];
   vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
   va_end (args);
-  return String (buffer);
+  return string (buffer);
 }
 
 }
 
-String 
-String_convert::vform_string (char constformat, va_list args)
+string
+String_convert::vform_string (char const *format, va_list args)
 {
   char buffer[STRING_BUFFER_LEN];
   vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
 {
   char buffer[STRING_BUFFER_LEN];
   vsnprintf (buffer, STRING_BUFFER_LEN, format, args);
-  return String (buffer);
+  return string (buffer);
 }
 
 /**
 }
 
 /**
-  Convert a double to a string.
+   Convert a double to a string.
 
 
-  @param #fmt# is a printf style format, default assumes "%lf" as format
- */
-String
-String_convert::double_string (double f, char constfmt)
+   @param #fmt# is a printf style format, default assumes "%lf" as format
+*/
+string
+String_convert::double_string (double f, char const *fmt)
 {
 {
-  char buf[STRING_BUFFER_LEN]; 
+  char buf[STRING_BUFFER_LEN];
 
   snprintf (buf, STRING_BUFFER_LEN, fmt ? fmt : "%f", f);
 
   snprintf (buf, STRING_BUFFER_LEN, fmt ? fmt : "%f", f);
-  return String (buf);
+  return string (buf);
 }
 
 /**
 }
 
 /**
-Make a string from a single character.
+   Make a string from a single character.
 
 
-  @param
-  #n# is a repetition count, default value is 1
- */
-String
+   @param
+   #n# is a repetition count, default value is 1
+*/
+string
 String_convert::char_string (char c, int n)
 {
   n = n >= 0 ? n : 0;
 String_convert::char_string (char c, int n)
 {
   n = n >= 0 ? n : 0;
-  charch = new char[ n ];
+  char *ch = new char[ n ];
   memset (ch, c, n);
   memset (ch, c, n);
-  String s ((Byte*)ch, n);
+  string s (ch, n);
+
   delete[] ch;
   return s;
 }
 
   delete[] ch;
   return s;
 }
 
-String
+string
 String_convert::rational_string (Rational r)
 {
 String_convert::rational_string (Rational r)
 {
- return r.to_string ();
 return r.to_string ();
 }
 
 }
 
-String
+string
 String_convert::pointer_string (void const *l)
 {
   char buffer[STRING_BUFFER_LEN];
 String_convert::pointer_string (void const *l)
 {
   char buffer[STRING_BUFFER_LEN];
-  snprintf (buffer, STRING_BUFFER_LEN, "%p", l);     // assume radix 10
-  return String (buffer);
+  snprintf (buffer, STRING_BUFFER_LEN, "%p", l); // assume radix 10
+  return string (buffer);
 }
 
 /**
 }
 
 /**
-  Convert a double to a string.
+   Convert a double to a string.
 
 
-  @param
-  #n# is the number of nonzero digits
- */
-String
+   @param
+   #n# is the number of nonzero digits
+*/
+string
 String_convert::precision_string (double x, int n)
 {
 String_convert::precision_string (double x, int n)
 {
-  String format = "%." + to_string (0 >? n - 1) + "e";
-  String str = double_string (abs (x), format.to_str0 ());
+  string format = "%." + ::to_string (max (0, n - 1)) + "e";
+  string str = double_string (abs (x), format.c_str ());
 
 
-  int exp = str.right_string (3).to_int ();
-  str = str.left_string (str.length () - 4);
+  int exp = dec2int (str.substr (str.length () - 3));
+  str = str.substr (0, str.length () - 4);
 
   while (str[str.length () - 1] == '0')
 
   while (str[str.length () - 1] == '0')
-    str = str.left_string (str.length () - 1);
+    str = str.substr (0, str.length () - 1);
   if (str[str.length () - 1] == '.')
   if (str[str.length () - 1] == '.')
-    str = str.left_string (str.length () - 1);
+    str = str.substr (0, str.length () - 1);
 
   if (exp == 0)
     return (sign (x) > 0 ? str : "-" + str);
 
 
   if (exp == 0)
     return (sign (x) > 0 ? str : "-" + str);
 
-  str = str.left_string (1) + str.cut_string (2, INT_MAX);
-  int dot = 1 + exp;
+  str = str.substr (0, 1) + str.substr (2);
+  ssize dot = 1 + exp;
   if (dot <= 0)
   if (dot <= 0)
-    str = "0." + to_string ('0', -dot) + str;
+    str = "0." + ::to_string ('0', -dot) + str;
   else if (dot >= str.length ())
   else if (dot >= str.length ())
-    str += to_string ('0', dot - str.length ());
-  else if (( dot > 0) && (dot < str.length ()))
-    str = str.left_string (dot) + "." + str.cut_string (dot, INT_MAX);
+    str += ::to_string ('0', dot - str.length ());
+  else if ((dot > 0) && (dot < str.length ()))
+    str = str.substr (0, dot) + "." + str.substr (dot);
   else
     assert (0);
 
   return (sign (x) > 0 ? str : "-" + str);
 }
 
   else
     assert (0);
 
   return (sign (x) > 0 ? str : "-" + str);
 }
 
-Array<String>
-String_convert::split (String str, char c)
+string
+String_convert::long_string (long l)
 {
 {
-  Array<String> a;
-  int i = str.index (c);
-  while (i >=0)
-    {
-      String s = str.left_string (i);
-      a.push (s);
-      while (str[++i] == c)
-       ;
-      str = str.cut_string (i, INT_MAX);
-      i = str.index (c);
-    }
-  if (str.length ())
-    a.push (str);
-  return a;
+  char s[STRING_BUFFER_LEN];
+  sprintf (s, "%ld", l);
+  return s;
 }
 
 }
 
+string
+String_convert::unsigned_string (unsigned u)
+{
+  char s[STRING_BUFFER_LEN];
+  sprintf (s, "%u", u);
+  return s;
+}
 
 
-String
-String_convert::long_string (long l)
+string
+String_convert::unsigned_long_string (unsigned long ul)
 {
   char s[STRING_BUFFER_LEN];
 {
   char s[STRING_BUFFER_LEN];
-  sprintf (s,"%ld", l);
+  sprintf (s, "%lu", ul);
   return s;
 }
 
   return s;
 }
 
-String
-String_convert::pad_to (String s, int n)
+string
+String_convert::pad_to (const string &s, size_t n)
+{
+  return s + string (max (int (n - s.length ()), 0), ' ');
+}
+
+string
+String_convert::to_upper (string s)
+{
+  return strnupr (const_cast<char*>(s.c_str ()), s.length ());
+}
+
+string
+String_convert::to_lower (string s)
+{
+  return strnlwr (const_cast<char*>(s.c_str ()), s.length ());
+}
+
+string
+String_convert::reverse (string s)
 {
 {
-  return s + to_string (' ' , (n - s.length ()) >? 0);
+  return (char *) memrev ((unsigned char *)s.data (), s.length ());
 }
 }