diff options
Diffstat (limited to 'src/kile/kiledocumentinfo.h')
-rw-r--r-- | src/kile/kiledocumentinfo.h | 389 |
1 files changed, 389 insertions, 0 deletions
diff --git a/src/kile/kiledocumentinfo.h b/src/kile/kiledocumentinfo.h new file mode 100644 index 0000000..fc534ef --- /dev/null +++ b/src/kile/kiledocumentinfo.h @@ -0,0 +1,389 @@ +/************************************************************************************* + begin : Sun Jul 20 2003 + copyright : (C) 2003 by Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net) + (C) 2006 by Michel Ludwig (michel.ludwig@kdemail.net) + *************************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef KILEDOCUMENTINFO_H +#define KILEDOCUMENTINFO_H + +#include <kate/document.h> +#include "kiledebug.h" +#include <klistview.h> +#include <kurl.h> +#include <kdialogbase.h> +#include <latexcmd.h> + +#include "kileconstants.h" +#include "kileextensions.h" + +#define TEX_CAT0 '\\' +#define TEX_CAT1 '{' +#define TEX_CAT2 '}' +#define TEX_CAT3 '$' +#define TEX_CAT4 '&' +#define TEX_CAT6 '#' +#define TEX_CAT7 '^' +#define TEX_CAT8 '_' +#define TEX_CAT13 '~' +#define TEX_CAT14 '%' + +#define SIZE_STAT_ARRAY 6 + +namespace KileStruct +{ + //Different types of elements in the structure view + enum + { + None = 0x1, Label = 0x2, Sect = 0x4, Input = 0x8, + BibItem = 0x10, Bibliography = 0x20, Package = 0x40, NewCommand = 0x80, + Graphics = 0x100, Reference = 0x200, BeginEnv = 0x400, EndEnv = 0x800, + BeginFloat = 0x1000, EndFloat = 0x2000, Caption = 0x4000, BeamerFrame = 0x8000, + BeamerBeginFrame = 0x10000, BeamerEndFrame = 0x20000, BeamerFrametitle = 0x40000, BeamerBeginBlock = 0x80000, + ToDo = 0x100000, FixMe = 0x200000, NewEnvironment = 0x400000 + }; + + //Different levels (in the parent-child hierarchy) in the structure view + enum + { + Hidden = -4, NotSpecified = -3, Object = -2, File = -1 + }; +} + +/** + * A convenience class to store info about how LaTeX elements should appear in the + * structure view. A QMap<QString, KileStructData> should be created, so that the + * actual LaTeX elements can be mapped to this class. + **/ +class KileStructData +{ +public: + KileStructData(int lvl = 0, int tp = KileStruct::None, QString px = QString::null, QString fldr = "root" ) : level(lvl), type(tp), pix(px), folder(fldr) {} + /** At which level the element should be visible **/ + int level; + /** The type of element (see @ref KileStruct) **/ + int type; + /** The name of the icon that goes with this element. The icon is located using SmallIcon(pix). **/ + QString pix, folder; +}; + +/** + * KileDocument::Info is a decorator class for the Document class. We can't derive a class from an interface + * without implementing the interface, a decorator class is a way to add some functionality to the Document class. + **/ + +namespace KileDocument +{ + +struct BracketResult +{ + BracketResult() : option(QString::null), value(QString::null), line(0), col(0) {} + QString option, value; + int line, col; +}; + +struct TodoResult +{ + int type; + uint colTag; + uint colComment; + QString comment; +}; + +class Info : public QObject +{ + Q_OBJECT + +public: + static bool containsInvalidCharacters(const KURL&); + static KURL repairInvalidCharacters(const KURL&, bool checkForFileExistence = true); + static KURL repairExtension(const KURL&, bool checkForFileExistence = true); + static KURL makeValidTeXURL(const KURL & url, bool istexfile, bool checkForFileExistence = true); + static KURL renameIfExist(const KURL& url); + +public: + Info(); + ~Info(); + + const QStringList* labels() const{ return &m_labels; } + const QStringList* bibItems() const { return &m_bibItems; } + const QStringList* dependencies() const {return &m_deps; } + const QStringList* bibliographies() const { return &m_bibliography; } + const QStringList* packages() const { return &m_packages; } + const QStringList* newCommands() const { return &m_newCommands; } + + QString lastModifiedFile(const QStringList *list = 0L); + + bool openStructureLabels() { return m_openStructureLabels; } + bool openStructureReferences() { return m_openStructureReferences; } + bool openStructureBibitems() { return m_openStructureBibitems; } + bool openStructureTodo() { return m_openStructureTodo; } + + bool showStructureLabels() { return m_showStructureLabels; } + + + const QString & preamble() const { return m_preamble; } + + virtual bool isLaTeXRoot() { return m_bIsRoot; } + + virtual KURL url(); + + virtual void updateStructLevelInfo(); + + void setBaseDirectory(const KURL& url); + const KURL& getBaseDirectory() const; + + virtual bool isTextDocument(); + virtual Type getType(); + + /** + * Returns a file filter suitable for loading and saving files of this class' type. + **/ + virtual QString getFileFilter() const; + + virtual bool isDocumentTypePromotionAllowed(); + void setDocumentTypePromotionAllowed(bool b); + +public slots: + /** + * Never call this function directly, use KileWidget::Structure::update(KileDocument::Info *, bool) instead + **/ + virtual void updateStruct(); + virtual void updateBibItems(); + +signals: + void urlChanged(KileDocument::Info* info, const KURL& url); + void isrootChanged(bool); + + void foundItem(const QString &title, uint line, uint column, int type, int level, uint startline, uint startcol, + const QString & pix, const QString & folder); + void doneUpdating(); + void depChanged(); + void completed(KileDocument::Info* info); + +protected slots: + void slotCompleted(); + +protected: + void count(const QString line, long *stat); + +protected: + enum State + { + stStandard=0, stComment=1, stControlSequence=3, stControlSymbol=4, + stCommand=5,stEnvironment=6 + }; + +protected: + bool m_bIsRoot; + QStringList m_labels; + QStringList m_bibItems; + QStringList m_deps, m_depsPrev; + QStringList m_bibliography; + QStringList m_packages; + QStringList m_newCommands; + QString m_preamble; + QMap<QString,KileStructData> m_dictStructLevel; + KURL m_url; + KConfig *m_config; + bool m_showStructureLabels; + bool m_showStructureBibitems; + bool m_showStructureGraphics; + bool m_showStructureFloats; + bool m_showStructureReferences; + bool m_showStructureInputFiles; + bool m_showStructureTodo; + bool m_showSectioningLabels; + bool m_openStructureLabels; + bool m_openStructureReferences; + bool m_openStructureBibitems; + bool m_openStructureTodo; + KURL m_baseDirectory; + bool documentTypePromotionAllowed; + Extensions *m_extensions; +}; + + +/** + * The URL of a text document is managed directly by the corresponding Kate::Document. + **/ +class TextInfo : public Info +{ + Q_OBJECT +public: + /** + * @param defaultHighlightMode the highlight mode that will be set automatically + * once a new document is installed + **/ + TextInfo(Kate::Document *doc, Extensions *extensions, const QString& defaultHighlightMode = QString::null); + virtual ~TextInfo(); + + /** + * @returns the document for which this class is a decorator + **/ + const Kate::Document* getDoc() const; + Kate::Document* getDoc(); + void setDoc(Kate::Document *doc); + void detach(); + + /** + * Used by @ref KileDocInfoDlg to display statistics of the Document. + * @returns an array with some statistical data of the document. + * The array is filled as follows: [0] = #c in words, [1] = #c in latex commands and environments, + [2] = #c whitespace, [3] = #words, [4] = # latex_commands, [5] = latex_environments **/ + + virtual const long* getStatistics(); + + /** + * @returns the URL of the Kate::Document. + **/ + virtual KURL url(); + + virtual Type getType(); + + bool isTextDocument(); + + void setHighlightMode(const QString & highlight = QString::null); + + void setDefaultHightlightMode(const QString& string); + + /** + * "Overridden" method that installs custom event filters by using the "installEventFilters" + * method. + * @warning Only this method should be used to create new views for text documents ! + * @return NULL if no document is set (m_doc == NULL) + **/ + KTextEditor::View* createView(QWidget *parent, const char *name=0); + +protected slots: + void slotFileNameChanged(); + +protected: + Kate::Document *m_doc; + long *m_arStatistics; + QString m_defaultHighlightMode; + + QString matchBracket(QChar c, uint &, uint &); + QString getTextline(uint line, TodoResult &todo); + void searchTodoComment(const QString &s, uint startpos, TodoResult &todo); + + /** + * Installs an event filter on a view. Subclasses can override this method to + * provide custom event filters. The default implementation does nothing. Whenever this + * method is overridden, "removeInstalledEventFilters" should be overridden as well. + * @param view the view that is considered + **/ + virtual void installEventFilters(KTextEditor::View *view); + + /** + * Removes the event filters that were previously installed by the "installEventFilters" + * function. Subclasses can override this method to remove custom event filters. The + * default implementation does nothing. + * @param view the view that is considered + **/ + virtual void removeInstalledEventFilters(KTextEditor::View *view); + + /** + * Installs the event filters on all the views that are currently open for the + * managed document object. The function "installEventFilters(KTextEditor::View *view) + * function is used for a specific view. + **/ + void installEventFilters(); + + /** + * Removes the event filters from all the views that are currently open for the + * managed document object. The function "removeInstalledEventFilters(KTextEditor::View *view) + * function is used for a specific view. + **/ + void removeInstalledEventFilters(); +}; + + + +class LaTeXInfo : public TextInfo +{ + Q_OBJECT + +public: + /** + * @param eventFilter the event filter that will be installed on managed documents + **/ + LaTeXInfo(Kate::Document *doc, Extensions *extensions, LatexCommands *commands, const QObject* eventFilter); + virtual ~LaTeXInfo(); + + const long* getStatistics(); + + virtual Type getType(); + + virtual QString getFileFilter() const; + +public slots: + virtual void updateStruct(); + +protected: + LatexCommands *m_commands; + const QObject *m_eventFilter; + + virtual void updateStructLevelInfo(); + virtual void checkChangedDeps(); + /** + * Installs a custom event filter. + **/ + virtual void installEventFilters(KTextEditor::View *view); + + /** + * Revmoves the custom event filter. + **/ + virtual void removeInstalledEventFilters(KTextEditor::View *view); + +private: + BracketResult matchBracket(uint &, uint &); +}; + + + +class BibInfo : public TextInfo +{ + Q_OBJECT + +public: + BibInfo (Kate::Document *doc, Extensions *extensions, LatexCommands* commands); + virtual ~BibInfo(); + + virtual bool isLaTeXRoot(); + + virtual Type getType(); + + virtual QString getFileFilter() const; + +public slots: + virtual void updateStruct(); +}; + +class ScriptInfo : public TextInfo +{ + Q_OBJECT + +public: + ScriptInfo(Kate::Document *doc, Extensions *extensions); + virtual ~ScriptInfo(); + + virtual bool isLaTeXRoot(); + + virtual Type getType(); + + virtual QString getFileFilter() const; +}; + +} +#endif + |