|
|
@@ -9,15 +9,18 @@ package net.ranides.assira.text.format;
|
|
|
import java.awt.Font;
|
|
|
import java.io.Serializable;
|
|
|
import java.util.Collection;
|
|
|
+import net.ranides.assira.collection.CollectionUtils;
|
|
|
import net.ranides.assira.collection.SingleCollection;
|
|
|
+import net.ranides.assira.generic.ValueUtils;
|
|
|
+import net.ranides.assira.math.HashHelper;
|
|
|
|
|
|
/**
|
|
|
* Schemat przyporządkowujący graficzne reprezentacje czcionek do numerów, które
|
|
|
- * są przechowywane w obiektach typu {@link AnsiCharSequence}.
|
|
|
+ * są przechowywane w obiektach typu {@link AnsiCharSequence}.
|
|
|
* @author ranides
|
|
|
*/
|
|
|
public abstract class AnsiFontScheme {
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Pusty schemat kolorów. Zwraca {@code null} dla każdej wartości.
|
|
|
*/
|
|
|
@@ -25,24 +28,24 @@ public abstract class AnsiFontScheme {
|
|
|
|
|
|
/**
|
|
|
* Zwraca kolekcję wszystkich czcionek zapisanych w schemacie.
|
|
|
- * @return
|
|
|
+ * @return
|
|
|
*/
|
|
|
public abstract Collection<FontAttr> values();
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Zwraca czcionkę o podanym indeksie.
|
|
|
* @param index
|
|
|
* @return
|
|
|
*/
|
|
|
public abstract Font getFont(int index);
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Ustawia czcionkę o podanym indeksie.
|
|
|
* @param index
|
|
|
* @param value
|
|
|
*/
|
|
|
public abstract void setFont(int index, Font value);
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Zwraca domyślną czcionkę (o indeksie 0).
|
|
|
* @return
|
|
|
@@ -50,7 +53,7 @@ public abstract class AnsiFontScheme {
|
|
|
public final Font getFont() {
|
|
|
return getFont(0);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Ustawia domyślną czcionkę (o indeksie 0).
|
|
|
* @param value
|
|
|
@@ -60,11 +63,11 @@ public abstract class AnsiFontScheme {
|
|
|
}
|
|
|
|
|
|
/* ************************************************************************** */
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Kopiuje podany schemat czcionek
|
|
|
* @param scheme
|
|
|
- * @return
|
|
|
+ * @return
|
|
|
*/
|
|
|
public static AnsiFontScheme copy(AnsiFontScheme scheme) {
|
|
|
if(scheme instanceof AnsiFontArray) {
|
|
|
@@ -73,59 +76,59 @@ public abstract class AnsiFontScheme {
|
|
|
return new AnsiFontMap(scheme);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Tworzy <i>scheme</i> o nieograniczonym rozmiarze, w którym można przypisać
|
|
|
* wartość do dowolnego klucza (ciąg kluczy nie musi być sekwencją). Klucz
|
|
|
* 0 oznacza oczywiście (by convention) wartość domyślną.
|
|
|
- * @return
|
|
|
+ * @return
|
|
|
*/
|
|
|
public static AnsiFontScheme make() {
|
|
|
return new AnsiFontMap();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
- * Tworzy <i>scheme</i> o ustalonym rozmiarze {@code size}, w którym można
|
|
|
+ * Tworzy <i>scheme</i> o ustalonym rozmiarze {@code size}, w którym można
|
|
|
* używać kluczy z zakresu {@code [0...size]}. Klucz 0 oznacza oczywiście
|
|
|
* (by convention) wartość domyślną.
|
|
|
* @param size
|
|
|
- * @return
|
|
|
+ * @return
|
|
|
*/
|
|
|
public static AnsiFontScheme make(int size) {
|
|
|
return new AnsiFontArray(size+1);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
- * Tworzy <i>scheme</i> przechowujący pojedynczy atrybut pod indeksem 0.
|
|
|
+ * Tworzy <i>scheme</i> przechowujący pojedynczy atrybut pod indeksem 0.
|
|
|
* Użycie innych kluczy jest dozwolone ale zawsze ma wpływ na wartość domyślną
|
|
|
* (prowadzi do niejednoznaczności).
|
|
|
- * @param font
|
|
|
- * @return
|
|
|
+ * @param font
|
|
|
+ * @return
|
|
|
*/
|
|
|
public static AnsiFontScheme make(Font font) {
|
|
|
return new AnsiSchemePlain(font);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/* ************************************************************************** */
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* Element reprezentujący czcionkę przypisaną do danego indeksu w schemacie.
|
|
|
*/
|
|
|
public interface FontAttr {
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Zwraca numer indeksu, z którym pozwiązana jest czcionka.
|
|
|
- * @return
|
|
|
+ * @return
|
|
|
*/
|
|
|
int index();
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Zwraca czcionkę.
|
|
|
* @return
|
|
|
*/
|
|
|
Font getFont();
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* Ustawia czcionkę powiązaną z indeksem, do którego jest przyporządkowany element.
|
|
|
* Metoda modyfikuje schemat czcionek, który zwrócił element.
|
|
|
@@ -134,15 +137,15 @@ public abstract class AnsiFontScheme {
|
|
|
void setFont(Font value);
|
|
|
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
/* ************************************************************************** */
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
private static final class AnsiSchemePlain extends AnsiFontScheme implements Serializable {
|
|
|
|
|
|
private static final long serialVersionUID = 0x200L;
|
|
|
-
|
|
|
+
|
|
|
private final FontAttrPlain font;
|
|
|
|
|
|
public AnsiSchemePlain(Font font) {
|
|
|
@@ -164,14 +167,33 @@ public abstract class AnsiFontScheme {
|
|
|
return new SingleCollection<FontAttr>(font);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public int hashCode() {
|
|
|
+ return HashHelper.generateHashCode(0, 0, font);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean equals(Object object) {
|
|
|
+ if (object instanceof AnsiFontScheme) {
|
|
|
+ AnsiFontScheme scheme = (AnsiFontScheme) object;
|
|
|
+ if(scheme.values().size() != 1) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return ValueUtils.isEqual(font, CollectionUtils.first(scheme.values()));
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private static final class FontAttrPlain implements FontAttr, Serializable {
|
|
|
-
|
|
|
+
|
|
|
private static final long serialVersionUID = 0x200L;
|
|
|
-
|
|
|
+
|
|
|
private Font font;
|
|
|
-
|
|
|
+
|
|
|
public FontAttrPlain(Font font) {
|
|
|
this.font = font;
|
|
|
}
|
|
|
@@ -190,6 +212,20 @@ public abstract class AnsiFontScheme {
|
|
|
public void setFont(Font value) {
|
|
|
this.font = value;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int hashCode() {
|
|
|
+ return HashHelper.generateHashCode(0, 0, getFont());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean equals(Object obj) {
|
|
|
+ if (obj instanceof FontAttr) {
|
|
|
+ FontAttr attr = (FontAttr) obj;
|
|
|
+ return ValueUtils.isEqual(attr.getFont(), getFont());
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
}
|