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