package com.reandroid.lib.arsc.item; import com.reandroid.lib.arsc.base.Block; import com.reandroid.lib.arsc.io.BlockReader; import com.reandroid.lib.arsc.model.StyleSpanInfo; import com.reandroid.lib.arsc.pool.BaseStringPool; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class StyleItem extends IntegerArray{ private List mStyleList; public StyleItem() { super(); mStyleList=createStyleList(); } private void setEndValue(int negOne){ super.put(size()-1, negOne); } final Integer getEndValue(){ return super.get(size()-1); } final Integer getStringRef(int index){ int i=index*STYLE_PIECE_COUNT+STRING_REF; return super.get(i); } final void setStringRef(int index, int val){ int i=index*STYLE_PIECE_COUNT+STRING_REF; super.put(i, val); } final Integer getFirstChar(int index){ int i=index*STYLE_PIECE_COUNT+CHAR_FIRST; return super.get(i); } final void setFirstChar(int index, int val){ int i=index*STYLE_PIECE_COUNT+CHAR_FIRST; super.put(i, val); } final Integer getLastChar(int index){ int i=index*STYLE_PIECE_COUNT+CHAR_LAST; return super.get(i); } final void setLastChar(int index, int val){ int i=index*STYLE_PIECE_COUNT+CHAR_LAST; super.put(i, val); } final void setStylePiece(int index, int refString, int firstChar, int lastChar){ int i=index*STYLE_PIECE_COUNT; super.put(i+STRING_REF, refString); super.put(i+CHAR_FIRST, firstChar); super.put(i+CHAR_LAST, lastChar); } final int[] getStylePiece(int index){ if(index<0||index>= getStylePieceCount()){ return null; } int[] result=new int[STYLE_PIECE_COUNT]; int i=index*STYLE_PIECE_COUNT; result[STRING_REF]=super.get(i); result[CHAR_FIRST]=super.get(i+CHAR_FIRST); result[CHAR_LAST]=super.get(i+CHAR_LAST); return result; } final void setStylePiece(int index, int[] three){ if(three==null || three.length copy=new ArrayList<>(mStyleList); Integer end= getEndValue(); if(end==null){ end=END_VALUE; } super.setSize(max); max=count; int copyMax=copy.size(); if(copyMax>max){ copyMax=max; } for(int i=0;i getStyleList(){ return mStyleList; } private List createStyleList(){ List results=new ArrayList<>(); int max=getStylePieceCount(); for(int i=0;i getSpanInfo(){ BaseStringPool stringPool= getStringPool(); if(stringPool==null){ return null; } List allPiece=getStyleList(); List results=new ArrayList<>(); for(int[] piece:allPiece){ StringItem stringItem=stringPool.get(piece[STRING_REF]); if(stringItem==null){ return null; } StyleSpanInfo info=new StyleSpanInfo(stringItem.get(), piece[CHAR_FIRST], piece[CHAR_LAST]); results.add(info); } if(results.size()==0){ return null; } return results; } private BaseStringPool getStringPool(){ Block parent=getParent(); while (parent!=null){ if(parent instanceof BaseStringPool){ return (BaseStringPool)parent; } parent=parent.getParent(); } return null; } public String applyHtml(String str){ if(str==null){ return null; } List allInfo=getSpanInfo(); if(allInfo==null){ return str; } StringBuilder builder=new StringBuilder(); char[] allChars=str.toCharArray(); int max=allChars.length; for(int i=0;i