-/* 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>
#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
#include <iostream>
-#if 0
istream & operator>>(istream & is, lyxstring & s)
{
+#if 0
+ // very bad solution
+ char * nome = new char[1024];
+ is >> nome;
+ lyxstring tmp(nome);
+ delete [] nome;
+ if (!tmp.empty()) s = tmp;
+#else
// better solution
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(std::ios::failbit);
- return is;
-}
-#else
-istream & operator>>(istream & is, lyxstring & str)
-{
- typedef istream istream_type;
- typedef int int_type;
- typedef std::streambuf streambuf_type;
- typedef string string_type;
- typedef string::size_type size_type;
- size_type extracted = 0;
-
-#if 0
- istream_type::sentry cerb(is, false);
- if (cerb) {
-#else
- if (is.ipfx0()) {
#endif
- str.erase();
- std::streamsize w = is.width();
- size_type n;
- n = w > 0 ? static_cast<size_type>(w) : str.max_size();
-
- int_type const eof = EOF;
- streambuf_type * sb = is.rdbuf();
- int_type c = sb->sgetc();
-
- while (extracted < n
- && c != eof && !isspace(c)) {
- str += c;
- ++extracted;
- c = sb->snextc();
- }
- if (c == eof)
- is.setstate(std::ios::eofbit);
- is.width(0);
- }
-#if 1
- is.isfx();
-#endif
- if (!extracted)
- is.setstate(std::ios::failbit);
return is;
}
-#endif
ostream & operator<<(ostream & o, lyxstring const & s)