]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/string-convert.cc
Docs: fix documentation reference of translation committishes
[lilypond.git] / flower / string-convert.cc
index 6981551d30677077c409656e2a5a3c22149a99d2..ef64af25b606fe753ac6d4015cba154f73f899fe 100644 (file)
@@ -2,17 +2,17 @@
   PROJECT: FlowerSoft C++ library
   FILE   : string-convert.cc
 
   PROJECT: FlowerSoft C++ library
   FILE   : string-convert.cc
 
---*/
+  --*/
 
 
-#include <string.h>
-#include <stdio.h>
-#include <assert.h>
-#include <limits.h>
-#include "libc-extension.hh"
-#include "string.hh"
 #include "string-convert.hh"
 #include "string-convert.hh"
+
+#include <cstring>
+#include <cstdio>
+using namespace std;
+
+#include "libc-extension.hh"
 #include "rational.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 (String bin_string)
+string
+String_convert::bin2hex (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 >> 4));
       str += to_string ((char)nibble2hex_byte (*byte++));
@@ -47,18 +47,18 @@ String_convert::bin2hex (String bin_string)
 }
 
 int
 }
 
 int
-String_convert::bin2int (String bin_string)
+String_convert::bin2int (string bin_string)
 {
   return bin2unsigned (bin_string);
 }
 
 unsigned
 {
   return bin2unsigned (bin_string);
 }
 
 unsigned
-String_convert::bin2unsigned (String bin_string)
+String_convert::bin2unsigned (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 ];
@@ -66,74 +66,76 @@ 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 (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);
 
 
+  assert (form_string ("%ld", l) == dec_string);
+  
   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 (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 (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')
@@ -146,7 +148,7 @@ String_convert::hex2nibble (Byte byte)
 }
 
 // stupido.  Should use int_string ()
 }
 
 // stupido.  Should use int_string ()
-String 
+string
 String_convert::int2dec (int i, int length_i, char ch)
 {
   char fill_char = ch;
 String_convert::int2dec (int i, int length_i, char ch)
 {
   char fill_char = ch;
@@ -154,39 +156,38 @@ String_convert::int2dec (int i, int length_i, char ch)
     fill_char = '0';
 
   // ugh
     fill_char = '0';
 
   // ugh
-  String dec_string = to_string (i);
-  
+  string dec_string = to_string (i);
+
   // ugh
   return to_string (fill_char, length_i - dec_string.length ()) + dec_string;
 }
 
   // ugh
   return to_string (fill_char, 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, ssize 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
   str += int_string (u, "%x"); // hmm. %lx vs. %x -> portability?
 #endif
 
       u /= 16;
     }
 #else
   str += int_string (u, "%x"); // hmm. %lx vs. %x -> portability?
 #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, length - str.length ()) + str;
+  while ((str.length () > length) && (str[ 0 ] == 'f'))
+    str = str.substr (2);
 
   return str;
 }
 
 
   return str;
 }
 
-String 
+string
 String_convert::int2hex (int i, int length_i, char fill_char)
 {
   return unsigned2hex ((unsigned)i, length_i, fill_char);
 String_convert::int2hex (int i, int length_i, char fill_char)
 {
   return unsigned2hex ((unsigned)i, length_i, fill_char);
@@ -195,157 +196,165 @@ 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 )
+  if ((byte & 0x0f) <= 9)
     return (byte & 0x0f) + '0';
   else
     return (byte & 0x0f) - 10 + 'a';
 }
 /**
     return (byte & 0x0f) + '0';
   else
     return (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.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)
     str = "0." + to_string ('0', -dot) + str;
   else if (dot >= str.length ())
     str += to_string ('0', dot - str.length ());
   if (dot <= 0)
     str = "0." + to_string ('0', -dot) + str;
   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);
+  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::long_string (long l)
+string
+String_convert::unsigned_string (unsigned u)
 {
   char s[STRING_BUFFER_LEN];
 {
   char s[STRING_BUFFER_LEN];
-  sprintf (s,"%ld", l);
+  sprintf (s, "%u", u);
   return s;
 }
 
   return s;
 }
 
-String
-String_convert::pad_to (String s, int n)
+string
+String_convert::pad_to (string s, int n)
+{
+  return s + string (max (int(n - s.length ()), 0), ' ');
+}
+
+string
+String_convert::to_upper (string s)
+{
+  return strnupr ((char *)s.c_str (), s.length ());
+}
+
+string
+String_convert::to_lower (string s)
+{
+  return strnlwr ((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 ());
 }
 }