org.cobraparser.html.style.HtmlLength Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of Cobra Show documentation
Show all versions of Cobra Show documentation
Cobra is the rendering engine designed for LoboBrowser
/*
GNU LESSER GENERAL PUBLIC LICENSE
Copyright (C) 2006 The Lobo Project
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Contact info: [email protected]
*/
/*
* Created on Nov 19, 2005
*/
package org.cobraparser.html.style;
public final class HtmlLength {
// Note: Preferred type has higher value
public static final int PIXELS = 1;
public static final int LENGTH = 2;
public static final int MULTI_LENGTH = 0;
public static final HtmlLength[] EMPTY_ARRAY = new HtmlLength[0];
private final int lengthType;
private volatile int value;
public HtmlLength(String spec) throws NumberFormatException {
spec = spec.trim();
final int length = spec.length();
final char lastChar = spec.charAt(length - 1);
String parseable;
if (spec.endsWith("px")) {
this.lengthType = PIXELS;
parseable = spec.substring(0, length - 2);
} else if (lastChar == '%') {
this.lengthType = LENGTH;
parseable = spec.substring(0, length - 1).trim();
} else if (lastChar == '*') {
this.lengthType = MULTI_LENGTH;
if (length <= 1) {
parseable = "1";
} else {
parseable = spec.substring(0, length - 1).trim();
}
} else {
this.lengthType = PIXELS;
parseable = spec;
}
try {
this.value = Integer.parseInt(parseable);
} catch (final NumberFormatException nfe) {
this.value = (int) Double.parseDouble(parseable);
}
}
public HtmlLength(final int pixels) {
this.lengthType = PIXELS;
this.value = pixels;
}
/**
* @return Returns the lengthType.
*/
public final int getLengthType() {
return lengthType;
}
/**
* @return Returns the spec.
*/
public final int getRawValue() {
return this.value;
}
public final int getLength(final int availLength) {
final int lt = this.lengthType;
if (lt == LENGTH) {
return (availLength * this.value) / 100;
} else {
return this.value;
}
}
public final void divideBy(final int denominator) {
int val = this.value;
val = val / denominator;
this.value = val;
}
public final boolean isPreferredOver(final HtmlLength otherLength) {
if (otherLength == null) {
return true;
}
if (this.lengthType > otherLength.lengthType) {
return true;
}
return this.value > otherLength.value;
}
}