Changing the HTML to use lowercase values appears to work.
I would like to point out that, according to the specifications, this shouldn't be case-sensitive.
CSS 2.1 says: "The case-sensitivity of attribute names and values in selectors depends on the document language."
HTML 4.01 says: "[CI]: The value is case-insensitive (i.e., user agents interpret "a" and "A" as the same)."
Also, it appears that ALIGN and VALIGN aren't inherited from TR elements. While this is correct in CSS (vertical-align and text-align don't apply to table-row elements),
in HTML these attributes do inherit. It seems like this can be fixed with some (or actually, a lot of) additional style rules for HTML, e.g:
tr[valign="top"] > td:not([valign]) {
vertical-align:top;
}
And finally, ALIGN translates to text-align, which doesn't cover 100% of what ALIGN does in HTML. The following shows right-aligned in HTML, but left-aligned in Prince:
<table width="100%" border=1><tr><td align=right>
<table><tr><td>x</table>
</table>
I don't know what the best "fix" for that would be. I'd be tempted into saying:
td[align=right] > * {
margin-left: auto;
}
td[align=right] > * > * {
margin-left: 0;
}
but I'm sure that still has side-effects I'm not thinking of.