Escape backslashes (or custom escape character).
type(string) :: astring
logical :: test_passed(2)
astring = '^\s \d+\s*'
test_passed(1) = astring%escape(to_escape='\')//''=='^\\s \\d+\\s*'
test_passed(2) = astring%escape(to_escape='\', esc='|')//''=='^|\s |\d+|\s*'
print '(L1)', all(test_passed)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(string), | intent(in) | :: | self |
The string. |
||
character(kind=CK, len=1), | intent(in) | :: | to_escape |
Character to be escaped. |
||
character(kind=CK, len=*), | intent(in), | optional | :: | esc |
Character used to escape. |
Escaped string.
elemental function escape(self, to_escape, esc) result(escaped)
!< Escape backslashes (or custom escape character).
!<
!<```fortran
!< type(string) :: astring
!< logical :: test_passed(2)
!< astring = '^\s \d+\s*'
!< test_passed(1) = astring%escape(to_escape='\')//''=='^\\s \\d+\\s*'
!< test_passed(2) = astring%escape(to_escape='\', esc='|')//''=='^|\s |\d+|\s*'
!< print '(L1)', all(test_passed)
!<```
!=> T <<<
class(string), intent(in) :: self !< The string.
character(kind=CK, len=1), intent(in) :: to_escape !< Character to be escaped.
character(kind=CK, len=*), intent(in), optional :: esc !< Character used to escape.
type(string) :: escaped !< Escaped string.
character(kind=CK, len=:), allocatable :: esc_ !< Character to escape, local variable.
integer :: c !< Character counter.
if (allocated(self%raw)) then
esc_ = BACKSLASH ; if (present(esc)) esc_ = esc
escaped%raw = ''
do c=1, len(self%raw)
if (self%raw(c:c)==to_escape) then
escaped%raw = escaped%raw//esc_//to_escape
else
escaped%raw = escaped%raw//self%raw(c:c)
endif
enddo
endif
endfunction escape