mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-28 12:26:59 +00:00
feb7895965
read from a text file. * src/encoding.[Ch] (Encoding::latexChar): New, output a character to LaTeX (Encoding::validate): New, add needed preamble stuff for a character (Encodings::read): Read new unicodesymbols file (Encodings::isCombiningChar): New, is a character a combining char? * src/paragraph_pimpl.C (isEncoding): Delete, no longer needed (getEncoding): New, get the real encoding of a font (Paragraph::Pimpl::latexSurrogatePair): New, output a surrogate pair to LaTeX (Paragraph::Pimpl::simpleTeXBlanks): Use latexSurrogatePair if needed (Paragraph::Pimpl::simpleTeXSpecialChars): Ditto, and replace several hardcoded characters with a call of encoding.latexChar() (Paragraph::Pimpl::validate): replace several hardcoded characters with a call of encoding.validate() * src/support/debugstream.h (basic_debugstream::disable): New, disable the stream completely (basic_debugstream::enable): New, reenable the stream * src/lyx_main.[Ch]: Adjust to changes above * src/paragraph.C: Ditto * lib/unicodesymbols: New file with UCS4 -> LaTeX command mapping. It is far from complete yet, but contains most accents on latin characters. * lib/Makefile.am: add lib/unicodesymbols * development/scons/scons_manifest.py: ditto * development/tools/unicodesymbols.py: Helper script to update lib/unicodesymbols with new symbols git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16920 a592a061-630c-0410-9148-cb99ea01b6c8
138 lines
2.7 KiB
C++
138 lines
2.7 KiB
C++
// -*- C++ -*-
|
|
/**
|
|
* \file debugstream.h
|
|
* This file is part of LyX, the document processor.
|
|
* Licence details can be found in the file COPYING.
|
|
*
|
|
* \author Lars Gullik Bjønnes
|
|
*
|
|
* Full author contact details are available in file CREDITS.
|
|
*/
|
|
|
|
#ifndef DEBUG_STREAM_HPP
|
|
#define DEBUG_STREAM_HPP
|
|
|
|
#include <iostream>
|
|
|
|
#include <boost/version.hpp>
|
|
|
|
|
|
//namespace lyx {
|
|
|
|
#if BOOST_VERSION < 103300
|
|
# include <boost/test/detail/nullstream.hpp>
|
|
#else
|
|
# include <boost/test/utils/nullstream.hpp>
|
|
#endif
|
|
|
|
#ifdef DEBUG
|
|
# define TEMPORARY_DEBUG_MACRO DEBUG
|
|
# undef DEBUG
|
|
#endif
|
|
|
|
struct debug_trait {
|
|
enum type {
|
|
NONE = 0,
|
|
EMERG = 1,
|
|
ALERT = 2,
|
|
CRIT = 3,
|
|
ERR = 4,
|
|
WARN = 5,
|
|
NOTICE = 6,
|
|
INFO = 7,
|
|
DEBUG = 8,
|
|
ANY = 0xffffff
|
|
};
|
|
|
|
static bool match(type a, type b) {
|
|
return (b <= a || (b == ANY && a > NONE));
|
|
}
|
|
};
|
|
|
|
#ifdef TEMPORARY_DEBUG_MACRO
|
|
# define DEBUG TEMPORARY_DEBUG_MACRO
|
|
# undef TEMPORARY_DEBUG_MACRO
|
|
#endif
|
|
|
|
|
|
template <class dtrait,
|
|
class charT = char,
|
|
class traits = std::char_traits<charT> >
|
|
class basic_debugstream : public std::basic_ostream<charT, traits> {
|
|
public:
|
|
typedef dtrait debug;
|
|
typedef typename debug::type Type;
|
|
|
|
basic_debugstream()
|
|
: std::basic_ostream<charT, traits>(0), dt(debug::NONE),
|
|
realbuf_(0), enabled_(true)
|
|
{}
|
|
|
|
/// Constructor, sets the debug level to t.
|
|
explicit basic_debugstream(std::basic_streambuf<charT, traits> * buf)
|
|
: std::basic_ostream<charT, traits>(buf), dt(debug::NONE),
|
|
realbuf_(0), enabled_(true)
|
|
{}
|
|
|
|
/// Sets the debug level to t.
|
|
void level(Type t) {
|
|
dt = t;
|
|
}
|
|
|
|
/// Returns the current debug level.
|
|
Type level() const {
|
|
return dt;
|
|
}
|
|
|
|
/// Returns true if t is part of the current debug level.
|
|
bool debugging(Type t = debug::ANY) const
|
|
{
|
|
if (debug::match(dt, t)) return true;
|
|
return false;
|
|
}
|
|
|
|
/** Returns the no-op stream if t is not part of the
|
|
current debug level otherwise the real debug stream
|
|
is used.
|
|
Use: dbgstream[Debug::INFO] << "Info!\n";
|
|
*/
|
|
std::basic_ostream<charT, traits> & operator[](Type t) {
|
|
if (debug::match(dt, t))
|
|
return *this;
|
|
return nullstream;
|
|
}
|
|
/// Disable the stream completely
|
|
void disable()
|
|
{
|
|
if (enabled_) {
|
|
realbuf_ = this->rdbuf();
|
|
rdbuf(nullstream.rdbuf());
|
|
enabled_ = false;
|
|
}
|
|
}
|
|
/// Enable the stream after a possible call of disable()
|
|
void enable()
|
|
{
|
|
if (!enabled_) {
|
|
this->rdbuf(realbuf_);
|
|
enabled_ = true;
|
|
}
|
|
}
|
|
private:
|
|
/// The current debug level
|
|
Type dt;
|
|
/// The no-op stream.
|
|
boost::basic_onullstream<charT, traits> nullstream;
|
|
/// The buffer of the real stream
|
|
std::streambuf * realbuf_;
|
|
/// Is the stream enabled?
|
|
bool enabled_;
|
|
};
|
|
|
|
typedef basic_debugstream<debug_trait> debugstream;
|
|
|
|
|
|
//} // namespace lyx
|
|
|
|
#endif
|