home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1999 mARCH
/
PCWK3A99.iso
/
Linux
/
DDD331
/
DDD-3_1_.000
/
DDD-3_1_
/
ddd-3.1.1
/
ddd
/
tabs.C
< prev
next >
Wrap
C/C++ Source or Header
|
1998-03-25
|
3KB
|
101 lines
// $Id: tabs.C,v 1.7 1998/03/25 12:46:42 zeller Exp $ -*- C++ -*-
// Tabulator functions
// Copyright (C) 1997 Technische Universitaet Braunschweig, Germany.
// Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
//
// This file is part of DDD.
//
// DDD is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// DDD is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with DDD -- see the file COPYING.
// If not, write to the Free Software Foundation, Inc.,
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// DDD is the data display debugger.
// For details, see the DDD World-Wide-Web page,
// `http://www.cs.tu-bs.de/softech/ddd/',
// or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
char tabs_rcsid[] =
"$Id: tabs.C,v 1.7 1998/03/25 12:46:42 zeller Exp $";
#ifdef __GNUG__
#pragma implementation
#endif
#include "tabs.h"
//-----------------------------------------------------------------------
// Tabulator stuff
//-----------------------------------------------------------------------
// Replace first '\t' by filling up spaces until POS is reached
void tabto(string& s, int pos)
{
for (int i = 0; unsigned(i) < s.length() && i < pos; i++)
{
if (s[i] == '\t')
{
int offset = pos - i;
s(i, 1) = replicate(' ', offset);
return;
}
}
}
// Replace all '\t' by filling up spaces until multiple of TAB_WIDTH
// is reached; ignore first INDENT characters.
void untabify(string& str, int tab_width, int indent)
{
char *buffer =
new char[str.length() + str.freq('\t') * (tab_width - 1) + 1];
char *b = buffer;
int column = 0;
int spaces;
const char *s = str.chars();
while (*s != '\0')
{
switch (*s)
{
case '\t':
if (column >= indent)
spaces = tab_width - ((column - indent) % tab_width);
else
spaces = 1;
while (spaces-- > 0)
{
*b++ = ' ';
column++;
}
break;
case '\n':
case '\r':
*b++ = *s;
column = 0;
break;
default:
*b++ = *s;
column++;
break;
}
s++;
}
*b++ = '\0';
str = buffer;
delete[] buffer;
}