With reference to Why does HTML think “chucknorris” is a color?
Is the following analysis correct?
First, all non-hex characters are replaced with '
0
'.testing ->
0e00000
Then if it is not divisible by 3, append '0's to it.
0e00000
->0e0000000
Then split into 3 equal groups.
0e0000000
->0e0 000 000
Then get the first 2 characters of each group and concatenate them together to get your colour code.
0e0 000 000
->0e0000
#0e0000
is close to black.
But if you use this site and input font colour as "testing", it is displayed as a shade of red: http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_font_color
Is there something I'm missing?
APPENDED AFTER ANSWERS:
I'm writing an Android app which needs me to parse font color = "" to colour codes. I'm putting the algorithm I cobbled together here for future reference:
public String getColourCode(String nonStandardColour) {
String rtnVal = "#000000";
// first replace all non-hex characters
String converted = nonStandardColour.toLowerCase().replaceAll("[g-z]", "0");
System.out.println(nonStandardColour + " is now " + converted);
System.out.println("Length: " + converted.length());
if (converted.length() <= 3) {
// append "0"s if length != 3
while (converted.length() !=3) {
converted = converted + "0";
}
System.out.println("Converted colour is now " + converted);
// Length is 3, so split into 3 characters and prepend 0 to each
String[] colourArray = new String[3];
colourArray[0] = "0" + convertedOpNickColour.substring(0, 1);
colourArray[1] = "0" + convertedOpNickColour.substring(1, 2);
colourArray[2] = "0" + convertedOpNickColour.substring(2, 3);
rtnVal = "#" + Integer.toHexString(Color.rgb(
Integer.parseInt(colourArray[0], 16),
Integer.parseInt(colourArray[1], 16),
Integer.parseInt(colourArray[2], 16)));
}
else { // converted.length() is >= 4
System.out.println("Appending 0s until divisible by 3");
while(converted.length() % 3 != 0) {
converted = converted + "0";
}
System.out.println("Converted colour is now " + converted);
// divide into 3 equal groups
List<String> colourArray2 = new ArrayList<String>();
int index = 0;
while (index<converted.length()) {
colourArray2.add(converted.substring(
index, Math.min(index(converted.length()/3),converted.length())));
index+=(converted.length()/3);
}
System.out.printf("The 3 groups are:");
System.out.printf(colourArray2.get(0));
System.out.printf(colourArray2.get(1));
System.out.printf(colourArray2.get(2));
// if the groups are e.g. 0f0 0f0 0f0
if (rgbColour.get(0).length() >=3 ) {
rtnVal = Integer.toHexString(Color.rgb(
Integer.parseInt(colourArray2.get(0).substring(0,2), 16),
Integer.parseInt(colourArray2.get(1).substring(0,2), 16),
Integer.parseInt(colourArray2.get(2).substring(0,2), 16)));
// remove alpha
System.out.println("rtnVal is #" + rtnVal.substring(2));
return "#" + rtnVal.substring(2);
}
// groups are e.g. 0f 0f 0f
else {
rtnVal = Integer.toHexString(Color.rgb(
Integer.parseInt(colourArray2.get(0), 16),
Integer.parseInt(colourArray2.get(1), 16),
Integer.parseInt(colourArray2.get(2), 16)));
System.out.println("rtnVal is #" + rtnVal.substring(2));
return "#" + rtnVal.substring(2);
}
}
return rtnVal;
}