]> git.lyx.org Git - lyx.git/blobdiff - src/support/lyxstring.C
another safety belt
[lyx.git] / src / support / lyxstring.C
index 42a9811cf5ea0926c3bee88ab64aea9c5979efb5..73f2f67ceb48cc057102cfd52d86f12d6c7033e0 100644 (file)
@@ -1,12 +1,12 @@
-/* This file is part of
- * ======================================================
+/**
+ * \file lyxstring.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- *           LyX, The Document Processor
+ * \author Lars Gullik Bjønnes
  *
- *         Copyright 1995 Matthias Ettrich
- *          Copyright 1995-2000 The LyX Team.
- *
- * ====================================================== */
+ * Full author contact details are available in file CREDITS
+ */
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -663,10 +663,13 @@ lyxstring & lyxstring::assign(const_iterator first, const_iterator last)
 lyxstring::const_reference lyxstring::operator[](size_type pos) const
 {
 #if 0
+       // This is actually what the standard requires,
        lyx::Assert(pos <= rep->sz); // OURS!
-       static char helper = '\0';
+       static char const helper = '\0';
        return pos == rep->sz ? helper : rep->s[pos];
 #else
+       // but we use this one since it is stricter
+       // and more according to the real intent of std::string.
        lyx::Assert(pos < rep->sz); // OURS!
        return rep->s[pos];
 #endif
@@ -1731,7 +1734,7 @@ void swap(lyxstring & str1, lyxstring & str2)
 
 istream & operator>>(istream & is, lyxstring & s)
 {
-#if 1
+#if 0
        // very bad solution
        char * nome = new char[1024];
        is >> nome;
@@ -1740,15 +1743,23 @@ istream & operator>>(istream & is, lyxstring & s)
        if (!tmp.empty()) s = tmp;
 #else
        // better solution
-       int w = is.widdth(0);
+       int w = is.width(0);
        s.clear();
        char c = 0;
+       bool skipspace = true;
        while (is.get(c)) {
-               if (isspace(c)) { is.putback(c); break; }
-               s += c;
+               if (isspace(c)) {
+                       if (!skipspace) {
+                               is.putback(c);
+                               break;
+                       }
+               } else {
+                       s += c;
+                       skipspace = false;
+               }
                if (--w == 1) break;
        }
-       if (s.empty()) is.setstate(ios::failbit);
+       if (s.empty()) is.setstate(std::ios::failbit);
 #endif
        return is;
 }