Sorry, I'm still not sure this is going to work. It seems to me that different lines will have to be offset by different amounts, and it's not clear to me how that's going to happen without the alignment logic in gdip_format_string.
I'm also wondering if a change to the alignment logic in gdip_format_string is going to break MeasureCharacterRanges.