Forráskód Böngészése

Merge branch 'master' of https://repo1.mydevil.net/git/priv/ranides/assira

Ranides Atterwim 9 éve
szülő
commit
021d5b8d09

+ 253 - 0
assira/src/main/java/net/ranides/assira/text/ASCII.java

@@ -0,0 +1,253 @@
+/*
+ * Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
+ * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+package net.ranides.assira.text;
+
+/**
+ * Utility class that implements the standard C ctype functionality.
+ *
+ * @author Hong Zhang
+ */
+public class ASCII {
+
+    // COPY FROM JDK: java.util.regex.ASCII
+
+    private static final int UPPER   = 0x00000100;
+
+    private static final int LOWER   = 0x00000200;
+
+    private static final int DIGIT   = 0x00000400;
+
+    private static final int SPACE   = 0x00000800;
+
+    private static final int PUNCT   = 0x00001000;
+
+    private static final int CNTRL   = 0x00002000;
+
+    private static final int BLANK   = 0x00004000;
+
+    private static final int HEX     = 0x00008000;
+
+    private static final int UNDER   = 0x00010000;
+
+    private static final int ASCII   = 0x0000FF00;
+
+    private static final int ALPHA   = (UPPER|LOWER);
+
+    private static final int ALNUM   = (UPPER|LOWER|DIGIT);
+
+    private static final int GRAPH   = (PUNCT|UPPER|LOWER|DIGIT);
+
+    private static final int WORD    = (UPPER|LOWER|UNDER|DIGIT);
+
+    private static final int XDIGIT  = (HEX);
+
+    private static final int[] ctype = new int[] {
+            CNTRL,                  /* 00 (NUL) */
+            CNTRL,                  /* 01 (SOH) */
+            CNTRL,                  /* 02 (STX) */
+            CNTRL,                  /* 03 (ETX) */
+            CNTRL,                  /* 04 (EOT) */
+            CNTRL,                  /* 05 (ENQ) */
+            CNTRL,                  /* 06 (ACK) */
+            CNTRL,                  /* 07 (BEL) */
+            CNTRL,                  /* 08 (BS)  */
+            SPACE+CNTRL+BLANK,      /* 09 (HT)  */
+            SPACE+CNTRL,            /* 0A (LF)  */
+            SPACE+CNTRL,            /* 0B (VT)  */
+            SPACE+CNTRL,            /* 0C (FF)  */
+            SPACE+CNTRL,            /* 0D (CR)  */
+            CNTRL,                  /* 0E (SI)  */
+            CNTRL,                  /* 0F (SO)  */
+            CNTRL,                  /* 10 (DLE) */
+            CNTRL,                  /* 11 (DC1) */
+            CNTRL,                  /* 12 (DC2) */
+            CNTRL,                  /* 13 (DC3) */
+            CNTRL,                  /* 14 (DC4) */
+            CNTRL,                  /* 15 (NAK) */
+            CNTRL,                  /* 16 (SYN) */
+            CNTRL,                  /* 17 (ETB) */
+            CNTRL,                  /* 18 (CAN) */
+            CNTRL,                  /* 19 (EM)  */
+            CNTRL,                  /* 1A (SUB) */
+            CNTRL,                  /* 1B (ESC) */
+            CNTRL,                  /* 1C (FS)  */
+            CNTRL,                  /* 1D (GS)  */
+            CNTRL,                  /* 1E (RS)  */
+            CNTRL,                  /* 1F (US)  */
+            SPACE+BLANK,            /* 20 SPACE */
+            PUNCT,                  /* 21 !     */
+            PUNCT,                  /* 22 "     */
+            PUNCT,                  /* 23 #     */
+            PUNCT,                  /* 24 $     */
+            PUNCT,                  /* 25 %     */
+            PUNCT,                  /* 26 &     */
+            PUNCT,                  /* 27 '     */
+            PUNCT,                  /* 28 (     */
+            PUNCT,                  /* 29 )     */
+            PUNCT,                  /* 2A *     */
+            PUNCT,                  /* 2B +     */
+            PUNCT,                  /* 2C ,     */
+            PUNCT,                  /* 2D -     */
+            PUNCT,                  /* 2E .     */
+            PUNCT,                  /* 2F /     */
+            DIGIT+HEX+0,            /* 30 0     */
+            DIGIT+HEX+1,            /* 31 1     */
+            DIGIT+HEX+2,            /* 32 2     */
+            DIGIT+HEX+3,            /* 33 3     */
+            DIGIT+HEX+4,            /* 34 4     */
+            DIGIT+HEX+5,            /* 35 5     */
+            DIGIT+HEX+6,            /* 36 6     */
+            DIGIT+HEX+7,            /* 37 7     */
+            DIGIT+HEX+8,            /* 38 8     */
+            DIGIT+HEX+9,            /* 39 9     */
+            PUNCT,                  /* 3A :     */
+            PUNCT,                  /* 3B ;     */
+            PUNCT,                  /* 3C <     */
+            PUNCT,                  /* 3D =     */
+            PUNCT,                  /* 3E >     */
+            PUNCT,                  /* 3F ?     */
+            PUNCT,                  /* 40 @     */
+            UPPER+HEX+10,           /* 41 A     */
+            UPPER+HEX+11,           /* 42 B     */
+            UPPER+HEX+12,           /* 43 C     */
+            UPPER+HEX+13,           /* 44 D     */
+            UPPER+HEX+14,           /* 45 E     */
+            UPPER+HEX+15,           /* 46 F     */
+            UPPER+16,               /* 47 G     */
+            UPPER+17,               /* 48 H     */
+            UPPER+18,               /* 49 I     */
+            UPPER+19,               /* 4A J     */
+            UPPER+20,               /* 4B K     */
+            UPPER+21,               /* 4C L     */
+            UPPER+22,               /* 4D M     */
+            UPPER+23,               /* 4E N     */
+            UPPER+24,               /* 4F O     */
+            UPPER+25,               /* 50 P     */
+            UPPER+26,               /* 51 Q     */
+            UPPER+27,               /* 52 R     */
+            UPPER+28,               /* 53 S     */
+            UPPER+29,               /* 54 T     */
+            UPPER+30,               /* 55 U     */
+            UPPER+31,               /* 56 V     */
+            UPPER+32,               /* 57 W     */
+            UPPER+33,               /* 58 X     */
+            UPPER+34,               /* 59 Y     */
+            UPPER+35,               /* 5A Z     */
+            PUNCT,                  /* 5B [     */
+            PUNCT,                  /* 5C \     */
+            PUNCT,                  /* 5D ]     */
+            PUNCT,                  /* 5E ^     */
+            PUNCT|UNDER,            /* 5F _     */
+            PUNCT,                  /* 60 `     */
+            LOWER+HEX+10,           /* 61 a     */
+            LOWER+HEX+11,           /* 62 b     */
+            LOWER+HEX+12,           /* 63 c     */
+            LOWER+HEX+13,           /* 64 d     */
+            LOWER+HEX+14,           /* 65 e     */
+            LOWER+HEX+15,           /* 66 f     */
+            LOWER+16,               /* 67 g     */
+            LOWER+17,               /* 68 h     */
+            LOWER+18,               /* 69 i     */
+            LOWER+19,               /* 6A j     */
+            LOWER+20,               /* 6B k     */
+            LOWER+21,               /* 6C l     */
+            LOWER+22,               /* 6D m     */
+            LOWER+23,               /* 6E n     */
+            LOWER+24,               /* 6F o     */
+            LOWER+25,               /* 70 p     */
+            LOWER+26,               /* 71 q     */
+            LOWER+27,               /* 72 r     */
+            LOWER+28,               /* 73 s     */
+            LOWER+29,               /* 74 t     */
+            LOWER+30,               /* 75 u     */
+            LOWER+31,               /* 76 v     */
+            LOWER+32,               /* 77 w     */
+            LOWER+33,               /* 78 x     */
+            LOWER+34,               /* 79 y     */
+            LOWER+35,               /* 7A z     */
+            PUNCT,                  /* 7B {     */
+            PUNCT,                  /* 7C |     */
+            PUNCT,                  /* 7D }     */
+            PUNCT,                  /* 7E ~     */
+            CNTRL,                  /* 7F (DEL) */
+    };
+
+    private static int getType(int ch) {
+        return ((ch & 0xFFFFFF80) == 0 ? ctype[ch] : 0);
+    }
+
+    private static boolean isType(int ch, int type) {
+        return (getType(ch) & type) != 0;
+    }
+
+    public static boolean isAscii(int ch) {
+        return ((ch & 0xFFFFFF80) == 0);
+    }
+
+    public static boolean isAlpha(int ch) {
+        return isType(ch, ALPHA);
+    }
+
+    public static boolean isDigit(int ch) {
+        return ((ch-'0')|('9'-ch)) >= 0;
+    }
+
+    public static boolean isAlnum(int ch) {
+        return isType(ch, ALNUM);
+    }
+
+    public static boolean isGraph(int ch) {
+        return isType(ch, GRAPH);
+    }
+
+    public static boolean isPrint(int ch) {
+        return ((ch-0x20)|(0x7E-ch)) >= 0;
+    }
+
+    public static boolean isPunct(int ch) {
+        return isType(ch, PUNCT);
+    }
+
+    public static boolean isSpace(int ch) {
+        return isType(ch, SPACE);
+    }
+
+    public static boolean isHexDigit(int ch) {
+        return isType(ch, HEX);
+    }
+
+    public static boolean isOctDigit(int ch) {
+        return ((ch-'0')|('7'-ch)) >= 0;
+    }
+
+    public static boolean isCntrl(int ch) {
+        return isType(ch, CNTRL);
+    }
+
+    public static boolean isLower(int ch) {
+        return ((ch-'a')|('z'-ch)) >= 0;
+    }
+
+    public static boolean isUpper(int ch) {
+        return ((ch-'A')|('Z'-ch)) >= 0;
+    }
+
+    public static boolean isWord(int ch) {
+        return isType(ch, WORD);
+    }
+
+    public static int toDigit(int ch) {
+        return (ctype[ch & 0x7F] & 0x3F);
+    }
+
+    public static int toLower(int ch) {
+        return isUpper(ch) ? (ch + 0x20) : ch;
+    }
+
+    public static int toUpper(int ch) {
+        return isLower(ch) ? (ch - 0x20) : ch;
+    }
+
+}

+ 0 - 305
assira/src/main/java/net/ranides/assira/text/format/AnsiAttr.java

@@ -1,305 +0,0 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.text.format;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.io.Serializable;
-import net.ranides.assira.generic.HashUtils;
-import net.ranides.assira.math.Bitwise;
-
-
-/**
- *
- * @author ranides
- */
-public abstract class AnsiAttr implements Serializable {
-    
-    private static final long serialVersionUID = 3L;
-    
-    public static final AnsiAttr DEFAULT = new Value(0, 0, 0, 0);
-    
-    public static final int NORMAL          = 0x0000;
-    
-    public static final int BOLD            = 0x0001;
-    
-    public static final int UNDERLINE       = 0x0002;
-    
-    public static final int INVERT          = 0x0004;
-    
-    public static final int SYMBOL          = 0x0008;
-    
-    public static final int NARROW          = 0x0010;
-    
-    public static final int STRIKE          = 0x0020;
-    
-    public static final int FRESH           = 0x0040;
-    
-    public static final int CHANGED         = 0x0080;
-    
-    public static final int NO_BOLD         = 0x0100;
-    
-    public static final int NO_UNDERLINE    = 0x0200;
-    
-    public static final int NO_INVERT       = 0x0400;
-    
-    public static final int NO_SYMBOL       = 0x0800;
-    
-    public static final int NO_NARROW       = 0x1000;
-    
-    public static final int NO_STRIKE       = 0x2000;
-    
-    public static final int NO_FRESH        = 0x4000;
-    
-    public static final int NO_CHANGED      = 0x8000;
-    
-    
-    public static final int MASK_FLAGS_SET  = 0x00FF;
-    
-    public static final int MASK_FLAGS_CLR  = 0xFF00;
-    
-    
-    public static final int CMP_FORE        = 0x010000;
-    
-    public static final int CMP_BACK        = 0x020000;
-    
-    public static final int CMP_FLAGS       = 0x040000;
-    
-    public static final int CMP_FONT        = 0x080000;
-    
-    public static final int CMP_CHAR        = 0x100000;
-    
-    public static final int CMP_FLAGS_ALL   = CMP_FLAGS | MASK_FLAGS_SET;
-    
-    public static final int CMP_FLAGS_PUBLIC= CMP_FLAGS | 0x003F;
-    
-    public static final int CMP_PUBLIC      = CMP_CHAR | CMP_FORE | CMP_BACK | CMP_FONT | CMP_FLAGS_PUBLIC;
-    
-    public static final int CMP_ALL         = CMP_PUBLIC | CMP_FLAGS_ALL;
-    
-    public static final int CMP_IDENTICAL   = 0xFFFFFFFF;    
-
-    
-    @Override
-    public final boolean equals(Object object) {
-        if(!(object instanceof AnsiAttr)) {
-            return false;
-        }
-        return equals((AnsiAttr)object, AnsiAttr.CMP_PUBLIC);
-    }
-    
-    public final boolean equals(AnsiAttr value, int flags) {
-        if(this == value) {
-            return true;
-        }
-        if (Bitwise.has(flags, AnsiAttr.CMP_FORE) && getFore() != value.getFore()) {
-            return false;
-        }
-        if (Bitwise.has(flags, AnsiAttr.CMP_BACK) && getBack() != value.getBack()) {
-            return false;
-        }
-        if (Bitwise.has(flags, AnsiAttr.CMP_FONT) && getFont() != value.getFont()) {
-            return false;
-        }
-        if ((getFlags() & flags) != (value.getFlags() & flags)) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public final int hashCode() {
-        return HashUtils.hashValues(7, 19, getFore(), getBack(), getFlags() & AnsiAttr.CMP_PUBLIC);
-    }
-    
-    @Override
-    public final String toString() {
-        return String.format("AnsiAttr{%d %d %d %s}", getBack(), getFore(), getFont(), AnsiStrings.encodeFlags(getFlags()));
-    }
-    
-    /**
-     * Zwraca przypisany numer koloru tekstu. Numer może być zamieniony na
-     * graficzną reprezentację za pomocą {@link AnsiColorScheme}.
-     * @see #getComputedFore() 
-     * @return
-     */
-    public abstract int getFore();
-    
-    /**
-     * Zwraca przypisany numer koloru tła. Numer może być zamieniony na
-     * graficzną reprezentację za pomocą {@link AnsiColorScheme}. 
-     * @see #getComputedBack() 
-     * @return
-     */
-    public abstract int getBack();
-    
-    /**
-     * Zwraca przypisane atrybuty tekstu.
-     * @return
-     */
-    public abstract int getFlags();
-    
-    /**
-     * Zwraca przypisany numer czcionki. Numer może być zamieniony na
-     * graficzną reprezentację za pomocą {@link AnsiFontScheme}.
-     * @see #getComputedFont()
-     * @return
-     */
-    public abstract int getFont();
-    
-    /**
-     * Metoda opcjonalna: zwraca przypisany kolor tekstu. Ogólnie metoda zwraca rozsądny
-     * wynik, jeśli obiekt został powiązany z odpowiednim schematem kolorów
-     * ({@link AnsiColorScheme}.
-     * @return
-     */
-    public abstract Color getComputedFore();
-    
-    /**
-     * Metoda opcjonalna: zwraca przypisany kolor tła. Ogólnie metoda zwraca rozsądny
-     * wynik, jeśli obiekt został powiązany z odpowiednim schematem kolorów
-     * ({@link AnsiColorScheme}.
-     * @return
-     */
-    public abstract Color getComputedBack();
-
-    /**
-     * Metoda opcjonalna: zwraca przypisaną czcionkę. Ogólnie metoda zwraca rozsądny
-     * wynik, jeśli obiekt został powiązany z odpowiednim schematem czcionek
-     * ({@link AnsiFontScheme}.
-     * @return
-     */
-    public abstract Font getComputedFont();
-    
-    public final boolean isDefault() {
-        return 
-            0 == getBack() &&
-            0 == getFore() &&
-            0== getFont() &&
-            AnsiAttr.NORMAL == getFlags();
-    }
-    
-    public final boolean isComputedDefault() {
-        return 
-            null == getComputedBack() &&
-            null == getComputedFore() &&
-            null == getComputedFont() &&
-            AnsiAttr.NORMAL == getFlags();
-    }
-    
-    public static class Value extends AnsiAttr {
-        
-        private static final long serialVersionUID = 1L;
-        
-        protected final int back;
-        protected final int fore;
-        protected final int font;
-        protected final int flags;
-        
-        public Value(int back, int fore, int font, int flags) {
-            this.back = back;
-            this.fore = fore;
-            this.font = font;
-            this.flags = flags;
-        }
-
-        @Override
-        public final int getFore() {
-            return fore;
-        }
-
-        @Override
-        public final int getBack() {
-            return back;
-        }
-
-        @Override
-        public final int getFlags() {
-            return flags;
-        }
-
-        @Override
-        public final int getFont() {
-            return font;
-        }
-
-        @Override
-        public Color getComputedFore() {
-            return null;
-        }
-
-        @Override
-        public Color getComputedBack() {
-            return null;
-        }
-
-        @Override
-        public Font getComputedFont() {
-            return null;
-        }
-        
-    }
-    
-    public static class Mutable extends AnsiAttr {
-        
-        private static final long serialVersionUID = 1L;
-        
-        protected int back;
-        protected int fore;
-        protected int font;
-        protected int flags;
-        
-        public Mutable() {
-            this(0, 0, 0, AnsiAttr.NORMAL);
-        }
-        
-        public Mutable(int back, int fore, int font, int flags) {
-            this.back = back;
-            this.fore = fore;
-            this.font = font;
-            this.flags = flags;
-        }
-
-        @Override
-        public final int getFore() {
-            return fore;
-        }
-
-        @Override
-        public final int getBack() {
-            return back;
-        }
-
-        @Override
-        public final int getFlags() {
-            return flags;
-        }
-
-        @Override
-        public final int getFont() {
-            return font;
-        }
-
-        @Override
-        public Color getComputedFore() {
-            return null;
-        }
-
-        @Override
-        public Color getComputedBack() {
-            return null;
-        }
-
-        @Override
-        public Font getComputedFont() {
-            return null;
-        }
-        
-    }
-    
-
-}

+ 0 - 93
assira/src/main/java/net/ranides/assira/text/format/AnsiBuilder.java

@@ -1,93 +0,0 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.text.format;
-
-import net.ranides.assira.text.StringUtils;
-
-/**
- *
- * @author ranides
- */
-public class AnsiBuilder extends AnsiString {
-    
-    private static final long serialVersionUID = 3L;
-    
-    private int position;
-    
-    public AnsiBuilder() {
-        this(16);
-    }
-    
-    public AnsiBuilder(int capacity) {
-        super(capacity);
-        position = 0;
-    }
-    
-    public AnsiBuilder append(AnsiCharSequence seq) {
-        int count = seq.length();
-        checkCapacityFor(count);
-        for(int i=0; i<count; i++) {
-            text[position] = seq.charAt(i);
-            backList[position] = (byte)seq.getBackAt(i);
-            foreList[position] = (byte)seq.getForeAt(i);
-            flagList[position] = (char)seq.getFlagsAt(i);
-            fontList[position] = (byte)seq.getFontAt(i);
-            position++;
-        }
-        return this;
-    }
-    
-    public AnsiBuilder append(CharSequence seq, AnsiAttr attributes) {
-        int count = seq.length();
-        checkCapacityFor(count);
-        
-        setAttr(position, position+count, attributes);
-        replace(position, seq);
-        position += count;
-        return this;
-    }
-    
-    public AnsiBuilder append(int count, char ch, AnsiAttr attributes) {
-        checkCapacityFor(count);
-        
-        setAttr(position, position+count, attributes);
-        replace(position, StringUtils.repeat(count, ch));
-        position += count;
-        return this;
-    }
-
-    protected void checkCapacityFor(int count) {
-        int capacity = position + count;
-        if(capacity >= text.length ) {
-            
-            char[] newText = new char[capacity];
-            byte[] newForeList = new byte[capacity];
-            byte[] newBackList = new byte[capacity];
-            char[] newFlagList = new char[capacity];
-            byte[] newFontList = new byte[capacity];
-            
-            System.arraycopy(text, 0, newText, 0, text.length);
-            System.arraycopy(foreList, 0, newForeList, 0, foreList.length);
-            System.arraycopy(backList, 0, newBackList, 0, backList.length);
-            System.arraycopy(flagList, 0, newFlagList, 0, flagList.length);
-            System.arraycopy(fontList, 0, newFontList, 0, fontList.length);
-            
-            text = newText;
-            foreList = newForeList;
-            backList = newBackList;
-            flagList = newFlagList;
-            fontList = newFontList;
-        }
-
-    }
-    
-    public AnsiString result() {
-        AnsiString ret = new AnsiString(text, backList, foreList, flagList, fontList, position);
-        ret.setScheme(scheme);
-        return ret;
-    }
-}

+ 0 - 490
assira/src/main/java/net/ranides/assira/text/format/AnsiCharSequence.java

@@ -1,490 +0,0 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-
-package net.ranides.assira.text.format;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.io.Serializable;
-import java.util.Iterator;
-import net.ranides.assira.math.Bitwise;
-
-/**
- * Klasa reprezentująca ciąg znaków razem z przypisanymi do nich atrybutami 
- * (kolor tekstu, tła, czcionka, styl)
- * @author ranides
- */
-public abstract class AnsiCharSequence implements CharSequence, Serializable {
-    
-    private static final long serialVersionUID = 4L;
-    
-    private int hash;
-    
-    /**
-     * Odczytuje z sekwencji znak o podanym indeksie. Zwraca wynik identyczny jak
-     * {@link #charAt}. Metoda istniejąca w celu uzyskania pełnej kompatybilności
-     * sekwencji znaków z konwencją JavaBeans.
-     * @param index
-     * @return
-     */
-    public abstract char getCharAt(int index);
-    
-    /**
-     * Zwraca numer koloru tekstu przypisany do znaku o podanym indeksie. 
-     * Numer może być zamieniony na graficzną reprezentację za pomocą {@link AnsiColorScheme}.
-     * @see #getComputedForeAt 
-     * @param index
-     * @return
-     */
-    public abstract int getForeAt(int index);
-    
-    /**
-     * Zwraca numer koloru tła przypisany do znaku o podanym indeksie. 
-     * Numer może być zamieniony na graficzną reprezentację za pomocą {@link AnsiColorScheme}.
-     * @see #getComputedBackAt
-     * @param index
-     * @return
-     */
-    public abstract int getBackAt(int index);
-    
-    /**
-     * Zwraca atrybuty przypisane do znaku o podanym indeksie. 
-     * @param index
-     * @return
-     */
-    public abstract int getFlagsAt(int index);
-    
-    /**
-     * Zwraca numer czcionki przypisany do znaku o podanym indeksie. 
-     * Numer może być zamieniony na graficzną reprezentację za pomocą {@link AnsiFontScheme}.
-     * @see #getComputedFontAt
-     * @param index
-     * @return
-     */
-    public abstract int getFontAt(int index);
-    
-    /**
-     * Zwraca wszystkie właściwości przypisane do znaku o podanym indeksie
-     * (kolor, tło, czcionka, styl).
-     * @param index
-     * @return
-     */
-    public final AnsiAttr getAttrAt(int index) {
-        return new AttrView(index);
-    }
-    
-    /**
-     * Metoda opcjonalna: zwraca kolor tekstu przypisany do znaku o podanym indeksie.
-     * Ogólnie metoda zwraca rozsądny wynik, jeśli obiekt został powiązany 
-     * z odpowiednim schematem kolorów
-     * ({@link AnsiColorScheme}.
-     * @param index
-     * @return
-     */
-    public abstract Color getComputedForeAt(int index);
-    
-    /**
-     * Metoda opcjonalna: zwraca kolor tła przypisany do znaku o podanym indeksie.
-     * Ogólnie metoda zwraca rozsądny wynik, jeśli obiekt został powiązany 
-     * z odpowiednim schematem kolorów
-     * ({@link AnsiColorScheme}.
-     * @param index
-     * @return
-     */
-    public abstract Color getComputedBackAt(int index);    
-
-    /**
-     * Metoda opcjonalna: zwraca numer czcionki przypisany do znaku o podanym indeksie.
-     * Ogólnie metoda zwraca rozsądny wynik, jeśli obiekt został powiązany 
-     * z odpowiednim schematem czcionek
-     * ({@link AnsiFontScheme}.
-     * @param index
-     * @return
-     */
-    public abstract Font getComputedFontAt(int index);
-    
-    /**
-     * Zwraca schemat kolorów skojarzony z sekwencją znaków. Schemat powiązany
-     * z sekwencją odpowiada za prawidłowe działanie metod {@link #getComputedFore},
-     * {@link #getComputedBack}, {@link #getComputedFont} oraz pochodnych.
-     * @return
-     */
-    public abstract AnsiScheme getScheme();
-    
-    public abstract void setScheme(AnsiScheme scheme);
-    
-    public abstract void setCharAt(int index, char value);
-    
-    public void replace(int index, CharSequence value) {
-        for(int i=0, n = value.length(); i<n; i++) {
-            setCharAt(index+i, value.charAt(i));
-        }
-    }
-    
-    public void setBackAt(int index, int color) {
-        setBack(index, index+1, color);
-    }
-    
-    public void setForeAt(int index, int color) {
-        setFore(index, index+1, color);
-    }
-    
-    public void setFontAt(int index, int font) {
-        setFont(index, index+1, font);
-    }
-    
-    public void setFlagsAt(int index, int flags) {
-        setFlags(index, index+1, flags);
-    }
-    
-    public void setAttrAt(int index, AnsiAttr attr) {
-        setBackAt(index, attr.getBack());
-        setForeAt(index, attr.getFore());
-        setFontAt(index, attr.getFont());
-        setFlagsAt(index, attr.getFlags());
-    }
-
-    public abstract void setBack(int from, int to, int attr);
-    
-    public abstract void setFore(int from, int to, int attr);
-    
-    public abstract void setFont(int from, int to, int font);
-    
-    public abstract void setFlags(int from, int to, int flags);
-    
-    public final void setAttr(int from, int to, AnsiAttr attr) {
-        setBack(from, to, attr.getBack());
-        setFore(from, to, attr.getFore());
-        setFont(from, to, attr.getFont());
-        setFlags(from, to, attr.getFlags());
-    }
-    
-    /**
-     * Rozbija tekst na fragmenty według kryterium {@link AnsiAttr#CMP_ALL}
-     * @return
-     */
-    public final Iterable<AnsiRegion> regions() {
-        return regions(AnsiAttr.CMP_ALL);
-    }
-    
-    /**
-     * <p>
-     * Rozbija tekst na fragmenty zawierające znaki zgrupowane według kryteriów 
-     * podanych w opcjach. Opcje są zbiorem flag z klasy {@link AnsiAttr}.
-     * </p><p>
-     * Rozdziela tekst na fragmenty o jednym kolorze tekstu i tła:<br/>
-     * {@code text.split(AnsiAttr.CMP_FORE | AnsiAttr.CMP_BACK)}
-     * </p><p>
-     * Rozdziela tekst na fragmenty o tym samym stylu pogrubienia:<br/>
-     * {@code text.split(AnsiAttr.CMP_FLAGS | AnsiAttr.BOLD)}
-     * </p>
-     * @param options
-     * @return
-     */
-    public Iterable<AnsiRegion> regions(final int options) {
-        return () -> new RegionIterator(options);
-    }
-    
-    @Override
-    public final char charAt(int index) {
-        return getCharAt(index);
-    }
-    
-    @Override
-    public AnsiCharSequence subSequence(int begin, int end) {
-        return new Fragment(this, begin, end);
-    }
-    
-    @Override
-    public int hashCode() {
-        int h = hash;
-        int n = length();
-        if (h == 0 && n>0) {
-            for (int i = 0; i < n; i++) {
-                h = 31 * h + charAt(i) + 37 * getBackAt(i) + 53 * getForeAt(i);
-            }
-            hash = h;
-        }
-        return h;
-    }
-
-    @Override
-    public boolean equals(Object object) {
-        if(object instanceof AnsiCharSequence) {
-            return equals((AnsiCharSequence)object, AnsiAttr.CMP_PUBLIC);
-        }
-        return false;
-    }
-    
-    public boolean equals(AnsiCharSequence value, int flags) {
-        if( this == value ) { // NOPMD
-            return true;
-        }
-        if( value.length() != length() ) {
-            return false;
-        }
-        for(int i=0, n=value.length(); i<n; i++) {
-            if (Bitwise.has(flags, AnsiAttr.CMP_CHAR) && value.charAt(i) != charAt(i)) {
-                return false;
-            }
-            if( !value.getAttrAt(i).equals(getAttrAt(i), flags) ) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public final String toString() {
-        return new StringBuilder(length()).append(this).toString();
-    }
-    
-    
-    private class RegionIterator implements Iterator<AnsiRegion> {
-        
-        private final int options;
-        private int index = 0;
-
-        public RegionIterator(int options) {
-            this.options = options;
-        }
-
-        @Override
-        public boolean hasNext() {
-            return index < AnsiCharSequence.this.length();
-        }
-
-        @Override
-        @SuppressWarnings("PMD.CyclomaticComplexity")
-        public AnsiRegion next() {
-            final int start = index;
-            final AttrView attr = new AttrView(start);
-            final boolean sfc = Bitwise.has(options, AnsiAttr.CMP_FORE);
-            final boolean sfb = Bitwise.has(options, AnsiAttr.CMP_BACK);
-            final boolean sfs = Bitwise.has(options, AnsiAttr.CMP_FLAGS);
-            final boolean sff = Bitwise.has(options, AnsiAttr.CMP_FONT);
-            
-            index++;
-            int max = AnsiCharSequence.this.length();
-            while(index<max) {
-                if( sfc && getForeAt(index)!=attr.getFore()) { break; }
-                if( sfb && getBackAt(index)!=attr.getBack() ) { break;  }
-                if( sfs && (getFlagsAt(index) & options)!=(attr.getFlags()&options)) { break; }
-                if( sff && getFontAt(index)!=attr.getFont()) { break; }
-                index++;
-            }
-            
-            return new AnsiRegion(attr, subSequence(start, index));
-        }
-
-        @Override
-        public void remove() {
-            throw new UnsupportedOperationException("Strings are immutable.");
-        }
-    }
-    
-    private class AttrView extends AnsiAttr {
-        
-        private static final long serialVersionUID = 3L;
-        
-        private final int index;
-
-        /**
-         * Tworzy obiekt reprezentujący atrybuty znaku o podanym indeksie, zapisanego
-         * w podanej sekwencji. Modyfikacja powiązanej sekwencji natychmiast jest
-         * widoczna w obiekcie.
-         * @param sequence
-         * @param index
-         */
-        public AttrView(int index) {
-            this.index = index;
-        }
-
-        @Override
-        public Color getComputedBack() {
-            return getComputedBackAt(index);
-        }
-
-        @Override
-        public Font getComputedFont() {
-            return getComputedFontAt(index);
-        }
-
-        @Override
-        public Color getComputedFore() {
-            return getComputedForeAt(index);
-        }
-
-        @Override
-        public int getFlags() {
-            return getFlagsAt(index);
-        }
-
-        @Override
-        public int getBack() {
-            return getBackAt(index);
-        }
-
-        @Override
-        public int getFont() {
-            return getFontAt(index);
-        }
-
-        @Override
-        public int getFore() {
-            return getForeAt(index);
-        }
-        
-    }
-    
-    private static class Fragment extends AnsiCharSequence {
-
-        private static final long serialVersionUID = 3L;
-
-        protected final AnsiCharSequence source;
-        protected final int left;
-        protected final int right;
-
-        public Fragment(AnsiCharSequence source, int left, int right) {
-            this.source = source;
-            this.left = left;
-            this.right = right;
-        }
-
-        @Override
-        public Color getComputedForeAt(int index) {
-            return source.getComputedForeAt(left + index);
-        }
-
-        @Override
-        public Color getComputedBackAt(int index) {
-            return source.getComputedBackAt(left + index);
-        }
-
-        @Override
-        public int getForeAt(int index) {
-            return source.getForeAt(left + index);
-        }
-
-        @Override
-        public int getBackAt(int index) {
-            return source.getBackAt(left + index);
-        }
-
-        @Override
-        public int getFlagsAt(int index) {
-            return source.getFlagsAt(left + index);
-        }
-
-        @Override
-        public Font getComputedFontAt(int index) {
-            return source.getComputedFontAt(left + index);
-        }
-
-        @Override
-        public int getFontAt(int index) {
-            return source.getFontAt(left + index);
-        }
-
-        @Override
-        public AnsiCharSequence subSequence(int begin, int end) {
-            return new Fragment(source, left+begin, left+end);
-        }
-
-        @Override
-        public int length() {
-            return right - left;
-        }
-
-        @Override
-        public char getCharAt(int index) {
-            return source.charAt(left + index);
-        }
-
-        @Override
-        public AnsiScheme getScheme() {
-            return source.getScheme();
-        }
-
-        @Override
-        public void setScheme(AnsiScheme scheme) {
-            source.setScheme(scheme);
-        }
-
-        @Override
-        public void setCharAt(int index, char value) {
-            source.setCharAt(left + index, value);
-        }
-        
-        @Override
-        public void setBackAt(int index, int color) {
-            source.setBackAt(left+index, color);
-        }
-
-        @Override
-        public void setForeAt(int index, int color) {
-            source.setForeAt(left+index, color);
-        }
-
-        @Override
-        public void setFontAt(int index, int font) {
-            source.setFontAt(left+index, font);
-        }
-
-        @Override
-        public void setFlagsAt(int index, int flags) {
-            source.setFlagsAt(left+index, flags);
-        }
-
-        @Override
-        public void setAttrAt(int index, AnsiAttr attr) {
-            source.setAttrAt(left+index, attr);
-        }
-
-        @Override
-        public void setBack(int from, int to, int attr) {
-            source.setBack(left + from, left + to, attr);
-        }
-
-        @Override
-        public void setFore(int from, int to, int attr) {
-            source.setFore(left + from, left + to, attr);
-        }
-
-        @Override
-        public void setFont(int from, int to, int font) {
-            source.setFont(left + from, left + to, font);
-        }
-
-        @Override
-        public void setFlags(int from, int to, int flags) {
-            source.setFlags(left + from, left + to, flags);
-        }
-        
-        @Override
-        public boolean equals(Object object) {
-            if(this == object) {
-                    return true;
-                }
-            if (object instanceof Fragment) {
-                final Fragment other = (Fragment)object;
-                if( source == other.source )  {
-                    return (left == other.left) && (right == other.right);
-                }
-            }
-            return super.equals(object);
-        }
-
-        @Override
-        public int hashCode() {
-            return super.hashCode();
-        }
-        
-        
-
-    }
-}

+ 0 - 66
assira/src/main/java/net/ranides/assira/text/format/AnsiMatch.java

@@ -1,66 +0,0 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.text.format;
-
-import java.io.Serializable;
-import java.util.regex.Matcher;
-
-/**
- *
- * @author Ranides Atterwim <ranides@gmail.com>
- */
-public final class AnsiMatch implements Serializable {
-    
-    private static final long serialVersionUID = 1L;
-    
-    private final AnsiCharSequence source;
-    
-    private final int[] groups;
-    
-    AnsiMatch(AnsiCharSequence source, int start, int end) {
-        this.source = source;
-        this.groups = new int[]{start, end};
-    }
-    
-    AnsiMatch(AnsiCharSequence source, Matcher hit) {
-        this.source = source;
-        this.groups = new int[2*hit.groupCount()+2];
-        for(int i=0, n=hit.groupCount(); i<=n; i++) {
-            this.groups[2*i+0] = hit.start(i);
-            this.groups[2*i+1] = hit.end(i);
-        }
-    }
-    
-    public AnsiCharSequence value() {
-        return source.subSequence(begin(), end());
-    }
-    
-    public AnsiCharSequence group(int index) {
-        return source.subSequence(begin(index), end(index));
-    }
-    
-    public int groups() {
-        return groups.length / 2 - 1;
-    }
-    
-    public int begin(int index) {
-        return groups[2*index];
-    }
-    
-    public int end(int index) {
-        return groups[2*index+1];
-    }
-    
-    public int begin() {
-        return groups[0];
-    }
-    
-    public int end() {
-        return groups[1];
-    }
-    
-}

+ 0 - 152
assira/src/main/java/net/ranides/assira/text/format/AnsiPattern.java

@@ -1,152 +0,0 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.text.format;
-
-import java.io.Serializable;
-import java.util.Iterator;
-import java.util.function.Consumer;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import net.ranides.assira.collection.iterators.ForwardIterator;
-import net.ranides.assira.text.StringUtils;
-
-
-/**
- *
- * @author Ranides Atterwim <ranides@gmail.com>
- */
-public abstract class AnsiPattern implements Serializable {
-    
-    private static final long serialVersionUID = 1L;
-    
-    public Iterable<AnsiMatch> find(final AnsiCharSequence input) {
-        return () -> iterator(input);
-    }
-    
-    public boolean matches(AnsiCharSequence input) {
-        return find(input).iterator().hasNext();
-    }
-    
-    public boolean apply(AnsiCharSequence input, AnsiAttr attribute) {
-        boolean ret = false;
-        for(AnsiMatch item : find(input)) {
-            ret = true;
-            if( item.groups()>0 ) {
-                for(int i=1; i<=item.groups(); i++) {
-                    AnsiStrings.apply(item.group(i), attribute);
-                }
-            } else {
-                AnsiStrings.apply(item.value(), attribute);
-            }
-        }
-        return ret;
-    }
-    
-    protected abstract Iterator<AnsiMatch> iterator(AnsiCharSequence input);
-    
-    public static class REPattern extends AnsiPattern implements Serializable {
-        
-        private static final long serialVersionUID = 1L;
-        
-        private final Pattern regex;
-        
-        public REPattern(String regex) {
-            this.regex = Pattern.compile(regex);
-        }
-        
-        public REPattern(String regex, int flags) {
-            this.regex = Pattern.compile(regex, flags);
-        }
-
-        public REPattern(Pattern regex) {
-            this.regex = regex;
-        }
-        
-        @Override
-        public Iterator<AnsiMatch> iterator(final AnsiCharSequence input) {
-            return new RIterator(input, regex);
-        }
-        
-        public String pattern() {
-            return this.regex.pattern();
-        }
-        
-        public int flags() {
-            return this.regex.flags();
-        }
-            
-    }
-    
-    public static class MSPattern extends AnsiPattern implements Serializable {
-        
-        private static final long serialVersionUID = 1L;
-        
-        private final String pattern;
-
-        public MSPattern(String pattern) {
-            this.pattern = pattern;
-        }
-        
-        @Override
-        public Iterator<AnsiMatch> iterator(final AnsiCharSequence input) {
-            return new SIterator(input, pattern);
-        }
-        
-        public String pattern() {
-            return pattern;
-        }
-            
-    }
-    
-    private static class SIterator extends ForwardIterator<AnsiMatch> {
-
-        private final AnsiCharSequence input; 
-        private final String pattern;
-        private int offset = -1;
-
-        public SIterator(AnsiCharSequence input, String pattern) {
-            this.input = input;
-            this.pattern = pattern;
-        }
-
-        @Override
-        protected boolean next(Consumer<? super AnsiMatch> action) {
-            offset = StringUtils.indexOf(input, pattern, offset+1);
-            if(offset>=0) {
-                action.accept(new AnsiMatch(input, offset, offset+pattern.length()));
-                return true;
-            } else {
-                return false;
-            }
-        }
-
-    }
-    
-    private static class RIterator extends ForwardIterator<AnsiMatch> {
-        
-        private final AnsiCharSequence input; 
-        private final Matcher matcher;
-
-        public RIterator(AnsiCharSequence input, Pattern pattern) {
-            this.input = input;
-            this.matcher = pattern.matcher(input);
-        }
-
-        @Override
-        protected boolean next(Consumer<? super AnsiMatch> action) {
-            if( matcher.find() ) {
-                action.accept(new AnsiMatch(input, matcher));
-                return true;
-            } else {
-                return false;
-            }
-        }
-        
-    }
-    
-    
-}

+ 0 - 40
assira/src/main/java/net/ranides/assira/text/format/AnsiRegion.java

@@ -1,40 +0,0 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.text.format;
-
-import java.io.Serializable;
-
-/**
- *
- * @author Ranides Atterwim <ranides@gmail.com>
- */
-public final class AnsiRegion implements Serializable {
-    
-    private static final long serialVersionUID = 1L;
-    
-    private final AnsiAttr attr;
-    private final AnsiCharSequence value;
-
-    AnsiRegion(AnsiAttr attr, AnsiCharSequence value) {
-        this.value = value;
-        this.attr = attr;
-    }
-
-    public AnsiAttr attr() {
-        return attr;
-    }
-
-    public AnsiCharSequence value() {
-        return value;
-    }
-
-    @Override
-    public String toString() {
-        return "Region{" + "attr=" + attr + ", value=" + value + '}';
-    }
-    
-}

+ 0 - 160
assira/src/main/java/net/ranides/assira/text/format/AnsiScheme.java

@@ -1,160 +0,0 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.text.format;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import net.ranides.assira.generic.CompareUtils;
-import net.ranides.assira.generic.HashUtils;
-
-/**
- *
- * @author Ranides Atterwim <ranides@gmail.com>
-  */
-public final class AnsiScheme implements Serializable {
-    
-    private static final long serialVersionUID = 0x401L;
-    
-    public static final AnsiScheme DEFAULT = new AnsiScheme();
-    
-    private final Map<Integer, Color> colors;
-    
-    private final Map<Integer, Font> fonts;
-    
-    public AnsiScheme() {
-        colors = new HashMap<>();
-        fonts = new HashMap<>();
-    }
-    
-    public AnsiScheme(AnsiScheme scheme) {
-        colors = new HashMap<>(scheme.colors);
-        fonts = new HashMap<>(scheme.fonts);
-    }
-
-    public Collection<Color> colors() {
-        return colors.values();
-    }
-    
-    public Collection<Font> fonts() {
-        return fonts.values();
-    }
-    
-    public Color getColor(int index) {
-        return colors.containsKey(index) ? colors.get(index) : null;
-    }
-    
-    public Font getFont(int index) {
-        return fonts.containsKey(index) ? fonts.get(index) : null;
-    }
-    
-    public void setColor(int index, Color color) {
-        if(0 == index) {
-            throw new IllegalArgumentException("default entry is immutable");
-        }
-        colors.put(index, color);
-    }
-    
-    public void setFont(int index, Font font) {
-        if(0 == index) {
-            throw new IllegalArgumentException("default entry is immutable");
-        }
-        fonts.put(index, font);
-    }
-    
-    public int addColor(Color color) {
-        int i = colors.size() + 1;
-        while(colors.containsKey(i)) {
-            i++;
-        }
-        colors.put(i, color);
-        return i;
-    }
-    
-    public int addFont(Font font) {
-        int i = fonts.size() + 1;
-        while(fonts.containsKey(i)) {
-            i++;
-        }
-        fonts.put(i, font);
-        return i;
-    }
-    
-    public AnsiSchemeAttr addAttr(Color back, Color fore, Font font, int flags) {
-        return new AnsiSchemeAttr(addColor(back), addColor(fore), addFont(font), flags);
-    }
-    
-    public AnsiSchemeAttr compute(AnsiAttr value) {
-        return new AnsiSchemeAttr(value.getBack(), value.getFore(), value.getFont(), value.getFlags());
-    }
-
-    @Override
-    public int hashCode() {
-        return HashUtils.hashValues(7, 83, colors, fonts);
-    }
-
-    @Override
-    public boolean equals(Object object) {
-        if(!(object instanceof AnsiScheme)) {
-            return false;
-        }
-        AnsiScheme value = (AnsiScheme)object;
-        return 
-            CompareUtils.equals(colors, value.colors) &&
-            CompareUtils.equals(fonts, value.fonts);
-    }
-    
-    
-    
-    public class AnsiSchemeAttr extends AnsiAttr.Mutable {
-        
-        private static final long serialVersionUID = 4L;
-        
-        public AnsiSchemeAttr(int back, int fore, int font, int flags) {
-            this.back = back;
-            this.fore = fore;
-            this.font = font;
-            this.flags = flags;
-        }
-        
-        @Override
-        public Color getComputedFore() {
-            return AnsiScheme.this.getColor(fore);
-        }
-
-        @Override
-        public Color getComputedBack() {
-            return AnsiScheme.this.getColor(back);
-        }
-
-        @Override
-        public Font getComputedFont() {
-            return AnsiScheme.this.getFont(font);
-        }
-        
-        public void setFont(Font value) {
-            AnsiScheme.this.setFont(font, value);
-        }
-        
-        public void setFore(Color value) {
-            AnsiScheme.this.setColor(fore, value);
-        }
-        
-        public void setBack(Color value) {
-            AnsiScheme.this.setColor(back, value);
-        }
-        
-        public void setFlags(int value) {
-            this.flags = value;
-        }
-
-    }
-    
-}

+ 0 - 239
assira/src/main/java/net/ranides/assira/text/format/AnsiString.java

@@ -1,239 +0,0 @@
-/*
- *  @author Ranides Atterwim <ranides@gmail.com>
- *  @copyright Ranides Atterwim
- *  @license WTFPL
- *  @url http://ranides.net/projects/
- */
-package net.ranides.assira.text.format;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.util.Arrays;
-import net.ranides.assira.math.Bitwise;
-
-/**
- *
- * @author ranides
- */
-public class AnsiString extends AnsiCharSequence {
-
-    private static final long serialVersionUID = 0x202L;
-
-    protected enum Init { DIRECT }
-
-    protected char[] text;
-    protected byte[] foreList; 
-    protected byte[] backList; 
-    protected char[] flagList; 
-    protected byte[] fontList; 
-    
-    protected AnsiScheme scheme = AnsiScheme.DEFAULT;
-
-    public AnsiString(AnsiCharSequence sequence) {
-        this(sequence, 0, sequence.length());
-    }
-    
-    public AnsiString(String text) {
-        this(Init.DIRECT, text.toCharArray());
-    }
-    
-    public AnsiString(AnsiCharSequence source, int begin, int end) {
-        if (source instanceof AnsiString) {
-            AnsiString str  = (AnsiString)source;
-            this.scheme     = str.scheme;
-            this.text       = Arrays.copyOfRange(str.text, begin, end);
-            this.foreList   = Arrays.copyOfRange(str.foreList, begin, end);
-            this.backList   = Arrays.copyOfRange(str.backList, begin, end);
-            this.flagList   = Arrays.copyOfRange(str.flagList, begin, end);
-            this.fontList   = Arrays.copyOfRange(str.fontList, begin, end);
-        } else {
-            int count       = end-begin;
-            this.scheme     = source.getScheme();
-            this.text       = new char[count];
-            this.foreList   = new byte[count];
-            this.backList   = new byte[count];
-            this.flagList   = new char[count];
-            this.fontList   = new byte[count];
-            for(int i=0; i<count; i++) {
-                int offset = i+begin;
-                this.text[i]        = source.charAt(offset);
-                this.foreList[i]    = (byte)source.getForeAt(offset);
-                this.backList[i]    = (byte)source.getBackAt(offset);
-                this.flagList[i]    = (char)source.getFlagsAt(offset);
-                this.fontList[i]    = (byte)source.getFontAt(offset);
-            }
-        }
-    }
-    
-    @SuppressWarnings("PMD")
-    protected AnsiString(Init _i, char[] text) {
-        this.text       = text;
-        this.foreList   = new byte[ text.length ];
-        this.backList   = new byte[ text.length ];
-        this.flagList   = new char[ text.length ];
-        this.fontList   = new byte[ text.length ];
-    }
-    
-    protected AnsiString(char[] text, byte[] backList, byte[] foreList, char[] flagList, byte[] fontList, int size) {
-        this.text       = Arrays.copyOf(text, size);
-        this.foreList   = Arrays.copyOf(foreList, size);
-        this.backList   = Arrays.copyOf(backList, size);
-        this.flagList   = Arrays.copyOf(flagList, size);
-        this.fontList   = Arrays.copyOf(fontList, size);
-    }
-    
-    protected AnsiString(int capacity) {
-        this.text       = new char[capacity];
-        this.foreList   = new byte[capacity];
-        this.backList   = new byte[capacity];
-        this.flagList   = new char[capacity];
-        this.fontList   = new byte[capacity];
-    }
-
-    @Override
-    public AnsiScheme getScheme() {
-        return scheme;
-    }
-    
-    @Override
-    public Color getComputedForeAt(int index) {
-        return scheme.getColor(getForeAt(index));
-    }
-
-    @Override
-    public Color getComputedBackAt(int index) {
-        return scheme.getColor(getBackAt(index));
-    }
-    
-    @Override
-    public Font getComputedFontAt(int index) {
-        return scheme.getFont(getFontAt(index));
-    }
-    
-    @Override
-    public int getForeAt(int index) {
-        return foreList[index] & 0xFF;
-    }
-    
-    @Override
-    public int getBackAt(int index) {
-        return backList[index] & 0xFF;
-    }
-    
-    @Override
-    public int getFlagsAt(int index) {
-        return flagList[index];
-    }
-
-    @Override
-    public int getFontAt(int index) {
-        return fontList[index] & 0xFF;
-    }
-
-    @Override
-    public int length() {
-        return text.length;
-    }
-
-    @Override
-    public char getCharAt(int index) {
-        return text[index];
-    }
-    
-    @Override
-    public void setScheme(AnsiScheme scheme) {
-        this.scheme = scheme;
-    }
-    
-    @Override
-    public void setCharAt(int index, char value) {
-        text[index] = value;
-    }
-
-    @Override
-    public void setBackAt(int index, int color) {
-        backList[index] = (byte)color;
-    }
-    
-    @Override
-    public void setForeAt(int index, int color) {
-        foreList[index] = (byte)color;
-    }
-    
-    @Override
-    public void setFontAt(int index, int font) {
-        fontList[index] = (byte)font;
-    }
-    
-    @Override
-    public void setFlagsAt(int index, int flags) {
-        flagList[index] &= ~((flags & AnsiAttr.MASK_FLAGS_CLR) >> 8);
-        flagList[index] |= (flags & AnsiAttr.MASK_FLAGS_SET);
-    }
-    
-        
-    @Override
-    public void setBack(int from, int to, int attr) {
-        byte value = (byte)attr;
-        for(int i=from; i<to && i<backList.length; i++) { backList[i] = value; }
-    }
-    
-    @Override
-    public void setFore(int from, int to, int attr) {
-        byte value = (byte)attr;
-        for(int i=from; i<to && i<foreList.length; i++) { foreList[i] = value; }
-    }
-    
-    @Override
-    public void setFont(int from, int to, int font) {
-        byte value = (byte)font;
-        for (int i = from; i < to && i < fontList.length; i++) {
-            fontList[i] = value;
-        }
-    }
-    
-    @Override
-    public void setFlags(int from, int to, int flags) {
-        char clrv = (char)~(char)((flags & AnsiAttr.MASK_FLAGS_CLR) >> 8);
-        char setv = (char)(flags & AnsiAttr.MASK_FLAGS_SET);
-        for (int i = from; i < to && i < flagList.length; i++) {
-            flagList[i] &= clrv;
-            flagList[i] |= setv;
-        }
-    }
-    
-    @SuppressWarnings({
-        "PMD.NPathComplexity", 
-        "PMD.CyclomaticComplexity"
-    })
-    @Override
-    public boolean equals(AnsiCharSequence value, int flags) {
-        if( this == value ) {
-            return true;
-        }
-        if( value.length() != length() ) {
-            return false;
-        }
-        if(value instanceof AnsiString) {
-            AnsiString str = (AnsiString)value;
-            if( Bitwise.has(flags, AnsiAttr.CMP_CHAR) && !Arrays.equals(this.text, str.text)) {
-                return false;
-            }
-            if( Bitwise.has(flags, AnsiAttr.CMP_FORE) && !Arrays.equals(this.foreList, str.foreList)) {
-                return false;
-            }
-            if( Bitwise.has(flags, AnsiAttr.CMP_BACK) && !Arrays.equals(this.backList, str.backList)) {
-                return false;
-            }
-            if( Bitwise.has(flags, AnsiAttr.CMP_FONT) && !Arrays.equals(this.fontList, str.fontList)) {
-                return false;
-            }
-            if( Bitwise.has(flags, AnsiAttr.CMP_FLAGS_ALL) && !Arrays.equals(this.flagList, str.flagList)) {
-                return false;
-            }
-            return super.equals(value, flags & AnsiAttr.CMP_FLAGS_ALL);
-        }
-        return super.equals(value, flags);
-    }
-  
-}

+ 0 - 130
assira/src/main/java/net/ranides/assira/text/format/AnsiStrings.java

@@ -1,130 +0,0 @@
-/*
- * @author Ranides Atterwim <ranides@gmail.com>
- * @copyright Ranides Atterwim
- * @license WTFPL
- * @url http://ranides.net/projects/assira
- */
-package net.ranides.assira.text.format;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import net.ranides.assira.math.Bitwise;
-
-/**
- *
- * @author Ranides Atterwim <ranides@gmail.com>
- */
-public final class AnsiStrings {
-    
-    private AnsiStrings() {
-        // utility class
-    }
-    
-    private static final Pattern VALUE_OF_RE = Pattern.compile(
-        "(?:AnsiAttr\\{)?([0-9]+)\\s+([0-9]+)(?:\\s+([0-9]+))?(?:\\s+([a-z\\+\\- ]+)|\\s+([0-9]+))?\\}?"
-    );
-
-    private static final int VALUE_OF_INT[] = {
-        AnsiAttr.BOLD,
-        AnsiAttr.UNDERLINE,
-        AnsiAttr.INVERT,
-        AnsiAttr.SYMBOL,
-        AnsiAttr.NARROW,
-        AnsiAttr.STRIKE,
-        AnsiAttr.FRESH,
-        AnsiAttr.CHANGED,
-        
-        AnsiAttr.NO_BOLD,
-        AnsiAttr.NO_UNDERLINE,
-        AnsiAttr.NO_INVERT,
-        AnsiAttr.NO_SYMBOL,
-        AnsiAttr.NO_NARROW,
-        AnsiAttr.NO_STRIKE,
-        AnsiAttr.NO_FRESH,
-        AnsiAttr.NO_CHANGED,
-        
-        AnsiAttr.MASK_FLAGS_CLR
-    };
-    
-    private static final String VALUE_OF_STR[] = {
-        "+b",
-        "+u",
-        "+i",
-        "+m",
-        "+n",
-        "+s",
-        "+f",
-        
-        "+c",
-        "-b",
-        "-u",
-        "-i",
-        "-m",
-        "-n",
-        "-s",
-        "-f",
-        "-c",
-        
-        "r"
-    };
-    
-    public static AnsiAttr attr(int back, int fore) {
-        return AnsiStrings.attr(back, fore, 0);
-    }
-    
-    public static AnsiAttr attr(int back, int fore, int font) {
-        return AnsiStrings.attr(back, fore, font, AnsiAttr.NORMAL | AnsiAttr.MASK_FLAGS_CLR);
-    }
-    
-    public static AnsiAttr attr(int back, int fore, int font, int flags) {
-        return new AnsiAttr.Value(back, fore, font, flags);
-    }
-    
-    public static AnsiAttr attr(int back, int fore, int font, String flags) {
-        return new AnsiAttr.Value(back, fore, font, decodeFlags(flags));
-    }
-    
-    public static AnsiAttr attr(String pattern) {
-        Matcher hit = VALUE_OF_RE.matcher(pattern);
-        if(!hit.matches()) {
-            throw new IllegalArgumentException(pattern);
-        }
-        int back = Integer.parseInt(hit.group(1));
-        int fore = Integer.parseInt(hit.group(2));
-        int font = 0;
-        if(null != hit.group(3)) {
-            font = Integer.parseInt(hit.group(3));
-        }
-        return new AnsiAttr.Value(back, fore, font, decodeFlags(hit.group(4)));
-    }
-    
-    public static void apply(AnsiCharSequence text, AnsiAttr attr) {
-        text.setAttr(0, text.length(), attr);
-    }
-    
-    public static int decodeFlags(String value) {
-        if(null == value) {
-            return AnsiAttr.NORMAL;
-        }
-        int ret = 0;
-        for(int i=0, n=VALUE_OF_INT.length; i<n; i++) {
-            if( value.contains(VALUE_OF_STR[i]) ) {
-                ret |= VALUE_OF_INT[i];
-            }
-        }
-        return ret;
-    }
-    
-    public static String encodeFlags(int value) {
-        StringBuilder ret = new StringBuilder();
-        for(int i=0, n=VALUE_OF_INT.length; i<n; i++) {
-            if( Bitwise.has(value, VALUE_OF_INT[i]) ) {
-                ret.append(VALUE_OF_STR[i]);
-            }
-        }
-        return ret.toString();
-    }
-    
-    
-    
-}

+ 4 - 2
assira/src/test/java/net/ranides/assira/io/PathUtilsTest.java

@@ -6,16 +6,18 @@
  */
 package net.ranides.assira.io;
 
+import static net.ranides.assira.junit.NewAssert.*;
+
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.nio.file.FileSystemNotFoundException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import net.ranides.assira.system.HostSystem;
 import org.junit.Assume;
 import org.junit.Test;
-import static net.ranides.assira.junit.NewAssert.*;
+
+import net.ranides.assira.system.HostSystem;
 
 /**
  *