aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/fop/fonts/substitute/FontWeightRange.java
blob: 890d6cf7b492bcc7137cb5f1f57fd4eb6ea4c1b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* $Id$ */

package org.apache.fop.fonts.substitute;

import java.util.StringTokenizer;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Encapsulates a range of font weight values
 */
public class FontWeightRange {

    /** logging instance */
    protected static Log log = LogFactory.getLog("org.apache.fop.render.fonts");

    /**
     * Returns an <code>FontWeightRange</code> object holding the
     * range values of the specified <code>String</code>.
     * 
     * @param weightRangeString the value range string
     * @return an <code>FontWeightRange</code> object holding the value ranges
     */
    public static FontWeightRange valueOf(String weightRangeString) {
        StringTokenizer rangeToken = new StringTokenizer(weightRangeString, "..");
        FontWeightRange weightRange = null;
        if (rangeToken.countTokens() == 2) {
            String weightString = rangeToken.nextToken().trim();
            try {
                int start = Integer.parseInt(weightString);
                if (start % 100 != 0) {
                    log.error("font-weight start range is not a multiple of 100");
                }
                int end = Integer.parseInt(rangeToken.nextToken());
                if (end % 100 != 0) {
                    log.error("font-weight end range is not a multiple of 100");
                }
                if (start <= end) {
                    weightRange = new FontWeightRange(start, end);
                } else {
                    log.error("font-weight start range is greater than end range");
                }
            } catch (NumberFormatException e) {
                log.error("invalid font-weight value " + weightString);
            }
        }
        return weightRange;
    }

    /** the start range */
    private int start;

    /** the end range */
    private int end;

    /**
     * Main constructor
     * @param start the start value range
     * @param end the end value range
     */
    public FontWeightRange(int start, int end) {
        this.start = start;
        this.end = end;
    }

    /**
     * Returns true if the given integer value is within this integer range
     * @param value the integer value
     * @return true if the given integer value is within this integer range
     */
    public boolean isWithinRange(int value) {
        return (value >= start && value <= end);
    }

    /**
     * {@inheritDoc}
     */
    public String toString() {
        return start + ".." + end;
    }

    /**
     * @return an integer array containing the weight ranges
     */
    public int[] toArray() {
        int cnt = 0;
        for (int i = start; i <= end; i += 100) {
            cnt++;
        }
        int[] range = new int[cnt];
        for (int i = 0; i < cnt; i++) {
            range[i] = start + (i * 100);
        }
        return range;
    }
}