33 #include <wx/translation.h> 37 #if !defined( HAVE_FGETC_NOLOCK ) 38 #define getc_unlocked getc 42 static int vprint( std::string* result,
const char* format, va_list ap )
53 size_t len = vsnprintf( msg,
sizeof(msg), format, ap );
55 if( len <
sizeof(msg) )
57 result->append( msg, msg + len );
64 std::vector<char> buf;
67 len = vsnprintf( &buf[0], len+1, format, tmp );
69 result->append( &buf[0], &buf[0] + len );
78 int StrPrintf( std::string* result,
const char* format, ... )
82 va_start( args, format );
83 int ret =
vprint( result, format, args );
95 va_start( args, format );
96 int ignore =
vprint( &ret, format, args );
107 m_length( 0 ), m_lineNum( 0 ), m_line(
NULL ),
108 m_capacity( 0 ), m_maxLineLength( aMaxLineLength )
110 if( aMaxLineLength != 0 )
163 unsigned aStartingLineNumber,
unsigned aMaxLineLength ):
166 m_fp = wxFopen( aFileName, wxT(
"rt" ) );
171 _(
"Unable to open filename \"%s\" for reading" ), aFileName.GetData() );
182 unsigned aStartingLineNumber,
183 unsigned aMaxLineLength ) :
184 LINE_READER( aMaxLineLength ), m_iOwn( doOwn ), m_fp( aFile )
234 m_lines( aString ), m_ndx( 0 )
244 m_lines( aStartingPoint.m_lines ),
245 m_ndx( aStartingPoint.m_ndx )
259 if( nlOffset == std::string::npos )
340 if( strlen( wrapee ) == 0 )
345 for( ; *wrapee; ++wrapee, isFirst = false )
347 static const char quoteThese[] =
"\t ()" 354 if( strchr( quoteThese, *wrapee ) )
357 if( !isFirst &&
'-' == *wrapee )
400 va_start( args, fmt );
401 int ret =
vprint( fmt, args);
414 va_start( args, fmt );
419 for(
int i = 0; i < nestLevel; ++i )
428 result =
vprint( fmt, args );
441 ret.reserve( aWrapee.size() * 2 + 2 );
445 for( std::string::const_iterator it = aWrapee.begin(); it != aWrapee.end(); ++it )
483 return Quotes( (
const char*) aWrapee.utf8_str() );
500 for( std::string::iterator i = copy.begin(); i != copy.end(); ++i )
502 if( !isspace( *i ) && *i !=
')' && *i !=
'(' && *i !=
'"' )
514 m_filename( aFileName )
516 m_fp = wxFopen( aFileName, aMode );
532 if( fwrite( aOutBuf, (
unsigned) aCount, 1,
m_fp ) != 1 )
545 for(
int total = 0; total<aCount; total += lastWrite )
547 lastWrite =
m_os.Write( aOutBuf, aCount ).LastWrite();
An abstract class from which implementation specific LINE_READERs may be derived to read single lines...
char * ReadLine() override
Read a line of text into the buffer and increments the line number counter.
#define LINE_READER_LINE_INITIAL_SIZE
char * m_line
the read line of UTF8 text
~FILE_LINE_READER()
May or may not close the open file, depending on doOwn in constructor.
char * ReadLine() override
Read a line of text into the buffer and increments the line number counter.
int StrPrintf(std::string *result, const char *format,...)
This is like sprintf() but the output is appended to a std::string instead of to a character array.
unsigned m_capacity
no. bytes allocated for line.
void expandCapacity(unsigned aNewsize)
Will expand the capacity of line up to maxLineLength but not greater, so be careful about making assu...
#define LINE_READER_LINE_DEFAULT_MAX
#define OUTPUTFMTBUFZ
default buffer size for any OUTPUT_FORMATTER
LINE_READER(unsigned aMaxLineLength=LINE_READER_LINE_DEFAULT_MAX)
Build a line reader and fixes the length of the maximum supported line length to aMaxLineLength.
wxString m_source
origin of text lines, e.g. filename or "clipboard"
FILE * m_fp
I may own this file, but might not.
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
FILE_LINE_READER(const wxString &aFileName, unsigned aStartingLineNumber=0, unsigned aMaxLineLength=LINE_READER_LINE_DEFAULT_MAX)
Take aFileName and the size of the desired line buffer and opens the file and assumes the obligation ...
static int vprint(std::string *result, const char *format, va_list ap)
bool m_iOwn
if I own the file, I'll promise to close it, else not.
unsigned m_length
no. bytes in line before trailing nul.
Is a LINE_READER that reads from a multiline 8 bit wide std::string.
#define THROW_IO_ERROR(msg)
STRING_LINE_READER(const std::string &aString, const wxString &aSource)
Construct a string line reader.
unsigned m_maxLineLength
maximum allowed capacity using resizing.