01 /*
02 * Java Genetic Algorithm Library (jenetics-7.1.0).
03 * Copyright (c) 2007-2022 Franz Wilhelmstötter
04 *
05 * Licensed under the Apache License, Version 2.0 (the "License");
06 * you may not use this file except in compliance with the License.
07 * You may obtain a copy of the License at
08 *
09 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 * Author:
18 * Franz Wilhelmstötter (franz.wilhelmstoetter@gmail.com)
19 */
20 package io.jenetics.ext.internal.util;
21
22 /**
23 * @author <a href="mailto:franz.wilhelmstoetter@gmail.com">Franz Wilhelmstötter</a>
24 * @version 5.0
25 * @since 5.0
26 */
27 public final class Escaper {
28
29 private final char[] _protect;
30 private final char _escape;
31
32
33 public Escaper(final char escape, final char... protect) {
34 _protect = protect.clone();
35 _escape = escape;
36 }
37
38 public String escape(final CharSequence value) {
39 final StringBuilder result = new StringBuilder();
40 for (int i = 0; i < value.length(); ++i) {
41 final char c = value.charAt(i);
42 if (isProtectedChar(c)) {
43 result.append(_escape);
44 }
45 result.append(c);
46 }
47
48 return result.toString();
49 }
50
51 private boolean isProtectedChar(final char c) {
52 for (var c1 : _protect) {
53 if (c == c1) return true;
54 }
55 return false;
56 }
57
58
59 public String unescape(final CharSequence value) {
60 final StringBuilder result = new StringBuilder();
61
62 boolean escaping = false;
63 for (int i = 0; i < value.length(); ++i) {
64 final char c = value.charAt(i);
65
66 if (c == _escape &&
67 !escaping &&
68 i + 1 < value.length() &&
69 isProtectedChar(value.charAt(i + 1)))
70 {
71 escaping = true;
72 continue;
73 }
74
75 if (escaping) {
76 escaping = false;
77 }
78 result.append(c);
79 }
80
81 return result.toString();
82 }
83
84 }
|