Java 类org.eclipse.jface.text.ILineTracker 实例源码

项目:eclipse.jdt.ls    文件:CodeTemplateContext.java   
private static String changeLineDelimiter(String code, String lineDelim) {
    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(code);
        int nLines= tracker.getNumberOfLines();
        if (nLines == 1) {
            return code;
        }

        StringBuffer buf= new StringBuffer();
        for (int i= 0; i < nLines; i++) {
            if (i != 0) {
                buf.append(lineDelim);
            }
            IRegion region = tracker.getLineInformation(i);
            String line= code.substring(region.getOffset(), region.getOffset() + region.getLength());
            buf.append(line);
        }
        return buf.toString();
    } catch (BadLocationException e) {
        // can not happen
        return code;
    }
}
项目:che    文件:CodeTemplateContext.java   
private static String changeLineDelimiter(String code, String lineDelim) {
  try {
    ILineTracker tracker = new DefaultLineTracker();
    tracker.set(code);
    int nLines = tracker.getNumberOfLines();
    if (nLines == 1) {
      return code;
    }

    StringBuffer buf = new StringBuffer();
    for (int i = 0; i < nLines; i++) {
      if (i != 0) {
        buf.append(lineDelim);
      }
      IRegion region = tracker.getLineInformation(i);
      String line = code.substring(region.getOffset(), region.getOffset() + region.getLength());
      buf.append(line);
    }
    return buf.toString();
  } catch (BadLocationException e) {
    // can not happen
    return code;
  }
}
项目:che    文件:Strings.java   
/**
 * Converts the given string into an array of lines. The lines don't contain any line delimiter
 * characters.
 *
 * @param input the string
 * @return the string converted into an array of strings. Returns <code>
 *  null</code> if the input string can't be converted in an array of lines.
 */
public static String[] convertIntoLines(String input) {
  try {
    ILineTracker tracker = new DefaultLineTracker();
    tracker.set(input);
    int size = tracker.getNumberOfLines();
    String result[] = new String[size];
    for (int i = 0; i < size; i++) {
      IRegion region = tracker.getLineInformation(i);
      int offset = region.getOffset();
      result[i] = input.substring(offset, offset + region.getLength());
    }
    return result;
  } catch (BadLocationException e) {
    return null;
  }
}
项目:che    文件:Strings.java   
public static String trimIndentation(
    String source, int tabWidth, int indentWidth, boolean considerFirstLine) {
  try {
    ILineTracker tracker = new DefaultLineTracker();
    tracker.set(source);
    int size = tracker.getNumberOfLines();
    if (size == 1) return source;
    String lines[] = new String[size];
    for (int i = 0; i < size; i++) {
      IRegion region = tracker.getLineInformation(i);
      int offset = region.getOffset();
      lines[i] = source.substring(offset, offset + region.getLength());
    }
    Strings.trimIndentation(lines, tabWidth, indentWidth, considerFirstLine);
    StringBuffer result = new StringBuffer();
    int last = size - 1;
    for (int i = 0; i < size; i++) {
      result.append(lines[i]);
      if (i < last) result.append(tracker.getLineDelimiter(i));
    }
    return result.toString();
  } catch (BadLocationException e) {
    Assert.isTrue(false, "Can not happend"); // $NON-NLS-1$
    return null;
  }
}
项目:Eclipse-Postfix-Code-Completion    文件:CodeTemplateContext.java   
private static String changeLineDelimiter(String code, String lineDelim) {
    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(code);
        int nLines= tracker.getNumberOfLines();
        if (nLines == 1) {
            return code;
        }

        StringBuffer buf= new StringBuffer();
        for (int i= 0; i < nLines; i++) {
            if (i != 0) {
                buf.append(lineDelim);
            }
            IRegion region = tracker.getLineInformation(i);
            String line= code.substring(region.getOffset(), region.getOffset() + region.getLength());
            buf.append(line);
        }
        return buf.toString();
    } catch (BadLocationException e) {
        // can not happen
        return code;
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:Strings.java   
/**
 * Converts the given string into an array of lines. The lines
 * don't contain any line delimiter characters.
 *
 * @param input the string
 * @return the string converted into an array of strings. Returns <code>
 *  null</code> if the input string can't be converted in an array of lines.
 */
public static String[] convertIntoLines(String input) {
    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(input);
        int size= tracker.getNumberOfLines();
        String result[]= new String[size];
        for (int i= 0; i < size; i++) {
            IRegion region= tracker.getLineInformation(i);
            int offset= region.getOffset();
            result[i]= input.substring(offset, offset + region.getLength());
        }
        return result;
    } catch (BadLocationException e) {
        return null;
    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:CodeTemplateContext.java   
private static String changeLineDelimiter(String code, String lineDelim) {
    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(code);
        int nLines= tracker.getNumberOfLines();
        if (nLines == 1) {
            return code;
        }

        StringBuffer buf= new StringBuffer();
        for (int i= 0; i < nLines; i++) {
            if (i != 0) {
                buf.append(lineDelim);
            }
            IRegion region = tracker.getLineInformation(i);
            String line= code.substring(region.getOffset(), region.getOffset() + region.getLength());
            buf.append(line);
        }
        return buf.toString();
    } catch (BadLocationException e) {
        // can not happen
        return code;
    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:Strings.java   
/**
 * Converts the given string into an array of lines. The lines
 * don't contain any line delimiter characters.
 *
 * @param input the string
 * @return the string converted into an array of strings. Returns <code>
 *  null</code> if the input string can't be converted in an array of lines.
 */
public static String[] convertIntoLines(String input) {
    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(input);
        int size= tracker.getNumberOfLines();
        String result[]= new String[size];
        for (int i= 0; i < size; i++) {
            IRegion region= tracker.getLineInformation(i);
            int offset= region.getOffset();
            result[i]= input.substring(offset, offset + region.getLength());
        }
        return result;
    } catch (BadLocationException e) {
        return null;
    }
}
项目:eclipse.spellchecker    文件:Strings.java   
/**
 * Converts the given string into an array of lines. The lines
 * don't contain any line delimiter characters.
 *
 * @param input the string
 * @return the string converted into an array of strings. Returns <code>
 *  null</code> if the input string can't be converted in an array of lines.
 */
public static String[] convertIntoLines(String input) {
    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(input);
        int size= tracker.getNumberOfLines();
        String result[]= new String[size];
        for (int i= 0; i < size; i++) {
            IRegion region= tracker.getLineInformation(i);
            int offset= region.getOffset();
            result[i]= input.substring(offset, offset + region.getLength());
        }
        return result;
    } catch (BadLocationException e) {
        return null;
    }
}
项目:fluentmark    文件:Indent.java   
/**
 * Change the indent of a, possible multiple line, code string. The given number of indent units
 * is removed, and a new indent string is added.
 * <p>
 * The first line of the code will not be changed (It is considered to have no indent as it
 * might start in the middle of a line).
 * </p>
 *
 * @param code the code to change the indent of
 * @param indentUnitsToRemove the number of indent units to remove from each line (except the
 *            first) of the given code
 * @param tabWidth the size of one tab in space equivalents
 * @param indentWidth the width of one indentation unit in space equivalents
 * @param newIndentString the new indent string to be added to all lines (except the first)
 * @param lineDelim the new line delimiter to be used. The returned code will contain only this
 *            line delimiter.
 * @return the newly indent code, containing only the given line delimiters.
 * @exception IllegalArgumentException if:
 *                <ul>
 *                <li>the given <code>indentWidth</code> is lower or equals to zero</li>
 *                <li>the given <code>tabWidth</code> is lower than zero</li>
 *                <li>the given <code>code</code> is null</li>
 *                <li>the given <code>indentUnitsToRemove</code> is lower than zero</li>
 *                <li>the given <code>newIndentString</code> is null</li>
 *                <li>the given <code>lineDelim</code> is null</li>
 *                </ul>
 */
public static String changeIndent(String code, int indentUnitsToRemove, int tabWidth, int indentWidth,
        String newIndentString, String lineDelim) {
    if (tabWidth < 0 || indentWidth <= 0 || code == null || indentUnitsToRemove < 0 || newIndentString == null
            || lineDelim == null) {
        throw new IllegalArgumentException();
    }

    try {
        ILineTracker tracker = new DefaultLineTracker();
        tracker.set(code);
        int nLines = tracker.getNumberOfLines();
        if (nLines == 1) {
            return code;
        }

        StringBuffer buf = new StringBuffer();

        for (int i = 0; i < nLines; i++) {
            IRegion region = tracker.getLineInformation(i);
            int start = region.getOffset();
            int end = start + region.getLength();
            String line = code.substring(start, end);

            if (i == 0) {
                // no indent for first line (contained in the formatted string)
                buf.append(line);
            } else {
                // no new line after last line
                buf.append(lineDelim);
                buf.append(newIndentString);
                buf.append(trimIndent(line, indentUnitsToRemove, tabWidth, indentWidth));
            }
        }
        return buf.toString();
    } catch (BadLocationException e) {
        // can not happen
        return code;
    }
}
项目:fluentmark    文件:Indent.java   
/**
 * Returns the text edits retrieved after changing the indentation of a, possible multi-line,
 * code string.
 * <p>
 * The given number of indent units is removed, and a new indent string is added.
 * </p>
 * <p>
 * The first line of the code will not be changed (It is considered to have no indent as it
 * might start in the middle of a line).
 * </p>
 *
 * @param source The code to change the indent of
 * @param indentUnitsToRemove the number of indent units to remove from each line (except the
 *            first) of the given code
 * @param tabWidth the size of one tab in space equivalents
 * @param indentWidth the width of one indentation unit in space equivalents
 * @param newIndentString the new indent string to be added to all lines (except the first)
 * @return returns the resulting text edits
 * @exception IllegalArgumentException if:
 *                <ul>
 *                <li>the given <code>indentWidth</code> is lower or equals to zero</li>
 *                <li>the given <code>tabWidth</code> is lower than zero</li>
 *                <li>the given <code>source</code> is null</li>
 *                <li>the given <code>indentUnitsToRemove</code> is lower than zero</li>
 *                <li>the given <code>newIndentString</code> is null</li>
 *                </ul>
 */
public static ReplaceEdit[] getChangeIndentEdits(String source, int indentUnitsToRemove, int tabWidth,
        int indentWidth, String newIndentString) {
    if (tabWidth < 0 || indentWidth <= 0 || source == null || indentUnitsToRemove < 0 || newIndentString == null) {
        throw new IllegalArgumentException();
    }

    ArrayList<ReplaceEdit> result = new ArrayList<ReplaceEdit>();
    try {
        ILineTracker tracker = new DefaultLineTracker();
        tracker.set(source);
        int nLines = tracker.getNumberOfLines();
        if (nLines == 1) {
            return result.toArray(new ReplaceEdit[result.size()]);
        }
        for (int i = 1; i < nLines; i++) {
            IRegion region = tracker.getLineInformation(i);
            int offset = region.getOffset();
            String line = source.substring(offset, offset + region.getLength());
            int length = indexOfIndent(line, indentUnitsToRemove, tabWidth, indentWidth);
            if (length >= 0) {
                result.add(new ReplaceEdit(offset, length, newIndentString));
            } else {
                length = measureIndentUnits(line, tabWidth, indentWidth);
                result.add(new ReplaceEdit(offset, length, "")); //$NON-NLS-1$
            }
        }
    } catch (BadLocationException cannotHappen) {}
    return result.toArray(new ReplaceEdit[result.size()]);
}
项目:Eclipse-Postfix-Code-Completion    文件:Strings.java   
public static String trimIndentation(String source, int tabWidth, int indentWidth, boolean considerFirstLine) {
    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(source);
        int size= tracker.getNumberOfLines();
        if (size == 1)
            return source;
        String lines[]= new String[size];
        for (int i= 0; i < size; i++) {
            IRegion region= tracker.getLineInformation(i);
            int offset= region.getOffset();
            lines[i]= source.substring(offset, offset + region.getLength());
        }
        Strings.trimIndentation(lines, tabWidth, indentWidth, considerFirstLine);
        StringBuffer result= new StringBuffer();
        int last= size - 1;
        for (int i= 0; i < size; i++) {
            result.append(lines[i]);
            if (i < last)
                result.append(tracker.getLineDelimiter(i));
        }
        return result.toString();
    } catch (BadLocationException e) {
        Assert.isTrue(false,"Can not happend"); //$NON-NLS-1$
        return null;
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:IndentManipulation.java   
/**
 * Change the indent of a, possible multiple line, code string. The given number of indent units is removed,
 * and a new indent string is added.
 * <p>The first line of the code will not be changed (It is considered to have no indent as it might start in
 * the middle of a line).</p>
 *
 * @param code the code to change the indent of
 * @param indentUnitsToRemove the number of indent units to remove from each line (except the first) of the given code
 * @param tabWidth the size of one tab in space equivalents
 * @param indentWidth the width of one indentation unit in space equivalents
 * @param newIndentString the new indent string to be added to all lines (except the first)
 * @param lineDelim the new line delimiter to be used. The returned code will contain only this line delimiter.
 * @return the newly indent code, containing only the given line delimiters.
 * @exception IllegalArgumentException if:
 * <ul>
 * <li>the given <code>indentWidth</code> is lower than zero</li>
 * <li>the given <code>tabWidth</code> is lower than zero</li>
 * <li>the given <code>code</code> is null</li>
 * <li>the given <code>indentUnitsToRemove</code> is lower than zero</li>
 * <li>the given <code>newIndentString</code> is null</li>
 * <li>the given <code>lineDelim</code> is null</li>
 * </ul>
 */
public static String changeIndent(String code, int indentUnitsToRemove, int tabWidth, int indentWidth, String newIndentString, String lineDelim) {
    if (tabWidth < 0 || indentWidth < 0 || code == null || indentUnitsToRemove < 0 || newIndentString == null || lineDelim == null) {
        throw new IllegalArgumentException();
    }

    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(code);
        int nLines= tracker.getNumberOfLines();
        if (nLines == 1) {
            return code;
        }

        StringBuffer buf= new StringBuffer();

        for (int i= 0; i < nLines; i++) {
            IRegion region= tracker.getLineInformation(i);
            int start= region.getOffset();
            int end= start + region.getLength();
            String line= code.substring(start, end);

            if (i == 0) {  // no indent for first line (contained in the formatted string)
                buf.append(line);
            } else { // no new line after last line
                buf.append(lineDelim);
                buf.append(newIndentString);
                if(indentWidth != 0) {
                    buf.append(trimIndent(line, indentUnitsToRemove, tabWidth, indentWidth));
                } else {
                    buf.append(line);
                }
            }
        }
        return buf.toString();
    } catch (BadLocationException e) {
        // can not happen
        return code;
    }
}
项目:Eclipse-Postfix-Code-Completion    文件:IndentManipulation.java   
/**
 * Returns the text edits retrieved after changing the indentation of a, possible multi-line, code string.
 *
 * <p>The given number of indent units is removed, and a new indent string is added.</p>
 * <p>The first line of the code will not be changed (It is considered to have no indent as it might start in
 * the middle of a line).</p>
 *
 * @param source The code to change the indent of
 * @param indentUnitsToRemove the number of indent units to remove from each line (except the first) of the given code
 * @param tabWidth the size of one tab in space equivalents
 * @param indentWidth the width of one indentation unit in space equivalents
 * @param newIndentString the new indent string to be added to all lines (except the first)
 * @return returns the resulting text edits
 * @exception IllegalArgumentException if:
 * <ul>
 * <li>the given <code>indentWidth</code> is lower than zero</li>
 * <li>the given <code>tabWidth</code> is lower than zero</li>
 * <li>the given <code>source</code> is null</li>
 * <li>the given <code>indentUnitsToRemove</code> is lower than zero</li>
 * <li>the given <code>newIndentString</code> is null</li>
 * </ul>
 */
public static ReplaceEdit[] getChangeIndentEdits(String source, int indentUnitsToRemove, int tabWidth, int indentWidth, String newIndentString) {
    if (tabWidth < 0 || indentWidth < 0 || source == null || indentUnitsToRemove < 0 || newIndentString == null) {
        throw new IllegalArgumentException();
    }

    ArrayList result= new ArrayList();
    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(source);
        int nLines= tracker.getNumberOfLines();
        if (nLines == 1)
            return (ReplaceEdit[])result.toArray(new ReplaceEdit[result.size()]);
        for (int i= 1; i < nLines; i++) {
            IRegion region= tracker.getLineInformation(i);
            int offset= region.getOffset();
            String line= source.substring(offset, offset + region.getLength());
            int length= indexOfIndent(line, indentUnitsToRemove, tabWidth, indentWidth);
            if (length >= 0) {
                result.add(new ReplaceEdit(offset, length, newIndentString));
            } else {
                length= measureIndentUnits(line, tabWidth, indentWidth);
                result.add(new ReplaceEdit(offset, length, "")); //$NON-NLS-1$
            }
        }
    } catch (BadLocationException cannotHappen) {
        // can not happen
    }
    return (ReplaceEdit[])result.toArray(new ReplaceEdit[result.size()]);
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:Strings.java   
public static String trimIndentation(String source, int tabWidth, int indentWidth, boolean considerFirstLine) {
    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(source);
        int size= tracker.getNumberOfLines();
        if (size == 1)
            return source;
        String lines[]= new String[size];
        for (int i= 0; i < size; i++) {
            IRegion region= tracker.getLineInformation(i);
            int offset= region.getOffset();
            lines[i]= source.substring(offset, offset + region.getLength());
        }
        Strings.trimIndentation(lines, tabWidth, indentWidth, considerFirstLine);
        StringBuffer result= new StringBuffer();
        int last= size - 1;
        for (int i= 0; i < size; i++) {
            result.append(lines[i]);
            if (i < last)
                result.append(tracker.getLineDelimiter(i));
        }
        return result.toString();
    } catch (BadLocationException e) {
        Assert.isTrue(false,"Can not happend"); //$NON-NLS-1$
        return null;
    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:IndentManipulation.java   
/**
 * Change the indent of a, possible multiple line, code string. The given number of indent units is removed,
 * and a new indent string is added.
 * <p>The first line of the code will not be changed (It is considered to have no indent as it might start in
 * the middle of a line).</p>
 *
 * @param code the code to change the indent of
 * @param indentUnitsToRemove the number of indent units to remove from each line (except the first) of the given code
 * @param tabWidth the size of one tab in space equivalents
 * @param indentWidth the width of one indentation unit in space equivalents
 * @param newIndentString the new indent string to be added to all lines (except the first)
 * @param lineDelim the new line delimiter to be used. The returned code will contain only this line delimiter.
 * @return the newly indent code, containing only the given line delimiters.
 * @exception IllegalArgumentException if:
 * <ul>
 * <li>the given <code>indentWidth</code> is lower than zero</li>
 * <li>the given <code>tabWidth</code> is lower than zero</li>
 * <li>the given <code>code</code> is null</li>
 * <li>the given <code>indentUnitsToRemove</code> is lower than zero</li>
 * <li>the given <code>newIndentString</code> is null</li>
 * <li>the given <code>lineDelim</code> is null</li>
 * </ul>
 */
public static String changeIndent(String code, int indentUnitsToRemove, int tabWidth, int indentWidth, String newIndentString, String lineDelim) {
    if (tabWidth < 0 || indentWidth < 0 || code == null || indentUnitsToRemove < 0 || newIndentString == null || lineDelim == null) {
        throw new IllegalArgumentException();
    }

    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(code);
        int nLines= tracker.getNumberOfLines();
        if (nLines == 1) {
            return code;
        }

        StringBuffer buf= new StringBuffer();

        for (int i= 0; i < nLines; i++) {
            IRegion region= tracker.getLineInformation(i);
            int start= region.getOffset();
            int end= start + region.getLength();
            String line= code.substring(start, end);

            if (i == 0) {  // no indent for first line (contained in the formatted string)
                buf.append(line);
            } else { // no new line after last line
                buf.append(lineDelim);
                buf.append(newIndentString);
                if(indentWidth != 0) {
                    buf.append(trimIndent(line, indentUnitsToRemove, tabWidth, indentWidth));
                } else {
                    buf.append(line);
                }
            }
        }
        return buf.toString();
    } catch (BadLocationException e) {
        // can not happen
        return code;
    }
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:IndentManipulation.java   
/**
 * Returns the text edits retrieved after changing the indentation of a, possible multi-line, code string.
 *
 * <p>The given number of indent units is removed, and a new indent string is added.</p>
 * <p>The first line of the code will not be changed (It is considered to have no indent as it might start in
 * the middle of a line).</p>
 *
 * @param source The code to change the indent of
 * @param indentUnitsToRemove the number of indent units to remove from each line (except the first) of the given code
 * @param tabWidth the size of one tab in space equivalents
 * @param indentWidth the width of one indentation unit in space equivalents
 * @param newIndentString the new indent string to be added to all lines (except the first)
 * @return returns the resulting text edits
 * @exception IllegalArgumentException if:
 * <ul>
 * <li>the given <code>indentWidth</code> is lower than zero</li>
 * <li>the given <code>tabWidth</code> is lower than zero</li>
 * <li>the given <code>source</code> is null</li>
 * <li>the given <code>indentUnitsToRemove</code> is lower than zero</li>
 * <li>the given <code>newIndentString</code> is null</li>
 * </ul>
 */
public static ReplaceEdit[] getChangeIndentEdits(String source, int indentUnitsToRemove, int tabWidth, int indentWidth, String newIndentString) {
    if (tabWidth < 0 || indentWidth < 0 || source == null || indentUnitsToRemove < 0 || newIndentString == null) {
        throw new IllegalArgumentException();
    }

    ArrayList result= new ArrayList();
    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(source);
        int nLines= tracker.getNumberOfLines();
        if (nLines == 1)
            return (ReplaceEdit[])result.toArray(new ReplaceEdit[result.size()]);
        for (int i= 1; i < nLines; i++) {
            IRegion region= tracker.getLineInformation(i);
            int offset= region.getOffset();
            String line= source.substring(offset, offset + region.getLength());
            int length= indexOfIndent(line, indentUnitsToRemove, tabWidth, indentWidth);
            if (length >= 0) {
                result.add(new ReplaceEdit(offset, length, newIndentString));
            } else {
                length= measureIndentUnits(line, tabWidth, indentWidth);
                result.add(new ReplaceEdit(offset, length, "")); //$NON-NLS-1$
            }
        }
    } catch (BadLocationException cannotHappen) {
        // can not happen
    }
    return (ReplaceEdit[])result.toArray(new ReplaceEdit[result.size()]);
}
项目:eclipse.spellchecker    文件:IndentManipulation.java   
/**
 * Change the indent of a, possible multiple line, code string. The given number of indent units is removed,
 * and a new indent string is added.
 * <p>The first line of the code will not be changed (It is considered to have no indent as it might start in
 * the middle of a line).</p>
 *
 * @param code the code to change the indent of
 * @param indentUnitsToRemove the number of indent units to remove from each line (except the first) of the given code
 * @param tabWidth the size of one tab in space equivalents
 * @param indentWidth the width of one indentation unit in space equivalents
 * @param newIndentString the new indent string to be added to all lines (except the first)
 * @param lineDelim the new line delimiter to be used. The returned code will contain only this line delimiter.
 * @return the newly indent code, containing only the given line delimiters.
 * @exception IllegalArgumentException if:
 * <ul>
 * <li>the given <code>indentWidth</code> is lower than zero</li>
 * <li>the given <code>tabWidth</code> is lower than zero</li>
 * <li>the given <code>code</code> is null</li>
 * <li>the given <code>indentUnitsToRemove</code> is lower than zero</li>
 * <li>the given <code>newIndentString</code> is null</li>
 * <li>the given <code>lineDelim</code> is null</li>
 * </ul>
 */
public static String changeIndent(String code, int indentUnitsToRemove, int tabWidth, int indentWidth, String newIndentString, String lineDelim) {
    if (tabWidth < 0 || indentWidth < 0 || code == null || indentUnitsToRemove < 0 || newIndentString == null || lineDelim == null) {
        throw new IllegalArgumentException();
    }

    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(code);
        int nLines= tracker.getNumberOfLines();
        if (nLines == 1) {
            return code;
        }

        StringBuffer buf= new StringBuffer();

        for (int i= 0; i < nLines; i++) {
            IRegion region= tracker.getLineInformation(i);
            int start= region.getOffset();
            int end= start + region.getLength();
            String line= code.substring(start, end);

            if (i == 0) {  // no indent for first line (contained in the formatted string)
                buf.append(line);
            } else { // no new line after last line
                buf.append(lineDelim);
                buf.append(newIndentString);
                if(indentWidth != 0) {
                    buf.append(trimIndent(line, indentUnitsToRemove, tabWidth, indentWidth));
                } else {
                    buf.append(line);
                }
            }
        }
        return buf.toString();
    } catch (BadLocationException e) {
        // can not happen
        return code;
    }
}
项目:eclipse.spellchecker    文件:IndentManipulation.java   
/**
 * Returns the text edits retrieved after changing the indentation of a, possible multi-line, code string.
 *
 * <p>The given number of indent units is removed, and a new indent string is added.</p>
 * <p>The first line of the code will not be changed (It is considered to have no indent as it might start in
 * the middle of a line).</p>
 *
 * @param source The code to change the indent of
 * @param indentUnitsToRemove the number of indent units to remove from each line (except the first) of the given code
 * @param tabWidth the size of one tab in space equivalents
 * @param indentWidth the width of one indentation unit in space equivalents
 * @param newIndentString the new indent string to be added to all lines (except the first)
 * @return returns the resulting text edits
 * @exception IllegalArgumentException if:
 * <ul>
 * <li>the given <code>indentWidth</code> is lower than zero</li>
 * <li>the given <code>tabWidth</code> is lower than zero</li>
 * <li>the given <code>source</code> is null</li>
 * <li>the given <code>indentUnitsToRemove</code> is lower than zero</li>
 * <li>the given <code>newIndentString</code> is null</li>
 * </ul>
 */
public static ReplaceEdit[] getChangeIndentEdits(String source, int indentUnitsToRemove, int tabWidth, int indentWidth, String newIndentString) {
    if (tabWidth < 0 || indentWidth < 0 || source == null || indentUnitsToRemove < 0 || newIndentString == null) {
        throw new IllegalArgumentException();
    }

    ArrayList result= new ArrayList();
    try {
        ILineTracker tracker= new DefaultLineTracker();
        tracker.set(source);
        int nLines= tracker.getNumberOfLines();
        if (nLines == 1)
            return (ReplaceEdit[])result.toArray(new ReplaceEdit[result.size()]);
        for (int i= 1; i < nLines; i++) {
            IRegion region= tracker.getLineInformation(i);
            int offset= region.getOffset();
            String line= source.substring(offset, offset + region.getLength());
            int length= indexOfIndent(line, indentUnitsToRemove, tabWidth, indentWidth);
            if (length >= 0) {
                result.add(new ReplaceEdit(offset, length, newIndentString));
            } else {
                length= measureIndentUnits(line, tabWidth, indentWidth);
                result.add(new ReplaceEdit(offset, length, "")); //$NON-NLS-1$
            }
        }
    } catch (BadLocationException cannotHappen) {
        // can not happen
    }
    return (ReplaceEdit[])result.toArray(new ReplaceEdit[result.size()]);
}
项目:Eclipse-Postfix-Code-Completion    文件:CompilationUnitDocumentProvider.java   
public ILineTracker createLineTracker(Object element) {
    return new DefaultLineTracker();
}
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:CompilationUnitDocumentProvider.java   
public ILineTracker createLineTracker(Object element) {
    return new DefaultLineTracker();
}
项目:Eclipse-Postfix-Code-Completion    文件:ICompilationUnitDocumentProvider.java   
/**
 * Creates a line tracker for the given element. It is of the same kind as the one that would be
 * used for a newly created document for the given element.
 *
 * @param element the element
 * @return a line tracker for the given element
 */
ILineTracker createLineTracker(Object element);
项目:Eclipse-Postfix-Code-Completion-Juno38    文件:ICompilationUnitDocumentProvider.java   
/**
 * Creates a line tracker for the given element. It is of the same kind as the one that would be
 * used for a newly created document for the given element.
 *
 * @param element the element
 * @return a line tracker for the given element
 */
ILineTracker createLineTracker(Object element);