[{"name":"Mrk.Edit","comment":" This module allows you to make **edits** to `Parsed`, that intermediate data structure we talked about in [`Mark`](Mark).\n\nThis means you can build an editor for your document.\n\nIn order to make edits to your document you need an [`Id`](#Id) and an [`Edit`](#Edit).\n\nOnce you have those you can [`update`](#update) your document, which can succeed or fail depending on if the edit was valid.\n\n\n# Updating `Parsed`\n\n@docs update, Id, Edit\n\n\n# Text Edits\n\nHere are edits you can make against [`Mrk.text`](Mark#text) and [`Mrk.textWith`](Mark#textWith) blocks.\n\n**Note** These edits don't apply to [`Mrk.string`](Mark#string). If you want to modify a `Mrk.string`, use [`Mrk.Edit.replace`](Mark-Edit#replace).\n\n@docs Offset\n\n@docs insertString, insertText, deleteText\n\n@docs Styles, restyle, addStyles, removeStyles\n\n@docs annotate, verbatim\n\n\n# General Edits\n\n@docs replace, delete, insertAfter, insertFirst\n\n\n# Reading\n\n@docs copy, copyText\n\n","unions":[{"name":"Edit","comment":" ","args":[],"cases":[]}],"aliases":[{"name":"Id","comment":" Every block has an `Id`. You can retrieve the `Id` for a block using [`Mrk.withId`](Mark#withId)\n","args":[],"type":"Mrk.Internal.Id.Id"},{"name":"Offset","comment":" The index of the rendered `String`. Let's say you have this string in your markup source.\n\n```markup\nHere is *my string*.\n```\n\nWhen you're rendering this, it's broken into three segments.\n\n  - `Here is`\n  - `my string` (which is bold)\n  - `.`\n\nThe `Offset` is character position where those three strings are considered as one big one.\n\nHere are some lookups:\n\n  - `0  -> H`\n  - `8  -> m`\n  - `17 -> .`\n\nWe're not counting control characters from our markup source.\n\n","args":[],"type":"Basics.Int"},{"name":"Styles","comment":" ","args":[],"type":"{ bold : Basics.Bool, italic : Basics.Bool, strike : Basics.Bool }"}],"values":[{"name":"addStyles","comment":" Add the given styles if they are not present in the text selection.\n\n**Note:** Other styling is unaffected.\n\n","type":"Mrk.Edit.Id -> Mrk.Edit.Offset -> Mrk.Edit.Offset -> Mrk.Edit.Styles -> Mrk.Edit.Edit"},{"name":"annotate","comment":" Put the current text selection within an `annotation` with some attributes.\n\nHere's an example that would turn the selection into a `link`.\n\n    Mrk.Edit.annotate id\n        start\n        end\n        \"link\"\n        [ ( \"url\", Mrk.New.string \"https://guide.elm-lang.org/\" ) ]\n\n**Note** existing annotations within the selection are removed.\n\n","type":"Mrk.Edit.Id -> Mrk.Edit.Offset -> Mrk.Edit.Offset -> String.String -> List.List ( String.String, Mrk.New.Block ) -> Mrk.Edit.Edit"},{"name":"copy","comment":" ","type":"List.List Mrk.Edit.Id -> Mrk.Internal.Description.Parsed -> List.List Mrk.New.Block"},{"name":"copyText","comment":" ","type":"Mrk.Edit.Id -> Mrk.Edit.Offset -> Mrk.Edit.Offset -> Mrk.Internal.Description.Parsed -> List.List Mrk.New.Text"},{"name":"delete","comment":" Delete blocks.\n\nThis may fail if the block cannot be deleted(such as a field in a record).\n\n","type":"List.List Mrk.Edit.Id -> Mrk.Edit.Edit"},{"name":"deleteText","comment":" ","type":"Mrk.Edit.Id -> Mrk.Edit.Offset -> Mrk.Edit.Offset -> Mrk.Edit.Edit"},{"name":"insertAfter","comment":" Insert a block at an index within a `Mrk.manyOf`.\n","type":"Mrk.Edit.Id -> List.List Mrk.New.Block -> Mrk.Edit.Edit"},{"name":"insertFirst","comment":" Insert a block at the first position.\n\nThe id needed here is of the _parent_.\n\n","type":"Mrk.Edit.Id -> Mrk.New.Block -> Mrk.Edit.Edit"},{"name":"insertString","comment":" This will work on both styled text and string datatypes.\n","type":"Mrk.Edit.Id -> Mrk.Edit.Offset -> String.String -> Mrk.Edit.Edit"},{"name":"insertText","comment":" ","type":"Mrk.Edit.Id -> Mrk.Edit.Offset -> List.List Mrk.New.Text -> Mrk.Edit.Edit"},{"name":"removeStyles","comment":" Remove the given styles if they are present in the text selection.\n\n**Note:** Other styling is unaffected.\n\n","type":"Mrk.Edit.Id -> Mrk.Edit.Offset -> Mrk.Edit.Offset -> Mrk.Edit.Styles -> Mrk.Edit.Edit"},{"name":"replace","comment":" The `Block` mentioned here is actually a `Mrk.New.Block`. Use [`Mrk.New`](/Mark-New) to create the new block you'd like.\n","type":"Mrk.Edit.Id -> Mrk.New.Block -> Mrk.Edit.Edit"},{"name":"restyle","comment":" Remove all styling on the text selection and replace with the given styling.\n","type":"Mrk.Edit.Id -> Mrk.Edit.Offset -> Mrk.Edit.Offset -> Mrk.Edit.Styles -> Mrk.Edit.Edit"},{"name":"update","comment":" ","type":"Mrk.Internal.Description.Document meta data -> Mrk.Edit.Edit -> Mrk.Internal.Description.Parsed -> Result.Result (List.List Mrk.Error.Error) Mrk.Internal.Description.Parsed"},{"name":"verbatim","comment":" Same as `annotate`, but creates a `verbatim` instead.\n\n**Note** existing annotations within the selection are removed.\n\n","type":"Mrk.Edit.Id -> Mrk.Edit.Offset -> Mrk.Edit.Offset -> String.String -> List.List ( String.String, Mrk.New.Block ) -> Mrk.Edit.Edit"}],"binops":[]},{"name":"Mrk.Error","comment":"\n\n@docs Error\n\n\n# Rendering Errors\n\n@docs toString, toHtml, Theme, toDetails, Details, Text, Range, Position\n\n\n# Creating Custom Errors\n\n@docs Custom\n\n","unions":[{"name":"Theme","comment":" ","args":[],"cases":[["Dark",[]],["Light",[]]]}],"aliases":[{"name":"Custom","comment":" Create a custom error message to use with [`Mrk.verify`](Mark#verify)\n","args":[],"type":"{ title : String.String, message : List.List String.String }"},{"name":"Details","comment":" ","args":[],"type":"{ title : String.String, message : List.List Mrk.Error.Text, region : Maybe.Maybe Mrk.Error.Range }"},{"name":"Error","comment":" ","args":[],"type":"Mrk.Internal.Error.Rendered"},{"name":"Position","comment":" ","args":[],"type":"{ offset : Basics.Int, line : Basics.Int, column : Basics.Int }"},{"name":"Range","comment":" ","args":[],"type":"{ start : Mrk.Error.Position, end : Mrk.Error.Position }"},{"name":"Text","comment":" ","args":[],"type":"{ text : String.String, bold : Basics.Bool, underline : Basics.Bool, color : Maybe.Maybe String.String }"}],"values":[{"name":"toDetails","comment":" ","type":"Mrk.Error.Error -> Mrk.Error.Details"},{"name":"toHtml","comment":" ","type":"Mrk.Error.Theme -> Mrk.Error.Error -> Html.Html msg"},{"name":"toString","comment":" ","type":"Mrk.Error.Error -> String.String"}],"binops":[]},{"name":"Mrk.Internal.Description","comment":"\n\n@docs render, compile\n\n@docs Icon\n\n@docs Description, TextDescription, Text, Style\n\n@docs Expectation, InlineExpectation\n\n@docs Parsed, descriptionToString, toString, mergeWith\n\n@docs create, createInline\n\n@docs Styling, emptyStyles\n\n@docs inlineExample, blockName, uncertain, humanReadableExpectations\n\n@docs Uncertain, mapSuccessAndRecovered, renderBlock, getBlockExpectation, getParser, getParserNoBar\n\n@docs Block, BlockKind, Document\n\n@docs boldStyle, italicStyle, strikeStyle\n\n@docs getId, sizeFromRange\n\n@docs Record, Range, recordName, ParseContext, blockKindToContext, blockKindToSelection, length, match, matchExpected\n\n@docs BlockOutcome, InlineSelection, New, NewInline, ParsedDetails, createMany, emptyRange\n@docs findMany, findMatch, lookup, matchBlock, mergeListWithAttrs, mergeWithAttrs, minusPosition, toNew, toNewText\n@docs valid\n","unions":[{"name":"Block","comment":"\n\n    A `Block data` is just a parser that results in `data`.\n\nYou'll be building up your `Document` in terms of the `Blocks`.\n\nA block starts with `|` and has a name(already built into the parser)\n\nA value is just a raw parser.\n\n--- Error Propagation\n\n    Failure\n        -> The document has had a mismatch\n        -> This can only be recovered by `oneOf` or `manyOf`\n    Almost\n        -> An `Error` has been \"raised\".  It's propogated until it's resolved by `onError`\n        ->\n\n    Success\n        -> Well, this is the easy one.\n\n    Ids are only available on the element they apply to.\n\n    Recovery is done at the level above the errored block.\n\n    So, if there is a record with a string that is constrained\n\n    If the constraint fails, the record can say \"Here's the reset\"\n\n","args":["data"],"cases":[["Block",["{ kind : Mrk.Internal.Description.BlockKind, converter : Mrk.Internal.Description.Description -> Mrk.Internal.Description.BlockOutcome data, expect : Mrk.Internal.Description.Expectation, parser : Mrk.Internal.Description.ParseContext -> Mrk.Internal.Id.Seed -> ( Mrk.Internal.Id.Seed, Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem Mrk.Internal.Description.Description ) }"]]]},{"name":"BlockKind","comment":" ","args":[],"cases":[["Value",[]],["Named",["String.String"]],["VerbatimNamed",["String.String"]],["AnnotationNamed",["String.String"]]]},{"name":"Description","comment":" ","args":[],"cases":[["DescribeBlock",["{ id : Mrk.Internal.Id.Id, name : String.String, found : Mrk.Internal.Description.Description }"]],["Record",["{ id : Mrk.Internal.Id.Id, name : String.String, found : List.List ( String.String, Mrk.Internal.Description.Description ) }"]],["Group",["{ id : Mrk.Internal.Id.Id, children : List.List Mrk.Internal.Description.Description }"]],["StartsWith",["{ id : Mrk.Internal.Id.Id, first : Mrk.Internal.Description.Description, second : Mrk.Internal.Description.Description }"]],["DescribeItem",["{ id : Mrk.Internal.Id.Id, icon : Mrk.Internal.Description.Icon, content : List.List Mrk.Internal.Description.Description, children : List.List Mrk.Internal.Description.Description }"]],["DescribeBoolean",["{ id : Mrk.Internal.Id.Id, found : Basics.Bool }"]],["DescribeInteger",["{ id : Mrk.Internal.Id.Id, found : Basics.Int }"]],["DescribeFloat",["{ id : Mrk.Internal.Id.Id, found : ( String.String, Basics.Float ) }"]],["DescribeText",["{ id : Mrk.Internal.Id.Id, text : List.List Mrk.Internal.Description.TextDescription }"]],["DescribeString",["Mrk.Internal.Id.Id","String.String"]],["DescribeUnexpected",["Mrk.Internal.Id.Id","Mrk.Internal.Error.UnexpectedDetails"]]]},{"name":"Document","comment":" ","args":["meta","data"],"cases":[["Document",["{ expect : Mrk.Internal.Description.Expectation, metadata : Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem (Result.Result Mrk.Internal.Error.UnexpectedDetails meta), parser : Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem Mrk.Internal.Description.Parsed, converter : Mrk.Internal.Description.Parsed -> Mrk.Internal.Description.BlockOutcome ( meta, List.List data ) }"]]]},{"name":"Expectation","comment":" ","args":[],"cases":[["ExpectBlock",["String.String","Mrk.Internal.Description.Expectation"]],["ExpectRecord",["String.String","List.List ( String.String, Mrk.Internal.Description.Expectation )"]],["ExpectOneOf",["List.List Mrk.Internal.Description.Expectation"]],["ExpectManyOf",["List.List Mrk.Internal.Description.Expectation"]],["ExpectStartsWith",["Mrk.Internal.Description.Expectation","Mrk.Internal.Description.Expectation"]],["ExpectBoolean",["Basics.Bool"]],["ExpectInteger",["Basics.Int"]],["ExpectFloat",["Basics.Float"]],["ExpectTextBlock",["List.List Mrk.Internal.Description.InlineExpectation"]],["ExpectString",["String.String"]],["ExpectTree",["Mrk.Internal.Description.Expectation"]]]},{"name":"Icon","comment":" ","args":[],"cases":[["Bullet",[]],["AutoNumber",["Basics.Int"]]]},{"name":"InlineExpectation","comment":" ","args":[],"cases":[["ExpectText",["Mrk.Internal.Description.Text"]],["ExpectInlineBlock",["{ name : String.String, kind : Mrk.Internal.Description.InlineSelection, fields : List.List ( String.String, Mrk.Internal.Description.Expectation ) }"]]]},{"name":"InlineSelection","comment":" ","args":[],"cases":[["EmptyAnnotation",[]],["SelectText",["List.List Mrk.Internal.Description.Text"]],["SelectString",["String.String"]]]},{"name":"New","comment":" ","args":[],"cases":[["NewBlock",["String.String","Mrk.Internal.Description.New"]],["NewRecord",["String.String","List.List ( String.String, Mrk.Internal.Description.New )"]],["NewGroup",["List.List Mrk.Internal.Description.New"]],["NewStartsWith",["Mrk.Internal.Description.New","Mrk.Internal.Description.New"]],["NewBoolean",["Basics.Bool"]],["NewInteger",["Basics.Int"]],["NewFloat",["Basics.Float"]],["NewTextBlock",["List.List Mrk.Internal.Description.NewInline"]],["NewString",["String.String"]],["NewItem",["Mrk.Internal.Description.Icon","List.List Mrk.Internal.Description.New"]]]},{"name":"NewInline","comment":" ","args":[],"cases":[["NewText",["Mrk.Internal.Description.Text"]],["NewInlineBlock",["{ name : String.String, kind : Mrk.Internal.Description.InlineSelection, fields : List.List ( String.String, Mrk.Internal.Description.New ) }"]]]},{"name":"ParseContext","comment":" ","args":[],"cases":[["ParseBlock",[]],["ParseInline",[]],["ParseInTree",[]]]},{"name":"Parsed","comment":" ","args":[],"cases":[["Parsed",["Mrk.Internal.Description.ParsedDetails"]]]},{"name":"Record","comment":" ","args":["data"],"cases":[["ProtoRecord",["{ name : String.String, blockKind : Mrk.Internal.Description.BlockKind, expectations : List.List ( String.String, Mrk.Internal.Description.Expectation ), fieldConverter : Mrk.Internal.Description.Description -> Mrk.Internal.Description.InlineSelection -> Mrk.Internal.Description.BlockOutcome (Mrk.Internal.Description.FieldConverter data), fields : List.List Mrk.Internal.Description.FieldParser }"]]]},{"name":"Style","comment":" ","args":[],"cases":[["Bold",[]],["Italic",[]],["Strike",[]]]},{"name":"Text","comment":" A text fragment with some styling.\n","args":[],"cases":[["Text",["Mrk.Internal.Description.Styling","String.String"]]]},{"name":"TextDescription","comment":" ","args":[],"cases":[["Styled",["Mrk.Internal.Description.Text"]],["InlineBlock",["{ kind : Mrk.Internal.Description.InlineSelection, record : Mrk.Internal.Description.Description }"]]]},{"name":"Uncertain","comment":" With this type, we're not quite sure if we're going to be able to render or not.\n\nScenarios:\n\n  - A field value of a record has multiple errors with it.\n  - It's caught and the error statue is rendered immediately.\n  - The document can be rendered, but we still have multiple errors to keep track of.\n\n","args":["data"],"cases":[["Uncertain",["( Mrk.Internal.Error.UnexpectedDetails, List.List Mrk.Internal.Error.UnexpectedDetails )"]],["Recovered",["( Mrk.Internal.Error.UnexpectedDetails, List.List Mrk.Internal.Error.UnexpectedDetails )","data"]]]}],"aliases":[{"name":"BlockOutcome","comment":" ","args":["data"],"type":"Mrk.Internal.Outcome.Outcome Mrk.Internal.Error.AstError (Mrk.Internal.Description.Uncertain (Mrk.Internal.Description.WithAttr data)) (Mrk.Internal.Description.WithAttr data)"},{"name":"ParsedDetails","comment":" ","args":[],"type":"{ errors : List.List Mrk.Internal.Error.Rendered, found : Mrk.Internal.Description.Description, expected : Mrk.Internal.Description.Expectation, initialSeed : Mrk.Internal.Id.Seed, currentSeed : Mrk.Internal.Id.Seed, attributes : List.List Mrk.Internal.Description.Attribute }"},{"name":"Range","comment":" ","args":[],"type":"{ start : Mrk.Internal.Description.Position, end : Mrk.Internal.Description.Position }"},{"name":"Styling","comment":" ","args":[],"type":"{ bold : Basics.Bool, italic : Basics.Bool, strike : Basics.Bool }"}],"values":[{"name":"blockKindToContext","comment":" ","type":"Mrk.Internal.Description.BlockKind -> Mrk.Internal.Description.ParseContext"},{"name":"blockKindToSelection","comment":" ","type":"Mrk.Internal.Description.BlockKind -> Mrk.Internal.Description.InlineSelection"},{"name":"blockName","comment":" ","type":"Mrk.Internal.Description.Block data -> Maybe.Maybe String.String"},{"name":"boldStyle","comment":" ","type":"Mrk.Internal.Description.Styling"},{"name":"compile","comment":" ","type":"Mrk.Internal.Description.Document meta data -> String.String -> Result.Result (Mrk.Internal.Outcome.Outcome (List.List Mrk.Internal.Error.Rendered) { errors : List.List Mrk.Internal.Error.Rendered, result : ( meta, List.List data ) } ( meta, List.List data )) ( Mrk.Internal.Description.Parsed, Mrk.Internal.Outcome.Outcome (List.List Mrk.Internal.Error.Rendered) { errors : List.List Mrk.Internal.Error.Rendered, result : ( meta, List.List data ) } ( meta, List.List data ) )"},{"name":"create","comment":" This function does no validation, it only creates a new Description.\n\n    `\n\n","type":"Mrk.Internal.Id.Seed -> Mrk.Internal.Description.New -> { desc : Mrk.Internal.Description.Description, seed : Mrk.Internal.Id.Seed }"},{"name":"createInline","comment":" ","type":"List.List Mrk.Internal.Description.NewInline -> List.List Mrk.Internal.Description.TextDescription"},{"name":"createMany","comment":" NOTE, this returns items in reversed order!\n","type":"Mrk.Internal.Id.Seed -> List.List Mrk.Internal.Description.New -> { new : List.List Mrk.Internal.Description.Description, seed : Mrk.Internal.Id.Seed }"},{"name":"descriptionToString","comment":" ","type":"Mrk.Internal.Description.Description -> String.String"},{"name":"emptyRange","comment":" ","type":"{ start : { offset : number, line : number, column : number }, end : { offset : number, line : number, column : number } }"},{"name":"emptyStyles","comment":" ","type":"Mrk.Internal.Description.Styling"},{"name":"findMany","comment":" Subtle destinction between this and `find`.\n\nThis will NOT reconstruct the full hierarchy, but return the exact blocks asked for.\n\nThis also won't verify that all ids in the document were found, it'll just return the stuff it finds.\n\n","type":"List.List Mrk.Internal.Id.Id -> Mrk.Internal.Description.Description -> List.List Mrk.Internal.Description.Description"},{"name":"findMatch","comment":" ","type":"Mrk.Internal.Description.Description -> List.List (Mrk.Internal.Description.Block a) -> Mrk.Internal.Outcome.Outcome Mrk.Internal.Error.AstError (Mrk.Internal.Description.Uncertain (Mrk.Internal.Description.WithAttr a)) (Mrk.Internal.Description.WithAttr a)"},{"name":"getBlockExpectation","comment":" ","type":"Mrk.Internal.Description.Block data -> Mrk.Internal.Description.Expectation"},{"name":"getId","comment":" ","type":"Mrk.Internal.Description.Description -> Mrk.Internal.Id.Id"},{"name":"getParser","comment":" ","type":"Mrk.Internal.Description.ParseContext -> Mrk.Internal.Id.Seed -> Mrk.Internal.Description.Block data -> ( Mrk.Internal.Id.Seed, Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem Mrk.Internal.Description.Description )"},{"name":"getParserNoBar","comment":" ","type":"Mrk.Internal.Description.ParseContext -> Mrk.Internal.Id.Seed -> Mrk.Internal.Description.Block data -> ( Mrk.Internal.Id.Seed, Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem Mrk.Internal.Description.Description )"},{"name":"humanReadableExpectations","comment":" ","type":"Mrk.Internal.Description.Expectation -> String.String"},{"name":"inlineExample","comment":" ","type":"Mrk.Internal.Description.InlineSelection -> Mrk.Internal.Description.Block a -> Maybe.Maybe String.String"},{"name":"italicStyle","comment":" ","type":"Mrk.Internal.Description.Styling"},{"name":"length","comment":" ","type":"Mrk.Internal.Description.TextDescription -> Basics.Int"},{"name":"lookup","comment":" In order for block lookups to work and for the block to be renderable, we need to retrieve a block, but keep the general structure.\n\nSo, if we have `ManyOf [ One,Two ]`, and our ID matches `Two`, we need to return `ManyOf [Two]`, not just `Two`.\n\nThen our rendering function will still work.\n\n","type":"Mrk.Internal.Id.Id -> Mrk.Internal.Description.Document meta block -> Mrk.Internal.Description.Parsed -> Mrk.Internal.Outcome.Outcome (List.List Mrk.Internal.Error.Rendered) (Mrk.Internal.Description.Partial block) block"},{"name":"mapSuccessAndRecovered","comment":" ","type":"(success -> otherSuccess) -> Mrk.Internal.Description.BlockOutcome success -> Mrk.Internal.Description.BlockOutcome otherSuccess"},{"name":"match","comment":" ","type":"Mrk.Internal.Description.Description -> Mrk.Internal.Description.Expectation -> Basics.Bool"},{"name":"matchBlock","comment":" ","type":"Mrk.Internal.Description.Description -> Mrk.Internal.Description.Block a -> Basics.Bool"},{"name":"matchExpected","comment":" Is the first expectation a subset of the second?\n","type":"Mrk.Internal.Description.Expectation -> Mrk.Internal.Description.Expectation -> Basics.Bool"},{"name":"mergeListWithAttrs","comment":" ","type":"(List.List one -> List.List two -> final) -> Mrk.Internal.Description.ListOutcome one -> Mrk.Internal.Description.ListOutcome two -> Mrk.Internal.Description.BlockOutcome final"},{"name":"mergeWith","comment":" ","type":"(success -> a -> b) -> Mrk.Internal.Outcome.Outcome failure (Mrk.Internal.Description.Uncertain success) success -> Mrk.Internal.Outcome.Outcome c (Mrk.Internal.Description.Uncertain a) a -> Mrk.Internal.Outcome.Outcome Mrk.Internal.Error.AstError (Mrk.Internal.Description.Uncertain b) b"},{"name":"mergeWithAttrs","comment":" mergeWithAttrs\n","type":"(one -> two -> final) -> Mrk.Internal.Description.BlockOutcome one -> Mrk.Internal.Description.BlockOutcome two -> Mrk.Internal.Description.BlockOutcome final"},{"name":"minusPosition","comment":" ","type":"Mrk.Internal.Description.Position -> Mrk.Internal.Description.Position -> Mrk.Internal.Description.Position"},{"name":"recordName","comment":" ","type":"Mrk.Internal.Description.Description -> Maybe.Maybe String.String"},{"name":"render","comment":" Render is a little odd.\n\nWe should always expect `Parsed` to either already have our error messages, or to succeed.\n\nRender can't add additional errors.\n\n","type":"Mrk.Internal.Description.Document meta data -> Mrk.Internal.Description.Parsed -> Mrk.Internal.Outcome.Outcome (List.List Mrk.Internal.Error.Rendered) { errors : List.List Mrk.Internal.Error.Rendered, result : ( meta, List.List data ) } ( meta, List.List data )"},{"name":"renderBlock","comment":" ","type":"Mrk.Internal.Description.Block data -> Mrk.Internal.Description.Description -> Mrk.Internal.Description.BlockOutcome data"},{"name":"sizeFromRange","comment":" ","type":"Mrk.Internal.Description.Range -> { offset : Basics.Int, line : Basics.Int }"},{"name":"strikeStyle","comment":" ","type":"Mrk.Internal.Description.Styling"},{"name":"toNew","comment":" ","type":"Mrk.Internal.Description.Description -> Mrk.Internal.Description.New"},{"name":"toNewText","comment":" ","type":"Mrk.Internal.Description.TextDescription -> Mrk.Internal.Description.NewInline"},{"name":"toString","comment":" ","type":"Mrk.Internal.Description.Parsed -> String.String"},{"name":"uncertain","comment":" ","type":"Mrk.Internal.Error.UnexpectedDetails -> Mrk.Internal.Outcome.Outcome Mrk.Internal.Error.AstError (Mrk.Internal.Description.Uncertain data) data"},{"name":"valid","comment":" ","type":"Mrk.Internal.Description.New -> Mrk.Internal.Description.Expectation -> Basics.Bool"}],"binops":[]},{"name":"Mrk.Internal.Error","comment":"\n\n@docs Error, render\n\n@docs Context, Problem, UnexpectedDetails, documentMismatch, renderParsingErrors, idNotFound\n\n@docs EditErr, AstError, Rendered, compilerError, renderEditError\n\n","unions":[{"name":"AstError","comment":" ","args":[],"cases":[["NoMatch",[]]]},{"name":"Context","comment":" ","args":[],"cases":[["InBlock",["String.String"]],["InInline",["String.String"]],["InRecord",["String.String"]],["InRecordField",["String.String"]]]},{"name":"EditErr","comment":" ","args":[],"cases":[["IdNotFound",[]],["InvalidTextEdit",[]],["InvalidInsert",[]],["InvalidDelete",[]],["DocumentDoesntAllow",["String.String","List.List String.String"]]]},{"name":"Error","comment":" ","args":[],"cases":[["DocumentMismatch",[]],["CompilerError",[]],["ParsingIssue",["List.List (Parser.Advanced.DeadEnd Mrk.Internal.Error.Context Mrk.Internal.Error.Problem)"]],["UnknownBlock",["List.List String.String"]],["UnknownInline",["List.List String.String"]],["FailMatchOneOf",["List.List String.String"]],["MissingFields",["List.List String.String"]],["NonMatchingFields",["{ expecting : List.List String.String, found : List.List String.String }"]],["UnexpectedField",["{ found : String.String, options : List.List String.String, recordName : String.String }"]],["ExpectingIndent",["Basics.Int"]],["CantStartTextWithSpace",[]],["UnclosedStyle",["{ bold : Basics.Bool, italic : Basics.Bool, strike : Basics.Bool }"]],["BadFloat",[]],["BadInt",[]],["BadBool",[]],["Custom",["{ title : String.String, message : List.List String.String }"]],["EditingError",["Mrk.Internal.Error.EditErr"]]]},{"name":"Problem","comment":" ","args":[],"cases":[["ExpectingIndentation",["Basics.Int"]],["InlineStart",[]],["InlineEnd",[]],["BlockStart",[]],["Expecting",["String.String"]],["ExpectingBlockName",["String.String"]],["ExpectingInlineName",["String.String"]],["ExpectingFieldName",["String.String"]],["Escape",[]],["EscapedChar",[]],["Newline",[]],["Space",[]],["End",[]],["Integer",[]],["FloatingPoint",[]],["InvalidNumber",[]]]},{"name":"Rendered","comment":" ","args":[],"cases":[["Rendered",["{ title : String.String, problem : Mrk.Internal.Error.Error, region : { start : Mrk.Internal.Error.Position, end : Mrk.Internal.Error.Position }, message : List.List Mrk.Internal.Format.Text }"]],["Global",["{ problem : Mrk.Internal.Error.Error, title : String.String, message : List.List Mrk.Internal.Format.Text }"]]]}],"aliases":[{"name":"UnexpectedDetails","comment":" ","args":[],"type":"{ range : Mrk.Internal.Error.Range, problem : Mrk.Internal.Error.Error }"}],"values":[{"name":"compilerError","comment":" ","type":"Mrk.Internal.Error.Rendered"},{"name":"documentMismatch","comment":" ","type":"Mrk.Internal.Error.Rendered"},{"name":"idNotFound","comment":" ","type":"Mrk.Internal.Error.Rendered"},{"name":"render","comment":" ","type":"String.String -> Mrk.Internal.Error.UnexpectedDetails -> Mrk.Internal.Error.Rendered"},{"name":"renderEditError","comment":" ","type":"Mrk.Internal.Error.EditErr -> Mrk.Internal.Error.Rendered"},{"name":"renderParsingErrors","comment":" ","type":"String.String -> List.List (Parser.Advanced.DeadEnd Mrk.Internal.Error.Context Mrk.Internal.Error.Problem) -> Mrk.Internal.Error.Rendered"}],"binops":[]},{"name":"Mrk.Internal.Format","comment":" \n@docs Text, bold, cyan, red, text, underline, yellow\n","unions":[],"aliases":[{"name":"Text","comment":" ","args":[],"type":"{ text : String.String, bold : Basics.Bool, underline : Basics.Bool, color : Maybe.Maybe String.String }"}],"values":[{"name":"bold","comment":" ","type":"Mrk.Internal.Format.Text -> Mrk.Internal.Format.Text"},{"name":"cyan","comment":" ","type":"Mrk.Internal.Format.Text -> Mrk.Internal.Format.Text"},{"name":"red","comment":" ","type":"Mrk.Internal.Format.Text -> Mrk.Internal.Format.Text"},{"name":"text","comment":" ","type":"String.String -> Mrk.Internal.Format.Text"},{"name":"underline","comment":" ","type":"Mrk.Internal.Format.Text -> Mrk.Internal.Format.Text"},{"name":"yellow","comment":" ","type":"Mrk.Internal.Format.Text -> Mrk.Internal.Format.Text"}],"binops":[]},{"name":"Mrk.Internal.Id","comment":" \n@docs Id, Seed, dedent, fromString, indent, initialSeed, step, thread, threadThrough, toString\n","unions":[{"name":"Id","comment":" ","args":[],"cases":[["Id",["String.String","List.List Basics.Int"]]]},{"name":"Seed","comment":" We might want to move to a list based ID.\n\nSo, when we `indent`, we're actually adding a level.\n\n    Seed [0]\n\n    Seed [1] --indent -> Seed [1, 0]\n                            |\n                            v\n                         Seed [1, 1]\n\n\n    Seed [2]\n\nIs there a performance issue with allocating a bunch of lists intead of base Ints?\n\nA very common pattern is to\n\n    1. step a seed forward and pass that seed for the next block\n    2. indent the same original seed, and pass that to the children\n\nSo\n\n    [0]\n        -> stepped [1]  (goes to next element by handing the seed back in the parser)\n        -> indented [0,0] (handed to child parser to go nuts with)\n\n","args":[],"cases":[]}],"aliases":[],"values":[{"name":"dedent","comment":" ","type":"Basics.Int -> Mrk.Internal.Id.Seed -> Mrk.Internal.Id.Seed"},{"name":"fromString","comment":" ","type":"String.String -> Maybe.Maybe Mrk.Internal.Id.Id"},{"name":"indent","comment":" ","type":"Mrk.Internal.Id.Seed -> Mrk.Internal.Id.Seed"},{"name":"initialSeed","comment":" ","type":"String.String -> Mrk.Internal.Id.Seed"},{"name":"step","comment":" ","type":"Mrk.Internal.Id.Seed -> ( Mrk.Internal.Id.Id, Mrk.Internal.Id.Seed )"},{"name":"thread","comment":" ","type":"Mrk.Internal.Id.Seed -> List.List (Mrk.Internal.Id.Seed -> ( Mrk.Internal.Id.Seed, thing )) -> ( Mrk.Internal.Id.Seed, List.List thing )"},{"name":"threadThrough","comment":" ","type":"(a -> ( b, c )) -> ( a, List.List c ) -> ( b, List.List c )"},{"name":"toString","comment":" ","type":"Mrk.Internal.Id.Id -> String.String"}],"binops":[]},{"name":"Mrk.Internal.Index","comment":"\n@docs Index, dedent, increment, indent, toList, top, zero\n ","unions":[{"name":"Index","comment":" ","args":[],"cases":[["Index",["Basics.Int","List.List Basics.Int"]]]}],"aliases":[],"values":[{"name":"dedent","comment":" ","type":"Mrk.Internal.Index.Index -> Mrk.Internal.Index.Index"},{"name":"increment","comment":" ","type":"Mrk.Internal.Index.Index -> Mrk.Internal.Index.Index"},{"name":"indent","comment":" ","type":"Mrk.Internal.Index.Index -> Mrk.Internal.Index.Index"},{"name":"toList","comment":" ","type":"Mrk.Internal.Index.Index -> ( Basics.Int, List.List Basics.Int )"},{"name":"top","comment":" ","type":"Mrk.Internal.Index.Index -> Basics.Int"},{"name":"zero","comment":" ","type":"Mrk.Internal.Index.Index"}],"binops":[]},{"name":"Mrk.Internal.Outcome","comment":"\n\n@docs Outcome, mapSuccess\n\n","unions":[{"name":"Outcome","comment":" ","args":["failure","almost","success"],"cases":[["Success",["success"]],["Almost",["almost"]],["Failure",["failure"]]]}],"aliases":[],"values":[{"name":"mapSuccess","comment":" ","type":"(success -> otherSuccess) -> Mrk.Internal.Outcome.Outcome f a success -> Mrk.Internal.Outcome.Outcome f a otherSuccess"}],"binops":[]},{"name":"Mrk.Internal.Parser","comment":" \n@docs PreviouslyAdded\n    , RecordType\n    , Replacement\n    , backtrackCharacters\n    , float\n    , fullTree\n    , getFailableBlock\n    , getPosition\n    , getRangeAndSource\n    , iconParser\n    , indentationString\n    , indentedString\n    , int\n    , manyOf\n    , newline\n    , newlineWith\n    , oneOf\n    , peek\n    , raggedIndentedStringAbove\n    , record\n    , skipBlankLineWith\n    , styledText\n    , withIndent\n    , withRange\n    , withRangeResult\n    , word\n","unions":[{"name":"PreviouslyAdded","comment":" ","args":[],"cases":[["AddedContent",[]],["AddedItem",[]]]},{"name":"RecordType","comment":" ","args":[],"cases":[["InlineRecord",[]],["BlockRecord",[]]]},{"name":"Replacement","comment":" ","args":[],"cases":[["Replacement",["String.String","String.String"]],["Balanced",["{ start : ( String.String, String.String ), end : ( String.String, String.String ) }"]]]}],"aliases":[],"values":[{"name":"backtrackCharacters","comment":" ","type":"number -> { a | start : { b | offset : number, line : c, column : number }, end : d } -> { start : { offset : number, line : c, column : number }, end : d }"},{"name":"float","comment":" Parses a float and must end with whitespace, not additional characters.\n","type":"Mrk.Internal.Id.Id -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem Mrk.Internal.Description.Description"},{"name":"fullTree","comment":" Parse a full nested tree in one go.\n","type":"Mrk.Internal.Description.ParseContext -> Mrk.Internal.Description.Block thing -> ( Mrk.Internal.Parser.NestedIndex, Mrk.Internal.Parser.TreeCursor ) -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem (Parser.Advanced.Step ( Mrk.Internal.Parser.NestedIndex, Mrk.Internal.Parser.TreeCursor ) (List.List Mrk.Internal.Description.Description))"},{"name":"getFailableBlock","comment":" ","type":"Mrk.Internal.Description.ParseContext -> Mrk.Internal.Id.Seed -> Mrk.Internal.Description.Block data -> ( Mrk.Internal.Id.Seed, Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem Mrk.Internal.Description.Description )"},{"name":"getPosition","comment":" ","type":"Parser.Advanced.Parser c p Mrk.Internal.Parser.Position"},{"name":"getRangeAndSource","comment":" ","type":"Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem thing -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem { source : String.String, range : Mrk.Internal.Parser.Range, value : thing }"},{"name":"iconParser","comment":" ","type":"Parser.Advanced.Parser c Mrk.Internal.Error.Problem Mrk.Internal.Description.Icon"},{"name":"indentationString","comment":" ","type":"Basics.Int -> String.String"},{"name":"indentedString","comment":" ","type":"Basics.Int -> String.String -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem (Parser.Advanced.Step String.String String.String)"},{"name":"int","comment":" ","type":"Mrk.Internal.Id.Id -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem Mrk.Internal.Description.Description"},{"name":"manyOf","comment":" ","type":"Basics.Int -> List.List (Mrk.Internal.Description.Block data) -> { a | found : List.List Mrk.Internal.Description.Description, seed : Mrk.Internal.Id.Seed, parsedSomething : Basics.Bool } -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem (Parser.Advanced.Step { parsedSomething : Basics.Bool, found : List.List Mrk.Internal.Description.Description, seed : Mrk.Internal.Id.Seed } (List.List Mrk.Internal.Description.Description))"},{"name":"newline","comment":" ","type":"Parser.Advanced.Parser c Mrk.Internal.Error.Problem ()"},{"name":"newlineWith","comment":" ","type":"String.String -> Parser.Advanced.Parser c Mrk.Internal.Error.Problem ()"},{"name":"oneOf","comment":" ","type":"List.List (Mrk.Internal.Description.Block data) -> List.List Mrk.Internal.Description.Expectation -> Mrk.Internal.Description.ParseContext -> Mrk.Internal.Id.Seed -> ( Mrk.Internal.Id.Seed, Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem Mrk.Internal.Description.Description )"},{"name":"peek","comment":" ","type":"String.String -> Parser.Advanced.Parser c p thing -> Parser.Advanced.Parser c p thing"},{"name":"raggedIndentedStringAbove","comment":" ","type":"Basics.Int -> String.String -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem (Parser.Advanced.Step String.String String.String)"},{"name":"record","comment":" ","type":"Mrk.Internal.Parser.RecordType -> Mrk.Internal.Id.Id -> Mrk.Internal.Id.Id -> String.String -> Mrk.Internal.Description.Expectation -> List.List ( String.String, Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem ( String.String, Mrk.Internal.Description.Description ) ) -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem Mrk.Internal.Description.Description"},{"name":"skipBlankLineWith","comment":" ","type":"thing -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem thing"},{"name":"styledText","comment":" ","type":"{ inlines : List.List (Mrk.Internal.Description.Block a), replacements : List.List Mrk.Internal.Parser.Replacement } -> Mrk.Internal.Description.ParseContext -> Mrk.Internal.Id.Seed -> Mrk.Internal.Parser.Position -> Mrk.Internal.Description.Styling -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem Mrk.Internal.Description.Description"},{"name":"withIndent","comment":" ","type":"(Basics.Int -> Parser.Advanced.Parser c x b) -> Parser.Advanced.Parser c x b"},{"name":"withRange","comment":" ","type":"Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem thing -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem ( Mrk.Internal.Parser.Range, thing )"},{"name":"withRangeResult","comment":" ","type":"Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem (Result.Result err thing) -> Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem (Result.Result { range : Mrk.Internal.Parser.Range, error : err } { range : Mrk.Internal.Parser.Range, value : thing })"},{"name":"word","comment":" ","type":"Parser.Advanced.Parser Mrk.Internal.Error.Context Mrk.Internal.Error.Problem String.String"}],"binops":[]},{"name":"Mrk.Internal.TolerantParser","comment":"\n\n@docs Parser, try\n\n@docs Token, token, keyword, symbol, OnError, skip, fastForwardTo, stopWith\n\n@docs succeed, ignore, keep\n\n@docs oneOf\n\n@docs chompWhile\n\n@docs map\n\n","unions":[{"name":"OnError","comment":" ","args":["error"],"cases":[["FastForwardTo",["List.List Char.Char"]],["Skip",[]],["StopWith",["error"]]]}],"aliases":[{"name":"Parser","comment":" ","args":["context","problem","data"],"type":"Parser.Advanced.Parser context problem (Result.Result (List.List problem) data)"},{"name":"Token","comment":" ","args":["problem"],"type":"{ match : String.String, problem : problem, onError : Mrk.Internal.TolerantParser.OnError problem }"}],"values":[{"name":"chompWhile","comment":" ","type":"(Char.Char -> Basics.Bool) -> Parser.Advanced.Parser c x (Result.Result error ())"},{"name":"fastForwardTo","comment":" ","type":"List.List Char.Char -> Mrk.Internal.TolerantParser.OnError error"},{"name":"ignore","comment":" ","type":"Mrk.Internal.TolerantParser.Parser c p ignore -> Mrk.Internal.TolerantParser.Parser c p keep -> Mrk.Internal.TolerantParser.Parser c p keep"},{"name":"keep","comment":" Almost like `|=`, except\n","type":"Mrk.Internal.TolerantParser.Parser c p a -> Mrk.Internal.TolerantParser.Parser c p (a -> b) -> Mrk.Internal.TolerantParser.Parser c p b"},{"name":"keyword","comment":" ","type":"Mrk.Internal.TolerantParser.Token problem -> Mrk.Internal.TolerantParser.Parser context problem ()"},{"name":"map","comment":" ","type":"(a -> b) -> Mrk.Internal.TolerantParser.Parser c p a -> Mrk.Internal.TolerantParser.Parser c p b"},{"name":"oneOf","comment":" A tolerant `oneOf` means it has to succeed.\n\nSo, you provide an error to return if everything else fails.\n\n","type":"problem -> List.List (Mrk.Internal.TolerantParser.Parser context problem data) -> Mrk.Internal.TolerantParser.Parser context problem data"},{"name":"skip","comment":" ","type":"Mrk.Internal.TolerantParser.OnError error"},{"name":"stopWith","comment":" ","type":"a -> Mrk.Internal.TolerantParser.OnError a"},{"name":"succeed","comment":" ","type":"data -> Mrk.Internal.TolerantParser.Parser context problem data"},{"name":"symbol","comment":" ","type":"Mrk.Internal.TolerantParser.Token problem -> Mrk.Internal.TolerantParser.Parser context problem ()"},{"name":"token","comment":" ","type":"Mrk.Internal.TolerantParser.Token problem -> Mrk.Internal.TolerantParser.Parser context problem ()"},{"name":"try","comment":" This might be a little odd, but it essentially means the parser its attached to should run normally, meaning it's ok if it fails.\n\nThis is generally useful with a `oneOf`, to ensure that an option can fail in the normal way and skip to try the next option.\n\n","type":"Parser.Advanced.Parser c p d -> Mrk.Internal.TolerantParser.Parser c p d"}],"binops":[]},{"name":"Mrk.New","comment":" Create a new `Mrk.Block` that can be added to your document using `Mrk.Edit.replace` or `Mrk.Edit.insertAt`.\n\nLet's say we are capturing a basic diagram in our document and we want to dynamically insert a circle.\n\nWe can make a new circle by writing the following function\n\n    import Mrk.New as New\n\n    type alias Circle =\n        { x : Int\n        , y : Int\n        , label : String\n        }\n\n    circle : Circle -> Mrk.New.Block\n    circle details =\n        New.record \"Circle\"\n            [ ( \"label\", New.string details.label )\n            , ( \"x\", New.int details.x )\n            , ( \"y\", New.int details.y )\n            ]\n\nAnd then insert our newly made circle using `Mrk.Edit.insertAt`.\n\n**Note:** The document will only accept edits which are valid.\n\n@docs Block\n\n\n# Primitives\n\n@docs string, int, float, bool\n\n\n# Blocks\n\n@docs block, record, many\n\n@docs bullet, numbered\n\n\n# Text\n\nHere's an example of creating some text.\n\n    newText =\n        New.text\n            [ Mrk.unstyled \"Look at my \"\n            , Mrk.bold \"cool\"\n            , Mrk.unstyled \" new text!\"\n            ]\n\n@docs Text, text, unstyled, bold, italics, strike, Styles, styled\n\n\n# Text Annotation\n\n@docs annotation, verbatim\n\n","unions":[],"aliases":[{"name":"Block","comment":" ","args":[],"type":"Mrk.Internal.Description.New"},{"name":"Styles","comment":" ","args":[],"type":"{ bold : Basics.Bool, italic : Basics.Bool, strike : Basics.Bool }"},{"name":"Text","comment":" ","args":[],"type":"Mrk.Internal.Description.NewInline"}],"values":[{"name":"annotation","comment":"\n\n    New.annotation\n        { name = \"link\"\n        , text =\n            [ New.unstyled \"my link to the elm website!\" ]\n        , fields =\n            [ ( \"url\", Mrk.string \"https://elm-lang.com\" ) ]\n        }\n\n","type":"{ name : String.String, text : List.List ( Mrk.New.Styles, String.String ), fields : List.List ( String.String, Mrk.New.Block ) } -> Mrk.New.Text"},{"name":"block","comment":" ","type":"String.String -> Mrk.New.Block -> Mrk.New.Block"},{"name":"bold","comment":" ","type":"String.String -> Mrk.New.Text"},{"name":"bool","comment":" ","type":"Basics.Bool -> Mrk.New.Block"},{"name":"bullet","comment":" ","type":"List.List Mrk.New.Block -> Mrk.New.Block"},{"name":"float","comment":" ","type":"Basics.Float -> Mrk.New.Block"},{"name":"int","comment":" ","type":"Basics.Int -> Mrk.New.Block"},{"name":"italics","comment":" ","type":"String.String -> Mrk.New.Text"},{"name":"many","comment":" ","type":"List.List Mrk.New.Block -> Mrk.New.Block"},{"name":"numbered","comment":" ","type":"Basics.Int -> List.List Mrk.New.Block -> Mrk.New.Block"},{"name":"record","comment":" ","type":"String.String -> List.List ( String.String, Mrk.New.Block ) -> Mrk.New.Block"},{"name":"strike","comment":" ","type":"String.String -> Mrk.New.Text"},{"name":"string","comment":" ","type":"String.String -> Mrk.New.Block"},{"name":"styled","comment":" ","type":"Mrk.New.Styles -> String.String -> Mrk.New.Text"},{"name":"text","comment":" ","type":"List.List Mrk.New.Text -> Mrk.New.Block"},{"name":"unstyled","comment":" ","type":"String.String -> Mrk.New.Text"},{"name":"verbatim","comment":" ","type":"{ name : String.String, text : String.String, fields : List.List ( String.String, Mrk.New.Block ) } -> Mrk.New.Text"}],"binops":[]}]