001 /*
002 * Copyright (c) 2005 Henri Sivonen
003 *
004 * Permission is hereby granted, free of charge, to any person obtaining a
005 * copy of this software and associated documentation files (the "Software"),
006 * to deal in the Software without restriction, including without limitation
007 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
008 * and/or sell copies of the Software, and to permit persons to whom the
009 * Software is furnished to do so, subject to the following conditions:
010 *
011 * The above copyright notice and this permission notice shall be included in
012 * all copies or substantial portions of the Software.
013 *
014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
017 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
019 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
020 * DEALINGS IN THE SOFTWARE.
021 */
022
023 package fi.iki.hsivonen.xml;
024
025 import org.xml.sax.Attributes;
026 import org.xml.sax.SAXException;
027
028 import gnu.xml.pipeline.EventConsumer;
029 import gnu.xml.pipeline.EventFilter;
030
031 public class LangToXmlLang extends EventFilter {
032
033 public LangToXmlLang() {
034 super();
035 setContentHandler(this);
036 }
037
038 public LangToXmlLang(EventConsumer next) {
039 super(next);
040 setContentHandler(this);
041 }
042
043 /**
044 * @see gnu.xml.pipeline.EventFilter#startElement(java.lang.String,
045 * java.lang.String, java.lang.String, org.xml.sax.Attributes)
046 */
047 public void startElement(String uri, String arg1, String arg2,
048 Attributes attrs) throws SAXException {
049 if ("http://www.w3.org/1999/xhtml".equals(uri) && attrs.getIndex("", "lang") != -1) {
050 AttributesImpl fixedAttrs = new AttributesImpl();
051 for (int i = 0; i < attrs.getLength(); i++) {
052 if ("".equals(attrs.getURI(i)) && "lang".equals(attrs.getLocalName(i))) {
053 if (attrs.getIndex("http://www.w3.org/XML/1998/namespace", "lang") == -1) {
054 fixedAttrs.addAttribute("http://www.w3.org/XML/1998/namespace", "lang", "xml:lang", "CDATA", attrs.getValue(i));
055 }
056 } else {
057 fixedAttrs.addAttribute(attrs.getURI(i), attrs.getLocalName(i), attrs.getQName(i), attrs.getType(i), attrs.getValue(i));
058 }
059 }
060 super.startElement(uri, arg1, arg2, fixedAttrs);
061 } else {
062 super.startElement(uri, arg1, arg2, attrs);
063 }
064 }
065
066 }