All Downloads are FREE. Search and download functionalities are using the official Maven repository.

temper.std.regex.RegexFormatter.map Maven / Gradle / Ivy

There is a newer version: 0.4.0
Show newest version
{ "version": 3, "file": "java/std/src/main/java/temper/std/regex/RegexFormatter.java", "sources": [ "std/regex.temper.md" ], "sourcesContent": [ "# Regex Data Model and Functionality\n\nThe structural data model for regex patterns enables direct construction, and\nthe Temper regex dialect compiles static regex text patterns to these objects.\n\nA focus here is on providing tools people can actually reach for when they need\nto do text processing. The execution should be faster on backends like Python\nthan writing raw code, and the implementation in backends like C should\napproximate what you'd like to have written manually.\n\nDue to inadequate and distinct Unicode handling in backend regex engines, the\ninitial feature set avoids character classes and properties but is still aware\nof code points. Parsing focused on limited sets of delimiters works best for\nnow.\n\nThe core feature set here focuses on both the data model and utility functions,\nsuch as matching regexes against strings.\n\n## Regex Data Model\n\nAll regexes are composed hierarchically of `Regex` nodes. Regexes are a\nsequence of component parts. For example, `/hi./` is a sequence of\n[CodePoint](#codepoint) `/h/` and `/i/` and dot `/./`.\n\nAnd perhaps the most fundamental `Regex` is the [Sequence](#sequence),\nbecause it enables multiple regex components to be strung together.\n\n```\nexport /*sealed*/ interface Regex {\n```\n\nBefore a regex is used, it must be compiled. Some helper functions compile on\nthe fly, although it is faster to reuse a pre-compiled regex.\n\n```\n  // TODO(tjp, regex): Make this into a macro behind the scenes.\n  // TODO(tjp, regex): `compiled\u003cT\u003e(): CompiledRegex\u003cT\u003e`\n  public compiled(): CompiledRegex { new CompiledRegex(this) }\n```\n\nThe simplest use of a regular expression is if it is found in a string.\nRepeatedly calling these methods on a single `Regex` instance is inefficient.\nBetter for reuse is to compile in advance.\n\n```\n  public found(text: String): Boolean { compiled().found(text) }\n```\n\nYou can also return match details or perform text replacement. The returned\ngroups map contains an entry for each key in the order defined in the regex\npattern. If no \u0022full\u0022 group is defined, one is added automatically to capture\nthe full matched text.\n\nIn the future, we intend to support customized match types with fields to match\ncapture groups, statically checked where possible.\n\n```\n  // TODO(tjp, regex): Also macro because reification.\n\n  public find(text: String): Map\u003cString, Group\u003e | Bubble {\n    compiled().find(text)\n  }\n\n  public replace(\n    text: String, format: fn (Map\u003cString, Group\u003e): String\n  ): String {\n    compiled().replace(text, format)\n  }\n```\n\nThat's it for what you can do with regex patterns in Temper today, but there's\nmuch more to say on what kinds of regexes can be built.\n\n```\n}\n```\n\n## Regex Item Types\n\nA `Regex` is composed of a potential variety of subtypes.\n\n### Groups\n\nMultiple types of groups exist:\n\n- [Capture](#capture) `/(?\u003cname\u003e...)/` to remember match groups for later use.\n- Non-capturing group syntax `/(?:...)/`, which is simply a [Regex](#regex)\n  instance in the data model.\n\n### Capture\n\nTODO(tjp, regex): Change to named captures only!\n\n`Capture` is a [group](#groups) that remembers the matched text for later\naccess. Temper supports only named matches, with current intended syntax\n`/(?name = ...)/`.\n\n```\nexport class Capture extends Regex {\n  public name: String;\n  public /*early*/ item: Regex;\n}\n```\n\n### CodePart\n\nA component of a [CodeSet][#codeset], aka character class, which applies to a\nsubset of regex data types.\n\nHere, \u0022code\u0022 is short for \u0022code point\u0022 although \u0022char\u0022 might work better,\ndepending on expectations.\n\n```\nexport /*sealed*/ interface CodePart extends Regex {}\n```\n\n### CodePoints\n\nOne or more verbatim code points, where the sequence matters if within a\n[Regex](#regex) or not if within a [CodeSet](#codeset). Some escapes in\ntextual regex source, such as `/\\t/`, can be stored as raw code points.\n\nThe `String` here can enable more efficient storage than individual code\npoints, although the source text may require non-capture grouping. For example,\n`/(?:abc)?/` optionally matches the string `\u0022abc\u0022`, whereas `/abc?/` matches\n`\u0022ab\u0022` with an optional `\u0022c\u0022`.\n\n```\nexport class CodePoints extends CodePart {\n  public value: String;\n}\n```\n\n### Specials\n\nA number of special match forms exist. In the data model, these are empty\nclasses.\n\n- `.` - `Dot` In default mode, matches any Unicode code point except newline.\n- `^` - `Begin` in default mode matches zero-length at the beginning of a\n  string.\n- `\u0024` - `End` in default mode matches zero-length at the end of a string.\n- `\\b` - `WordBoundary` matches zero-length at the boundary between word and\n  non-word code points. More sophisticated Unicode compliance is TBD.\n- `\\s` (negated as `\\S`) - `Space` matches any horizontal space code point.\n  Details are TBD.\n- `\\w` (negated as `\\W`) - `Word` matches any word code point. Details are TBD.\n  This is currently defined in terms of old ASCII definitions because those are\n  clear. Perhaps this will stay that way, and Unicode properties like `\\p{L}`\n  will be used for human language needs.\n- `\\X` - `GraphemeCluster` might not be supported, but [here is some discussion\n  of how to implement it](\n  https://github.com/rust-lang/regex/issues/54#issuecomment-661905060).\n\n\u003cdetails\u003e\n\n```\nexport /*sealed*/ interface Special extends Regex {}\nexport let Begin: Special = do { class Begin extends Special {}; new Begin() };\nexport let Dot: Special = do { class Dot extends Special {}; new Dot() };\nexport let End: Special = do { class End extends Special {}; new End() };\n// TODO(tjp, regex): We can't easily support this at present across backends.\n// export let GraphemeCluster = do {\n//   class GraphemeCluster extends Special {}; new GraphemeCluster()\n// };\nexport let WordBoundary: Special = do {\n  class WordBoundary extends Special {}; new WordBoundary()\n};\n\nexport /*sealed*/ interface SpecialSet extends CodePart \u0026 Special {}\nexport let Digit: SpecialSet = do {\n  class Digit extends SpecialSet {}; new Digit()\n};\nexport let Space: SpecialSet = do {\n  class Space extends SpecialSet {}; new Space()\n};\nexport let Word: SpecialSet = do {\n  class Word extends SpecialSet {}; new Word()\n};\n```\n\n\u003c/details\u003e\n\n### CodeRange\n\nA code point range matches any code point in its inclusive bounds, such as\n`/[a-c]/`. In source, `-` is included in a code set either by escaping or by\nincluding it as the first or last character. A `CodeRange` is usually contained\ninside a [CodeSet](#codeset), and syntactically always is.\n\n```\nexport class CodeRange extends CodePart {\n  public min: Int;\n  public max: Int;\n}\n```\n\n### CodeSet\n\nA set of code points, any of which can match, such as `/[abc]/` matching any of\n`\u0022a\u0022`, `\u0022b\u0022`, or `\u0022c\u0022`. Alternatively, a negated set is the inverse of the code\npoints given, such as `/[^abc]/`, matching any code point that's not any of\nthese. This is also often called a character class.\n\nFurther, a subset of [specials](#specials) can also be used in code sets. A\nnegated code set of just a special set often has custom syntax. For example,\nnon-space can be said as either `/[^\\s]/` or `/\\S/`.\n\n```\nexport class CodeSet extends Regex {\n  public items: List\u003cCodePart\u003e;\n  public negated: Boolean = false;\n}\n```\n\n### Or\n\n`Or` matches any one of multiple options, such as `/ab|cd|e*/`.\n\n```\nexport class Or extends Regex {\n  public /*early*/ items: List\u003cRegex\u003e;\n}\n```\n\n### Repeat\n\n`Repeat` matches from an minimum to a maximum number of repeats of a\nsubregex. This can be represented in regex source in a number of ways:\n\n- `?` matches 0 or 1.\n- `*` matches 0 or more.\n- `+` matches 1 or more.\n- `{m}` matches exactly `m` repetitions.\n- `{m,n}` matches between `m` and `n`. Missing `n` is a max of infinity. For\n  example, `{0,1}` is equivalent to `?`, and `{1,}` is equivalent to `+`.\n\nBy default, repetitions are greedy, matching as many repetitions as possible.\nIn regex source, any of the above can have `?` appended to indicated reluctant\n(aka non-greedy), matching as few repetitions as possible.\n\n```\nexport class Repeat extends Regex {\n  public /*early*/ item: Regex;\n  public min: Int;\n  public max: Int | Null; // where null means infinite\n  public reluctant: Boolean = false;\n}\n```\n\nWe also have convenience builders.\n\n```\nexport let entire(item: Regex): Regex {\n  new Sequence([Begin, item, End])\n}\n\nexport let oneOrMore(item: Regex, reluctant: Boolean = false): Repeat {\n  { item, min: 1, max: null, reluctant }\n}\n\nexport let optional(item: Regex, reluctant: Boolean = false): Repeat {\n  { item, min: 0, max: 1, reluctant }\n}\n```\n\n### Sequence\n\n`Sequence` strings along multiple other regexes in order.\n\n```\nexport class Sequence extends Regex {\n  public /*early*/ items: List\u003cRegex\u003e;\n}\n```\n\n## Match Objects\n\nFor detailed match results, call `find` on a regex to get a `Map` object from\n`String` keys to `Group` values.\n\n```\n// TODO Go back to a `Match` object with `groups` as a member so we can also\n// TODO easily return metadata alongside groups? Or is simpler better?\n// export class Match { // interface ... \u003cT = Map\u003cString, Group\u003e\u003e {\n//   public let groups: Map\u003cString, Group\u003e;\n// }\n\nexport class Group {\n  public let name: String;\n  public let value: String;\n  public let codePointsBegin: Int;\n}\n```\n\n## Compiled Regex Objects\n\nThe compiled form of a regex is mostly opaque, but it can be cached for more\nefficient reuse than working from a source [Regex](#regex-data-model).\n\n\u003cdetails\u003e\n\n```\n// Provides a workaround for access to std/regex from extension methods.\nclass RegexRefs {\n  public let codePoints: CodePoints = new CodePoints(\u0022\u0022);\n  public let group: Group = { name: \u0022\u0022, value: \u0022\u0022, codePointsBegin: 0 }\n  public let orObject: Or = new Or([]);\n}\n\nlet regexRefs = new RegexRefs();\n```\n\n\u003c/details\u003e\n\n```\n// TODO(tjp, regex): Generate subtypes of this interface later.\nexport class CompiledRegex { // interface ... \u003cT\u003e {\n```\n\nThe source `Regex` data is still available on compiled objects in case it's\nneeded for composition or other purposes.\n\n```\n  public let data: Regex;\n\n  public constructor(data: Regex) {\n    this.data = data;\n    compiled = compileFormatted(format());\n  }\n```\n\nA compiled regex exposes many of the same capabilities as `Regex`, but they are\nmore efficient to use repeatedly.\n\n```\n  public found(text: String): Boolean { compiledFound(compiled, text) }\n\n  public find(text: String): Map\u003cString, Group\u003e | Bubble {\n    compiledFind(compiled, text, regexRefs)\n  }\n\n  public replace(\n    text: String, format: fn (Map\u003cString, Group\u003e): String\n  ): String {\n    compiledReplace(compiled, text, format, regexRefs)\n  }\n```\n\nTODO(tjp, regex): Public method for replace with named references.\nTODO(tjp, regex): Any static checking?\n\n\u003cdetails\u003e\n\n```\n  let compiled: AnyValue;\n\n  // Extension functions on some backends need the private `compiled` value\n  // passed in directly.\n  @connected(\u0022CompiledRegex::compiledFound\u0022)\n  compiledFound(compiled: AnyValue, text: String): Boolean;\n\n  @connected(\u0022CompiledRegex::compiledFind\u0022)\n  compiledFind(\n    compiled: AnyValue, text: String, regexRefs: RegexRefs\n  ): Map\u003cString, Group\u003e | Bubble;\n\n  @connected(\u0022CompiledRegex::compileFormatted\u0022)\n  compileFormatted(formatted: String): AnyValue;\n\n  @connected(\u0022CompiledRegex::compiledReplace\u0022)\n  compiledReplace(\n    compiled: AnyValue,\n    text: String,\n    format: fn (Map\u003cString, Group\u003e): String,\n    regexRefs: RegexRefs,\n  ): String;\n\n  @connected(\u0022CompiledRegex::format\u0022)\n  format(): String { new RegexFormatter().format(data) }\n```\n\n\u003c/details\u003e\n\n```\n}\n```\n\n## Private implementation matters\n\nSome regex logic can be shared across backends. These features aren't directly\nexported to the user, however.\n\nThe intent is that these support features only get included in compiled Temper\ncode if usage depends on dynamically constructed regexes. If all regex building\nis done as stable values, we hope to generated backend compiled regexes purely\nat Temper compile time.\n\n### RegexFormatter\n\n\u003cdetails\u003e\n\n```\nclass RegexFormatter {\n  let out: ListBuilder\u003cString\u003e = new ListBuilder\u003cString\u003e();\n\n  public format(regex: Regex): String {\n    pushRegex(regex)\n    out.join(\u0022\u0022) { (x);; x }\n  }\n\n  pushRegex(regex: Regex): Void {\n    match (regex) {\n      // Aggregate types.\n      is Capture -\u003e pushCapture(regex);\n      is CodePoints -\u003e pushCodePoints(regex, false);\n      is CodeRange -\u003e pushCodeRange(regex);\n      is CodeSet -\u003e pushCodeSet(regex);\n      is Or -\u003e pushOr(regex);\n      is Repeat -\u003e pushRepeat(regex);\n      is Sequence -\u003e pushSequence(regex);\n      // Specials.\n      // Some of these will need to be customized on future backends.\n      Begin -\u003e out.add(\u0022^\u0022);\n      Dot -\u003e out.add(\u0022.\u0022);\n      End -\u003e out.add(\u0022\u0024\u0022);\n      WordBoundary -\u003e out.add(\u0022\\\\b\u0022);\n      // Special sets.\n      Digit -\u003e out.add(\u0022\\\\d\u0022);\n      Space -\u003e out.add(\u0022\\\\s\u0022);\n      Word -\u003e out.add(\u0022\\\\w\u0022);\n      // ...\n    }\n  }\n\n  pushCapture(capture: Capture): Void {\n    out.add(\u0022(\u0022);\n    // TODO(tjp, regex): Consistent name validation rules for all backends???\n    // TODO(tjp, regex): Validate here or in `Capture` constructor???\n    // TODO(tjp, regex): Validate here or where against reused names???\n    pushCaptureName(out, capture.name);\n    pushRegex(capture.item);\n    out.add(\u0022)\u0022);\n  }\n\n  @connected(\u0022RegexFormatter::pushCaptureName\u0022)\n  pushCaptureName(out: ListBuilder\u003cString\u003e, name: String): Void {\n    // All so far except Python use this form.\n    out.add(\u0022?\u003c\u0024{name}\u003e\u0022);\n  }\n\n  pushCode(code: Int, insideCodeSet: Boolean): Void {\n    // Expose private property to extension.\n    pushCodeTo(out, code, insideCodeSet);\n    // TODO(tjp, regex): Implement more in Temper once we can.\n    // if (escapeCodes[code] \u0026\u0026 false) {\n    //   out.add(\u0022\\\\\u0022);\n    //   // TODO(tjp, regex): How to convert back to strings?\n    // }\n  }\n\n  @connected(\u0022RegexFormatter::pushCodeTo\u0022)\n  pushCodeTo(out: ListBuilder\u003cString\u003e, code: Int, insideCodeSet: Boolean): Void;\n\n  pushCodePoints(codePoints: CodePoints, insideCodeSet: Boolean): Void {\n    for (\n      var slice = codePoints.value.codePoints;\n      !slice.isEmpty;\n      slice = slice.advance(1)\n    ) {\n      pushCode(slice.read(), insideCodeSet);\n    }\n  }\n\n  pushCodeRange(codeRange: CodeRange): Void {\n    out.add(\u0022[\u0022);\n    pushCodeRangeUnwrapped(codeRange);\n    out.add(\u0022]\u0022);\n  }\n\n  pushCodeRangeUnwrapped(codeRange: CodeRange): Void {\n    pushCode(codeRange.min, true);\n    out.add(\u0022-\u0022);\n    pushCode(codeRange.max, true);\n  }\n\n  pushCodeSet(codeSet: CodeSet): Void {\n    let adjusted = adjustCodeSet(codeSet, regexRefs);\n    match (adjusted) {\n      is CodeSet -\u003e do {\n        out.add(\u0022[\u0022);\n        if (adjusted.negated) {\n          out.add(\u0022^\u0022);\n        }\n        for (var i = 0; i \u003c adjusted.items.length; i += 1) {\n          pushCodeSetItem(adjusted.items[i]);\n        }\n        out.add(\u0022]\u0022);\n      }\n      else -\u003e pushRegex(adjusted);\n    }\n  }\n\n  @connected(\u0022RegexFormatter::adjustCodeSet\u0022)\n  adjustCodeSet(codeSet: CodeSet, regexRefs: RegexRefs): Regex { codeSet }\n\n  pushCodeSetItem(codePart: CodePart): Void {\n    match (codePart) {\n      is CodePoints -\u003e pushCodePoints(codePart, true);\n      is CodeRange -\u003e pushCodeRangeUnwrapped(codePart);\n      is SpecialSet -\u003e pushRegex(codePart);\n    }\n  }\n\n  pushOr(or: Or): Void {\n    if (!or.items.isEmpty) {\n      out.add(\u0022(?:\u0022);\n      // TODO(tjp, regex): See #822. Until `this` works better, no this in funs.\n      // TODO(tjp, regex): So just manually loop here. Sometimes faster, anyway?\n      pushRegex(or.items[0]);\n      for (var i = 1; i \u003c or.items.length; i += 1) {\n        out.add(\u0022|\u0022);\n        pushRegex(or.items[i]);\n      }\n      out.add(\u0022)\u0022);\n    }\n  }\n\n  pushRepeat(repeat: Repeat): Void {\n    // Always wrap the main sub-pattern here to make life easy\n    out.add(\u0022(?:\u0022);\n    pushRegex(repeat.item);\n    out.add(\u0022)\u0022);\n    // Then add the repetition part.\n    let min = repeat.min;\n    let max = repeat.max;\n    if (false) {\n    } else if (min == 0 \u0026\u0026 max == 1) {\n      out.add(\u0022?\u0022);\n    } else if (min == 0 \u0026\u0026 max == null) {\n      out.add(\u0022*\u0022);\n    } else if (min == 1 \u0026\u0026 max == null) {\n      out.add(\u0022+\u0022);\n    } else {\n      out.add(\u0022{\u0024{min.toString()}\u0022);\n      if (min != max) {\n        out.add(\u0022,\u0022);\n        if (max != null) {\n          out.add(max.as\u003cInt\u003e().toString());\n        }\n      }\n      out.add(\u0022}\u0022);\n    }\n    if (repeat.reluctant) {\n      out.add(\u0022?\u0022);\n    }\n  }\n\n  pushSequence(sequence: Sequence): Void {\n    // TODO(tjp, regex): Foreach loop/function would be nice.\n    for (var i = 0; i \u003c sequence.items.length; i += 1) {\n      pushRegex(sequence.items[i]);\n    }\n  }\n\n  // Put this here instead of the data model for now because I'm not sure this\n  // makes sense to be part of the public api right now.\n  public maxCode(codePart: CodePart): Int | Null {\n    match (codePart) {\n      is CodePoints -\u003e do {\n        // Iterating code points is the hardest of the current cases.\n        let value = codePart.value;\n        if (value.isEmpty) {\n          null\n        } else {\n          // My kingdom for a fold, or even just a max, in builtins.\n          var max = 0;\n          for (\n            var slice = value.codePoints;\n            !slice.isEmpty;\n            slice = slice.advance(1)\n          ) {\n            let next = slice.read();\n            if (next \u003e max) {\n              max = next;\n            }\n          }\n          max\n        }\n      }\n      // Others below are easy for now.\n      is CodeRange -\u003e codePart.max;\n      Digit -\u003e \u00229\u0022.codePoints.read();\n      Space -\u003e \u0022 \u0022.codePoints.read();\n      Word -\u003e \u0022z\u0022.codePoints.read();\n      // Actually unexpected, ever, but eh.\n      else -\u003e null;\n    }\n  }\n}\n```\n\n\u003c/details\u003e\n" ], "names": [ "Word", "Digit", "Space", "Dot", "End", "Begin", "WordBoundary", "regexRefs", "RegexFormatter", "out", "Regex", "regex", "t#1141", "fn", "x", "t#744", "Capture", "t#745", "t#748", "CodePoints", "t#749", "t#752", "CodeRange", "t#753", "t#756", "CodeSet", "t#757", "t#760", "Or", "t#761", "t#764", "Repeat", "t#765", "t#768", "Sequence", "t#769", "s__1258#1259", "capture", "t#1125", "t#1126", "t#739", "name", "code", "insideCodeSet", "codePoints", "t#1114", "t#1115", "t#1119", "slice", "codeRange", "t#1109", "t#1107", "codeSet", "t#1103", "t#717", "t#718", "CodePart", "t#723", "adjusted", "s__1263#1265", "s__1264#1266", "i", "RegexRefs", "codePart", "t#704", "t#705", "t#708", "t#709", "t#712", "SpecialSet", "t#713", "s__1267#1268", "or", "t#1087", "t#696", "t#701", "s__1269#1271", "s__1270#1272", "repeat", "t#1077", "t#683", "t#684", "t#685", "t#688", "t#690", "s__1273#1274", "min", "max", "sequence", "t#1075", "t#677", "s__1276#1277", "return", "t#1053", "t#1055", "t#1060", "t#1063", "t#1066", "t#1069", "t#650", "t#651", "t#663", "t#664", "s__1278#1279", "value", "next", "t#1049" ], "mappings": "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" }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy