Skip to content

Commit af3e5ed

Browse files
committed
Docs and tests
1 parent 7b025b6 commit af3e5ed

File tree

3 files changed

+33
-5
lines changed

3 files changed

+33
-5
lines changed

src/Init/Data/String/Search.lean

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,15 @@ Authors: Markus Himmel
66
module
77

88
prelude
9-
public import Init.Data.String.Defs
10-
public import Init.Data.Iterators.Combinators.FilterMap
11-
public import Init.Data.String.Pattern
12-
public import Init.Data.String.ToSlice
139
public import Init.Data.String.Slice
1410

1511
set_option doc.verso true
1612

1713
/-!
18-
# String API
14+
# String operations based on slice operations
15+
16+
This file contains {name}`String` operations that are implemented by passing to
17+
{name}`String.Slice`.
1918
-/
2019

2120
public section
@@ -35,10 +34,16 @@ variable [∀ s, Std.Iterators.IteratorLoop (σ s) Id Id]
3534
Constructs a new string obtained by replacing all occurrences of {name}`pattern` with
3635
{name}`replacement` in {name}`s`.
3736
37+
This function is generic over all currently supported patterns. The replacement may be a
38+
{name}`String` or a {name}`String.Slice`.
39+
3840
Examples:
41+
* {lean}`"red green blue".replace 'e' "" = "rd grn blu"`
42+
* {lean}`"red green blue".replace (fun c => c == 'u' || c == 'e') "" = "rd grn bl"`
3943
* {lean}`"red green blue".replace "e" "" = "rd grn blu"`
4044
* {lean}`"red green blue".replace "ee" "E" = "red grEn blue"`
4145
* {lean}`"red green blue".replace "e" "E" = "rEd grEEn bluE"`
46+
* {lean}`"aaaaa".replace "aa" "b" = "bba"`
4247
* {lean}`"abc".replace "" "k" = "kakbkck"`
4348
-/
4449
@[inline]

src/Init/Data/String/Slice.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,10 +360,16 @@ def dropPrefix [ForwardPattern ρ] (s : Slice) (pat : ρ) : Slice :=
360360
Constructs a new string obtained by replacing all occurrences of {name}`pattern` with
361361
{name}`replacement` in {name}`s`.
362362
363+
This function is generic over all currently supported patterns. The replacement may be a
364+
{name}`String` or a {name}`String.Slice`.
365+
363366
Examples:
367+
* {lean}`"red green blue".toSlice.replace 'e' "" = "rd grn blu"`
368+
* {lean}`"red green blue".toSlice.replace (fun c => c == 'u' || c == 'e') "" = "rd grn bl"`
364369
* {lean}`"red green blue".toSlice.replace "e" "" = "rd grn blu"`
365370
* {lean}`"red green blue".toSlice.replace "ee" "E" = "red grEn blue"`
366371
* {lean}`"red green blue".toSlice.replace "e" "E" = "rEd grEEn bluE"`
372+
* {lean}`"aaaaa".toSlice.replace "aa" "b" = "bba"`
367373
* {lean}`"abc".toSlice.replace "" "k" = "kakbkck"`
368374
-/
369375
def replace [ToForwardSearcher ρ σ] [ToSlice α] (s : Slice) (pattern : ρ) (replacement : α) :

tests/lean/run/string_replace.lean

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
def isVowel (c : Char) : Bool :=
2+
c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'
3+
4+
#guard "education".replace isVowel "☃!" = "☃!d☃!c☃!t☃!☃!n"
5+
#guard "red green blue".replace "e" "" = "rd grn blu"
6+
#guard "red green blue".replace 'e' "" = "rd grn blu"
7+
#guard "red green blue".replace "ee" "E" = "red grEn blue"
8+
#guard "red green blue".replace "e" "E" = "rEd grEEn bluE"
9+
#guard "abc".replace "" "k" = "kakbkck"
10+
#guard "".replace "" "z" = "zℕz"
11+
#guard "𝔸".replace "" "z" = "z𝔸z"
12+
#guard "".replace "" "z" = "zvẑz"
13+
#guard "aaaaa".replace "aa" "b" = "bba"
14+
#guard "v̂fℚo".replace ("ℕfℚoℤ".toSlice.drop 1 |>.dropEnd 1) ("☃🔭🌌".toSlice.dropEnd 1 |>.drop 1) = "v̂🔭"
15+
#guard ("abcde".toSlice.drop 1).replace (· == 'c') "C" = "bCde"
16+
#guard (("ac bc cc cd".toSlice.split " ").map (·.replace 'c' "C") |>.toList) = ["aC", "bC", "CC", "Cd"]
17+
#guard "red green blue".replace (fun c => c == 'u' || c == 'e') "" = "rd grn bl"

0 commit comments

Comments
 (0)