[DEV] correct some parsing error and add Dynamic tool
This commit is contained in:
parent
ab18170a8c
commit
bd9c867207
@ -321,7 +321,7 @@ public record Color(
|
||||
|
||||
public static Color valueOf(final String colorBase) throws Exception {
|
||||
// remove all white space...
|
||||
String color = colorBase.replace(" \r\n\t\\(\\)", "");
|
||||
String color = colorBase.replaceAll("[ \r\n\t\\(\\)]", "");
|
||||
if (color.isEmpty()) {
|
||||
return new Color(0, 0, 0, 1.0f);
|
||||
}
|
||||
@ -403,10 +403,98 @@ public record Color(
|
||||
}
|
||||
}
|
||||
|
||||
public static Color valueOf256(final String colorBase) throws Exception {
|
||||
// remove all white space...
|
||||
String color = colorBase.replaceAll("[ \r\n\t\\(\\)]", "");
|
||||
if (color.isEmpty()) {
|
||||
return new Color(0, 0, 0, 1.0f);
|
||||
}
|
||||
final Color named = get(colorBase);
|
||||
if (named != null) {
|
||||
return named;
|
||||
} else if (color.charAt(0) == '#') {
|
||||
// MODEL: #RGB
|
||||
// #RGBA
|
||||
// #RRGGBB
|
||||
// #RRGGBBAA
|
||||
switch (color.length()) {
|
||||
case 4 -> {
|
||||
final float r = Integer.parseInt(color.substring(1, 2), 16) * 255.0f * 16.0f;
|
||||
final float g = Integer.parseInt(color.substring(2, 3), 16) * 255.0f * 16.0f;
|
||||
final float b = Integer.parseInt(color.substring(3, 4), 16) * 255.0f * 16.0f;
|
||||
return new Color(r, g, b);
|
||||
}
|
||||
case 5 -> {
|
||||
final float r = Integer.parseInt(color.substring(1, 2), 16) * 255.0f * 16.0f;
|
||||
final float g = Integer.parseInt(color.substring(2, 3), 16) * 255.0f * 16.0f;
|
||||
final float b = Integer.parseInt(color.substring(3, 4), 16) * 255.0f * 16.0f;
|
||||
final float a = Integer.parseInt(color.substring(4, 5), 16) * 255.0f * 16.0f;
|
||||
return new Color(r, g, b, a);
|
||||
}
|
||||
case 7 -> {
|
||||
final float r = Integer.parseInt(color.substring(1, 3), 16) * 255.0f;
|
||||
final float g = Integer.parseInt(color.substring(3, 5), 16) * 255.0f;
|
||||
final float b = Integer.parseInt(color.substring(5, 7), 16) * 255.0f;
|
||||
return new Color(r, g, b);
|
||||
}
|
||||
case 9 -> {
|
||||
final float r = Integer.parseInt(color.substring(1, 3), 16) * 255.0f;
|
||||
final float g = Integer.parseInt(color.substring(3, 5), 16) * 255.0f;
|
||||
final float b = Integer.parseInt(color.substring(5, 7), 16) * 255.0f;
|
||||
final float a = Integer.parseInt(color.substring(7, 9), 16) * 255.0f;
|
||||
return new Color(r, g, b, a);
|
||||
}
|
||||
default -> throw new Exception("Can not parse color ... '" + colorBase + "'");
|
||||
}
|
||||
} else {
|
||||
// Model: r.r,g.g,b.b
|
||||
// r.r,g.g,b.b,a.a
|
||||
// (r.r,g.g,b.b)
|
||||
// (r.r,g.g,b.b,a.a)
|
||||
// rgb(r.r,g.g,b.b)
|
||||
// rgba(r.r,g.g,b.b,a.a)
|
||||
// argb(a.a,r.r,g.g,b.b)
|
||||
if (color.startsWith("argb")) {
|
||||
color = color.replace("argb", "");
|
||||
final String[] vals = color.split(",");
|
||||
if (vals.length == 4) {
|
||||
final float a = FMath.avg(0.0f, Float.parseFloat(vals[0]) / 256.0f, 1.0f);
|
||||
final float r = FMath.avg(0.0f, Float.parseFloat(vals[1]) / 256.0f, 1.0f);
|
||||
final float g = FMath.avg(0.0f, Float.parseFloat(vals[2]) / 256.0f, 1.0f);
|
||||
final float b = FMath.avg(0.0f, Float.parseFloat(vals[3]) / 256.0f, 1.0f);
|
||||
return new Color(r, g, b, a);
|
||||
} else {
|
||||
throw new Exception("Can not parse color ... '" + colorBase + "'");
|
||||
}
|
||||
}
|
||||
color = color.replace("rgb", "");
|
||||
color = color.replace("rgba", "");
|
||||
final String[] vals = color.split(",");
|
||||
if (vals.length == 3) {
|
||||
final float r = FMath.avg(0.0f, Float.parseFloat(vals[0]) / 256.0f, 1.0f);
|
||||
final float g = FMath.avg(0.0f, Float.parseFloat(vals[1]) / 256.0f, 1.0f);
|
||||
final float b = FMath.avg(0.0f, Float.parseFloat(vals[2]) / 256.0f, 1.0f);
|
||||
return new Color(r, g, b);
|
||||
} else if (vals.length == 4) {
|
||||
final float r = FMath.avg(0.0f, Float.parseFloat(vals[0]) / 256.0f, 1.0f);
|
||||
final float g = FMath.avg(0.0f, Float.parseFloat(vals[1]) / 256.0f, 1.0f);
|
||||
final float b = FMath.avg(0.0f, Float.parseFloat(vals[2]) / 256.0f, 1.0f);
|
||||
final float a = FMath.avg(0.0f, Float.parseFloat(vals[3]) / 256.0f, 1.0f);
|
||||
return new Color(r, g, b, a);
|
||||
} else {
|
||||
throw new Exception("Can not parse color ... '" + colorBase + "'");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Color(final float r, final float g, final float b) {
|
||||
this(r, g, b, 1.0f);
|
||||
}
|
||||
|
||||
public Color(final int r, final int g, final int b) {
|
||||
this(r, g, b, 0xFF);
|
||||
}
|
||||
|
||||
public Color(final float r, final float g, final float b, final float a) {
|
||||
this.r = r;
|
||||
this.g = g;
|
||||
@ -414,6 +502,10 @@ public record Color(
|
||||
this.a = a;
|
||||
}
|
||||
|
||||
public Color(final int r, final int g, final int b, final int a) {
|
||||
this(r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f);
|
||||
}
|
||||
|
||||
public Color(final double r, final double g, final double b, final double a) {
|
||||
this((float) r, (float) g, (float) b, (float) a);
|
||||
}
|
||||
|
@ -184,6 +184,9 @@ public record Dimension(
|
||||
* @return dimension in Pixel
|
||||
*/
|
||||
public Vector2f getPixel() {
|
||||
if (this.type != Distance.POURCENT) {
|
||||
return this.size;
|
||||
}
|
||||
return getPixel(windowsSize.getPixel());
|
||||
}
|
||||
|
||||
@ -191,7 +194,7 @@ public record Dimension(
|
||||
if (this.type != Distance.POURCENT) {
|
||||
return this.size;
|
||||
}
|
||||
final Vector2f res = new Vector2f(uppersize.x() * this.size.x(), uppersize.y() * this.size.y());
|
||||
final Vector2f res = new Vector2f(uppersize.x() * this.size.x() * 0.01f, uppersize.y() * this.size.y() * 0.01f);
|
||||
//GALE_DEBUG("Get % : " + m_data + " / " + windDim + " == > " + res);
|
||||
return res;
|
||||
}
|
||||
@ -205,7 +208,7 @@ public record Dimension(
|
||||
if (this.type != Distance.POURCENT) {
|
||||
return new Vector2i((int) this.size.x(), (int) this.size.y());
|
||||
}
|
||||
final Vector2i res = new Vector2i((int) (uppersize.x() * this.size.x()), (int) (uppersize.y() * this.size.y()));
|
||||
final Vector2i res = new Vector2i((int) (uppersize.x() * this.size.x() * 0.01f), (int) (uppersize.y() * this.size.y() * 0.01f));
|
||||
//GALE_DEBUG("Get % : " + m_data + " / " + windDim + " == > " + res);
|
||||
return res;
|
||||
}
|
||||
@ -238,7 +241,6 @@ public record Dimension(
|
||||
* @param config dimension configuration.
|
||||
*/
|
||||
public static Dimension valueOf(String config) {
|
||||
final Vector2f size = Vector2f.ZERO;
|
||||
Distance type = Distance.PIXEL;
|
||||
if (config.endsWith("%")) {
|
||||
type = Distance.POURCENT;
|
||||
@ -310,4 +312,93 @@ public record Dimension(
|
||||
return str;
|
||||
}
|
||||
|
||||
public static Dimension valueOf(String contentX, String contentY) {
|
||||
|
||||
Distance typeX = Distance.UNKNOW;
|
||||
if (contentX.endsWith("%")) {
|
||||
typeX = Distance.POURCENT;
|
||||
contentX = contentX.substring(0, contentX.length() - 1);
|
||||
} else if (contentX.endsWith("px")) {
|
||||
typeX = Distance.PIXEL;
|
||||
contentX = contentX.substring(0, contentX.length() - 2);
|
||||
} else if (contentX.endsWith("ft")) {
|
||||
typeX = Distance.FOOT;
|
||||
contentX = contentX.substring(0, contentX.length() - 2);
|
||||
} else if (contentX.endsWith("in")) {
|
||||
typeX = Distance.INCH;
|
||||
contentX = contentX.substring(0, contentX.length() - 2);
|
||||
} else if (contentX.endsWith("km")) {
|
||||
typeX = Distance.KILOMETER;
|
||||
contentX = contentX.substring(0, contentX.length() - 2);
|
||||
} else if (contentX.endsWith("mm")) {
|
||||
typeX = Distance.MILLIMETER;
|
||||
contentX = contentX.substring(0, contentX.length() - 2);
|
||||
} else if (contentX.endsWith("cm")) {
|
||||
typeX = Distance.CENTIMETER;
|
||||
contentX = contentX.substring(0, contentX.length() - 2);
|
||||
} else if (contentX.endsWith("m")) {
|
||||
typeX = Distance.METER;
|
||||
contentX = contentX.substring(0, contentX.length() - 1);
|
||||
} else if (contentX.endsWith("em")) {
|
||||
typeX = Distance.ELEMENT;
|
||||
contentX = contentX.substring(0, contentX.length() - 2);
|
||||
} else if (contentX.endsWith("ex")) {
|
||||
typeX = Distance.EX;
|
||||
contentX = contentX.substring(0, contentX.length() - 2);
|
||||
} else if (contentX.endsWith("pt")) {
|
||||
typeX = Distance.POINT;
|
||||
contentX = contentX.substring(0, contentX.length() - 2);
|
||||
} else if (contentX.endsWith("pc")) {
|
||||
typeX = Distance.PC;
|
||||
contentX = contentX.substring(0, contentX.length() - 2);
|
||||
}
|
||||
float tmpX = Float.valueOf(contentX);
|
||||
Distance typeY = Distance.UNKNOW;
|
||||
if (contentY.endsWith("%")) {
|
||||
typeY = Distance.POURCENT;
|
||||
contentY = contentY.substring(0, contentY.length() - 1);
|
||||
} else if (contentY.endsWith("px")) {
|
||||
typeY = Distance.PIXEL;
|
||||
contentY = contentY.substring(0, contentY.length() - 2);
|
||||
} else if (contentY.endsWith("ft")) {
|
||||
typeY = Distance.FOOT;
|
||||
contentY = contentY.substring(0, contentY.length() - 2);
|
||||
} else if (contentY.endsWith("in")) {
|
||||
typeY = Distance.INCH;
|
||||
contentY = contentY.substring(0, contentY.length() - 2);
|
||||
} else if (contentY.endsWith("km")) {
|
||||
typeY = Distance.KILOMETER;
|
||||
contentY = contentY.substring(0, contentY.length() - 2);
|
||||
} else if (contentY.endsWith("mm")) {
|
||||
typeY = Distance.MILLIMETER;
|
||||
contentY = contentY.substring(0, contentY.length() - 2);
|
||||
} else if (contentY.endsWith("cm")) {
|
||||
typeY = Distance.CENTIMETER;
|
||||
contentY = contentY.substring(0, contentY.length() - 2);
|
||||
} else if (contentY.endsWith("m")) {
|
||||
typeY = Distance.METER;
|
||||
contentY = contentY.substring(0, contentY.length() - 1);
|
||||
} else if (contentY.endsWith("em")) {
|
||||
typeY = Distance.ELEMENT;
|
||||
contentY = contentY.substring(0, contentY.length() - 2);
|
||||
} else if (contentY.endsWith("ex")) {
|
||||
typeY = Distance.EX;
|
||||
contentY = contentY.substring(0, contentY.length() - 2);
|
||||
} else if (contentY.endsWith("pt")) {
|
||||
typeY = Distance.POINT;
|
||||
contentY = contentY.substring(0, contentY.length() - 2);
|
||||
} else if (contentY.endsWith("pc")) {
|
||||
typeY = Distance.PC;
|
||||
contentY = contentY.substring(0, contentY.length() - 2);
|
||||
}
|
||||
float tmpY = Float.valueOf(contentY);
|
||||
|
||||
if (typeX == Distance.UNKNOW && typeY == Distance.UNKNOW) {
|
||||
return new Dimension(new Vector2f(tmpX, tmpY), Distance.PIXEL);
|
||||
} else if (typeX == Distance.UNKNOW) {
|
||||
return new Dimension(new Vector2f(tmpX, tmpY), typeY);
|
||||
}
|
||||
return new Dimension(new Vector2f(tmpX, tmpY), typeX);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,7 +6,6 @@
|
||||
package org.atriasoft.etk;
|
||||
|
||||
import org.atriasoft.etk.internal.Log;
|
||||
import org.atriasoft.etk.math.Vector2f;
|
||||
|
||||
/**
|
||||
* in the dimension class we store the data as the more usefull unit (pixel)
|
||||
@ -89,7 +88,6 @@ public record Dimension1D(
|
||||
* @param config dimension configuration.
|
||||
*/
|
||||
public static Dimension1D valueOf(String config) {
|
||||
final Vector2f size = Vector2f.ZERO;
|
||||
Distance type = Distance.PIXEL;
|
||||
if (config.endsWith("%")) {
|
||||
type = Distance.POURCENT;
|
||||
@ -127,9 +125,6 @@ public record Dimension1D(
|
||||
} else if (config.endsWith("pc")) {
|
||||
type = Distance.PC;
|
||||
config = config.substring(0, config.length() - 2);
|
||||
} else {
|
||||
Log.critical("Can not parse dimension : '" + config + "'");
|
||||
return null;
|
||||
}
|
||||
final float tmp = Float.valueOf(config);
|
||||
final Dimension1D ret = new Dimension1D(tmp, type);
|
||||
|
@ -1,6 +1,7 @@
|
||||
package org.atriasoft.etk;
|
||||
|
||||
public enum Distance {
|
||||
UNKNOW, //!< "%"
|
||||
POURCENT, //!< "%"
|
||||
PIXEL, //!< "px"
|
||||
METER, //!< "m"
|
||||
|
@ -188,6 +188,26 @@ public class Uri {
|
||||
}
|
||||
|
||||
public static void writeAll(final Uri uri, final String data) {
|
||||
BufferedWriter out = null;
|
||||
try {
|
||||
FileWriter fstream = new FileWriter(uri.getPath(), false); //true tells to append data.
|
||||
out = new BufferedWriter(fstream);
|
||||
out.write(data);
|
||||
} catch (IOException e) {
|
||||
Log.error("Error: " + e.getMessage());
|
||||
} finally {
|
||||
if (out != null) {
|
||||
try {
|
||||
out.close();
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
Log.error("Error: ", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeAllAppend(final Uri uri, final String data) {
|
||||
BufferedWriter out = null;
|
||||
try {
|
||||
FileWriter fstream = new FileWriter(uri.getPath(), true); //true tells to append data.
|
||||
@ -240,7 +260,7 @@ public class Uri {
|
||||
}
|
||||
|
||||
public String getExtention() {
|
||||
final String[] ret = this.path.split(".");
|
||||
final String[] ret = this.path.split("\\.");
|
||||
return ret[ret.length - 1];
|
||||
}
|
||||
|
||||
|
36
src/org/atriasoft/etk/util/ArraysTools.java
Normal file
36
src/org/atriasoft/etk/util/ArraysTools.java
Normal file
@ -0,0 +1,36 @@
|
||||
package org.atriasoft.etk.util;
|
||||
|
||||
public class ArraysTools {
|
||||
public static <T> void fill(final T[] buffer, final T value) {
|
||||
if (buffer == null) {
|
||||
return;
|
||||
}
|
||||
for (int iii = 0; iii < buffer.length; iii++) {
|
||||
buffer[iii] = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> void fill2(final float[][] buffer, final float value) {
|
||||
if (buffer == null) {
|
||||
return;
|
||||
}
|
||||
for (int iii = 0; iii < buffer.length; iii++) {
|
||||
for (int jjj = 0; jjj < buffer[iii].length; jjj++) {
|
||||
buffer[iii][jjj] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> void fill2(final T[][] buffer, final T value) {
|
||||
if (buffer == null) {
|
||||
return;
|
||||
}
|
||||
for (int iii = 0; iii < buffer.length; iii++) {
|
||||
for (int jjj = 0; jjj < buffer[iii].length; jjj++) {
|
||||
buffer[iii][jjj] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ArraysTools() {}
|
||||
}
|
@ -6,4 +6,9 @@ public class Dynamic<T> {
|
||||
public Dynamic(final T value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Dynamic<" + super.toString() + ">";
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user