Basic tab-character handling stuff
/*
* Copyright (c) Ian F. Darwin, http://www.darwinsys.com/, 1996-2002.
* All rights reserved. Software written by Ian F. Darwin and others.
* $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* Java, the Duke mascot, and all variants of Sun's Java "steaming coffee
* cup" logo are trademarks of Sun Microsystems. Sun's, and James Gosling's,
* pioneering role in inventing and promulgating (and standardizing) the Java
* language and environment is gratefully acknowledged.
*
* The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
* inventing predecessor languages C and C++ is also gratefully acknowledged.
*/
import junit.framework.TestCase;
/** Basic tab-character handling stuff.
* <p>
* N.B. Can only handle equally-spaced tab stops as written.
* @author Ian F. Darwin, http://www.darwinsys.com/
* @version $Id: Tabs.java,v 1.9 2004/02/28 02:48:15 ian Exp $
*/
public class Tabs {
/** tabs every so often */
public final static int DEFTABSPACE = 8;
/** the current tab stop setting. */
protected int tabSpace = DEFTABSPACE;
/** The longest line that we initially set tabs for. */
public final static int MAXLINE = 255;
/** the current tab stops */
protected boolean[] tabstops;
/** Construct a Tabs object with a given tab stop settings */
public Tabs(int n) {
if (n <= 0) {
n = 1;
}
tabstops = new boolean[MAXLINE];
tabSpace = n;
settabs();
}
/** Construct a Tabs object with a default tab stop settings */
public Tabs() {
this(DEFTABSPACE);
}
/** settabs - set initial tab stops */
private void settabs() {
for (int i = 0; i < tabstops.length; i++) {
tabstops[i] = ((i+1) % tabSpace) == 0;
}
}
/**
* @return Returns the tabSpace.
*/
public int getTabSpacing() {
return tabSpace;
}
/** isTabStop - returns true if given column is a tab stop.
* @param col - the current column number
*/
public boolean isTabStop(int col) {
if (col > tabstops.length - 1) {
tabstops = new boolean[tabstops.length * 2];
settabs();
}
return tabstops[col];
}
}
/**
* @author ian
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
class TabsTest extends TestCase {
public static void main(String[] args) {
junit.textui.TestRunner.run(TabsTest.class);
}
private Tabs t4, t8;
public void setUp() {
t4 = new Tabs(4);
t8 = new Tabs();
}
public void testGetTabSpacing() {
assertEquals(t4.getTabSpacing(), 4);
assertEquals(t8.getTabSpacing(), Tabs.DEFTABSPACE);
}
public void testIsTabStop() {
assertEquals(false, t4.isTabStop(0));
assertEquals(false, t4.isTabStop(1));
assertEquals(false, t4.isTabStop(2));
assertEquals(true, t4.isTabStop(3));
assertEquals(false, t4.isTabStop(4));
assertEquals(false, t4.isTabStop(5));
assertEquals(false, t4.isTabStop(6));
assertEquals(true, t4.isTabStop(7));
assertEquals(false, t4.isTabStop(8));
}
}
Related examples in the same category