public FreeTextLiteral(string name, FreeTextOptions freeTextOptions, params string[] terminators) : base(name) { FreeTextOptions = freeTextOptions; Terminators.UnionWith(terminators); base.SetFlag(TermFlags.IsLiteral); }//constructor
public override void Initialize(GrammarData grammarData) { base.Initialize(grammarData); _startSymbolsFirsts = new CharHashSet(CaseSensitivePrefixesSuffixes); if (_subTypes.Count == 0) { //"Error in heredoc literal [{0}]: No start/end symbols specified." grammarData.Language.Errors.Add(GrammarErrorLevel.Error, null, Resources.ErrInvHereDocDef, Name); return; } MergeSubTypes(); _subTypes.Sort(HereDocSubType.LongerStartFirst); var quoteStrings = new StringSet(QuoteCaseSensitive ? StringComparer.InvariantCulture : StringComparer.InvariantCultureIgnoreCase); foreach (var subType in _subTypes) { if (quoteStrings.Overlaps(subType.Quotes)) { //"Duplicate start symbol {0} in heredoc literal [{1}]." grammarData.Language.Errors.Add(GrammarErrorLevel.Error, null, Resources.ErrDupStartSymbolHereDoc, subType.Start, Name); } quoteStrings.UnionWith(subType.Quotes); } // Cases are merged, no need to check duplicated entries. var isTemplate = false; foreach (var subType in _subTypes) { _startSymbolsFirsts.Add(subType.Start[0]); if ((subType.Flags & HereDocOptions.IsTemplate) != 0) { isTemplate = true; } } // Always allow multiline. SetFlag(TermFlags.IsMultiline); if (isTemplate) { //Check that template settings object is provided var templateSettings = AstConfig.Data as StringTemplateSettings; if (templateSettings == null) { //"Error in string literal [{0}]: IsTemplate flag is set, but TemplateSettings is not provided." grammarData.Language.Errors.Add(GrammarErrorLevel.Error, null, Resources.ErrTemplNoSettings, Name); } else if (templateSettings.ExpressionRoot == null) { //"" grammarData.Language.Errors.Add(GrammarErrorLevel.Error, null, Resources.ErrTemplMissingExprRoot, Name); } else if (!Grammar.SnippetRoots.Contains(templateSettings.ExpressionRoot)) { //"" grammarData.Language.Errors.Add(GrammarErrorLevel.Error, null, Resources.ErrTemplExprNotRoot, Name); } } //Create editor info if (EditorInfo == null) { EditorInfo = new TokenEditorInfo(TokenType.String, TokenColor.String, TokenTriggers.None); } }