Clingo
Loading...
Searching...
No Matches
string.hh
1
#pragma once
2
3
#include <cassert>
4
#include <string_view>
5
6
namespace
CppClingo::Util {
7
8
void
quote(std::string_view in,
auto
out) {
9
for
(
auto
c : in) {
10
switch
(c) {
11
case
'\n'
: {
12
*out++ =
'\\'
;
13
*out++ =
'n'
;
14
break
;
15
}
16
case
'\t'
: {
17
*out++ =
'\\'
;
18
*out++ =
't'
;
19
break
;
20
}
21
case
'\\'
: {
22
*out++ =
'\\'
;
23
*out++ =
'\\'
;
24
break
;
25
}
26
case
'"'
: {
27
*out++ =
'\\'
;
28
*out++ =
'"'
;
29
break
;
30
}
31
default
: {
32
*out++ = c;
33
break
;
34
}
35
}
36
}
37
}
38
void
unquote(std::string_view in,
auto
out,
bool
fstring =
false
) {
39
auto
escape =
'\0'
;
40
for
(
auto
c : in) {
41
if
(escape ==
'{'
|| escape ==
'}'
) {
42
if
(c == escape) {
43
*out++ = escape;
44
}
else
{
45
assert(
false
);
46
}
47
escape =
'\0'
;
48
}
else
if
(escape ==
'\\'
) {
49
switch
(c) {
50
case
'n'
: {
51
*out++ =
'\n'
;
52
break
;
53
}
54
case
't'
: {
55
*out++ =
'\t'
;
56
break
;
57
}
58
case
'\\'
: {
59
*out++ =
'\\'
;
60
break
;
61
}
62
case
'"'
: {
63
*out++ =
'"'
;
64
break
;
65
}
66
default
: {
67
assert(
false
);
68
break
;
69
}
70
}
71
escape =
'\0'
;
72
}
else
if
(c ==
'\\'
|| (fstring && (c ==
'{'
|| c ==
'}'
))) {
73
escape = c;
74
}
else
{
75
*out++ = c;
76
}
77
}
78
}
79
80
}
// namespace CppClingo::Util
clingo
util
string.hh
Generated by
1.9.8