1717package brut .androlib .res .decoder .data ;
1818
1919import brut .androlib .res .xml .ResXmlEncoders ;
20- import com .google .common .base .Splitter ;
2120import com .google .common .collect .Iterators ;
2221import com .google .common .collect .PeekingIterator ;
2322
23+ import java .util .LinkedHashMap ;
2424import java .util .List ;
2525import java .util .Map ;
2626import java .util .logging .Logger ;
27+ import java .util .regex .Pattern ;
2728
2829public class StyledString implements CharSequence {
2930 private static final Logger LOGGER = Logger .getLogger (StyledString .class .getName ());
@@ -132,8 +133,8 @@ private void decodeIterate(PeekingIterator<Span> it) {
132133 }
133134
134135 public static class Span {
135- private static final Splitter . MapSplitter ATTRIBUTES_SPLITTER =
136- Splitter . on ( ';' ). omitEmptyStrings (). withKeyValueSeparator ( Splitter . on ( '=' ). limit ( 2 ) );
136+ private static final Pattern ATTR_SPLIT_PATTERN = Pattern . compile (
137+ ";(?=[ \\ p{L}_][ \\ p{L} \\ p{N}_.-]*=)" );
137138
138139 private final String mTag ;
139140 private final int mFirstChar ;
@@ -159,14 +160,24 @@ public int getLastChar() {
159160
160161 public String getName () {
161162 int separatorIdx = mTag .indexOf (';' );
162- return separatorIdx == -1 ? mTag : mTag .substring (0 , separatorIdx );
163+ return separatorIdx != -1 ? mTag .substring (0 , separatorIdx ) : mTag ;
163164 }
164165
165166 public Map <String , String > getAttributes () {
166167 int separatorIdx = mTag .indexOf (';' );
167- return separatorIdx != -1 ? ATTRIBUTES_SPLITTER .split (
168- mTag .substring (separatorIdx + 1 , mTag .endsWith (";" ) ? mTag .length () - 1 : mTag .length ())
169- ) : null ;
168+ if (separatorIdx == -1 ) {
169+ return null ;
170+ }
171+
172+ String [] attrs = ATTR_SPLIT_PATTERN .split (mTag .substring (separatorIdx + 1 ));
173+ Map <String , String > map = new LinkedHashMap <>();
174+
175+ for (String attr : attrs ) {
176+ int eqIdx = attr .indexOf ('=' );
177+ map .put (attr .substring (0 , eqIdx ), attr .substring (eqIdx + 1 ));
178+ }
179+
180+ return map ;
170181 }
171182 }
172183}
0 commit comments