summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/textdocument.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/coreplugin/textdocument.cpp')
-rw-r--r--src/plugins/coreplugin/textdocument.cpp152
1 files changed, 152 insertions, 0 deletions
diff --git a/src/plugins/coreplugin/textdocument.cpp b/src/plugins/coreplugin/textdocument.cpp
new file mode 100644
index 0000000000..78a3447d7d
--- /dev/null
+++ b/src/plugins/coreplugin/textdocument.cpp
@@ -0,0 +1,152 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#include "textdocument.h"
+#include "editormanager.h"
+
+#include <QDebug>
+#include <QTextCodec>
+
+/*!
+ \class Core::TextFile
+ \brief Base class for text files with encoding helpers.
+
+ Stores the format obtained from read operations and uses that when writing
+ out files, thus ensuring that CRLF/encodings are preserved.
+
+ \sa Utils::TextFileUtils
+*/
+
+enum { debug = 0 };
+
+namespace Core {
+
+namespace Internal {
+class TextDocumentPrivate
+{
+public:
+ TextDocumentPrivate() : m_readResult(Utils::TextFileFormat::ReadSuccess) {}
+
+ Utils::TextFileFormat m_format;
+ Utils::TextFileFormat::ReadResult m_readResult;
+ QByteArray m_decodingErrorSample;
+};
+
+} // namespace Internal
+
+TextDocument::TextDocument(QObject *parent) :
+ IDocument(parent), d(new Internal::TextDocumentPrivate)
+{
+ setCodec(Core::EditorManager::instance()->defaultTextCodec());
+}
+
+TextDocument::~TextDocument()
+{
+ delete d;
+}
+
+bool TextDocument::hasDecodingError() const
+{
+ return d->m_readResult == Utils::TextFileFormat::ReadEncodingError;
+}
+
+QByteArray TextDocument::decodingErrorSample() const
+{
+ return d->m_decodingErrorSample;
+}
+
+/*!
+ \brief Writes out text using the format obtained from the last read.
+*/
+
+bool TextDocument::write(const QString &fileName, const QString &data, QString *errorMessage) const
+{
+ return write(fileName, format(), data, errorMessage);
+}
+
+/*!
+ \brief Writes out text using a custom format obtained.
+*/
+
+bool TextDocument::write(const QString &fileName, const Utils::TextFileFormat &format, const QString &data, QString *errorMessage) const
+{
+ if (debug)
+ qDebug() << Q_FUNC_INFO << this << fileName;
+ return format.writeFile(fileName, data, errorMessage);
+}
+
+/*!
+ \brief Autodetect format and read in a text file.
+*/
+
+TextDocument::ReadResult TextDocument::read(const QString &fileName, QStringList *plainTextList, QString *errorString)
+{
+ d->m_readResult =
+ Utils::TextFileFormat::readFile(fileName, codec(),
+ plainTextList, &d->m_format, errorString, &d->m_decodingErrorSample);
+ return d->m_readResult;
+}
+
+/*!
+ \brief Autodetect format and read in a text file.
+*/
+
+TextDocument::ReadResult TextDocument::read(const QString &fileName, QString *plainText, QString *errorString)
+{
+ d->m_readResult =
+ Utils::TextFileFormat::readFile(fileName, codec(),
+ plainText, &d->m_format, errorString, &d->m_decodingErrorSample);
+ return d->m_readResult;
+}
+
+const QTextCodec *TextDocument::codec() const
+{
+ return d->m_format.codec;
+}
+
+void TextDocument::setCodec(const QTextCodec *codec)
+{
+ if (debug)
+ qDebug() << Q_FUNC_INFO << this << (codec ? codec->name() : QByteArray());
+ d->m_format.codec = codec;
+}
+
+/*!
+ \brief Returns the format obtained from the last call to read().
+*/
+
+Utils::TextFileFormat TextDocument::format() const
+{
+ return d->m_format;
+}
+
+} // namespace Core