{"record":{"id":"851e465dde648dc8","repo":"spectreconsole/spectre.console","slug":"encountered-unknown-markup-token","errorCode":null,"errorMessage":"Encountered unknown markup token.","messagePattern":"Encountered unknown markup token\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Spectre.Console.Ansi/AnsiMarkup.cs","lineNumber":100,"sourceCode":"                link = linkStack.Pop();\n            }\n            else if (token.Kind == MarkupTokenKind.Text)\n            {\n                if (result.Count > 0 && result[^1].Style.Equals(style) && Equals(result[^1].Link, link))\n                {\n                    // Merge segments with same style and link\n                    result[^1].Text += token.Value;\n                }\n                else\n                {\n                    result.Add(\n                        new AnsiMarkupSegment(\n                        token.Value, style.Value, link));\n                }\n            }\n            else\n            {\n                throw new InvalidOperationException(\"Encountered unknown markup token.\");\n            }\n        }\n\n        if (styleStack.Count > 0)\n        {\n            throw new InvalidOperationException(\"Unbalanced markup stack. Did you forget to close a tag?\");\n        }\n\n        // Try resolving auto links (if any)\n        ResolveAutoLinks(result);\n\n        return result;\n    }\n\n    private static void ResolveAutoLinks(List<AnsiMarkupSegment> segments)\n    {\n        for (var segmentIndex = 0; segmentIndex < segments.Count; segmentIndex++)\n        {","sourceCodeStart":82,"sourceCodeEnd":118,"githubUrl":"https://github.com/spectreconsole/spectre.console/blob/0acc92fada6c42f13984e79c2b5f3d993bdfb099/src/Spectre.Console.Ansi/AnsiMarkup.cs#L82-L118","documentation":"A defensive guard in the AnsiMarkup.Parse token loop: the token's Kind is none of Open, Close, or Text. Because MarkupTokenKind only defines those three values and the tokenizer only ever yields them, this branch is effectively unreachable under normal operation.","triggerScenarios":"Not producible by any valid or invalid input string through the public API. Could only fire if MarkupTokenKind were extended with a new member, or a custom/reflective token source injected an unexpected enum value.","commonSituations":"Effectively never seen by library consumers; it is an exhaustiveness safeguard against future enum additions or corrupted token state.","solutions":["Treat occurrence as an internal library bug and report it upstream with the input and stack trace","If you have forked/extended MarkupTokenKind, add a matching case in AnsiMarkup.Parse","Catch InvalidOperationException defensively when rendering untrusted markup"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { var segments = AnsiMarkup.Parse(markup); }\ncatch (InvalidOperationException ex) when (ex.Message == \"Encountered unknown markup token.\")\n{ /* internal/defensive: report upstream and fall back to plain rendering */ }","preventionTips":["If you fork MarkupTokenKind, add the matching case in AnsiMarkup.Parse","Report an unprovoked occurrence as a library bug with a reproducer"],"tags":["markup","parsing","defensive","spectre-console"],"backgroundTag":null,"analyzedSha":"0acc92fada6c42f13984e79c2b5f3d993bdfb099","analyzedAt":"2026-08-13T18:27:21.983Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}