[Laszlo-dev] CSS and encoding - LPP-8045
P T Withington
ptw at pobox.com
Thu May 7 06:49:10 PDT 2009
stylesheets are what we call a 'special form', meaning they have their
own compiler. If you want to extend how a stylesheet works, you will
have to edit that compiler:
http://svn.openlaszlo.org/openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/compiler/StyleSheetCompiler.java
Ideally, we want our stylesheet compiler to obey the w3c standard for
determining character encoding:
http://www.w3.org/TR/CSS2/syndata.html#charset
What I think this means is that StyleSheetCompiler needs to open the
file in a mode where it can peek at the first few bytes of the file
and determine the encoding according to the w3c spec, then reopen it
with the correct encoding.
**At the very least: 1) we should default to reading the style sheet
as UTF-8, not whatever the local machine's default encoding is, and 2)
we should use the existing file utility to skip over any byte-order-
mark before we start parsing.
I would not be surprised if there is already a jar around that does
this for you. We're using the batik libraries to parse the CSS file,
so maybe there is another library that does encoding detection?
This code was originally written by Pablo and Ben (cc-ed), maybe they
want to help out as OL community contributors?
On 2009-05-07, at 05:01EDT, Raju Bitter wrote:
> Hi all,
>
> I'm working on LPP-8045 right now, encoding support for external CSS
> stylesheets.
> http://jira.openlaszlo.org/jira/browse/LPP-8045
>
> Here's what I want to do:
>
> add an @encoding attribute to the stylesheet tag, found the classes
> http://svn.openlaszlo.org/openlaszlo/trunk/WEB-INF/lps/lfc/services/LzStyleSheet.lzs
> http://svn.openlaszlo.org/openlaszlo/trunk/WEB-INF/lps/lfc/services/LzCSSStyleSheet.lzs
>
> The idea is to add an encoding attribute to LzStyleSheet. Based on
> that the file loader in
> org.openlaszlo.compiler.StyleSheetCompiler.java would take the
> attribute value on pass it on to the CSSHandler:
>
> // Actually parse and compile the stylesheet! W00t!
> CSSHandler fileHandler =
> CSSHandler.parse( resolvedFile, encoding);
>
> In CSSHandler.parse() the encoding would be passed on to the
> handler.getInputSource() method
>
> public static CSSHandler parse(File file, String encoding)
> throws CSSException {
> try {
> mLogger.info("creating CSSHandler");
> ....
> parser.parseStyleSheet(handler.getInputSource(encoding));
>
> And then modify getInputSource to:
>
> /** @return InputSource object pointing to the CSS file. */
> InputSource getInputSource(encoding) throws FileNotFoundException {
> mLogger.info("Trying to open CSS file " + mFile + " with
> encoding " + encoding);
> InputSource is = null;
> try {
> is = new InputSource(new InputStreamReader(new
> FileInputStream(mFile), encoding));
> } catch (UnsupportedEncodingException e) {
> mLogger.error("Unsupported encoding in file: " + mFile + ",
> " + e.getMessage());
> }
> return is;
> }
>
> I need help!!!
> I added a new attribute to LzStyleSheet.lzs, but it seems like the
> LZX compiler doesn't complain if there are unkown attributes on a
> stylesheet tag. Is that a bug? And how can I check if the attribute
> value will be set inside the debugger? I can't access the stylesheet
> object through an @id or @name in the debug console.
>
> Thanks,
> Raju
More information about the Laszlo-dev
mailing list