org.exolab.javasource.JCommentFormatter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of castor-codegen Show documentation
Show all versions of castor-codegen Show documentation
Code generator of Castor XML: takes a set of XML schemas and generates Java source code based on the content definitions
The newest version!
/*
* Copyright 2006 Ralf Joachim
*
* 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 org.exolab.javasource;
/**
* A class to format comments.
*
* @author Ralf Joachim
* @version $Revision: 6668 $ $Date: 2005-05-08 12:32:06 -0600 (Sun, 08 May 2005) $
* @since 1.1
*/
public final class JCommentFormatter {
// --------------------------------------------------------------------------
private String _comment = null;
private int _maxLength = JComment.MAX_LENGTH;
private int _offset = 0;
private int _length = 0;
private String _prefix = null;
private StringBuffer _sb = null;
// --------------------------------------------------------------------------
/**
* Creates a new LineFormatter for the given comment.
*
* @param comment The String to format.
* @param maxLength The maximum number of characters per line.
* @param prefix A prefix to append to the beginning of each line.
*/
public JCommentFormatter(final String comment, final int maxLength, final String prefix) {
_comment = comment;
if (comment != null) {
_length = comment.length();
}
_sb = new StringBuffer();
_maxLength = maxLength;
_prefix = prefix;
}
// --------------------------------------------------------------------------
public boolean hasMoreLines() {
if (_comment == null) {
return false;
}
return (_offset < _length);
}
public String nextLine() {
if (_comment == null) {
return null;
}
if (_offset >= _length) {
return null;
}
_sb.setLength(0);
if (_prefix != null) {
_sb.append(_prefix);
}
int max = _offset + _maxLength;
if (max > this._length) {
max = this._length;
}
int index = _offset;
int breakable = _offset;
for (; index < max; index++) {
char ch = _comment.charAt(index);
if (isNewLine(ch)) {
_sb.append(_comment.substring(_offset, index));
_offset = index + 1;
return _sb.toString();
}
if (isWhitespace(ch)) {
breakable = index;
}
}
if (index < _length - 1) {
// -- if we could not find a breakable character, we must look
// -- ahead
if (_offset == breakable) {
while (index < _length) {
if (isBreakable(_comment.charAt(index))) {
break;
}
++index;
}
} else {
index = breakable;
}
}
_sb.append(_comment.substring(_offset, index));
_offset = index + 1;
return _sb.toString();
}
/**
* Returns true if we can break a line at this character.
*
* @param ch Character to examine.
* @return True if we can break a line at this character.
*/
private boolean isBreakable(final char ch) {
return (isWhitespace(ch) || isNewLine(ch));
}
/**
* Returns true if this character is whitespace.
*
* @param ch Character to examine.
* @return True if this character is whitespace.
*/
private boolean isWhitespace(final char ch) {
return ((ch == ' ') || (ch == '\t'));
}
/**
* Returns true if this character is a new line character.
*
* @param ch Character to examine.
* @return True if this character is a new line character.
*/
private boolean isNewLine(final char ch) {
return ((ch == '\n') || (ch == '\r'));
}
// --------------------------------------------------------------------------
}