Quellcode-Bibliothek TextInputStream.cxx
Sprache: C
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
// Only for bFindLineEnd
constexpr sal_Unicode cLineEndChar1 = '\r';
constexpr sal_Unicode cLineEndChar2 = '\n';
sal_Int32 nBufferReadPos = 0;
sal_Int32 nCopyLen = -1;
sal_Unicode cFirstLineEndChar = 0; while (true)
{ // Still characters available? if( nBufferReadPos == mnCharsInBuffer )
{ // Already reached EOF? Then we can't read any more // Or no, so read new characters if( !implReadNext() ) break;
}
// Now there should be characters available // (otherwise the loop should have been broken before)
sal_Unicode c = mvBuffer[ nBufferReadPos++ ];
if( bFindLineEnd )
{ if (cFirstLineEndChar != 0)
{
assert(nCopyLen >= 0); // This is a check if the next character after a line end char is its second half // Same line end char -> new line break; non-line-end char -> new line start if ((c == cFirstLineEndChar) || (c != cLineEndChar1 && c != cLineEndChar2))
{ // Not a two-char line end
nBufferReadPos--;
} break;
} elseif( c == cLineEndChar1 || c == cLineEndChar2 )
{
nCopyLen = nBufferReadPos - 1; // we know what to copy
cFirstLineEndChar = c; // take one more loop, to check if it's a two-char line end
}
} elseif( comphelper::findValue(Delimiters, c) != -1 )
{
nCopyLen = nBufferReadPos; if( bRemoveDelimiter )
nCopyLen--; break;
}
}
// Nothing found? Return all if (nCopyLen < 0)
nCopyLen = nBufferReadPos;
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.16Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.