فهرست منبع

new: ColorUtils # fromHexString

new: ConfigEvent - implementuje Event

new: AnsiAttr.DEFAULT - bo się przydaje ...

fix: AnsiBuilder - fix: scheme jest przypisywany do wyniku

refactor: AnsiPattern: publiczne klasy REPattern i SPattern zamiast metod compile/compileRE
Ranides Atterwim 11 سال پیش
والد
کامیت
9539d01ab1

+ 1 - 1
pom.xml

@@ -5,7 +5,7 @@
 
     <groupId>net.ranides</groupId>
     <artifactId>assira</artifactId>
-    <version>0.68.1</version>
+    <version>0.68.3</version>
     <packaging>jar</packaging>
 
     <name>assira</name>

+ 7 - 0
src/main/java/net/ranides/assira/awt/ColorUtils.java

@@ -76,6 +76,13 @@ public final class ColorUtils {
         return Strings.sprintf("#%06x", color.getRGB() & 0xFFFFFF );
     }
     
+    public static Color fromHexString(String value) {
+        if(7 != value.length()) {
+            throw new IllegalArgumentException("Invalid color: " + value);
+        }
+        return new Color(Integer.parseInt(value.substring(1),16));
+    }
+    
     private static int clip(int value) {
         return value < 0 ? 0 : value > 255 ? 255 : value;
     }

+ 3 - 1
src/main/java/net/ranides/assira/config/ConfigEvent.java

@@ -6,11 +6,13 @@
  */
 package net.ranides.assira.config;
 
+import net.ranides.assira.events.Event;
+
 /**
  *
  * @author ranides
  */
-public abstract class ConfigEvent {
+public abstract class ConfigEvent implements Event {
 
     private final Configuration source;
 

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

@@ -20,6 +20,8 @@ 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;

+ 3 - 1
src/main/java/net/ranides/assira/text/format/AnsiBuilder.java

@@ -86,6 +86,8 @@ public class AnsiBuilder extends AnsiString {
     }
     
     public AnsiString result() {
-        return new AnsiString(text, backList, foreList, flagList, fontList, position);
+        AnsiString ret = new AnsiString(text, backList, foreList, flagList, fontList, position);
+        ret.setScheme(scheme);
+        return ret;
     }
 }

+ 57 - 23
src/main/java/net/ranides/assira/text/format/AnsiPattern.java

@@ -6,6 +6,7 @@
  */
 package net.ranides.assira.text.format;
 
+import java.io.Serializable;
 import java.util.Iterator;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -16,30 +17,9 @@ import net.ranides.assira.text.Strings;
  *
  * @author Ranides Atterwim <ranides@gmail.com>
  */
-public abstract class AnsiPattern {
+public abstract class AnsiPattern implements Serializable {
     
-    public static AnsiPattern compile(final String pattern) {
-        return new AnsiPattern() {
-            @Override
-            public Iterator<AnsiMatch> iterator(final AnsiCharSequence input) {
-                return new SIterator(input, pattern);
-            }
-        };
-    }
-    
-    public static AnsiPattern compileRE(String pattern) {
-        return compileRE(pattern, 0);
-    }
-    
-    public static AnsiPattern compileRE(String pattern, int flags) {
-        final Pattern regex = Pattern.compile(pattern, flags);
-        return new AnsiPattern() {
-            @Override
-            public Iterator<AnsiMatch> iterator(final AnsiCharSequence input) {
-                return new RIterator(input, regex);
-            }
-        };
-    }
+    private static final long serialVersionUID = 1L;
     
     public Iterable<AnsiMatch> find(final AnsiCharSequence input) {
         return new Iterable<AnsiMatch>() {
@@ -71,6 +51,60 @@ public abstract class AnsiPattern {
     
     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 VirtualIterator<AnsiMatch> {
 
         private final AnsiCharSequence input; 

+ 21 - 21
src/test/java/net/ranides/assira/text/format/AnsiPatternTest.java

@@ -24,10 +24,10 @@ public class AnsiPatternTest {
     public void testMatchesString() {
         AnsiCharSequence text = new AnsiString("Hello world 23!");
         
-        assertTrue(AnsiPattern.compile("llo").matches(text));
-        assertTrue(AnsiPattern.compile("23!").matches(text));
-        assertFalse(AnsiPattern.compile(".llo").matches(text));
-        assertFalse(AnsiPattern.compile(".23").matches(text));
+        assertTrue(new AnsiPattern.MSPattern("llo").matches(text));
+        assertTrue(new AnsiPattern.MSPattern("23!").matches(text));
+        assertFalse(new AnsiPattern.MSPattern(".llo").matches(text));
+        assertFalse(new AnsiPattern.MSPattern(".23").matches(text));
     }
     
 
@@ -35,27 +35,27 @@ public class AnsiPatternTest {
     public void testMatchesRE() {
         AnsiCharSequence text = new AnsiString("Hello world 23!");
         
-        assertTrue( AnsiPattern.compileRE("l+o").matches(text) );
-        assertTrue( AnsiPattern.compileRE("[0-9]+").matches(text) );
+        assertTrue( new AnsiPattern.REPattern("l+o").matches(text) );
+        assertTrue( new AnsiPattern.REPattern("[0-9]+").matches(text) );
         
-        assertTrue( AnsiPattern.compileRE(".llo").matches(text) );
-        assertTrue( AnsiPattern.compileRE(".23").matches(text) );
+        assertTrue( new AnsiPattern.REPattern(".llo").matches(text) );
+        assertTrue( new AnsiPattern.REPattern(".23").matches(text) );
         
-        assertFalse( AnsiPattern.compileRE("llo\\?").matches(text) );
-        assertFalse( AnsiPattern.compileRE("\\.23").matches(text) );
+        assertFalse( new AnsiPattern.REPattern("llo\\?").matches(text) );
+        assertFalse( new AnsiPattern.REPattern("\\.23").matches(text) );
     }
     
     @Test
     public void testFindString() {
         AnsiCharSequence text = new AnsiString("HellTXTo TXT world TXT!");
         
-        for(AnsiMatch item : AnsiPattern.compile("TXT").find(text)) {
+        for(AnsiMatch item : new AnsiPattern.MSPattern("TXT").find(text)) {
             item.value().setCharAt(1, 'E');
         }
-        for(AnsiMatch item : AnsiPattern.compile("TET").find(text)) {
+        for(AnsiMatch item : new AnsiPattern.MSPattern("TET").find(text)) {
             item.value().setCharAt(1, 'A');
         }
-        for(AnsiMatch item : AnsiPattern.compile("TUT").find(text)) {
+        for(AnsiMatch item : new AnsiPattern.MSPattern("TUT").find(text)) {
             item.value().setCharAt(1, 'Q');
         }
         assertEquals("HellTATo TAT world TAT!", text.toString());
@@ -65,13 +65,13 @@ public class AnsiPatternTest {
     public void testFindRE() {
         AnsiCharSequence text = new AnsiString("Hell4403o 871 world 82!");
         
-        for(AnsiMatch item : AnsiPattern.compileRE("[0-9]+").find(text)) {
+        for(AnsiMatch item : new AnsiPattern.REPattern("[0-9]+").find(text)) {
             item.value().setCharAt(0, '$');
         }
-        for(AnsiMatch item : AnsiPattern.compileRE("[0-9]").find(text)) {
+        for(AnsiMatch item : new AnsiPattern.REPattern("[0-9]").find(text)) {
             item.value().setCharAt(0, '#');
         }
-        for(AnsiMatch item : AnsiPattern.compileRE("[0-9]").find(text)) {
+        for(AnsiMatch item : new AnsiPattern.REPattern("[0-9]").find(text)) {
             item.value().setCharAt(0, '?');
         }
         
@@ -82,7 +82,7 @@ public class AnsiPatternTest {
     public void testFindGroups() {
         AnsiCharSequence text = new AnsiString("Hell4403o 871 world 825!");
         
-        for(AnsiMatch item : AnsiPattern.compileRE("[0-9]([0-9]+)").find(text)) {
+        for(AnsiMatch item : new AnsiPattern.REPattern("[0-9]([0-9]+)").find(text)) {
             item.group(1).setCharAt(0, '$');
         }
         
@@ -95,8 +95,8 @@ public class AnsiPatternTest {
         AnsiAttr a2 = AnsiStrings.attr(3, 4);
         
         AnsiCharSequence text = new AnsiString("Hello world 23!");
-        AnsiPattern.compile("o").apply(text, a1);
-        AnsiPattern.compile("or").apply(text, a2);
+        new AnsiPattern.MSPattern("o").apply(text, a1);
+        new AnsiPattern.MSPattern("or").apply(text, a2);
         
         AnsiCharSequence exp = new AnsiString("Hello world 23!");
         exp.setAttr(4, 5, a1);
@@ -110,7 +110,7 @@ public class AnsiPatternTest {
         AnsiAttr a1 = AnsiStrings.attr(1, 2);
         
         AnsiCharSequence text = new AnsiString("Hello 170 world 23!");
-        AnsiPattern.compileRE("[0-9]+").apply(text, a1);
+        new AnsiPattern.REPattern("[0-9]+").apply(text, a1);
         
         AnsiCharSequence exp = new AnsiString("Hello 170 world 23!");
         exp.setAttr(6, 9, a1);
@@ -123,7 +123,7 @@ public class AnsiPatternTest {
         AnsiAttr a1 = AnsiStrings.attr(1, 2);
         AnsiCharSequence text = new AnsiString("Hell4403o 871 world 825!");
         
-        AnsiPattern.compileRE("[0-9]([0-9]+)").apply(text, a1);
+        new AnsiPattern.REPattern("[0-9]([0-9]+)").apply(text, a1);
         
         AnsiCharSequence exp = new AnsiString("Hell4403o 871 world 825!");
         exp.setAttr(5, 8, a1);