diff options
Diffstat (limited to 'meshmc/launcher/pathmatcher')
| -rw-r--r-- | meshmc/launcher/pathmatcher/FSTreeMatcher.h | 40 | ||||
| -rw-r--r-- | meshmc/launcher/pathmatcher/IPathMatcher.h | 34 | ||||
| -rw-r--r-- | meshmc/launcher/pathmatcher/MultiMatcher.h | 48 | ||||
| -rw-r--r-- | meshmc/launcher/pathmatcher/RegexpMatcher.h | 59 |
4 files changed, 181 insertions, 0 deletions
diff --git a/meshmc/launcher/pathmatcher/FSTreeMatcher.h b/meshmc/launcher/pathmatcher/FSTreeMatcher.h new file mode 100644 index 0000000000..8064694a1d --- /dev/null +++ b/meshmc/launcher/pathmatcher/FSTreeMatcher.h @@ -0,0 +1,40 @@ +/* SPDX-FileCopyrightText: 2026 Project Tick + * SPDX-FileContributor: Project Tick + * SPDX-License-Identifier: GPL-3.0-or-later + * + * MeshMC - A Custom Launcher for Minecraft + * Copyright (C) 2026 Project Tick + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#pragma once + +#include "IPathMatcher.h" +#include <SeparatorPrefixTree.h> +#include <QRegularExpression> + +class FSTreeMatcher : public IPathMatcher +{ + public: + virtual ~FSTreeMatcher() {}; + FSTreeMatcher(SeparatorPrefixTree<'/'>& tree) : m_fsTree(tree) {} + + bool matches(const QString& string) const override + { + return m_fsTree.covers(string); + } + + SeparatorPrefixTree<'/'>& m_fsTree; +}; diff --git a/meshmc/launcher/pathmatcher/IPathMatcher.h b/meshmc/launcher/pathmatcher/IPathMatcher.h new file mode 100644 index 0000000000..38694c67a6 --- /dev/null +++ b/meshmc/launcher/pathmatcher/IPathMatcher.h @@ -0,0 +1,34 @@ +/* SPDX-FileCopyrightText: 2026 Project Tick + * SPDX-FileContributor: Project Tick + * SPDX-License-Identifier: GPL-3.0-or-later + * + * MeshMC - A Custom Launcher for Minecraft + * Copyright (C) 2026 Project Tick + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#pragma once +#include <memory> +#include <QString> + +class IPathMatcher +{ + public: + typedef std::shared_ptr<IPathMatcher> Ptr; + + public: + virtual ~IPathMatcher() {}; + virtual bool matches(const QString& string) const = 0; +}; diff --git a/meshmc/launcher/pathmatcher/MultiMatcher.h b/meshmc/launcher/pathmatcher/MultiMatcher.h new file mode 100644 index 0000000000..aa1a3be070 --- /dev/null +++ b/meshmc/launcher/pathmatcher/MultiMatcher.h @@ -0,0 +1,48 @@ +/* SPDX-FileCopyrightText: 2026 Project Tick + * SPDX-FileContributor: Project Tick + * SPDX-License-Identifier: GPL-3.0-or-later + * + * MeshMC - A Custom Launcher for Minecraft + * Copyright (C) 2026 Project Tick + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "IPathMatcher.h" +#include <SeparatorPrefixTree.h> +#include <QRegularExpression> + +class MultiMatcher : public IPathMatcher +{ + public: + virtual ~MultiMatcher() {}; + MultiMatcher() {} + MultiMatcher& add(Ptr add) + { + m_matchers.append(add); + return *this; + } + + virtual bool matches(const QString& string) const override + { + for (auto iter : m_matchers) { + if (iter->matches(string)) { + return true; + } + } + return false; + } + + QList<Ptr> m_matchers; +}; diff --git a/meshmc/launcher/pathmatcher/RegexpMatcher.h b/meshmc/launcher/pathmatcher/RegexpMatcher.h new file mode 100644 index 0000000000..29f0e47a4d --- /dev/null +++ b/meshmc/launcher/pathmatcher/RegexpMatcher.h @@ -0,0 +1,59 @@ +/* SPDX-FileCopyrightText: 2026 Project Tick + * SPDX-FileContributor: Project Tick + * SPDX-License-Identifier: GPL-3.0-or-later + * + * MeshMC - A Custom Launcher for Minecraft + * Copyright (C) 2026 Project Tick + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "IPathMatcher.h" +#include <QRegularExpression> + +class RegexpMatcher : public IPathMatcher +{ + public: + virtual ~RegexpMatcher() {}; + RegexpMatcher(const QString& regexp) + { + m_regexp.setPattern(regexp); + m_onlyFilenamePart = !regexp.contains('/'); + } + + RegexpMatcher& caseSensitive(bool cs = true) + { + if (cs) { + m_regexp.setPatternOptions( + QRegularExpression::CaseInsensitiveOption); + } else { + m_regexp.setPatternOptions(QRegularExpression::NoPatternOption); + } + return *this; + } + + virtual bool matches(const QString& string) const override + { + if (m_onlyFilenamePart) { + auto slash = string.lastIndexOf('/'); + if (slash != -1) { + auto part = string.mid(slash + 1); + return m_regexp.match(part).hasMatch(); + } + } + return m_regexp.match(string).hasMatch(); + } + QRegularExpression m_regexp; + bool m_onlyFilenamePart = false; +}; |
