annotate vendor/github.com/dlclark/regexp2/syntax/replacerdata.go @ 66:787b5ee0289d draft

Use vendored modules Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Sun, 23 Jul 2023 13:18:53 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 package syntax
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 import (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4 "bytes"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 "errors"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 type ReplacerData struct {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 Rep string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 Strings []string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 Rules []int
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 const (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15 replaceSpecials = 4
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16 replaceLeftPortion = -1
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 replaceRightPortion = -2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 replaceLastGroup = -3
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 replaceWholeString = -4
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 //ErrReplacementError is a general error during parsing the replacement text
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 var ErrReplacementError = errors.New("Replacement pattern error.")
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 // NewReplacerData will populate a reusable replacer data struct based on the given replacement string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26 // and the capture group data from a regexp
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 func NewReplacerData(rep string, caps map[int]int, capsize int, capnames map[string]int, op RegexOptions) (*ReplacerData, error) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 p := parser{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29 options: op,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 caps: caps,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31 capsize: capsize,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 capnames: capnames,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 p.setPattern(rep)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 concat, err := p.scanReplacement()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36 if err != nil {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 return nil, err
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 if concat.t != ntConcatenate {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41 panic(ErrReplacementError)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44 sb := &bytes.Buffer{}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 var (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46 strings []string
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47 rules []int
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50 for _, child := range concat.children {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 switch child.t {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52 case ntMulti:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53 child.writeStrToBuf(sb)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 case ntOne:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56 sb.WriteRune(child.ch)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58 case ntRef:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 if sb.Len() > 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60 rules = append(rules, len(strings))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 strings = append(strings, sb.String())
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62 sb.Reset()
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64 slot := child.m
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66 if len(caps) > 0 && slot >= 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 slot = caps[slot]
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70 rules = append(rules, -replaceSpecials-1-slot)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72 default:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
73 panic(ErrReplacementError)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
74 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
75 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
76
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
77 if sb.Len() > 0 {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
78 rules = append(rules, len(strings))
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
79 strings = append(strings, sb.String())
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
80 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
81
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
82 return &ReplacerData{
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
83 Rep: rep,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
84 Strings: strings,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
85 Rules: rules,
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
86 }, nil
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
87 }