improved codetemplate wizards; new html tag wizards
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / wizards / html / StringDivider.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/StringDivider.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/StringDivider.java
new file mode 100644 (file)
index 0000000..b66137a
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * $Id: StringDivider.java,v 1.1 2004-10-05 20:51:57 jsurfer Exp $
+ * Copyright Narushima Hironori. All rights reserved.
+ */
+package net.sourceforge.phpeclipse.wizards.html;
+
+import java.util.Arrays;
+import java.util.regex.Pattern;
+
+public class StringDivider {
+
+       static Pattern tagNameChoosePattern = Pattern.compile("<[\\s/]*(\\w+)\\s*.*>");
+
+       String[] splitRegexpCandidates = {
+               "\t",
+               ",",
+               "\\s",
+               "\\s+",
+       };
+       
+       public StringDivider() {
+       }
+
+       public String[][] divide(String content){
+               return divide(content, getDivideSuitedRegexp(content));
+       }
+       
+       public String[][] divide(String content, String regexp){
+               String[] lines = content.split("\n");
+               int len = lines.length;
+               String[][] dist = new String[len][];
+               
+               int max = Integer.MIN_VALUE;
+               for (int i = 0; i < len; i++) {
+                       String line = lines[i];
+                       String[] cells = line.split(regexp);
+                       dist[i] = cells;
+                       if(max < cells.length){
+                               max = cells.length;
+                       }
+               }
+               for (int i = 0; i < len; i++) {
+                       String[] newArray = new String[max];
+                       Arrays.fill(newArray, "");
+                       System.arraycopy(dist[i], 0, newArray, 0, dist[i].length);
+                       dist[i] = newArray;
+               }
+               return dist;
+       }
+       
+       public String getDivideSuitedRegexp(String content){
+               String[] lines = content.split("\n");
+               
+               String resultRegexp = null;
+               int score = Integer.MAX_VALUE, cellCount = Integer.MIN_VALUE;
+               
+               for (int i = 0; i < splitRegexpCandidates.length; i++) {
+                       String regexp = splitRegexpCandidates[i];
+                       int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE;
+                       for (int j = 0; j < lines.length; j++) {
+                               String[] vals = lines[j].split(regexp);
+                               if(max < vals.length){
+                                       max = vals.length;
+                               }
+                               if(min > vals.length){
+                                       min = vals.length;
+                               }
+                       }
+                       int s = max - min;
+                       if( score > s || (score == s && max > cellCount)){
+                               cellCount = max;
+                               score = s;
+                               resultRegexp = regexp;
+                       }
+               }
+               return resultRegexp;
+       }
+
+}