crlf
[idea/community.git] / platform / util / src / com / intellij / openapi / util / text / LineTokenizer.java
index 9064bb70c356d76ea1cbfd96ddc52df211cb049e..8948242bd840d948f9e16a770694148acacebec4 100644 (file)
-/*\r
- * Copyright 2000-2009 JetBrains s.r.o.\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-package com.intellij.openapi.util.text;\r
-\r
-import com.intellij.util.ArrayUtil;\r
-import com.intellij.util.text.CharArrayCharSequence;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-/**\r
- *\r
- */\r
-public class LineTokenizer {\r
-  private int myOffset = 0;\r
-  private int myLength = 0;\r
-  private int myLineSeparatorLength = 0;\r
-  private boolean atEnd = false;\r
-  private CharSequence myText;\r
-\r
-  public static String[] tokenize(CharSequence chars, boolean includeSeparators) {\r
-    return tokenize(chars, includeSeparators, true);\r
-  }\r
-\r
-  private static String[] tokenize(final CharSequence chars, final boolean includeSeparators, final boolean skipLastEmptyLine) {\r
-    if (chars == null || chars.length() == 0){\r
-      return ArrayUtil.EMPTY_STRING_ARRAY;\r
-    }\r
-\r
-    LineTokenizer tokenizer = new LineTokenizer(chars);\r
-    List<String> lines = new ArrayList<String>();\r
-    while(!tokenizer.atEnd()){\r
-      int offset = tokenizer.getOffset();\r
-      String line;\r
-      if (includeSeparators){\r
-        line = chars.subSequence(offset, offset + tokenizer.getLength() + tokenizer.getLineSeparatorLength()).toString();\r
-      }\r
-      else{\r
-        line = chars.subSequence(offset, offset + tokenizer.getLength()).toString();\r
-      }\r
-      lines.add(line);\r
-      tokenizer.advance();\r
-    }\r
-\r
-    if (!skipLastEmptyLine && stringEdnsWithSeparator(tokenizer)) lines.add("");\r
-\r
-    return lines.toArray(new String[lines.size()]);\r
-  }\r
-\r
-  public static int calcLineCount(final CharSequence chars, final boolean skipLastEmptyLine) {\r
-    int lineCount = 0;\r
-    if (chars != null && chars.length() != 0) {\r
-      final LineTokenizer tokenizer = new LineTokenizer(chars);\r
-      while (!tokenizer.atEnd()) {\r
-        lineCount += 1;\r
-        tokenizer.advance();\r
-      }\r
-      if (!skipLastEmptyLine && stringEdnsWithSeparator(tokenizer)) {\r
-        lineCount += 1;\r
-      }\r
-    }\r
-    return lineCount;\r
-  }\r
-\r
-  public static String[] tokenize(char[] chars, boolean includeSeparators) {\r
-    return tokenize(chars, includeSeparators, true);\r
-  }\r
-\r
-  public static String[] tokenize(char[] chars, boolean includeSeparators, boolean skipLastEmptyLine) {\r
-    return tokenize(chars, 0, chars.length, includeSeparators, skipLastEmptyLine);\r
-  }\r
-\r
-  public static String[] tokenize(char[] chars, int startOffset, int endOffset, boolean includeSeparators,\r
-                                  boolean skipLastEmptyLine) {\r
-    return tokenize(new CharArrayCharSequence(chars, startOffset, endOffset), includeSeparators, skipLastEmptyLine);\r
-  }\r
-\r
-  private static boolean stringEdnsWithSeparator(LineTokenizer tokenizer) {\r
-    return tokenizer.getLineSeparatorLength() > 0;\r
-  }\r
-\r
-  public static String[] tokenize(char[] chars, int startOffset, int endOffset, boolean includeSeparators) {\r
-    return tokenize(chars, startOffset, endOffset, includeSeparators, true);\r
-  }\r
-\r
-  public LineTokenizer(CharSequence text) {\r
-    myText = text;\r
-    myOffset = 0;\r
-    advance();\r
-  }\r
-\r
-  public LineTokenizer(char[] text, int startOffset, int endOffset) {\r
-    this(new CharArrayCharSequence(text, startOffset, endOffset));\r
-  }\r
-\r
-  public final boolean atEnd() {\r
-    return atEnd;\r
-  }\r
-\r
-  public final int getOffset() {\r
-    return myOffset;\r
-  }\r
-\r
-  public final int getLength() {\r
-    return myLength;\r
-  }\r
-\r
-  public final int getLineSeparatorLength() {\r
-    return myLineSeparatorLength;\r
-  }\r
-\r
-  public void advance() {\r
-    int i = myOffset + myLength + myLineSeparatorLength;\r
-    final int textLength = myText.length();\r
-    if (i >= textLength){\r
-      atEnd = true;\r
-      return;\r
-    }\r
-    while(i < textLength){\r
-      char c = myText.charAt(i);\r
-      if (c == '\r' || c == '\n') break;\r
-      i++;\r
-    }\r
-\r
-    myOffset = myOffset + myLength + myLineSeparatorLength;\r
-    myLength = i - myOffset;\r
-\r
-    myLineSeparatorLength = 0;\r
-    if (i == textLength) return;\r
-\r
-    char first = myText.charAt(i);\r
-    if (first == '\r' || first == '\n') {\r
-      myLineSeparatorLength = 1;\r
-    }\r
-\r
-    i++;\r
-    if (i == textLength) return;\r
-\r
-    char second = myText.charAt(i);\r
-    if (first == '\r' && second == '\n') {\r
-      myLineSeparatorLength = 2;\r
-    }\r
-  }\r
-}\r
+/*
+ * Copyright 2000-2009 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.openapi.util.text;
+
+import com.intellij.util.ArrayUtil;
+import com.intellij.util.text.CharArrayCharSequence;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ */
+public class LineTokenizer {
+  private int myOffset = 0;
+  private int myLength = 0;
+  private int myLineSeparatorLength = 0;
+  private boolean atEnd = false;
+  private CharSequence myText;
+
+  public static String[] tokenize(CharSequence chars, boolean includeSeparators) {
+    return tokenize(chars, includeSeparators, true);
+  }
+
+  private static String[] tokenize(final CharSequence chars, final boolean includeSeparators, final boolean skipLastEmptyLine) {
+    if (chars == null || chars.length() == 0){
+      return ArrayUtil.EMPTY_STRING_ARRAY;
+    }
+
+    LineTokenizer tokenizer = new LineTokenizer(chars);
+    List<String> lines = new ArrayList<String>();
+    while(!tokenizer.atEnd()){
+      int offset = tokenizer.getOffset();
+      String line;
+      if (includeSeparators){
+        line = chars.subSequence(offset, offset + tokenizer.getLength() + tokenizer.getLineSeparatorLength()).toString();
+      }
+      else{
+        line = chars.subSequence(offset, offset + tokenizer.getLength()).toString();
+      }
+      lines.add(line);
+      tokenizer.advance();
+    }
+
+    if (!skipLastEmptyLine && stringEdnsWithSeparator(tokenizer)) lines.add("");
+
+    return lines.toArray(new String[lines.size()]);
+  }
+
+  public static int calcLineCount(final CharSequence chars, final boolean skipLastEmptyLine) {
+    int lineCount = 0;
+    if (chars != null && chars.length() != 0) {
+      final LineTokenizer tokenizer = new LineTokenizer(chars);
+      while (!tokenizer.atEnd()) {
+        lineCount += 1;
+        tokenizer.advance();
+      }
+      if (!skipLastEmptyLine && stringEdnsWithSeparator(tokenizer)) {
+        lineCount += 1;
+      }
+    }
+    return lineCount;
+  }
+
+  public static String[] tokenize(char[] chars, boolean includeSeparators) {
+    return tokenize(chars, includeSeparators, true);
+  }
+
+  public static String[] tokenize(char[] chars, boolean includeSeparators, boolean skipLastEmptyLine) {
+    return tokenize(chars, 0, chars.length, includeSeparators, skipLastEmptyLine);
+  }
+
+  public static String[] tokenize(char[] chars, int startOffset, int endOffset, boolean includeSeparators,
+                                  boolean skipLastEmptyLine) {
+    return tokenize(new CharArrayCharSequence(chars, startOffset, endOffset), includeSeparators, skipLastEmptyLine);
+  }
+
+  private static boolean stringEdnsWithSeparator(LineTokenizer tokenizer) {
+    return tokenizer.getLineSeparatorLength() > 0;
+  }
+
+  public static String[] tokenize(char[] chars, int startOffset, int endOffset, boolean includeSeparators) {
+    return tokenize(chars, startOffset, endOffset, includeSeparators, true);
+  }
+
+  public LineTokenizer(CharSequence text) {
+    myText = text;
+    myOffset = 0;
+    advance();
+  }
+
+  public LineTokenizer(char[] text, int startOffset, int endOffset) {
+    this(new CharArrayCharSequence(text, startOffset, endOffset));
+  }
+
+  public final boolean atEnd() {
+    return atEnd;
+  }
+
+  public final int getOffset() {
+    return myOffset;
+  }
+
+  public final int getLength() {
+    return myLength;
+  }
+
+  public final int getLineSeparatorLength() {
+    return myLineSeparatorLength;
+  }
+
+  public void advance() {
+    int i = myOffset + myLength + myLineSeparatorLength;
+    final int textLength = myText.length();
+    if (i >= textLength){
+      atEnd = true;
+      return;
+    }
+    while(i < textLength){
+      char c = myText.charAt(i);
+      if (c == '\r' || c == '\n') break;
+      i++;
+    }
+
+    myOffset = myOffset + myLength + myLineSeparatorLength;
+    myLength = i - myOffset;
+
+    myLineSeparatorLength = 0;
+    if (i == textLength) return;
+
+    char first = myText.charAt(i);
+    if (first == '\r' || first == '\n') {
+      myLineSeparatorLength = 1;
+    }
+
+    i++;
+    if (i == textLength) return;
+
+    char second = myText.charAt(i);
+    if (first == '\r' && second == '\n') {
+      myLineSeparatorLength = 2;
+    }
+  }
+}