mirror of
https://github.com/KDE/konsole.git
synced 2026-01-28 08:59:06 -05:00
134 lines
3.3 KiB
C++
134 lines
3.3 KiB
C++
#ifndef ESCAPE_SEQUENCE_URL_EXTRACTOR_H
|
|
#define ESCAPE_SEQUENCE_URL_EXTRACTOR_H
|
|
|
|
/*
|
|
SPDX-FileCopyrightText: 2007-2008 Robert Knight <robertknight@gmail.com>
|
|
SPDX-FileCopyrightText: 1997, 1998 Lars Doelle <lars.doelle@on-line.de>
|
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#include <QObject>
|
|
|
|
#include "konsoleprivate_export.h"
|
|
|
|
namespace Konsole
|
|
{
|
|
class Screen;
|
|
/* Like QPoint, but with Row / Col
|
|
* easier to read than x / y
|
|
*/
|
|
struct Coordinate {
|
|
int row;
|
|
int col;
|
|
};
|
|
|
|
/* Represents a URL on the visual part of konsole, that has been escaped.
|
|
* like a html url tag with a text value.
|
|
*/
|
|
struct ExtractedUrl {
|
|
QString url;
|
|
QString text;
|
|
Coordinate begin;
|
|
Coordinate end;
|
|
};
|
|
|
|
/* Stored in Screen, but used in V10Emulation to
|
|
* store extracted URL's. Perhaps this should be a Model?
|
|
*/
|
|
class KONSOLEPRIVATE_EXPORT EscapeSequenceUrlExtractor : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
private:
|
|
/* Tell us if we are currently reading or not a URL. */
|
|
bool _reading = false;
|
|
|
|
/* If we abort reading a URL input we enter in a invalid state,
|
|
* and we need to ignore the next toggle.
|
|
*/
|
|
bool _ignoreNextUrlInput = false;
|
|
|
|
/* The url / text pair being extracted currently */
|
|
ExtractedUrl _currentUrl;
|
|
|
|
/* The maximum size of url to prevent a bomb
|
|
* that will take over the history file.
|
|
* TODO: make it configurable.
|
|
*/
|
|
// Not used ATM const int _maximumUrlHistory = 200;
|
|
|
|
/* All of the extracted URL's. */
|
|
QVector<ExtractedUrl> _history;
|
|
|
|
/* The URI schema format that's accepted */
|
|
QStringList _allowedUriSchemas;
|
|
|
|
/* Pointer to the Screen, that actually holds the text data. */
|
|
Screen *_screen = nullptr;
|
|
|
|
void appendUrlText_impl(QChar c);
|
|
|
|
public:
|
|
/* This needs to have access to the Session
|
|
* calculate the row / col of the current URL.
|
|
*/
|
|
EscapeSequenceUrlExtractor();
|
|
|
|
/* This is a list of URI schemas that are going to be supported, separated by semicolon.
|
|
* like https://;file://
|
|
*/
|
|
void setAllowedLinkSchema(const QStringList &allowedSchemas);
|
|
|
|
void setScreen(Screen *screen);
|
|
|
|
/* If we are parsing a URL */
|
|
bool reading() const
|
|
{
|
|
return _reading;
|
|
}
|
|
|
|
/* We found an URL, starting to parse */
|
|
void beginUrlInput();
|
|
|
|
/* We received the end byte to finish the Url. */
|
|
void endUrlInput();
|
|
|
|
/* We are not saving this URL, it's bogus. */
|
|
void abortUrlInput();
|
|
|
|
/* The URL is parsed at once, but not the text. We received
|
|
* one character per time until we hit the end byte. */
|
|
void appendUrlText(QChar c)
|
|
{
|
|
if (!reading()) {
|
|
return;
|
|
}
|
|
appendUrlText_impl(c);
|
|
}
|
|
|
|
/* The URL is parsed at once, store it at once. */
|
|
void setUrl(const QString &url);
|
|
|
|
/* All of the parsedURL's, used by TerminalDisplay to paint them
|
|
* on screen. */
|
|
QVector<ExtractedUrl> history() const;
|
|
|
|
/* Clear all the URL's, this is triggered when the Screen is cleared. */
|
|
void clear();
|
|
|
|
/* Iterates through all the URL's and remove the ones that are currently
|
|
* out of bounds because we removed lines in the History
|
|
*/
|
|
void historyLinesRemoved(int lines);
|
|
|
|
/* starts / stops URL Processing */
|
|
|
|
public Q_SLOTS:
|
|
void toggleUrlInput();
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|