001    /*
002     * Copyright 2002 - 2007 JEuclid, http://jeuclid.sf.net
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    /* $Id: Ms.java,v 923658a2b249 2009/09/11 09:57:31 max $ */
018    
019    package net.sourceforge.jeuclid.elements.presentation.token;
020    
021    import java.text.AttributedCharacterIterator;
022    
023    import net.sourceforge.jeuclid.LayoutContext;
024    import net.sourceforge.jeuclid.elements.support.GraphicsSupport;
025    import net.sourceforge.jeuclid.elements.support.attributes.MathVariant;
026    import net.sourceforge.jeuclid.elements.support.text.MultiAttributedCharacterIterator;
027    import net.sourceforge.jeuclid.elements.support.text.StringUtil;
028    import net.sourceforge.jeuclid.elements.support.text.TextContentModifier;
029    
030    import org.apache.batik.dom.AbstractDocument;
031    import org.w3c.dom.Node;
032    import org.w3c.dom.mathml.MathMLStringLitElement;
033    
034    /**
035     * This class represents string in a equation.
036     * 
037     * @version $Revision: 923658a2b249 $
038     */
039    public final class Ms extends AbstractTokenWithTextLayout implements
040            MathMLStringLitElement, TextContentModifier {
041    
042        /**
043         * The XML element from this class.
044         */
045        public static final String ELEMENT = "ms";
046    
047        /** Attribute for lquote. */
048        public static final String ATTR_LQUOTE = "lquote";
049    
050        /** Attribute for rquote. */
051        public static final String ATTR_RQUOTE = "rquote";
052    
053        private static final String VALUE_DOUBLEQUOTE = "\"";
054    
055        private static final long serialVersionUID = 1L;
056    
057        /**
058         * Default constructor. Sets MathML Namespace.
059         * 
060         * @param qname
061         *            Qualified name.
062         * @param odoc
063         *            Owner Document.
064         */
065        public Ms(final String qname, final AbstractDocument odoc) {
066            super(qname, odoc);
067            this.setDefaultMathAttribute(Ms.ATTR_LQUOTE, Ms.VALUE_DOUBLEQUOTE);
068            this.setDefaultMathAttribute(Ms.ATTR_RQUOTE, Ms.VALUE_DOUBLEQUOTE);
069        }
070    
071        /** {@inheritDoc} */
072        @Override
073        protected Node newNode() {
074            return new Ms(this.nodeName, this.ownerDocument);
075        }
076    
077        /**
078         * @param lquote
079         *            Left quote
080         */
081        public void setLquote(final String lquote) {
082            this.setAttribute(Ms.ATTR_LQUOTE, lquote);
083        }
084    
085        /**
086         * @return Left quote
087         */
088        public String getLquote() {
089            return this.getMathAttribute(Ms.ATTR_LQUOTE);
090        }
091    
092        /**
093         * @param rquote
094         *            Right quota
095         */
096        public void setRquote(final String rquote) {
097            this.setAttribute(Ms.ATTR_RQUOTE, rquote);
098        }
099    
100        /**
101         * @return Right quote
102         */
103        public String getRquote() {
104            return this.getMathAttribute(Ms.ATTR_RQUOTE);
105        }
106    
107        /** {@inheritDoc} */
108        public AttributedCharacterIterator modifyTextContent(
109                final AttributedCharacterIterator aci,
110                final LayoutContext layoutContext) {
111    
112            final float fontSizeInPoint = GraphicsSupport
113                    .getFontsizeInPoint(layoutContext);
114            final MathVariant variant = this.getMathvariantAsVariant();
115    
116            final MultiAttributedCharacterIterator maci = new MultiAttributedCharacterIterator();
117            maci.appendAttributedCharacterIterator(StringUtil
118                    .convertStringtoAttributedString(this.getLquote(), variant,
119                            fontSizeInPoint, layoutContext).getIterator());
120            maci.appendAttributedCharacterIterator(aci);
121            maci.appendAttributedCharacterIterator(StringUtil
122                    .convertStringtoAttributedString(this.getRquote(), variant,
123                            fontSizeInPoint, layoutContext).getIterator());
124            return maci;
125        }
126    
127    }