File indexing completed on 2024-04-14 03:55:29
0001 /* 0002 SPDX-FileCopyrightText: 2008-2009 Erlend Hamberg <ehamberg@gmail.com> 0003 SPDX-FileCopyrightText: 2011 Svyatoslav Kuzmich <svatoslav1@gmail.com> 0004 SPDX-FileCopyrightText: 2012 Vegard Øye 0005 SPDX-FileCopyrightText: 2013 Simon St James <kdedevel@etotheipiplusone.com> 0006 0007 SPDX-License-Identifier: LGPL-2.0-or-later 0008 */ 0009 0010 #ifndef KATE_COMMAND_RANGE_EXPRESSION_PARSER_INCLUDED 0011 #define KATE_COMMAND_RANGE_EXPRESSION_PARSER_INCLUDED 0012 0013 #include <ktexteditor/range.h> 0014 0015 #include <QRegularExpression> 0016 0017 namespace KTextEditor 0018 { 0019 class ViewPrivate; 0020 } 0021 0022 class CommandRangeExpressionParser 0023 { 0024 public: 0025 CommandRangeExpressionParser(); 0026 /** 0027 * Attempt to parse any leading range expression (e.g. "%", "'<,'>", ".,+6" etc) in @c command and 0028 * return it as a Range. If parsing was successful, the range will be valid, the string 0029 * making up the range expression will be placed in @c destRangeExpression, and the command with 0030 * the range stripped will be placed in @c destTransformedCommand. In some special cases, 0031 * the @c destTransformedCommand will be further re-written e.g. a command in the form of just a number 0032 * will be rewritten as "goto <number>". 0033 * 0034 * An invalid Range is returned if no leading range expression could be found. 0035 */ 0036 static KTextEditor::Range 0037 parseRangeExpression(const QString &command, KTextEditor::ViewPrivate *view, QString &destRangeExpression, QString &destTransformedCommand); 0038 0039 private: 0040 KTextEditor::Range 0041 parseRangeExpression(const QString &command, QString &destRangeExpression, QString &destTransformedCommand, KTextEditor::ViewPrivate *view); 0042 int calculatePosition(const QString &string, KTextEditor::ViewPrivate *view); 0043 QString m_line; 0044 QString m_lastLine; 0045 QString m_thisLine; 0046 QString m_mark; 0047 QString m_forwardSearch; 0048 QString m_forwardSearch2; 0049 QString m_backwardSearch; 0050 QString m_backwardSearch2; 0051 QString m_base; 0052 QString m_offset; 0053 QString m_position; 0054 QRegularExpression m_cmdRangeRegex; 0055 }; 0056 0057 #endif