@@ -63,16 +63,19 @@ func (w *foldedWord) String() string {
6363
6464// Options are options for the idx data.
6565type Options struct {
66- // Folder is the transformer that performs folding on index entries.
67- Folder transform.Transformer
66+ // Folder returns a [transform.Transformer] that performs folding (e.g.
67+ // case folding, whitespace folding, etc.) on index entries.
68+ Folder func () transform.Transformer
6869
6970 // ScannerOptions are the options to use when reading the .idx file.
7071 ScannerOptions * ScannerOptions
7172}
7273
7374// DefaultOptions is the default options for an Idx.
7475var DefaultOptions = & Options {
75- Folder : transform .Nop ,
76+ Folder : func () transform.Transformer {
77+ return transform .Nop
78+ },
7679 ScannerOptions : & ScannerOptions {
7780 OffsetBits : 32 ,
7881 },
@@ -87,7 +90,7 @@ type Idx struct {
8790 index * index.Index [* foldedWord ]
8891
8992 // foldTransformer performs folding on text.
90- foldTransformer transform.Transformer
93+ foldTransformer func () transform.Transformer
9194}
9295
9396// New returns a new in-memory index.
@@ -117,7 +120,7 @@ func NewWithSyn(idxReader, synReader io.ReadCloser, options *Options) (*Idx, err
117120 var words []* foldedWord
118121 for s .Scan () {
119122 word := s .Word ()
120- folded , _ , err := transform .String (idx .foldTransformer , word .Word )
123+ folded , _ , err := transform .String (idx .foldTransformer () , word .Word )
121124 if err != nil {
122125 return nil , fmt .Errorf ("folding word %q: %w" , word .Word , err )
123126 }
@@ -139,7 +142,7 @@ func NewWithSyn(idxReader, synReader io.ReadCloser, options *Options) (*Idx, err
139142 }
140143 for synScanner .Scan () {
141144 word := synScanner .Word ()
142- folded , _ , err := transform .String (idx .foldTransformer , word .Word )
145+ folded , _ , err := transform .String (idx .foldTransformer () , word .Word )
143146 if err != nil {
144147 return nil , fmt .Errorf ("folding word %q: %w" , word .Word , err )
145148 }
@@ -304,7 +307,7 @@ func (idx *Idx) foldGlob(q string) (string, error) {
304307 if syntax .Special (c ) {
305308 if ! isSpecial {
306309 if b .Len () > 0 {
307- w , _ , err := transform .String (idx .foldTransformer , b .String ())
310+ w , _ , err := transform .String (idx .foldTransformer () , b .String ())
308311 if err != nil {
309312 return "" , fmt .Errorf ("folding query %q: %w" , q , err )
310313 }
@@ -330,7 +333,7 @@ func (idx *Idx) foldGlob(q string) (string, error) {
330333 w := b .String ()
331334 if ! isSpecial {
332335 // fold the word
333- fw , _ , err := transform .String (idx .foldTransformer , w )
336+ fw , _ , err := transform .String (idx .foldTransformer () , w )
334337 if err != nil {
335338 return "" , fmt .Errorf ("folding query %q: %w" , q , err )
336339 }
0 commit comments