@@ -31,50 +31,58 @@ public GenericTokenParser(String openToken, String closeToken, TokenHandler hand
31
31
}
32
32
33
33
public String parse (String text ) {
34
+ if (text == null || text .isEmpty ()) {
35
+ return "" ;
36
+ }
37
+ char [] src = text .toCharArray ();
38
+ int offset = 0 ;
39
+ // search open token
40
+ int start = text .indexOf (openToken , offset );
41
+ if (start == -1 ) {
42
+ return text ;
43
+ }
34
44
final StringBuilder builder = new StringBuilder ();
35
- final StringBuilder expression = new StringBuilder ();
36
- if (text != null && text .length () > 0 ) {
37
- char [] src = text .toCharArray ();
38
- int offset = 0 ;
39
- // search open token
40
- int start = text .indexOf (openToken , offset );
41
- while (start > -1 ) {
42
- if (start > 0 && src [start - 1 ] == '\\' ) {
43
- // this open token is escaped. remove the backslash and continue.
44
- builder .append (src , offset , start - offset - 1 ).append (openToken );
45
- offset = start + openToken .length ();
45
+ StringBuilder expression = null ;
46
+ while (start > -1 ) {
47
+ if (start > 0 && src [start - 1 ] == '\\' ) {
48
+ // this open token is escaped. remove the backslash and continue.
49
+ builder .append (src , offset , start - offset - 1 ).append (openToken );
50
+ offset = start + openToken .length ();
51
+ } else {
52
+ // found open token. let's search close token.
53
+ if (expression == null ) {
54
+ expression = new StringBuilder ();
46
55
} else {
47
- // found open token. let's search close token.
48
56
expression .setLength (0 );
49
- builder .append (src , offset , start - offset );
50
- offset = start + openToken .length ();
51
- int end = text .indexOf (closeToken , offset );
52
- while (end > -1 ) {
53
- if (end > offset && src [end - 1 ] == '\\' ) {
54
- // this close token is escaped. remove the backslash and continue.
55
- expression .append (src , offset , end - offset - 1 ).append (closeToken );
56
- offset = end + closeToken .length ();
57
- end = text .indexOf (closeToken , offset );
58
- } else {
59
- expression .append (src , offset , end - offset );
60
- offset = end + closeToken .length ();
61
- break ;
62
- }
63
- }
64
- if (end == -1 ) {
65
- // close token was not found.
66
- builder .append (src , start , src .length - start );
67
- offset = src .length ;
57
+ }
58
+ builder .append (src , offset , start - offset );
59
+ offset = start + openToken .length ();
60
+ int end = text .indexOf (closeToken , offset );
61
+ while (end > -1 ) {
62
+ if (end > offset && src [end - 1 ] == '\\' ) {
63
+ // this close token is escaped. remove the backslash and continue.
64
+ expression .append (src , offset , end - offset - 1 ).append (closeToken );
65
+ offset = end + closeToken .length ();
66
+ end = text .indexOf (closeToken , offset );
68
67
} else {
69
- builder .append (handler . handleToken ( expression . toString ()) );
68
+ expression .append (src , offset , end - offset );
70
69
offset = end + closeToken .length ();
70
+ break ;
71
71
}
72
72
}
73
- start = text .indexOf (openToken , offset );
74
- }
75
- if (offset < src .length ) {
76
- builder .append (src , offset , src .length - offset );
73
+ if (end == -1 ) {
74
+ // close token was not found.
75
+ builder .append (src , start , src .length - start );
76
+ offset = src .length ;
77
+ } else {
78
+ builder .append (handler .handleToken (expression .toString ()));
79
+ offset = end + closeToken .length ();
80
+ }
77
81
}
82
+ start = text .indexOf (openToken , offset );
83
+ }
84
+ if (offset < src .length ) {
85
+ builder .append (src , offset , src .length - offset );
78
86
}
79
87
return builder .toString ();
80
88
}
0 commit comments