You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by pb...@apache.org on 2004/05/29 21:17:36 UTC

cvs commit: xml-fop/src/java/org/apache/fop/fo/properties XmlLang.java

pbwest      2004/05/29 12:17:36

  Modified:    src/java/org/apache/fop/fo/properties Tag:
                        FOP_0-20-0_Alt-Design XmlLang.java
  Log:
  Added refineParsing to implement xml:lang shorthand
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.1.2.4   +58 -1     xml-fop/src/java/org/apache/fop/fo/properties/Attic/XmlLang.java
  
  Index: XmlLang.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/properties/Attic/XmlLang.java,v
  retrieving revision 1.1.2.3
  retrieving revision 1.1.2.4
  diff -u -r1.1.2.3 -r1.1.2.4
  --- XmlLang.java	19 Feb 2004 03:11:41 -0000	1.1.2.3
  +++ XmlLang.java	29 May 2004 19:17:36 -0000	1.1.2.4
  @@ -20,6 +20,15 @@
    */
   package org.apache.fop.fo.properties;
   
  +import org.apache.fop.datatypes.CountryType;
  +import org.apache.fop.datatypes.LanguageType;
  +import org.apache.fop.datatypes.NCName;
  +import org.apache.fop.datatypes.PropertyValue;
  +import org.apache.fop.datatypes.PropertyValueList;
  +import org.apache.fop.fo.FONode;
  +import org.apache.fop.fo.PropNames;
  +import org.apache.fop.fo.expr.PropertyException;
  +
   
   public class XmlLang extends Property  {
       public static final int dataTypes = SHORTHAND;
  @@ -44,6 +53,54 @@
   
       public int getInherited() {
           return inherited;
  +    }
  +
  +    /**
  +     * The value returned from the first stage of parsing must be an NCNAME.
  +     * This can be any valid RFC 3066 language tag.  I.e. it must have at least
  +     * a primary-subtag, which may be followed by 0 or more subtags, separated
  +     * by hyphens.  The primary subtag must be an ISO 639-1 2-letter or
  +     * ISO 639-2 3-letter code.  The second subtag, if it exists, may be an
  +     * ISO 3166 2-letter country code.
  +     * <p>If the primary subtag exists, and is a valid ISO 639 code, it will
  +     * be used to generate a <code>LanguageType</code>
  +     * <code>PropertyValue</code> assigned to the <code>Language</code>
  +     * property.  If not, the property assignment is invalid.
  +     * <p>If the second subtag exists, and is a valid ISO 3166 code, it
  +     * will be used to generate a <code>CountryType</code>
  +     * <code>PropertyValue</code> assigned to the <code>Country</code>.
  +     * <p>All text beyond the last valid subtag detected, is ignored.
  +     */
  +    public PropertyValue refineParsing(
  +            int propindex, FONode foNode, PropertyValue value)
  +    throws PropertyException {
  +        if (value.getType() != PropertyValue.NCNAME) {
  +            throw new PropertyException("xml:lang requires NCNAME");
  +        }
  +        String text = ((NCName)value).getNCName();
  +        if (text.charAt(text.length() - 1) == '-') {
  +            throw new PropertyException("Invalid xml:lang code: " + text);
  +        }
  +        String[] bits = text.split("-");
  +        // bits[0] = lang; if bits[1], bits[1] = country
  +        // Is lang OK?
  +        LanguageType lang = new LanguageType(PropNames.LANGUAGE, bits[0]);
  +        // Is there a country code?
  +        CountryType country = null;
  +        if (bits.length > 1) {
  +            try {
  +                country = new CountryType(PropNames.COUNTRY, bits[1]);
  +            } catch (PropertyException e) {
  +                logger.fine("Invalid country code " + bits[1] + " in " + text);
  +            }
  +        }
  +        if (country == null) {
  +            return lang;
  +        }
  +        PropertyValueList list = new PropertyValueList(PropNames.XML_LANG);
  +        list.add(lang);
  +        list.add(country);
  +        return list;
       }
   
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org