Warning, file /office/kile/src/scripting/kilescriptdocument.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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 #include "scripting/kilescriptdocument.h" 0015 0016 #include "kileinfo.h" 0017 #include "kileactions.h" 0018 0019 namespace KileScript { 0020 0021 0022 KileScriptDocument::KileScriptDocument(QObject *parent, KileInfo* kileInfo, KileDocument::EditorExtension *editor, const QMap<QString,QAction *> *scriptActions) 0023 : QObject(parent) 0024 , m_kileInfo(kileInfo) 0025 , m_view(Q_NULLPTR) 0026 , m_document(Q_NULLPTR) 0027 , m_editor(editor) 0028 , m_editingTransaction(Q_NULLPTR) 0029 , m_scriptActions(scriptActions) 0030 { 0031 } 0032 0033 ////////////////////////////////// view/document ////////////////////////////////////// 0034 0035 void KileScriptDocument::setView(KTextEditor::View *view) 0036 { 0037 m_view = view; 0038 m_document = m_view->document(); 0039 } 0040 0041 ////////////////////////////////// insert/remove/replace ////////////////////////////////////// 0042 0043 void KileScriptDocument::insertText(const QString &s) 0044 { 0045 QString cursorpos = ( s.indexOf("%C") >= 0 ) ? QString() : "%C"; 0046 m_editor->insertTag(KileAction::TagData(QString(),s,cursorpos,0,0), m_view); 0047 } 0048 0049 void KileScriptDocument::insertText(int line, int column, const QString &s) 0050 { 0051 insertText(KTextEditor::Cursor(line, column),s); 0052 } 0053 0054 void KileScriptDocument::insertText(const KTextEditor::Cursor& cursor, const QString &s) 0055 { 0056 m_view->setCursorPosition(cursor); 0057 insertText(s); 0058 } 0059 0060 bool KileScriptDocument::removeText(int fromLine, int fromColumn, int toLine, int toColumn) 0061 { 0062 return removeText(KTextEditor::Range(fromLine, fromColumn, toLine, toColumn)); 0063 } 0064 0065 bool KileScriptDocument::removeText(const KTextEditor::Cursor& from, const KTextEditor::Cursor& to) 0066 { 0067 return removeText(KTextEditor::Range(from, to)); 0068 } 0069 0070 bool KileScriptDocument::removeText(const KTextEditor::Range& range) 0071 { 0072 return m_document->removeText(range); 0073 } 0074 0075 bool KileScriptDocument::replaceText(const KTextEditor::Range& range, const QString &text) 0076 { 0077 return m_document->replaceText(range,text); 0078 } 0079 0080 /////////////////////////////// document ////////////////////////////// 0081 0082 int KileScriptDocument::lines() 0083 { 0084 return m_document->lines(); 0085 } 0086 0087 int KileScriptDocument::length() 0088 { 0089 return m_document->totalCharacters(); 0090 } 0091 0092 KTextEditor::Range KileScriptDocument::documentRange() 0093 { 0094 return m_document->documentRange(); 0095 } 0096 0097 KTextEditor::Cursor KileScriptDocument::documentEnd() 0098 { 0099 return m_document->documentEnd(); 0100 } 0101 0102 /////////////////////////////// text ////////////////////////////// 0103 0104 QString KileScriptDocument::text() 0105 { 0106 return m_document->text(); 0107 } 0108 0109 QString KileScriptDocument::text(int fromLine, int fromColumn, int toLine, int toColumn) 0110 { 0111 return text( KTextEditor::Range(fromLine, fromColumn, toLine, toColumn) ); 0112 } 0113 0114 QString KileScriptDocument::text(const KTextEditor::Cursor& from, const KTextEditor::Cursor& to) 0115 { 0116 return text( KTextEditor::Range(from, to) ); 0117 } 0118 0119 QString KileScriptDocument::text(const KTextEditor::Range& range) 0120 { 0121 return m_document->text(range); 0122 } 0123 0124 bool KileScriptDocument::setText(const QString &s) 0125 { 0126 return m_document->setText(s); 0127 } 0128 0129 bool KileScriptDocument::clear() 0130 { 0131 return m_document->clear(); 0132 } 0133 0134 /////////////////////////////// line ////////////////////////////// 0135 0136 QString KileScriptDocument::line(int line) 0137 { 0138 return m_document->line(line); 0139 } 0140 0141 QString KileScriptDocument::line() 0142 { 0143 return line( m_view->cursorPosition().line() ); 0144 } 0145 0146 int KileScriptDocument::lineLength() 0147 { 0148 return lineLength( m_view->cursorPosition().line() ); 0149 } 0150 0151 int KileScriptDocument::lineLength(int line) 0152 { 0153 return m_document->lineLength(line); 0154 } 0155 0156 bool KileScriptDocument::insertLine(const QString &s) 0157 { 0158 return insertLine(m_view->cursorPosition().line(), s); 0159 } 0160 0161 bool KileScriptDocument::insertLine(int line, const QString &s) 0162 { 0163 return m_document->insertLine(line, s); 0164 } 0165 0166 bool KileScriptDocument::removeLine() 0167 { 0168 return removeLine( m_view->cursorPosition().line() ); 0169 } 0170 0171 bool KileScriptDocument::removeLine(int line) 0172 { 0173 return m_document->removeLine(line); 0174 } 0175 0176 bool KileScriptDocument::replaceLine(const QString &s) 0177 { 0178 return replaceLine( m_view->cursorPosition().line(),s ); 0179 } 0180 0181 bool KileScriptDocument::replaceLine(int line,const QString &s) 0182 { 0183 return m_editor->replaceLine(line,s,m_view); 0184 } 0185 0186 bool KileScriptDocument::truncateLine() 0187 { 0188 return truncate( m_view->cursorPosition() ); 0189 } 0190 0191 bool KileScriptDocument::truncate(int line, int column) 0192 { 0193 QString textline = m_document->line(line); 0194 if ( textline.isEmpty() || textline.length()<column ) { 0195 return false; 0196 } 0197 0198 return removeText( KTextEditor::Range(line,column,line,textline.length()) ); 0199 } 0200 0201 bool KileScriptDocument::truncate(const KTextEditor::Cursor& cursor) 0202 { 0203 return truncate(cursor.line(), cursor.column()); 0204 } 0205 0206 /////////////////////////////// word ////////////////////////////// 0207 0208 QString KileScriptDocument::word() 0209 { 0210 return getWord( m_view->cursorPosition() ); 0211 } 0212 0213 QString KileScriptDocument::wordAt(int line, int column) 0214 { 0215 return getWord( KTextEditor::Cursor(line, column) ); 0216 } 0217 0218 QString KileScriptDocument::wordAt(const KTextEditor::Cursor& cursor) 0219 { 0220 return getWord(cursor); 0221 } 0222 0223 KTextEditor::Range KileScriptDocument::wordRange() 0224 { 0225 return m_editor->wordRange( m_view->cursorPosition(),false,m_view ); 0226 } 0227 0228 QString KileScriptDocument::getWord(const KTextEditor::Cursor &cursor) 0229 { 0230 return m_editor->word(cursor,false,m_view); 0231 } 0232 0233 /////////////////////////////// latex command ////////////////////////////// 0234 0235 QString KileScriptDocument::latexCommand() 0236 { 0237 return getLatexCommand( m_view->cursorPosition() ); 0238 } 0239 0240 QString KileScriptDocument::latexCommandAt(int line, int column) 0241 { 0242 return getLatexCommand( KTextEditor::Cursor(line, column) ); 0243 } 0244 0245 QString KileScriptDocument::latexCommandAt(const KTextEditor::Cursor &cursor) 0246 { 0247 return getLatexCommand(cursor); 0248 } 0249 0250 KTextEditor::Range KileScriptDocument::latexCommandRange() 0251 { 0252 return m_editor->wordRange( m_view->cursorPosition(),true,m_view ); 0253 } 0254 0255 QString KileScriptDocument::getLatexCommand(const KTextEditor::Cursor &cursor) 0256 { 0257 return m_editor->word(cursor,true,m_view); 0258 } 0259 0260 /////////////////////////////// char ////////////////////////////// 0261 0262 QString KileScriptDocument::charAt(int line, int column) 0263 { 0264 return charAt(KTextEditor::Cursor(line,column)); 0265 } 0266 0267 QString KileScriptDocument::charAt(const KTextEditor::Cursor& cursor) 0268 { 0269 return QString(m_document->characterAt(cursor)); 0270 } 0271 0272 QString KileScriptDocument::firstChar(int line) 0273 { 0274 QString textline = m_document->line(line); 0275 int pos = nextNonSpaceChar(textline,0); 0276 return ( pos >= 0 ) ? QString(textline.at(pos)) : QString(); 0277 } 0278 0279 QString KileScriptDocument::lastChar(int line) 0280 { 0281 QString textline = m_document->line(line); 0282 int pos = previousNonSpaceChar(textline,textline.length()-1); 0283 return ( pos >= 0 ) ? QString(textline.at(pos)) : QString(); 0284 } 0285 0286 bool KileScriptDocument::isSpace(int line, int column) 0287 { 0288 return isSpace(KTextEditor::Cursor(line,column)); 0289 } 0290 0291 bool KileScriptDocument::isSpace(const KTextEditor::Cursor& cursor) 0292 { 0293 return m_document->characterAt(cursor).isSpace(); 0294 } 0295 0296 /////////////////////////////// bullet ////////////////////////////// 0297 0298 void KileScriptDocument::insertBullet() 0299 { 0300 m_editor->insertBullet(m_view); 0301 } 0302 0303 void KileScriptDocument::nextBullet() 0304 { 0305 m_editor->nextBullet(m_view); 0306 } 0307 0308 void KileScriptDocument::previousBullet() 0309 { 0310 m_editor->prevBullet(m_view); 0311 } 0312 0313 /////////////////////////////// environment ////////////////////////////// 0314 0315 bool KileScriptDocument::hasEnvironment() 0316 { 0317 return m_editor->hasEnvironment(m_view); 0318 } 0319 0320 QString KileScriptDocument::environmentName() 0321 { 0322 return m_editor->environmentName(m_view); 0323 } 0324 0325 QString KileScriptDocument::environment(bool inside) 0326 { 0327 return m_editor->environmentText(inside,m_view); 0328 } 0329 0330 KTextEditor::Range KileScriptDocument::environmentRange(bool inside) 0331 { 0332 return m_editor->environmentRange(inside,m_view); 0333 } 0334 0335 void KileScriptDocument::removeEnvironment(bool inside) 0336 { 0337 m_editor->deleteEnvironment(inside,m_view); 0338 } 0339 0340 void KileScriptDocument::closeEnvironment() 0341 { 0342 m_editor->closeEnvironment(m_view); 0343 } 0344 0345 void KileScriptDocument::closeAllEnvironments() 0346 { 0347 m_editor->closeAllEnvironments(m_view); 0348 } 0349 0350 ////////////////////////////////// TexGroup ////////////////////////////////////// 0351 0352 bool KileScriptDocument::hasTexgroup() 0353 { 0354 return m_editor->hasTexgroup(m_view); 0355 } 0356 0357 QString KileScriptDocument::texgroup(bool inside) 0358 { 0359 return m_editor->getTexgroupText(inside,m_view); 0360 } 0361 0362 KTextEditor::Range KileScriptDocument::texgroupRange(bool inside) 0363 { 0364 return m_editor->texgroupRange(inside,m_view); 0365 } 0366 0367 void KileScriptDocument::removeTexgroup(bool inside) 0368 { 0369 return m_editor->deleteTexgroup(inside,m_view); 0370 } 0371 0372 ////////////////////////////////// MathGroup ////////////////////////////////////// 0373 0374 bool KileScriptDocument::hasMathgroup() 0375 { 0376 return m_editor->hasMathgroup(m_view); 0377 } 0378 0379 QString KileScriptDocument::mathgroup() 0380 { 0381 return m_editor->getMathgroupText(m_view); 0382 } 0383 0384 KTextEditor::Range KileScriptDocument::mathgroupRange() 0385 { 0386 return m_editor->mathgroupRange(m_view); 0387 } 0388 0389 void KileScriptDocument::removeMathgroup() 0390 { 0391 m_editor->deleteMathgroup(m_view); 0392 } 0393 0394 ////////////////////////////////// Paragraph ////////////////////////////////////// 0395 0396 QString KileScriptDocument::paragraph() 0397 { 0398 return m_editor->getParagraphText(m_view); 0399 } 0400 0401 KTextEditor::Range KileScriptDocument::paragraphRange() 0402 { 0403 return m_editor->findCurrentParagraphRange(m_view); 0404 } 0405 0406 void KileScriptDocument::removeParagraph() 0407 { 0408 m_editor->deleteParagraph(m_view); 0409 } 0410 0411 ////////////////////////////////// matches ////////////////////////////////////// 0412 0413 bool KileScriptDocument::matchesAt(int line, int column, const QString &s) 0414 { 0415 return matchesAt(KTextEditor::Cursor(line,column),s); 0416 } 0417 0418 bool KileScriptDocument::matchesAt(const KTextEditor::Cursor& cursor, const QString &s) 0419 { 0420 QString textline = m_document->line(cursor.line()); 0421 return textline.mid(cursor.column()).startsWith(s); 0422 } 0423 0424 bool KileScriptDocument::startsWith (int line, const QString &pattern, bool skipWhiteSpaces) 0425 { 0426 QString textline = m_document->line(line); 0427 if ( skipWhiteSpaces ) { 0428 textline = textline.trimmed(); 0429 } 0430 return textline.startsWith(pattern); 0431 } 0432 0433 bool KileScriptDocument::endsWith (int line, const QString &pattern, bool skipWhiteSpaces) 0434 { 0435 QString textline = m_document->line(line); 0436 if ( skipWhiteSpaces ) { 0437 textline = textline.trimmed(); 0438 } 0439 return textline.endsWith(pattern); 0440 } 0441 0442 ////////////////////////////////// columns/lines ////////////////////////////////////// 0443 0444 int KileScriptDocument::firstColumn(int line) 0445 { 0446 QString textline = m_document->line(line); 0447 return ( textline.isEmpty() ) ? -1 : nextNonSpaceChar(textline,0); 0448 } 0449 0450 int KileScriptDocument::lastColumn(int line) 0451 { 0452 QString textline = m_document->line(line); 0453 return ( textline.isEmpty() ) ? -1 : previousNonSpaceChar(textline,textline.length()-1); 0454 } 0455 0456 int KileScriptDocument::prevNonSpaceColumn(int line, int column) 0457 { 0458 QString textline = m_document->line(line); 0459 return ( textline.isEmpty() || column==0 ) ? -1 : previousNonSpaceChar(textline,column-1); 0460 } 0461 0462 int KileScriptDocument::prevNonSpaceColumn(const KTextEditor::Cursor& cursor) 0463 { 0464 return prevNonSpaceColumn(cursor.line(), cursor.column()); 0465 } 0466 0467 int KileScriptDocument::nextNonSpaceColumn(int line, int column) 0468 { 0469 QString textline = m_document->line(line); 0470 return ( textline.isEmpty() || column>=textline.length() ) ? -1 : nextNonSpaceChar(textline,column+1); 0471 } 0472 0473 int KileScriptDocument::nextNonSpaceColumn(const KTextEditor::Cursor& cursor) 0474 { 0475 return nextNonSpaceColumn(cursor.line(), cursor.column()); 0476 } 0477 0478 int KileScriptDocument::prevNonEmptyLine(int line) 0479 { 0480 return m_editor->prevNonEmptyLine(line,m_view); 0481 } 0482 0483 int KileScriptDocument::nextNonEmptyLine(int line) 0484 { 0485 return m_editor->nextNonEmptyLine(line,m_view); 0486 } 0487 0488 int KileScriptDocument::previousNonSpaceChar(const QString &s, int pos) const 0489 { 0490 if ( pos >= s.length() ) { 0491 pos = s.length() - 1; 0492 } 0493 0494 for (int i=pos; i>=0; --i ) { 0495 if ( !s[i].isSpace() ) { 0496 return i; 0497 } 0498 } 0499 return -1; 0500 } 0501 0502 int KileScriptDocument::nextNonSpaceChar(const QString &s, int pos) const 0503 { 0504 if ( pos < 0 ) { 0505 pos = 0; 0506 } 0507 0508 for ( int i=pos; i<s.length(); ++i ) { 0509 if ( !s[i].isSpace() ) { 0510 return i; 0511 } 0512 } 0513 return -1; 0514 } 0515 0516 ////////////////////////////////// goto ////////////////////////////////////// 0517 0518 void KileScriptDocument::gotoBeginEnv() 0519 { 0520 m_editor->gotoEnvironment(true,m_view); 0521 } 0522 0523 void KileScriptDocument::gotoEndEnv() 0524 { 0525 m_editor->gotoEnvironment(false,m_view); 0526 } 0527 0528 void KileScriptDocument::gotoBeginTexgroup() 0529 { 0530 m_editor->gotoTexgroup(true,m_view); 0531 } 0532 0533 void KileScriptDocument::gotoEndTexgroup() 0534 { 0535 m_editor->gotoTexgroup(false,m_view); 0536 } 0537 0538 void KileScriptDocument::gotoNextParagraph() 0539 { 0540 m_editor->gotoNextParagraph(m_view); 0541 } 0542 0543 void KileScriptDocument::gotoPrevParagraph() 0544 { 0545 m_editor->gotoPrevParagraph(m_view); 0546 } 0547 0548 void KileScriptDocument::gotoNextSectioning() 0549 { 0550 m_editor->gotoSectioning(false,m_view); 0551 } 0552 0553 void KileScriptDocument::gotoPrevSectioning() 0554 { 0555 m_editor->gotoSectioning(true,m_view); 0556 } 0557 0558 void KileScriptDocument::gotoLine(int line) 0559 { 0560 m_editor->goToLine(line,m_view); 0561 } 0562 0563 ////////////////////////////////// insert sectioning tags ////////////////////////////////////// 0564 0565 void KileScriptDocument::insertChapter() 0566 { 0567 triggerAction("tag_chapter"); 0568 } 0569 0570 void KileScriptDocument::insertSection() 0571 { 0572 triggerAction("tag_section"); 0573 } 0574 0575 void KileScriptDocument::insertSubsection() 0576 { 0577 triggerAction("tag_subsection"); 0578 } 0579 0580 void KileScriptDocument::insertSubsubsection() 0581 { 0582 triggerAction("tag_subsubsection"); 0583 } 0584 0585 void KileScriptDocument::insertParagraph() 0586 { 0587 triggerAction("tag_paragraph"); 0588 } 0589 0590 void KileScriptDocument::insertSubparagraph() 0591 { 0592 triggerAction("tag_subparagraph"); 0593 } 0594 0595 ////////////////////////////////// insert reference tags ////////////////////////////////////// 0596 0597 void KileScriptDocument::insertLabel() 0598 { 0599 triggerAction("tag_label"); 0600 } 0601 0602 void KileScriptDocument::insertReference() 0603 { 0604 triggerAction("tag_ref"); 0605 } 0606 0607 void KileScriptDocument::insertPageref() 0608 { 0609 triggerAction("tag_pageref"); 0610 } 0611 0612 void KileScriptDocument::insertIndex() 0613 { 0614 triggerAction("tag_index"); 0615 } 0616 0617 void KileScriptDocument::insertFootnote() 0618 { 0619 triggerAction("tag_footnote"); 0620 } 0621 0622 void KileScriptDocument::insertCitation() 0623 { 0624 triggerAction("tag_cite"); 0625 } 0626 0627 bool KileScriptDocument::triggerAction(const QString &name) 0628 { 0629 if ( m_scriptActions->contains(name) ) { 0630 m_scriptActions->value(name)->trigger(); 0631 return true; 0632 } 0633 else { 0634 return false; 0635 } 0636 } 0637 0638 ////////////////////////////////// actions with selections////////////////////////////////////// 0639 0640 void KileScriptDocument::comment() 0641 { 0642 triggerSelectionAction("tools_comment"); 0643 } 0644 0645 void KileScriptDocument::uncomment() 0646 { 0647 triggerSelectionAction("tools_uncomment"); 0648 } 0649 0650 void KileScriptDocument::uppercase() 0651 { 0652 triggerSelectionAction("tools_uppercase"); 0653 } 0654 0655 void KileScriptDocument::lowercase() 0656 { 0657 triggerSelectionAction("tools_lowercase"); 0658 } 0659 0660 void KileScriptDocument::capitalize() 0661 { 0662 triggerSelectionAction("tools_capitalize"); 0663 } 0664 0665 void KileScriptDocument::joinLines() 0666 { 0667 triggerSelectionAction("tools_join_lines"); 0668 } 0669 0670 bool KileScriptDocument::triggerSelectionAction(const QString &name) 0671 { 0672 return ( m_view->selection() ) ? triggerAction(name) : false; 0673 } 0674 0675 ////////////////////////////////// other ////////////////////////////////////// 0676 0677 void KileScriptDocument::insertIntelligentNewline() 0678 { 0679 m_editor->insertIntelligentNewline(m_view); 0680 } 0681 0682 void KileScriptDocument::insertIntelligentTabulator() 0683 { 0684 m_editor->insertIntelligentTabulator(m_view); 0685 } 0686 0687 void KileScriptDocument::editBegin() 0688 { 0689 Q_ASSERT(!m_editingTransaction); 0690 if (m_editingTransaction) { 0691 KILE_DEBUG_MAIN << "editor editing transaction was active, forcefully closing it"; 0692 m_editingTransaction->finish(); 0693 delete m_editingTransaction; 0694 } 0695 m_editingTransaction = new KTextEditor::Document::EditingTransaction(m_document); 0696 m_editingTransaction->start(); 0697 } 0698 0699 void KileScriptDocument::editEnd() 0700 { 0701 Q_ASSERT(m_editingTransaction); 0702 if (!m_editingTransaction) { 0703 KILE_DEBUG_MAIN << "unexpectedly no editing transaction was active, aborting"; 0704 return; 0705 } 0706 0707 m_editingTransaction->finish(); 0708 delete m_editingTransaction; 0709 m_editingTransaction = Q_NULLPTR; 0710 } 0711 0712 ////////////////////////////////// Kile specific actions ////////////////////////////////////// 0713 0714 void KileScriptDocument::refreshStructure() 0715 { 0716 triggerAction("refreshstructure"); 0717 } 0718 0719 ////////////////////////////////// lists ////////////////////////////////////// 0720 0721 QStringList KileScriptDocument::labelList() const 0722 { 0723 return m_kileInfo->allLabels(); 0724 } 0725 0726 QStringList KileScriptDocument::bibitemList() const 0727 { 0728 return m_kileInfo->allBibItems(); 0729 } 0730 0731 0732 0733 0734 0735 } 0736