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