ϰ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~*Safe/contains a compiled RE and replacement templatethe REthe replacement templateNone<=?I4our macro tables are parameterised over the backend RE# type and and just associate each MacroID with an REMacroID is just a wrapped String type with an IsString instance (a number of types can be used to encode  REOptions4, each of which can be made a member of this class.  convert the o type into an REOptions r c e lthe general options for an RE are dependent on which back end is being used and are parameterised over the RE! type for the back end, and its  CompOption and  ExecOptionc types (the compile-time and execution time options, respectively); each back end will define an  REOptionsK type that fills out these three type parameters with the apropriate types!the available TestBench RE macros!the back end compile-time options#the back end execution-time optionsgthe default API uses these simple, universal RE options, which get auto-converted into the apropriate  , actually as apropriate the chosen back end@case-sensitive with ^ and $ matching the start and end of a line?case-insensitive with ^ and $ matsh the start and end of a lineHcase-sensitive with ^ and $ matching the start and end of the input textJcase-insensitive with ^ and $ matching the start and end of the input text#a macro table containing no entriesMacroID is used with  HM.HashMap to build macro lookup tables4we need to use this in the quasi quoters to specify SimpleREOptions selected by the quasi quoter        NoneI#2our line numbers are of the proper zero-based kind&the first line in a file'*extract a conventional 1-based line number()inject a conventional 1-based line number#$%&'(#$%&'(#$%&'(#$%&'(NoneI+a +t is just the number of the capture, starting with 0 for the whole of the text matched, then in leftmost, outermost.a . is just the text of the name1Tthe dictionary for named captures stored in compiled regular expressions associates2[CaptureID identifies captures, either by number (e.g., [cp|1|]) or name (e.g., [cp|foo|]).5 an empty 1 dictionary6 look up a 2 in the 1 dictionary +,-./01234567 +,-./0123456 23415./07+,-6+,-./01234567Safe!"09;<=DHthe matching of a single sub-expression against part of the source textF the whole text that was searchedGthe text that was matchedHythe number of characters preceding the match with -1 used if no text was captured by the RE (not even the empty string)I1the number of chacter in the captured sub-stringJ(test if the capture has matched any textK$returns the text preceding the matchL returns the text after the match DEFGHIJKLM DEFGHIJKL DEFGHIJKLDEFGHIJKLMNone!"09;<=Pthe result of matching a RE to a text once, listing the text that was matched and the named captures in the RE and all of the substrings matched, with the text captured by the whole RE; a complete failure to match will be represented with an empty array (with bounds (0,-1))Rthe whole source textSthe RE's capture namesT @.n-1 captures, starting with the text matched by the whole REU/Construct a Match that does not match anything.Van empty array of CaptureW3tests whether the RE matched the source text at allX3tests whether the RE matched the source text at allYKthe top-level capture if the source text matched the RE, Nothing otherwiseZYthe top-level capture and the sub captures if the text matched the RE, Nothing otherwise[an alternative for captureText\look up the text of the nth capture, 0 being the match of the whole RE against the source text, 1, the first bracketed sub-expression to be matched and so on]#an alternative for captureTextMaybe^look up the text of the nth capture (0 being the match of the whole), returning Nothing if the Match doesn't contain the capture_an alternative for capture`look up the nth capture, 0 being the match of the whole RE against the source text, 1, the first bracketed sub-expression to be matched and so ona'an alternative for capture captureMaybeblook up the nth capture, 0 being the match of the whole RE against the source text, 1, the first bracketed sub-expression to be matched and so on, returning Nothing if there is no such capture, or if the capture failed to capture anything (being in a failed alternate)c=convert a regex-base native MatchText into a regex Match typedthis instance hooks PC into regex-base: regex consumers need not worry about any of thisPQRSTUVWXYZ[\]^_`abcdePQRSTUVWXYZ[\]^_`abcPQRSTUVWXYZ[\]^_`abcPQRSTUVWXYZ[\]^_`abcde[9 _9 None!"09;<=hithe result type to use when every match is needed, not just the first match of the RE against the sourcejthe source text being matchedkall P instances found, left to rightl3tests whether the RE matched the source text at allmcount the matchesnlist the Matcheso(extract the main capture from each matchpthis instance hooks hC into regex-base: regex consumers need not worry about any of this hijklmnopqhijklmnohijklmnohijklmnopqNone!"9:;"tthe Locationg information passed into the substitution function specifies which sub-expression is being substitutedvxthe zero-based, i-th string to be matched, when matching all strings, zero when only the first string is being matchedw0, when matching the top-level string matched by the whole RE, 1 for the top-most, left-most redex captured by bracketed sub-REs, etc.x REContext= specifies which contexts the substitutions should be appliedyZsubstitutions should be applied to the top-level only, the text that matched the whole REzOsubstitutions should only be applied to the text captured by bracketed sub-REs{kthe substitution function should be applied to all captures, the top level and the sub-expression captures|ua selction of the Replace methods can be encapsulated with ReplaceMethods for the higher-order replacement functionsoReplace provides the missing methods needed to replace the matched text; lengthR is the minimum implementationlength function for ainject String into aproject a onto a Stringinject into Textproject Text onto asplit into linesconcatenate a list of linesappend a newline*apply a substitution function to a CaptureKconvert a template containing $0, $1, etc., in the first argument, into a phiJ replacement function for use with replaceAllCaptures and replaceCapturesEreplaceMethods encapsulates ReplaceMethods a from a Replace a contextRTrue iff the location references a complete match (i.e., not a bracketed capture)Kreplace all with a template, $0 for whole text, $1 for first capture, etc.substitutes using a function that takes the full Match context and returns the same replacement text as the _phi_phi context.vreplaceAllCaptures_ is like like replaceAllCaptures but takes the Replace methods through the ReplaceMethods argumentUreplaceAllCapturesM is just a monadically generalised version of replaceAllCaptures_substitutes using a function that takes the full Match context and returns the same replacement text as the _phi_phi context.kreplaceCaptures_ is like replaceCaptures but takes the Replace methods through the ReplaceMethods argumentOreplaceCapturesM is just a monadically generalised version of replaceCaptures_expand all of the @{..} macros in the RE in the argument String according to the Macros argument, preprocessing the RE String according to the Mode argument (used internally)Gexpand the @{..} macos in the argument string using the given functionGparse the replacement template in second argument, substititing the capture references with corresponding captures from the Match in the third argument (the result of a single match of the RE against the input text to be matched); Nothing is returned if the inputs are not well formed (currently all inputs are well formed)Tlist all of the CaptureID references in the replace template in the second argument4parse a Match generated by acan_template, returning 3Left "$") iff the capture reference is an escaped $ (i.e., $$@)lscan a replacement template, returning a Match for each capture reference in the template (like $1, ${foo})0tuvwxyz{|}~   $tuvwxyz{|}~$|}~xyz{tuvwtuvwxyz{|}~    None$    None0?used to throw an exception reporting an abuse of a quasi quoter)in what context was the quasi quoter used%how was the quasi quoter being abusedha quasi quoter that can be used in no context (to be extended with the appropriate quasi quoter parser) SafeGConvert a string into a regular expression that will amtch that string=returns True iff the charactr is an RE meta character ('[',  , '{', etc.) None<= the i class allows tools to be written that will work with regex back end text type supported by the back endfinding the first matchfinding all matches5compiling an RE, failing if the RE is not well formedcomiling an RE, specifying the  compiling a U template from the RE text and the template Text, failing if they are not well formed compiling a  template specifing the  for the REIincorporate an escaped string into a compiled RE with the default optionsDincorporate an escaped string into a compiled RE with the specified &extract the text of the RE from the RE  None!",searching and replacing the first occurrence(searching and replaceing all occurrencesNonez #$%&'(+,-./0123456DEFGHIJKLPQRSTUVWXYZ[\]^_`abchijklmnotuvwxyz{|}~(C) 2016-17 Chris DornanBSD3 (see the LICENSE file)+Chris Dornan <chris.dornan@irisconnect.com>RFCportableNone PRWXhkjlmn hjkjklmnPRRWX None0ATza convenience function used by the API modules to insert capture names extracted from the parsed RE into the (*=~) resultza convenience function used by the API modules to insert capture names extracted from the parsed RE into the (?=~) resultYa hairy dynamically-typed function used with the legacy (=~) and (=~~) to see if it can/should add the capture names extracted from the RE into the polymorphic result of the operator (it does for any Match or Matches type, provided it is parameterised over a recognised type). The test suite is all over this one, testing all of these cases.None!"Iwe are only interested in the open parentheses used for grouping and/or capturing; if neither grouping or capturing then there is no initial '(' or '(?:', just the suffic text following text optional ( or (?: a '(' that is not safe to modifyis this a grouping group is this a capturing groupLname of the Haskell parser function for parsing the text matched by a macroa RE that should work for POSIX and PCRE with open brackets ('(') represented as follows: ( mere symbol (?: used for grouping only, not for captures (}: used for captures only, not for grouping (]: used for captures and grouping ( do not modify$list of failures on a validation runIdescribes a macro, giving the text of the RE and a si=ummary descriptionthe REsome sample matchessome sample non-matchesvalidation test resultsWA, the parser functionsummary commentoeach macro can reference others, the whole environment being required for each macro, so we use a Lazy HashMapPdo we need the captures in the RE or whould they be stripped out where possibleGwhat kind of back end will be compiling the RE, and its match function test RegexType for TDFA/PCREness test RegexType for TDFA/PCREnessO!"#$%&'()*+ ,-./0123456789:;<=>?@ABO PRWXhjklmn* 1!"#$%&'()*+ ,-./0123456789:;<=>?@ABNone!"I  +an enumeration of all of the prelude macros 6generate the standard prelude Macros used to parse REs!6format the standard prelude macros in a markdown table"0generate a textual summary of the prelude macros#Zgenerate a plain text table giving the RE for each macro with all macros expanded (to NF)$<generate plain text giving theexpanded RE for a single macro% generate the  for the standard prelude macros& generate the  for a given  'naming the macrosC)all prelude macros are prefixed with thisDa digit string macroEsee  'https://mathiasbynens.be/demo/url-regex (based on @stephenhay URL)9     !"#$%F&'CGHIJDKLMNOPQRSTUVWXYZE[\]-     !"#$%&'-    ' !"#$%&$     !"#$%F&'CGHIJDKLMNOPQRSTUVWXYZE[\]None!"2-oa LineEdit is the most general action thar can be performed on a line and is the only means of deleting a line1<each Edit action specifies how the match should be processed5an 5 script will, for each line in the file, either perform the action selected by the first RE in the list, or perform all of the actions on line, arranged as a pipeline8 apply an 1 script to a single line9apply a single edit action to a line, the function in the first argument being used to add a new line onto the end of the line where appropriate; the function returns Nothing- if no edit is to be performed on the line,  Just mempty to delete the line:apply a - to a line, using the function in the first argument to append a new line to the result; Nothing should be returned if no edit is to be performed,  Just mempty to delete the line-./0123456789:^_"#$%&'(PRWXhjklmn-./0142356789:5671234-./089:#$%&'(-./0123456789:^_None!": =7specifies whether to return the linss matched or missed@a GrepScript lists RE-action associations, with the first RE to match a line selecting the action to be executed on each line in the fileAF returns a A0 for each line in the file, listing all of the h for that lineCthe # for this lineDall the h of the RE on this lineEoperates a bit like classic grep printing out the lines matchedF returns a AI for each line in the file enumerating all of the matches for that line.G!given a list of lines, apply the @ to each line of the fileH&generate a grep report from a list of AIgiven a velocity9 flag filter out either the lines matched or not matched =>?@ABCDEFGHI'#$%&'(PRWXhjklmn=>?@ABCDEFGHIEABCDF@GH=>?I#$%&'(=>?@ABCDEFGHINoneNCa simple regex-based scanner interpretter for prototyping scannersOa higher order version of N parameterised over the  matchOnce functionNOPRWXhjklmnNO NONONone!"5`-options for the general Token formatter belowa!Posix, PCRE or indeterminate REs?bremove captures where possiblec"include the captures in the outputP-our RE scanner returns a list of these tokensW2quasi quoter for CaptureID ([cp|0|],[cp|y|], etc.)Xextract the CaptureNames from an RE or return an error diagnostic if the RE is not well formed; also returs the total number of captures in the REY!check that a token is well formeddBanalyse a token stream, returning the number of captures and the 1Z(scan a RE string into a list of RE Token[ format [Token] into an RE stringe1the default configuration for the Token formatter\Oa configuration that will preserve the parsed regular expression in the output]Dthe general Token formatter, generating REs according to the options`fabcPQRSTUVWXYdZg[e\]^PVQRSTUWXYZ[\]^WX\PQRSTUVY[]^Z `fabcPQRSTUVWXYdZg[e\]^ None!"h warapper on iA that will generate an error if any compilation errors are foundicompile a SearchReplace template generating errors if the RE or the template are not well formed -- all capture references being checkedjcompile  SearcgReplaceA from two strings containing the RE and the replacement templatehijkhijhijkNone !"9:;<=$c)and the REOptions for this back end (see Text.RE.Types.REOptions for details)dFthe RE type for this back end representing a well-formed, compiled REesome functions in the Text.RE.TestBench2 need the back end to be passed dynamically as a  parameters: use e fpr this backendf extract the c from the REg&extract the RE source string from the REh extract the 1 from the REiextract the back end compiled l type from the REj the default ck the default c but with no RE macros definedlconvert a universal SimpleReOptions into the c used by this back endm compile a m into a dL with the default options, generating an error if the RE is not well formedn compile a m into a d using the given SimpleREOptions3, generating an error if the RE is not well formedo compile a m into a d using the given SimpleREOptions3, generating an error if the RE is not well formedpcompile a SearchReplace template generating errors if the RE or the template are not well formed -- all capture references being checkedqcompile a SearchReplace template, with simple options, generating errors if the RE or the template are not well formed -- all capture references being checkedrcompile a SearchReplace template, with general options, generating errors if the RE or the template are not well formed -- all capture references being checkedsconvert a string into a RE that matches that string, and apply it to an argument continuation function to make up the RE string to be compiledtconvert a string into a RE that matches that string, and apply it to an argument continuation function to make up the RE string to be compiled with the default optionsuconvert a string into a RE that matches that string, and apply it to an argument continuation function to make up the RE string to be compiled the given optionsvthe standard table of = used to compile REs (which can be extended or replace: see Text.RE.TestBench)w the standard  for this back end (see Text.RE.TestBench)xlthe macros in the standard environment that are failing their tests (checked by the test suite to be empty)y.a table the standard macros in markdown formatzTa summary of the macros in the standard environment for this back end in plain text{la listing of the RE text for each macro in the standard environment with all macros expanded to normal form|?the prolude source of a given macro in the standard environment}the  [re| ... |] and [ed| ... /// ... |] quasi quoters~the  [re| ... |] and [ed| ... /// ... |] quasi quotersthe  [re| ... |] and [ed| ... /// ... |] quasi quotersthe  [re| ... |] and [ed| ... /// ... |] quasi quotersthe  [re| ... |] and [ed| ... /// ... |] quasi quotersthe  [re| ... |] and [ed| ... /// ... |] quasi quotersthe  [re| ... |] and [ed| ... /// ... |] quasi quotersthe  [re| ... |] and [ed| ... /// ... |] quasi quotersthe  [re| ... |] and [ed| ... /// ... |] quasi quotersthe  [re| ... |] and [ed| ... /// ... |] quasi quoters7cdnopqrefghijklmnopqrstuvwxyz{|}~stuvwxyz&Wcdefghijklmnopqrstuvwxyz{|}~&defghicjkmnopqrstuvwxyz{|l}~W2cdnopqrefghijklmnopqrstuvwxyz{|}~stuvwxyz!None:{5construct a quasi quoter from a casting function and Just sroA if the options are known, otherwise a function take takes the  and constructs the  template{|}{{|}"None the [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quoters ~  ~#None the [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quoters   $None the [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quoters   %None the [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quoters   &None the [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quoters   'None the [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quoters   (None the [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quotersthe [ed| ... /// ... |] quasi quoters   None9:;<=Efind all matches in text; e.g., to count the number of naturals in s: !countMatches $ s *=~ [re|[0-9]+|]find first match in textusearch and replace all occurrences; e.g., this section will yield a function to convert every a YYYY-MM-DD into a DDMMYYYY: (*=~5 [ed|${y}([0-9]{4})-0*${m}([0-9]{2})-0*${d}([0-9]{2})/${d} ${m}/${y}|]),search and replace the first occurrence only)the regex-base polymorphic match operator2the regex-base monadic, polymorphic match operatorEPRWXhkjlmnWcdefghijklmnopqrstuvwxyz{|}~)hjkjklmnPRRWXdgmnstNone9:;<=Efind all matches in text; e.g., to count the number of naturals in s: !countMatches $ s *=~ [re|[0-9]+|]find first match in textusearch and replace all occurrences; e.g., this section will yield a function to convert every a YYYY-MM-DD into a DDMMYYYY: (*=~5 [ed|${y}([0-9]{4})-0*${m}([0-9]{2})-0*${d}([0-9]{2})/${d} ${m}/${y}|]),search and replace the first occurrence only)the regex-base polymorphic match operator2the regex-base monadic, polymorphic match operatorEPRWXhkjlmnWcdefghijklmnopqrstuvwxyz{|}~)hjkjklmnPRRWXdgmnstNone9:;<=Efind all matches in text; e.g., to count the number of naturals in s: !countMatches $ s *=~ [re|[0-9]+|]find first match in textusearch and replace all occurrences; e.g., this section will yield a function to convert every a YYYY-MM-DD into a DDMMYYYY: (*=~5 [ed|${y}([0-9]{4})-0*${m}([0-9]{2})-0*${d}([0-9]{2})/${d} ${m}/${y}|]),search and replace the first occurrence only)the regex-base polymorphic match operator2the regex-base monadic, polymorphic match operatorEPRWXhkjlmnWcdefghijklmnopqrstuvwxyz{|}~)hjkjklmnPRRWXdgmnstNone9:;<=Efind all matches in text; e.g., to count the number of naturals in s: !countMatches $ s *=~ [re|[0-9]+|]find first match in textusearch and replace all occurrences; e.g., this section will yield a function to convert every a YYYY-MM-DD into a DDMMYYYY: (*=~5 [ed|${y}([0-9]{4})-0*${m}([0-9]{2})-0*${d}([0-9]{2})/${d} ${m}/${y}|]),search and replace the first occurrence only)the regex-base polymorphic match operator2the regex-base monadic, polymorphic match operatorEPRWXhkjlmnWcdefghijklmnopqrstuvwxyz{|}~)hjkjklmnPRRWXdgmnstNone9:;<=Efind all matches in text; e.g., to count the number of naturals in s: !countMatches $ s *=~ [re|[0-9]+|]find first match in textusearch and replace all occurrences; e.g., this section will yield a function to convert every a YYYY-MM-DD into a DDMMYYYY: (*=~5 [ed|${y}([0-9]{4})-0*${m}([0-9]{2})-0*${d}([0-9]{2})/${d} ${m}/${y}|]),search and replace the first occurrence only)the regex-base polymorphic match operator2the regex-base monadic, polymorphic match operatorEPRWXhkjlmnWcdefghijklmnopqrstuvwxyz{|}~)hjkjklmnPRRWXdgmnstNone9:;<=Efind all matches in text; e.g., to count the number of naturals in s: !countMatches $ s *=~ [re|[0-9]+|]find first match in textusearch and replace all occurrences; e.g., this section will yield a function to convert every a YYYY-MM-DD into a DDMMYYYY: (*=~5 [ed|${y}([0-9]{4})-0*${m}([0-9]{2})-0*${d}([0-9]{2})/${d} ${m}/${y}|]),search and replace the first occurrence only)the regex-base polymorphic match operator2the regex-base monadic, polymorphic match operatorEPRWXhkjlmnWcdefghijklmnopqrstuvwxyz{|}~)hjkjklmnPRRWXdgmnstNone:Efind all matches in text; e.g., to count the number of naturals in s: !countMatches $ s *=~ [re|[0-9]+|]find first match in textusearch and replace all occurrences; e.g., this section will yield a function to convert every a YYYY-MM-DD into a DDMMYYYY: (*=~5 [ed|${y}([0-9]{4})-0*${m}([0-9]{2})-0*${d}([0-9]{2})/${d} ${m}/${y}|]),search and replace the first occurrence only)the regex-base polymorphic match operator2the regex-base monadic, polymorphic match operatorEPRWXhkjlmnWcdefghijklmnopqrstuvwxyz{|}~)hjkjklmnPRRWXdgmnstNone!":read a file, apply an 5} script to each line it and write the file out again; "-" is used to indicate standard input standard output as appropriate apply an 5) script to each line of the argument text*#$%&'(PRWXhjklmn-./0142356789: 5671234-./089:#$%&'()None1#$%&'(PRWXhjklmn-./0142356789:@EFGINO'EF@GINO5671234-./089:#$%&'(*None #$%&'(+,-./0123456DEFGHIJKLPQSTRUVWXYZ[\]^_`abchijklmnotuvwxyz{|}~-./0142356789:@EFGINO++,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTTUVVWXYZ[\]^_`abcdefghijkklmnopqrstuvvwxyz{|}~                  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQKRSTUVWXYZ[\]^^_`abcdefghijklmnopqrstuvwxyz{|}~6""""""""""##########$$$$$$$$$$%%%%%%%%%%&&&&&&&&&&''''''''''((((((((((                 ! "#$%&'()*+,-./012!3!4!5"6#7#8$7$8%7%8&7&8'7'8(7(89:;%regex-0.10.0.3-7AROWVRiAzl5tuWwOAr5zqText.RE.Types.SearchReplaceText.RE.Types.REOptionsText.RE.Types.LineNoText.RE.Types.CaptureIDText.RE.Types.CaptureText.RE.Types.MatchText.RE.Types.MatchesText.RE.Types.ReplaceText.RE.TestBench.ParsersText.RE.Internal.EscapeREStringText.RE.Types.IsRegexText.RE.SearchReplace Text.RE.Internal.AddCaptureNamesText.RE.TestBenchText.RE.Internal.PreludeMacrosText.RE.Tools.EditText.RE.Tools.GrepText.RE.Tools.LexText.RE.Internal.NamedCapturesText.RE.TDFA.RE Text.RE.TDFAText.RE.TDFA.ByteStringText.RE.TDFA.ByteString.LazyText.RE.TDFA.SequenceText.RE.TDFA.StringText.RE.TDFA.TextText.RE.TDFA.Text.LazyText.RE.Tools.SedText.RE.Internal.QQ Text.RE.TypesText.REText.RE.Internal.SearchReplace*Text.RE.Internal.SearchReplace.TDFAEdPrime#Text.RE.Internal.SearchReplace.TDFA.Text.RE.Internal.SearchReplace.TDFA.ByteString3Text.RE.Internal.SearchReplace.TDFA.ByteString.Lazy,Text.RE.Internal.SearchReplace.TDFA.Sequence*Text.RE.Internal.SearchReplace.TDFA.String(Text.RE.Internal.SearchReplace.TDFA.Text-Text.RE.Internal.SearchReplace.TDFA.Text.Lazy Text.RE.Tools Text.RE.Summa SearchReplace getSearch getTemplate$fFunctorSearchReplace$fShowSearchReplaceMacrosMacroID getMacroIDIsOption makeREOptions REOptions_ REOptions optionsMacs optionsComp optionsExecSimpleREOptionsMultilineSensitiveMultilineInsensitiveBlockSensitiveBlockInsensitive emptyMacros$fHashableMacroID$fLiftSimpleREOptions$fBoundedSimpleREOptions$fEnumSimpleREOptions$fEqSimpleREOptions$fOrdSimpleREOptions$fShowSimpleREOptions$fIsStringMacroID $fOrdMacroID $fEqMacroID $fShowMacroID$fShowREOptions_LineNoZeroBasedLineNogetZeroBasedLineNo firstLine getLineNolineNo $fShowLineNo $fEnumLineNoCaptureOrdinalgetCaptureOrdinal CaptureNamegetCaptureName CaptureNames CaptureIDIsCaptureOrdinal IsCaptureNamenoCaptureNames findCaptureID$fHashableCaptureName$fShowCaptureName$fOrdCaptureName$fEqCaptureName$fShowCaptureOrdinal$fOrdCaptureOrdinal$fEqCaptureOrdinal$fEnumCaptureOrdinal$fIxCaptureOrdinal$fNumCaptureOrdinal$fShowCaptureID$fOrdCaptureID $fEqCaptureIDCapture captureSource capturedText captureOffset captureLength hasCaptured capturePrefix captureSuffix$fFunctorCapture $fShowCapture $fEqCaptureMatch matchSource captureNames matchArraynoMatchemptyMatchArraymatched matchedText matchCapture matchCaptures!$$ captureText!$$?captureTextMaybe!$capture!$? captureMaybeconvertMatchText$fRegexContextregexsourceMatch$fFunctorMatch $fShowMatch $fEqMatchMatches matchesSource allMatches anyMatches countMatchesmatches mainCaptures $fRegexContextregexsourceMatches$fFunctorMatches $fShowMatches $fEqMatchesLocation locationMatchlocationCapture REContextTOPSUBALLReplaceMethods methodLength methodSubstReplacelengthRpackRunpackRtextifyR detextifyRlinesRunlinesRappendNewlineRsubstRparseTemplateRreplaceMethods isTopLocation replaceAllreplaceAllCapturesreplaceAllCaptures_replaceAllCapturesMreplacereplaceCapturesreplaceCaptures_replaceCapturesM expandMacros expandMacros'templateCaptures $fReplaceText$fReplaceText0 $fReplaceSeq$fReplaceByteString$fReplaceByteString0 $fReplace[]$fShowREContext$fShowLocationSeverityEmergAlertCritErrWarningNoticeInfoDebug IPV4Address parseIntegerparseHex parseDouble parseStringparseSimpleString parseDateparseSlashesDateparseTimeOfDay parseTimeZone parseDateTimeparseDateTime8601parseDateTimeCLFparseShortMonthshortMonthArrayparseIPv4Address parseSeverityseverityKeywords$fBoundedSeverity$fEnumSeverity $fOrdSeverity $fEqSeverity$fShowSeverityescapeREString isMetaCharIsRegex matchOnce matchMany makeRegex makeRegexWithmakeSearchReplacemakeSearchReplaceWith makeEscapedmakeEscapedWith regexSourcesearchReplaceAllsearchReplaceFirstaddCaptureNamesToMatchesaddCaptureNamesToMatchaddCaptureNames FunctionID _FunctionID RegexSource _RegexSource TestResult _TestResultMacroDescriptor _md_source _md_samples_md_counter_samples_md_test_results _md_parser_md_descriptionMacroEnv WithCaptures InclCaptures ExclCaptures RegexTypeisTDFAisPCREmkTDFAmkPCREpresentRegexTypemkMacros testMacroEnv badMacrosrunTests runTests'dumpMacroTableformatMacroTableformatMacroSummaryformatMacroSourcesformatMacroSourcetestMacroDescriptors mdRegexSource$fShowRegexType$fEqWithCaptures$fOrdWithCaptures$fShowWithCaptures$fIsStringTestResult$fShowTestResult$fIsStringRegexSource$fShowRegexSource$fIsStringFunctionID$fShowFunctionID$fShowMacroDescriptor $fShowREToken$fIxCol $fBoundedCol $fEnumCol$fOrdCol$fEqCol $fShowCol PreludeMacroPM_natPM_hexPM_intPM_frac PM_stringPM_string_simplePM_idPM_id'PM_id_PM_datePM_date_slashesPM_time PM_timezone PM_datetimePM_datetime_8601PM_datetime_clf PM_shortmonthPM_address_ipv4PM_email_simplePM_urlPM_syslog_severity preludeMacrospreludeMacroTablepreludeMacroSummarypreludeMacroSourcespreludeMacroSourcepreludeMacroEnvpreludeMacroDescriptorpresentPreludeMacro$fBoundedPreludeMacro$fEnumPreludeMacro$fOrdPreludeMacro$fEqPreludeMacro$fShowPreludeMacroLineEditNoEdit ReplaceWithDeleteEditTemplateFunctionEditsSelectPipe applyEdits applyEdit applyLineEdit$fFunctorLineEdit$fShowLineEdit Verbosity LinesMatchedLinesNotMatched GrepScriptLine getLineNumbergetLineMatchesgrep grepLines grepScriptreport linesMatched $fShowLine$fShowVerbosity $fEqVerbosity$fOrdVerbosityalexalex'TokenECapPGrpPCapBraBSOthercpextractNamedCaptures validTokenscan formatTokensidFormatTokenREOptions formatTokens' formatTokens0 $fShowToken$fGenericToken $fEqToken$fShowFormatTokenREOptionsRE regexType reOptionsreSourcereCaptureNamesreRegexdefaultREOptionsnoPreludeREOptionsunpackSimpleREOptions compileRegexcompileRegexWithcompileRegexWithOptionscompileSearchReplacecompileSearchReplaceWith!compileSearchReplaceWithREOptionsescape escapeWithescapeWithOptionsprelude preludeEnvpreludeTestsFailing preludeTablepreludeSummarypreludeSources preludeSourcerereMSreMIreBSreBIreMultilineSensitivereMultilineInsensitivereBlockSensitivereBlockInsensitivere_"$fIsOption()RECompOptionExecOption*$fIsOptionREOptions_RECompOptionExecOption*$fIsOptionExecOptionRECompOptionExecOption*$fIsOptionCompOptionRECompOptionExecOption'$fIsOptionHashMapRECompOptionExecOption/$fIsOptionSimpleREOptionsRECompOptionExecOptionededMSedMIedBSedBIedMultilineSensitiveedMultilineInsensitiveedBlockSensitiveedBlockInsensitiveed_*=~?=~*=~/?=~/=~=~~$fIsRegexREByteString$fIsRegexRESeq $fIsRegexRE[]$fIsRegexRETextsedsed'lookupCaptureIDparseTemplateR'parse_template_capture scan_templatelift_phifixpoint$=~date_templatestime_templatestimezone_templatesdate_time_8601_templatesdate_time_templates parse_timeshort_month_hm severity_hmwords_by QQFailure _qqf_context_qqf_componentqq0$fExceptionQQFailurebaseGHC.Num*REToken _ret_prefix _ret_fixed _ret_grouping_ret_capturingColC_nameC_capsC_regex C_examplesC_anti_examplesC_failsC_parser C_commentTableRowTDFAPCRETestBenchMatcher present_colmacro_table_hdrmacro_table_rowmacro_attribute format_table field_widthwrap_rowwidths format_rowfieldselljust min_captures format_tokens delete_ketscan_retest' test_neg'test_diagnosticprelude_prefix decimal_macro url_macroprelude_macro_envprelude_macro_id natural_macronatural_hex_macro integer_macro string_macrostring_simple_macroid_macro id'_macro id__macro date_macrodate_slashes_macro time_macrotimezone_macrodatetime_macrodatetime_8601_macrodatetime_clf_macroshortmonth_macroaddress_ipv4_macrossyslog_severity_macroemail_simple_macro run_testsbracketedRegexSourcefixselect_edit_scriptspipe_edit_scriptsFormatTokenREOptions_fto_regex_type _fto_min_caps_fto_incl_caps analyseTokensdefFormatTokenREOptions parse_captureunsafeCompileSearchReplace_compileSearchReplace_compileSearchAndReplace_'regex-tdfa-1.2.2-JDBpHysOzmCJBjQ8NG5dyEText.Regex.TDFA.CommonRegexGHC.BaseString _re_options _re_source _re_cnames _re_regexre'unsafeCompileRegexSimpleunsafeCompileRegexunsafeCompileRegex_ compileRegex' compileRegex_def_comp_optiondef_exec_optioned'unsafe_compile_sr_simpleunsafe_compile_srcastsr_castfn_cast read_file write_file