(StringBuilder out)
| 104 | |
| 105 | // appendTo() appends the Perl syntax for |this| regular expression to |out|. |
| 106 | private void appendTo(StringBuilder out) { |
| 107 | switch (op) { |
| 108 | case NO_MATCH: |
| 109 | out.append("[^\\x00-\\x{10FFFF}]"); |
| 110 | break; |
| 111 | case EMPTY_MATCH: |
| 112 | out.append("(?:)"); |
| 113 | break; |
| 114 | case STAR: |
| 115 | case PLUS: |
| 116 | case QUEST: |
| 117 | case REPEAT: |
| 118 | { |
| 119 | Regexp sub = subs[0]; |
| 120 | if (sub.op.ordinal() > Op.CAPTURE.ordinal() |
| 121 | || (sub.op == Op.LITERAL && sub.runes.length > 1)) { |
| 122 | out.append("(?:"); |
| 123 | sub.appendTo(out); |
| 124 | out.append(')'); |
| 125 | } else { |
| 126 | sub.appendTo(out); |
| 127 | } |
| 128 | switch (op) { |
| 129 | case STAR: |
| 130 | out.append('*'); |
| 131 | break; |
| 132 | case PLUS: |
| 133 | out.append('+'); |
| 134 | break; |
| 135 | case QUEST: |
| 136 | out.append('?'); |
| 137 | break; |
| 138 | case REPEAT: |
| 139 | out.append('{').append(min); |
| 140 | if (min != max) { |
| 141 | out.append(','); |
| 142 | if (max >= 0) { |
| 143 | out.append(max); |
| 144 | } |
| 145 | } |
| 146 | out.append('}'); |
| 147 | break; |
| 148 | } |
| 149 | if ((flags & RE2.NON_GREEDY) != 0) { |
| 150 | out.append('?'); |
| 151 | } |
| 152 | break; |
| 153 | } |
| 154 | case CONCAT: |
| 155 | for (Regexp sub : subs) { |
| 156 | if (sub.op == Op.ALTERNATE) { |
| 157 | out.append("(?:"); |
| 158 | sub.appendTo(out); |
| 159 | out.append(')'); |
| 160 | } else { |
| 161 | sub.appendTo(out); |
| 162 | } |
| 163 | } |
no test coverage detected