// Copyright (C) 2025 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 using System.Collections.Generic; using System.Text; namespace QtVsTools.SyntaxAnalysis { //////////////////////////////////////////////////////////////////////////////////////////////// /// /// CharClassLiteral ( -> CharClassSet.Element -> CharClass -> RegExpr ) /// //////////////////////////////////////////////////////////////////////////////////////////////// /// /// Elementary character class defined by one or more allowed characters /// /// public class CharClassLiteral : CharClassSet.Element { public string LiteralChars { get; set; } protected override IEnumerable OnRender(RegExpr defaultTokenWs, RegExpr parent, StringBuilder pattern, ref RenderMode mode, Stack tokenStack) { base.OnRender(defaultTokenWs, parent, pattern, ref mode, tokenStack); if (parent is not CharClass && NeedsGroup(LiteralChars)) pattern.AppendFormat("[{0}]", LiteralChars); else pattern.Append(LiteralChars); return null; } } public abstract partial class CharClass : RegExpr { public static CharClassLiteral CharLiteral(string s) { return new CharClassLiteral { LiteralChars = Escape(s) }; } public static CharClassLiteral CharRawLiteral(string s) { return new CharClassLiteral { LiteralChars = s }; } public static CharClassLiteral CharLiteral(char c) { return CharLiteral(c.ToString()); } public partial class CharExprBuilder { public CharClassLiteral this[string s] => CharLiteral(s); public CharClassLiteral this[char c] => CharLiteral(c); } } }