File indexing completed on 2024-04-21 15:55:22

0001 /******************************************************************************
0002   Copyright (C) 2011-2012 by Holger Danielsson (holger.danielsson@versanet.de)
0003  ******************************************************************************/
0004 
0005 /**************************************************************************
0006 *                                                                         *
0007 *   This program is free software; you can redistribute it and/or modify  *
0008 *   it under the terms of the GNU General Public License as published by  *
0009 *   the Free Software Foundation; either version 2 of the License, or     *
0010 *   (at your option) any later version.                                   *
0011 *                                                                         *
0012 ***************************************************************************/
0013 
0014 #ifndef KILE_SCRIPT_DOCUMENT_H
0015 #define KILE_SCRIPT_DOCUMENT_H
0016 
0017 #include <QObject>
0018 #include <QAction>
0019 #include <QMap>
0020 
0021 #include <KTextEditor/View>
0022 #include <KTextEditor/Document>
0023 #include <KTextEditor/Cursor>
0024 #include <KTextEditor/Range>
0025 
0026 #include "editorextension.h"
0027 
0028 
0029 class KileInfo;
0030 
0031 namespace KileScript {
0032 
0033 class KileScriptDocument : public QObject
0034 {
0035     Q_OBJECT
0036 
0037 public:
0038     KileScriptDocument(QObject *parent, KileInfo *kileInfo, KileDocument::EditorExtension *editor,
0039                        const QMap<QString, QAction*> *scriptActions);
0040     virtual ~KileScriptDocument() {}
0041 
0042     void setView(KTextEditor::View *view);
0043 
0044     // insert (extended insert using KileAction::TagData)/remove/replace
0045     Q_INVOKABLE void insertText(const QString &s);
0046     Q_INVOKABLE void insertText(int line, int column, const QString &s);
0047     Q_INVOKABLE void insertText(const KTextEditor::Cursor& cursor, const QString &s);
0048 
0049     Q_INVOKABLE bool removeText(int fromLine, int fromColumn, int toLine, int toColumn);
0050     Q_INVOKABLE bool removeText(const KTextEditor::Cursor& from, const KTextEditor::Cursor& to);
0051     Q_INVOKABLE bool removeText(const KTextEditor::Range& range);
0052 
0053     Q_INVOKABLE bool replaceText(const KTextEditor::Range& range, const QString &text);
0054 
0055     // document
0056     Q_INVOKABLE int lines();
0057     Q_INVOKABLE int length();
0058     Q_INVOKABLE KTextEditor::Range documentRange();
0059     Q_INVOKABLE KTextEditor::Cursor documentEnd();
0060 
0061     // text
0062     Q_INVOKABLE QString text();
0063     Q_INVOKABLE QString text(int fromLine, int fromColumn, int toLine, int toColumn);
0064     Q_INVOKABLE QString text(const KTextEditor::Cursor& from, const KTextEditor::Cursor& to);
0065     Q_INVOKABLE QString text(const KTextEditor::Range& range);
0066     Q_INVOKABLE bool setText(const QString &s);
0067     Q_INVOKABLE bool clear();
0068 
0069     // line
0070     Q_INVOKABLE QString line();
0071     Q_INVOKABLE QString line(int line);
0072     Q_INVOKABLE int lineLength();
0073     Q_INVOKABLE int lineLength(int line);
0074 
0075     Q_INVOKABLE bool insertLine(const QString &s);
0076     Q_INVOKABLE bool insertLine(int line, const QString &s);
0077 
0078     Q_INVOKABLE bool removeLine();
0079     Q_INVOKABLE bool removeLine(int line);
0080 
0081     Q_INVOKABLE bool replaceLine(const QString &s);
0082     Q_INVOKABLE bool replaceLine(int line,const QString &s);
0083 
0084     Q_INVOKABLE bool truncateLine();
0085     Q_INVOKABLE bool truncate(int line, int column);
0086     Q_INVOKABLE bool truncate(const KTextEditor::Cursor& cursor);
0087 
0088     // word
0089     Q_INVOKABLE QString word();
0090     Q_INVOKABLE QString wordAt(int line, int column);
0091     Q_INVOKABLE QString wordAt(const KTextEditor::Cursor& cursor);
0092     Q_INVOKABLE KTextEditor::Range wordRange();
0093 
0094     // latex command
0095     Q_INVOKABLE QString latexCommand();
0096     Q_INVOKABLE QString latexCommandAt(int line, int column);
0097     Q_INVOKABLE QString latexCommandAt(const KTextEditor::Cursor& cursor);
0098     Q_INVOKABLE KTextEditor::Range latexCommandRange();
0099 
0100     // char
0101     Q_INVOKABLE QString charAt(int line, int column);
0102     Q_INVOKABLE QString charAt(const KTextEditor::Cursor& cursor);
0103     Q_INVOKABLE QString firstChar(int line);
0104     Q_INVOKABLE QString lastChar(int line);
0105     Q_INVOKABLE bool isSpace(int line, int column);
0106     Q_INVOKABLE bool isSpace(const KTextEditor::Cursor& cursor);
0107 
0108     // bullet
0109     Q_INVOKABLE void insertBullet();
0110     Q_INVOKABLE void nextBullet();
0111     Q_INVOKABLE void previousBullet();
0112 
0113     // environment
0114     Q_INVOKABLE bool hasEnvironment();
0115     Q_INVOKABLE QString environment(bool inside = false);
0116     Q_INVOKABLE KTextEditor::Range environmentRange(bool inside = false);
0117     Q_INVOKABLE QString environmentName();
0118 
0119     Q_INVOKABLE void removeEnvironment(bool inside = false);
0120 
0121     Q_INVOKABLE void closeEnvironment();
0122     Q_INVOKABLE void closeAllEnvironments();
0123 
0124     // texgroup
0125     Q_INVOKABLE bool hasTexgroup();
0126     Q_INVOKABLE QString texgroup(bool inside = true);
0127     Q_INVOKABLE KTextEditor::Range texgroupRange(bool inside = true);
0128 
0129     Q_INVOKABLE void removeTexgroup(bool inside = true);
0130 
0131     // mathgroup
0132     Q_INVOKABLE bool hasMathgroup();
0133     Q_INVOKABLE QString mathgroup();
0134     Q_INVOKABLE KTextEditor::Range mathgroupRange();
0135 
0136     Q_INVOKABLE void removeMathgroup();
0137 
0138     // paragraph
0139     Q_INVOKABLE QString paragraph();
0140     Q_INVOKABLE KTextEditor::Range paragraphRange();
0141 
0142     Q_INVOKABLE void removeParagraph();
0143 
0144     // match text
0145     Q_INVOKABLE bool matchesAt(int line, int column, const QString &s);
0146     Q_INVOKABLE bool matchesAt(const KTextEditor::Cursor& cursor, const QString &s);
0147     Q_INVOKABLE bool startsWith (int line, const QString &pattern, bool skipWhiteSpaces = true);
0148     Q_INVOKABLE bool endsWith (int line, const QString &pattern, bool skipWhiteSpaces = true);
0149 
0150     // columns/lines
0151     Q_INVOKABLE int firstColumn(int line);
0152     Q_INVOKABLE int lastColumn(int line);
0153     Q_INVOKABLE int prevNonSpaceColumn(int line, int column);
0154     Q_INVOKABLE int prevNonSpaceColumn(const KTextEditor::Cursor& cursor);
0155     Q_INVOKABLE int nextNonSpaceColumn(int line, int column);
0156     Q_INVOKABLE int nextNonSpaceColumn(const KTextEditor::Cursor& cursor);
0157     Q_INVOKABLE int prevNonEmptyLine(int line);
0158     Q_INVOKABLE int nextNonEmptyLine(int line);
0159 
0160     // goto
0161     Q_INVOKABLE void gotoBeginEnv();
0162     Q_INVOKABLE void gotoEndEnv();
0163     Q_INVOKABLE void gotoBeginTexgroup();
0164     Q_INVOKABLE void gotoEndTexgroup();
0165     Q_INVOKABLE void gotoNextParagraph();
0166     Q_INVOKABLE void gotoPrevParagraph();
0167     Q_INVOKABLE void gotoNextSectioning();
0168     Q_INVOKABLE void gotoPrevSectioning();
0169     Q_INVOKABLE void gotoLine(int line);
0170 
0171     // insert sectioning
0172     Q_INVOKABLE void insertChapter();
0173     Q_INVOKABLE void insertSection();
0174     Q_INVOKABLE void insertSubsection();
0175     Q_INVOKABLE void insertSubsubsection();
0176     Q_INVOKABLE void insertParagraph();
0177     Q_INVOKABLE void insertSubparagraph();
0178 
0179     // insert references
0180     Q_INVOKABLE void insertLabel();
0181     Q_INVOKABLE void insertReference();
0182     Q_INVOKABLE void insertCitation();
0183     Q_INVOKABLE void insertPageref();
0184     Q_INVOKABLE void insertIndex();
0185     Q_INVOKABLE void insertFootnote();
0186 
0187     // KatePart actions with selections
0188     Q_INVOKABLE void comment();
0189     Q_INVOKABLE void uncomment();
0190     Q_INVOKABLE void uppercase();
0191     Q_INVOKABLE void lowercase();
0192     Q_INVOKABLE void capitalize();
0193     Q_INVOKABLE void joinLines();
0194 
0195     // other
0196     Q_INVOKABLE void insertIntelligentNewline();
0197     Q_INVOKABLE void insertIntelligentTabulator();
0198     Q_INVOKABLE void editBegin();
0199     Q_INVOKABLE void editEnd();
0200 
0201     // lists
0202     Q_INVOKABLE QStringList labelList() const;
0203     Q_INVOKABLE QStringList bibitemList() const;
0204 
0205     // Kile specific actions
0206     Q_INVOKABLE void refreshStructure();
0207 
0208 private:
0209     KileInfo* m_kileInfo;
0210     KTextEditor::View *m_view;
0211     KTextEditor::Document *m_document;
0212     KileDocument::EditorExtension *m_editor;
0213     KTextEditor::Document::EditingTransaction *m_editingTransaction;
0214     const QMap<QString,QAction *> *m_scriptActions;
0215 
0216     QString getWord(const KTextEditor::Cursor &cursor);
0217     QString getLatexCommand(const KTextEditor::Cursor &cursor);
0218 
0219     int previousNonSpaceChar(const QString &s, int pos) const;
0220     int nextNonSpaceChar(const QString &s, int pos) const;
0221 
0222     bool triggerAction(const QString &name);
0223     bool triggerSelectionAction(const QString &name);
0224 
0225 };
0226 
0227 }
0228 
0229 #endif
0230