@Override public String encodeAsResXmlItemValue() { return ResXmlEncoders.enumerateNonPositionalSubstitutionsIfRequired(ResXmlEncoders.encodeAsXmlValue(mRawValue)); }
public static boolean hasMultipleNonPositionalSubstitutions(String str) { Duo<List<Integer>, List<Integer>> tuple = findSubstitutions(str, 4); return ! tuple.m1.isEmpty() && tuple.m1.size() + tuple.m2.size() > 1; }
public boolean hasMultipleNonPositionalSubstitutions() throws AndrolibException { return ResXmlEncoders.hasMultipleNonPositionalSubstitutions(mRawValue); }
builder.append(ResXmlEncoders.escapeXmlChars(val)).append('"'); } else { loop = false;
continue; default: if (!isPrintableChar(c)) { out.append(String.format("\\u%04x", (int) c)); continue;
@Override public String encodeAsResXmlValue() { return ResXmlEncoders.encodeAsXmlValue(mRawValue); }
@Override public String encodeAsResXmlAttr() { return checkIfStringIsNumeric(ResXmlEncoders.encodeAsResXmlAttr(mRawValue)); }
@Override public void serializeToResValuesXml(XmlSerializer serializer, ResResource res) throws IOException, AndrolibException { serializer.startTag(null, "plurals"); serializer.attribute(null, "name", res.getResSpec().getName()); for (int i = 0; i < mItems.length; i++) { ResScalarValue item = mItems[i]; if (item == null) { continue; } serializer.startTag(null, "item"); serializer.attribute(null, "quantity", QUANTITY_MAP[i]); serializer.text(ResXmlEncoders.enumerateNonPositionalSubstitutionsIfRequired(item.encodeAsResXmlNonEscapedItemValue())); serializer.endTag(null, "item"); } serializer.endTag(null, "plurals"); }
return ResXmlEncoders.escapeXmlChars(raw); return ResXmlEncoders.escapeXmlChars(raw); html.append(ResXmlEncoders.escapeXmlChars(raw.substring(offset, end + 1))); offset = end + 1; html.append(ResXmlEncoders.escapeXmlChars(raw.substring(offset, start))); if (j >= 0 && unclosed.length >= j && unclosed[j]) { if (unclosed.length > (j + 1) && unclosed[j + 1] || unclosed.length == 1) {
if (!isPrintableChar(c)) {
@Override public String getAttributeValue(int index) { int offset = getAttributeOffset(index); int valueType = m_attributes[offset + ATTRIBUTE_IX_VALUE_TYPE]; int valueData = m_attributes[offset + ATTRIBUTE_IX_VALUE_DATA]; int valueRaw = m_attributes[offset + ATTRIBUTE_IX_VALUE_STRING]; if (mAttrDecoder != null) { try { return mAttrDecoder.decode( valueType, valueData, valueRaw == -1 ? null : ResXmlEncoders.escapeXmlChars(m_strings.getString(valueRaw)), getAttributeNameResource(index)); } catch (AndrolibException ex) { setFirstError(ex); LOGGER.log(Level.WARNING, String.format("Could not decode attr value, using undecoded value " + "instead: ns=%s, name=%s, value=0x%08x", getAttributePrefix(index), getAttributeName(index), valueData), ex); } } return TypedValue.coerceToString(valueType, valueData); }
@Override protected void serializeExtraXmlAttrs(XmlSerializer serializer, ResResource res) throws IOException { if (ResXmlEncoders.hasMultipleNonPositionalSubstitutions(mRawValue)) { serializer.attribute(null, "formatted", "false"); } }
public static String enumerateNonPositionalSubstitutionsIfRequired(String str) { Duo<List<Integer>, List<Integer>> tuple = findSubstitutions(str, 4); if (tuple.m1.isEmpty() || tuple.m1.size() + tuple.m2.size() < 2) { return str; } List<Integer> subs = tuple.m1; StringBuilder out = new StringBuilder(); int pos = 0; int count = 0; for (Integer sub : subs) { out.append(str.substring(pos, ++sub)).append(++count).append('$'); pos = sub; } out.append(str.substring(pos)); return out.toString(); }