1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[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..8439fbc
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * $Id: StringDivider.java,v 1.2 2006-10-21 23:18:43 pombredanne 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;
+       }
+
+}