mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
+ Got rid of zip lib requirement in G3D...
Still can re-enable code by defining _HAVE_ZIP...
+ Remove silly X11 lib dependency from G3D
Code doesn't seem to do anything yet anyway, and even if, we don't want it :p
+ Fix another weird G3D build problem...
+ Remove some __asm usage in g3d, which is not available on Win64
My editor also decided to remove a ton of trailing white spaces...tss...
+ Reapply G3D fixes for 64bit VC
+ not use SSE specific header when SSE not enabled in *nix
+ Updated project files
+ New vmap_assembler VC90/VC80 Project
+ vmap assembler binaries updates
NOTE: Old vmap fikes expected work (as tests show) with new library version.
But better use new generated versions. Its different in small parts to bad or good...
(based on Lynx3d's repo commit 44798d3)
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
249 lines
8.1 KiB
C++
249 lines
8.1 KiB
C++
/**
|
|
@file TextOutput.h
|
|
|
|
@maintainer Morgan McGuire, http://graphics.cs.williams.edu
|
|
@created 2004-06-21
|
|
@edited 2006-10-24
|
|
|
|
Copyright 2000-2007, Morgan McGuire.
|
|
All rights reserved.
|
|
*/
|
|
|
|
#ifndef G3D_TEXTOUTPUT_H
|
|
#define G3D_TEXTOUTPUT_H
|
|
|
|
#include "G3D/platform.h"
|
|
#include "G3D/Array.h"
|
|
#include <string>
|
|
|
|
namespace G3D {
|
|
|
|
/**
|
|
Convenient formatting of ASCII text written to a file.
|
|
<P>
|
|
|
|
The core writeString, writeNumber, and writeSymbol methods map to TextInput's
|
|
methods. Number and Symbol each print an additional space that is used to
|
|
separate adjacent tokens.
|
|
|
|
TextOutput::printf allows arbitrary text to be conveniently dumped
|
|
en-masse. Use [de]serialize(bool, TextOutput) and other overloads to read/write
|
|
primitive types in a standardized manner and
|
|
|
|
<P>
|
|
When a word-wrap line break occurs, all whitespace between words is replaced
|
|
with a single newline (the newline may be two characters-- see
|
|
G3D::TextOutput::Options::NewlineStyle). Word wrapping occurs against
|
|
the number of columns specified by Options::numColumns, <I>minus</I> the current
|
|
indent level.
|
|
|
|
Indenting adds the specified number of spaces immediately after a newline.
|
|
If a newline was followed by spaces in the original string, these are added
|
|
to the indent spaces. Indenting <B>will</B> indent blank lines and will leave
|
|
indents after the last newline of a file (if the indent level is non-zero at the end).
|
|
|
|
<P><B>Serialization/Marshalling</B>
|
|
<DT>Text serialization is accomplished using TextOutput by defining the pair of
|
|
methods:
|
|
|
|
<PRE>
|
|
void serialize(TextOutput& to) const;
|
|
void deserialize(TextInput& ti);
|
|
</PRE>
|
|
|
|
See also G3D::TextInput.
|
|
|
|
<P>
|
|
<B>BETA API</B>
|
|
<DT>This API is subject to change in future versions.
|
|
*/
|
|
class TextOutput {
|
|
public:
|
|
|
|
class Settings {
|
|
public:
|
|
/**
|
|
WRAP_NONE Word wrapping is disabled
|
|
WRAP_WITHOUT_BREAKING Word-wrap, but don't break continuous lines that
|
|
are longer than numColumns (default)
|
|
WRAP_ALWAYS Wrap even if it means breaking a continuous line or
|
|
a quoted string.
|
|
|
|
Word wrapping is only allowed at whitespaces ('\\n', '\\r', '\\t', ' '); it
|
|
will not occur after commas, punctuation, minus signs, or any other characters
|
|
*/
|
|
enum WordWrapMode {WRAP_NONE, WRAP_WITHOUT_BREAKING, WRAP_ALWAYS};
|
|
|
|
/** Defaults to WRAP_WITHOUT_BREAKING */
|
|
WordWrapMode wordWrap;
|
|
|
|
/** Is word-wrapping allowed to insert newlines inside double quotes?
|
|
Default: false */
|
|
bool allowWordWrapInsideDoubleQuotes;
|
|
|
|
/** Number of columns for word wrapping. Default: 8 */
|
|
int numColumns;
|
|
|
|
/** Number of spaces in each indent. Default: 4 */
|
|
int spacesPerIndent;
|
|
|
|
/** Style of newline used by word wrapping and by (optional) conversion.
|
|
default: Windows: NEWLINE_WINDOWS, Linux, OS X: NEWLINE_UNIX.
|
|
*/
|
|
enum NewlineStyle {NEWLINE_WINDOWS, NEWLINE_UNIX};
|
|
|
|
NewlineStyle newlineStyle;
|
|
|
|
/** If true, all newlines are converted to NewlineStyle regardless of
|
|
how they start out. Default: true. */
|
|
bool convertNewlines;
|
|
|
|
/** Used by writeBoolean */
|
|
std::string trueSymbol;
|
|
|
|
/** Used by writeBoolean */
|
|
std::string falseSymbol;
|
|
|
|
Settings() :
|
|
wordWrap(WRAP_WITHOUT_BREAKING),
|
|
allowWordWrapInsideDoubleQuotes(false),
|
|
numColumns(80),
|
|
spacesPerIndent(4),
|
|
convertNewlines(true),
|
|
trueSymbol("true"),
|
|
falseSymbol("false") {
|
|
#ifdef G3D_WIN32
|
|
newlineStyle = NEWLINE_WINDOWS;
|
|
#else
|
|
newlineStyle = NEWLINE_UNIX;
|
|
#endif
|
|
}
|
|
};
|
|
|
|
private:
|
|
|
|
/** Used by indentAndAppend to tell when we are writing the
|
|
first character of a new line.
|
|
|
|
So that push/popIndent work correctly, we cannot indent
|
|
immediately after writing a newline. Instead we must
|
|
indent on writing the first character <B>after</B> that
|
|
newline.
|
|
*/
|
|
bool startingNewLine;
|
|
|
|
/** Number of characters at the end of the buffer since the last newline */
|
|
int currentColumn;
|
|
|
|
/** True if we have seen an open " and no close ".*/
|
|
bool inDQuote;
|
|
|
|
/** Empty if there is none */
|
|
std::string filename;
|
|
|
|
Array<char> data;
|
|
|
|
Settings option;
|
|
|
|
/** Number of indents to prepend before each line. Always set using setIndentLevel.*/
|
|
int indentLevel;
|
|
|
|
void setIndentLevel(int i);
|
|
|
|
/** Actual number of spaces to indent. */
|
|
int indentSpaces;
|
|
|
|
/** the newline character(s) */
|
|
std::string newline;
|
|
|
|
void setOptions(const Settings& _opt);
|
|
|
|
/** Converts to the desired newlines. Called from vprintf */
|
|
void convertNewlines(const std::string& in, std::string& out);
|
|
|
|
/** Called from vprintf */
|
|
void wordWrapIndentAppend(const std::string& str);
|
|
|
|
/** Appends the character to data, indenting whenever a newline is encountered.
|
|
Called from wordWrapIndentAppend */
|
|
void indentAppend(char c);
|
|
|
|
public:
|
|
|
|
explicit TextOutput(const std::string& filename, const Settings& options = Settings());
|
|
|
|
/** Constructs a text output that can later be commited to a string instead of a file.*/
|
|
explicit TextOutput(const Settings& options = Settings());
|
|
|
|
/** Commit to the filename specified on the constructor.
|
|
<B>Not</B> called from the destructor; you must call
|
|
it yourself.
|
|
@param flush If true (default) the file is ready for reading when the method returns, otherwise
|
|
the method returns immediately and writes the file in the background.*/
|
|
void commit(bool flush = true);
|
|
|
|
/** Commits to this string */
|
|
void commitString(std::string& string);
|
|
|
|
/** Increase indent level by 1 */
|
|
void pushIndent();
|
|
|
|
void popIndent();
|
|
|
|
/** Produces a new string that contains the output */
|
|
std::string commitString();
|
|
|
|
/** Writes a quoted string. Special characters in the string (e.g., \\, \\t, \\n) are escaped so that
|
|
TextInput will produce the identical string on reading.*/
|
|
void writeString(const std::string& string);
|
|
|
|
void writeBoolean(bool b);
|
|
|
|
void writeNumber(double n);
|
|
|
|
void writeNumber(int n);
|
|
|
|
void writeNewline();
|
|
void writeNewlines(int numLines);
|
|
|
|
/** The symbol is written without quotes. Symbols are required to begin with a
|
|
letter or underscore and contain only letters, underscores, and numbers
|
|
or be a C++ symbol (e.g. "{", "(", "++", etc.)
|
|
so that they may be properly parsed by TextInput::readSymbol. Symbols are
|
|
printed with a trailing space.*/
|
|
void writeSymbol(const std::string& string);
|
|
|
|
/** Convenient idiom for writing multiple symbols in a row, e.g.
|
|
writeSymbols("name", "="); The empty symbols are not written.
|
|
*/
|
|
void writeSymbols(
|
|
const std::string& a,
|
|
const std::string& b = "",
|
|
const std::string& c = "",
|
|
const std::string& d = "",
|
|
const std::string& e = "",
|
|
const std::string& f = "");
|
|
|
|
/** Normal printf conventions. Note that the output will be reformatted
|
|
for word-wrapping and newlines */
|
|
void __cdecl printf(const char* fmt, ...)
|
|
G3D_CHECK_PRINTF_METHOD_ARGS;
|
|
|
|
// Can't pass by reference because that confuses va_start
|
|
void __cdecl printf(const std::string fmt, ...);
|
|
void __cdecl vprintf(const char* fmt, va_list argPtr)
|
|
G3D_CHECK_VPRINTF_METHOD_ARGS;
|
|
};
|
|
|
|
// Primitive serializers
|
|
void serialize(const bool& b, TextOutput& to);
|
|
void serialize(const int& b, TextOutput& to);
|
|
void serialize(const uint8& b, TextOutput& to);
|
|
void serialize(const double& b, TextOutput& to);
|
|
void serialize(const float& b, TextOutput& to);
|
|
void serialize(const std::string& b, TextOutput& to);
|
|
void serialize(const char* b, TextOutput& to);
|
|
|
|
}
|
|
|
|
#endif
|