001: /*
002:
003: Licensed to the Apache Software Foundation (ASF) under one or more
004: contributor license agreements. See the NOTICE file distributed with
005: this work for additional information regarding copyright ownership.
006: The ASF licenses this file to You under the Apache License, Version 2.0
007: (the "License"); you may not use this file except in compliance with
008: the License. You may obtain a copy of the License at
009:
010: http://www.apache.org/licenses/LICENSE-2.0
011:
012: Unless required by applicable law or agreed to in writing, software
013: distributed under the License is distributed on an "AS IS" BASIS,
014: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015: See the License for the specific language governing permissions and
016: limitations under the License.
017:
018: */
019: package org.apache.batik.css.engine.value.css2;
020:
021: import org.apache.batik.css.engine.CSSEngine;
022: import org.apache.batik.css.engine.CSSStylableElement;
023: import org.apache.batik.css.engine.StyleMap;
024: import org.apache.batik.css.engine.value.IdentifierManager;
025: import org.apache.batik.css.engine.value.StringMap;
026: import org.apache.batik.css.engine.value.Value;
027: import org.apache.batik.css.engine.value.ValueConstants;
028: import org.apache.batik.css.engine.value.ValueManager;
029: import org.apache.batik.util.CSSConstants;
030: import org.apache.batik.util.SVGTypes;
031:
032: /**
033: * This class provides a manager for the 'font-stretch' property values.
034: *
035: * @author <a href="mailto:stephane@hillion.org">Stephane Hillion</a>
036: * @version $Id: FontStretchManager.java 478160 2006-11-22 13:35:06Z dvholten $
037: */
038: public class FontStretchManager extends IdentifierManager {
039:
040: /**
041: * The identifier values.
042: */
043: protected static final StringMap values = new StringMap();
044: static {
045: values
046: .put(CSSConstants.CSS_ALL_VALUE,
047: ValueConstants.ALL_VALUE);
048: values.put(CSSConstants.CSS_CONDENSED_VALUE,
049: ValueConstants.CONDENSED_VALUE);
050: values.put(CSSConstants.CSS_EXPANDED_VALUE,
051: ValueConstants.EXPANDED_VALUE);
052: values.put(CSSConstants.CSS_EXTRA_CONDENSED_VALUE,
053: ValueConstants.EXTRA_CONDENSED_VALUE);
054: values.put(CSSConstants.CSS_EXTRA_EXPANDED_VALUE,
055: ValueConstants.EXTRA_EXPANDED_VALUE);
056: values.put(CSSConstants.CSS_NARROWER_VALUE,
057: ValueConstants.NARROWER_VALUE);
058: values.put(CSSConstants.CSS_NORMAL_VALUE,
059: ValueConstants.NORMAL_VALUE);
060: values.put(CSSConstants.CSS_SEMI_CONDENSED_VALUE,
061: ValueConstants.SEMI_CONDENSED_VALUE);
062: values.put(CSSConstants.CSS_SEMI_EXPANDED_VALUE,
063: ValueConstants.SEMI_EXPANDED_VALUE);
064: values.put(CSSConstants.CSS_ULTRA_CONDENSED_VALUE,
065: ValueConstants.ULTRA_CONDENSED_VALUE);
066: values.put(CSSConstants.CSS_ULTRA_EXPANDED_VALUE,
067: ValueConstants.ULTRA_EXPANDED_VALUE);
068: values.put(CSSConstants.CSS_WIDER_VALUE,
069: ValueConstants.WIDER_VALUE);
070: }
071:
072: /**
073: * Implements {@link
074: * org.apache.batik.css.engine.value.ValueManager#isInheritedProperty()}.
075: */
076: public boolean isInheritedProperty() {
077: return true;
078: }
079:
080: /**
081: * Implements {@link ValueManager#isAnimatableProperty()}.
082: */
083: public boolean isAnimatableProperty() {
084: return true;
085: }
086:
087: /**
088: * Implements {@link ValueManager#isAdditiveProperty()}.
089: */
090: public boolean isAdditiveProperty() {
091: return false;
092: }
093:
094: /**
095: * Implements {@link ValueManager#getPropertyType()}.
096: */
097: public int getPropertyType() {
098: return SVGTypes.TYPE_IDENT;
099: }
100:
101: /**
102: * Implements {@link
103: * org.apache.batik.css.engine.value.ValueManager#getPropertyName()}.
104: */
105: public String getPropertyName() {
106: return CSSConstants.CSS_FONT_STRETCH_PROPERTY;
107: }
108:
109: /**
110: * Implements {@link
111: * org.apache.batik.css.engine.value.ValueManager#getDefaultValue()}.
112: */
113: public Value getDefaultValue() {
114: return ValueConstants.NORMAL_VALUE;
115: }
116:
117: /**
118: * Implements {@link
119: * ValueManager#computeValue(CSSStylableElement,String,CSSEngine,int,StyleMap,Value)}.
120: */
121: public Value computeValue(CSSStylableElement elt, String pseudo,
122: CSSEngine engine, int idx, StyleMap sm, Value value) {
123: if (value == ValueConstants.NARROWER_VALUE) {
124: sm.putParentRelative(idx, true);
125:
126: CSSStylableElement p = CSSEngine
127: .getParentCSSStylableElement(elt);
128: if (p == null) {
129: return ValueConstants.SEMI_CONDENSED_VALUE;
130: }
131: Value v = engine.getComputedStyle(p, pseudo, idx);
132: if (v == ValueConstants.NORMAL_VALUE) {
133: return ValueConstants.SEMI_CONDENSED_VALUE;
134: }
135: if (v == ValueConstants.CONDENSED_VALUE) {
136: return ValueConstants.EXTRA_CONDENSED_VALUE;
137: }
138: if (v == ValueConstants.EXPANDED_VALUE) {
139: return ValueConstants.SEMI_EXPANDED_VALUE;
140: }
141: if (v == ValueConstants.SEMI_EXPANDED_VALUE) {
142: return ValueConstants.NORMAL_VALUE;
143: }
144: if (v == ValueConstants.SEMI_CONDENSED_VALUE) {
145: return ValueConstants.CONDENSED_VALUE;
146: }
147: if (v == ValueConstants.EXTRA_CONDENSED_VALUE) {
148: return ValueConstants.ULTRA_CONDENSED_VALUE;
149: }
150: if (v == ValueConstants.EXTRA_EXPANDED_VALUE) {
151: return ValueConstants.EXPANDED_VALUE;
152: }
153: if (v == ValueConstants.ULTRA_CONDENSED_VALUE) {
154: return ValueConstants.ULTRA_CONDENSED_VALUE;
155: }
156: return ValueConstants.EXTRA_EXPANDED_VALUE;
157: } else if (value == ValueConstants.WIDER_VALUE) {
158: sm.putParentRelative(idx, true);
159:
160: CSSStylableElement p = CSSEngine
161: .getParentCSSStylableElement(elt);
162: if (p == null) {
163: return ValueConstants.SEMI_CONDENSED_VALUE;
164: }
165: Value v = engine.getComputedStyle(p, pseudo, idx);
166: if (v == ValueConstants.NORMAL_VALUE) {
167: return ValueConstants.SEMI_EXPANDED_VALUE;
168: }
169: if (v == ValueConstants.CONDENSED_VALUE) {
170: return ValueConstants.SEMI_CONDENSED_VALUE;
171: }
172: if (v == ValueConstants.EXPANDED_VALUE) {
173: return ValueConstants.EXTRA_EXPANDED_VALUE;
174: }
175: if (v == ValueConstants.SEMI_EXPANDED_VALUE) {
176: return ValueConstants.EXPANDED_VALUE;
177: }
178: if (v == ValueConstants.SEMI_CONDENSED_VALUE) {
179: return ValueConstants.NORMAL_VALUE;
180: }
181: if (v == ValueConstants.EXTRA_CONDENSED_VALUE) {
182: return ValueConstants.CONDENSED_VALUE;
183: }
184: if (v == ValueConstants.EXTRA_EXPANDED_VALUE) {
185: return ValueConstants.ULTRA_EXPANDED_VALUE;
186: }
187: if (v == ValueConstants.ULTRA_CONDENSED_VALUE) {
188: return ValueConstants.EXTRA_CONDENSED_VALUE;
189: }
190: return ValueConstants.ULTRA_EXPANDED_VALUE;
191: }
192: return value;
193: }
194:
195: /**
196: * Implements {@link IdentifierManager#getIdentifiers()}.
197: */
198: public StringMap getIdentifiers() {
199: return values;
200: }
201: }
|