package github.madmarty.madsonic.util.SubtitleConverter; public class Style { private static int styleCounter; /** * Constructor that receives a String to use a its identifier * * @param styleName = identifier of this style */ protected Style(String styleName) { this.iD = styleName; } /** * Constructor that receives a String with the new styleName and a style to copy * * @param styleName * @param style */ protected Style(String styleName, Style style) { this.iD = styleName; this.font = style.font; this.fontSize = style.fontSize; this.color = style.color; this.backgroundColor = style.backgroundColor; this.textAlign = style.textAlign; this.italic = style.italic; this.underline = style.underline; this.bold = style.bold; } /* ATTRIBUTES */ protected String iD; protected String font; protected String fontSize; /**colors are stored as 8 chars long RGBA*/ protected String color; protected String backgroundColor; protected String textAlign = ""; protected boolean italic; protected boolean bold; protected boolean underline; /* METHODS */ /** * To get the string containing the hex value to put into color or background color * * @param format supported: "name", "&HBBGGRR", "&HAABBGGRR", "decimalCodedBBGGRR", "decimalCodedAABBGGRR" * @param value RRGGBBAA string * @return */ protected static String getRGBValue(String format, String value){ String color = null; if (format.equalsIgnoreCase("name")){ //standard color format from W3C if (value.equals("transparent")) color = "00000000"; else if (value.equals("black")) color = "000000ff"; else if (value.equals("silver")) color = "c0c0c0ff"; else if (value.equals("gray")) color = "808080ff"; else if (value.equals("white")) color = "ffffffff"; else if (value.equals("maroon")) color = "800000ff"; else if (value.equals("red")) color = "ff0000ff"; else if (value.equals("purple")) color = "800080ff"; else if (value.equals("fuchsia")) color = "ff00ffff"; else if (value.equals("magenta")) color = "ff00ffff "; else if (value.equals("green")) color = "008000ff"; else if (value.equals("lime")) color = "00ff00ff"; else if (value.equals("olive")) color = "808000ff"; else if (value.equals("yellow")) color = "ffff00ff"; else if (value.equals("navy")) color = "000080ff"; else if (value.equals("blue")) color = "0000ffff"; else if (value.equals("teal")) color = "008080ff"; else if (value.equals("aqua")) color = "00ffffff"; else if (value.equals("cyan")) color = "00ffffff "; } else if (format.equalsIgnoreCase("&HBBGGRR")){ //hex format from SSA StringBuilder sb = new StringBuilder(); sb.append(value.substring(6)); sb.append(value.substring(4,5)); sb.append(value.substring(2,3)); sb.append("ff"); color = sb.toString(); } else if (format.equalsIgnoreCase("&HAABBGGRR")){ //hex format from ASS StringBuilder sb = new StringBuilder(); sb.append(value.substring(8)); sb.append(value.substring(6,7)); sb.append(value.substring(4,5)); sb.append(value.substring(2,3)); color = sb.toString(); } else if (format.equalsIgnoreCase("decimalCodedBBGGRR")){ //normal format from SSA color = Integer.toHexString(Integer.parseInt(value)); //any missing 0s are filled in while(color.length()<6)color="0"+color; //order is reversed color = color.substring(4)+color.substring(2,4)+color.substring(0,2)+"ff"; } else if (format.equalsIgnoreCase("decimalCodedAABBGGRR")){ //normal format from ASS color = Long.toHexString(Long.parseLong(value)); //any missing 0s are filled in while(color.length()<8)color="0"+color; //order is reversed color = color.substring(6)+color.substring(4,6)+color.substring(2,4)+color.substring(0,2); } return color; } protected static String defaultID() { return "default"+styleCounter++; } }