mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-23 18:32:49 +00:00
160 lines
4.7 KiB
C++
160 lines
4.7 KiB
C++
/* This file is part of the KDE project
|
|
Copyright (C) 2009 Milian Wolff <mail@milianw.de>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef KDELIBS_KTEXTEDITOR_HIGHLIGHTINTERFACE_H
|
|
#define KDELIBS_KTEXTEDITOR_HIGHLIGHTINTERFACE_H
|
|
|
|
#include <ktexteditor/ktexteditor_export.h>
|
|
|
|
#include <ktexteditor/attribute.h>
|
|
#include <ktexteditor/cursor.h>
|
|
|
|
namespace KTextEditor
|
|
{
|
|
|
|
class Document;
|
|
|
|
/**
|
|
* \brief Highlighting information interface for the Document.
|
|
*
|
|
* \ingroup kte_group_doc_extensions
|
|
*
|
|
* \section highlightiface_intro Introduction
|
|
*
|
|
* The HighlightInterface provides methods to access the Attributes
|
|
* used for highlighting the Document.
|
|
*
|
|
* \section searchiface_access Accessing the HighlightInterface
|
|
*
|
|
* The HighlightInterface is supposed to be an extension interface for a
|
|
* Document, i.e. the Document inherits the interface \e provided that the
|
|
* used KTextEditor library implements the interface. Use qobject_cast to
|
|
* access the interface:
|
|
* \code
|
|
* // doc is of type KTextEditor::Document*
|
|
* KTextEditor::HighlightInterface *iface =
|
|
* qobject_cast<KTextEditor::HighlightInterface*>( doc );
|
|
*
|
|
* if( iface ) {
|
|
* // the implementation supports the interface
|
|
* // do stuff
|
|
* }
|
|
* \endcode
|
|
*
|
|
* \see KTextEditor::Document
|
|
* \author Milian Wolff \<mail@milianw.de\>
|
|
* \since 4.4
|
|
*/
|
|
class KTEXTEDITOR_EXPORT HighlightInterface
|
|
{
|
|
public:
|
|
///TODO: Documentation
|
|
enum DefaultStyle {
|
|
dsNormal,
|
|
dsKeyword,
|
|
dsDataType,
|
|
dsDecVal,
|
|
dsBaseN,
|
|
dsFloat,
|
|
dsChar,
|
|
dsString,
|
|
dsComment,
|
|
dsOthers,
|
|
dsAlert,
|
|
dsFunction,
|
|
dsRegionMarker,
|
|
dsError
|
|
};
|
|
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
HighlightInterface();
|
|
|
|
/**
|
|
* Virtual destructor.
|
|
*/
|
|
virtual ~HighlightInterface();
|
|
|
|
/**
|
|
* Returns the attribute used for the style \p ds.
|
|
*/
|
|
virtual Attribute::Ptr defaultStyle(const DefaultStyle ds) const = 0;
|
|
|
|
/// An AttributeBlock represents an Attribute with its
|
|
/// dimension in a given line.
|
|
///
|
|
/// \see lineAttributes()
|
|
///
|
|
/// TODO: KDE5 mark as movable
|
|
struct AttributeBlock {
|
|
AttributeBlock(const int _start, const int _length, const Attribute::Ptr & _attribute)
|
|
: start(_start), length(_length), attribute(_attribute)
|
|
{
|
|
}
|
|
/// The column this attribute starts at.
|
|
int start;
|
|
/// The number of columns this attribute spans.
|
|
int length;
|
|
/// The attribute for the current range.
|
|
Attribute::Ptr attribute;
|
|
};
|
|
|
|
/**
|
|
* Get the list of AttributeBlocks for a given \p line in the document.
|
|
*
|
|
* \return list of AttributeBlocks for given \p line.
|
|
*/
|
|
virtual QList<AttributeBlock> lineAttributes(const unsigned int line) = 0;
|
|
|
|
/**
|
|
* \brief Get all available highlighting modes for the current document.
|
|
*
|
|
* Each document can be highlighted using an arbitrary number of highlighting
|
|
* contexts. This method will return the names for each of the used modes.
|
|
*
|
|
* Example: The "PHP (HTML)" mode includes the highlighting for PHP, HTML, CSS and JavaScript.
|
|
*
|
|
* \return Returns a list of embedded highlighting modes for the current Document.
|
|
*
|
|
* \see KTextEditor::Document::highlightingMode()
|
|
*/
|
|
virtual QStringList embeddedHighlightingModes() const = 0;
|
|
|
|
/**
|
|
* \brief Get the highlight mode used at a given position in the document.
|
|
*
|
|
* Retrieve the name of the applied highlight mode at a given \p position
|
|
* in the current document.
|
|
*
|
|
* \see highlightingModes()
|
|
*
|
|
* TODO: I intended to make this const but Kate's implementation needs to
|
|
* call kateTextline which is non-const. Solution?
|
|
*/
|
|
virtual QString highlightingModeAt(const Cursor &position) = 0;
|
|
};
|
|
|
|
}
|
|
|
|
Q_DECLARE_INTERFACE(KTextEditor::HighlightInterface, "org.kde.KTextEditor.HighlightInterface")
|
|
|
|
#endif // KDELIBS_KTEXTEDITOR_HIGHLIGHTINTERFACE_H
|
|
|
|
// kate: space-indent on; indent-width 2; replace-tabs on;
|