#define ENCODING_H
#include "support/docstring.h"
+#include "support/trivstring.h"
#include "support/types.h"
#include <map>
EncodingException(char_type c);
virtual ~EncodingException() throw() {}
virtual const char * what() const throw();
-
+
char_type failed_char;
int par_id;
pos_type pos;
///
private:
/// LaTeX command (text mode) for this character
- docstring textcommand_;
+ trivdocstring textcommand_;
/// LaTeX command (math mode) for this character
- docstring mathcommand_;
+ trivdocstring mathcommand_;
/// Needed LaTeX preamble (or feature) for text mode
- std::string textpreamble_;
+ trivstring textpreamble_;
/// Needed LaTeX preamble (or feature) for math mode
- std::string mathpreamble_;
+ trivstring mathpreamble_;
/// TIPA shortcut
- std::string tipashortcut_;
+ trivstring tipashortcut_;
/// feature flags
unsigned int flags_;
};
-///
+/**
+ * An encoding as defined in lib/encodings.
+ * All const methods are thread-safe, so the caller does not need any locking.
+ * This property must be kept when changing the class.
+ */
class Encoding {
public:
/// Which LaTeX package handles this encoding?
/// Represent any of the above packages
static int const any;
///
- Encoding() : fixedwidth_(true), unsafe_(false), complete_(false) {}
+ Encoding() : fixedwidth_(true), unsafe_(false), start_encodable_(0),
+ package_(none), complete_(false) {}
///
Encoding(std::string const & n, std::string const & l,
std::string const & g, std::string const & i,
///
void init() const;
///
- std::string const & name() const { return name_; }
+ std::string const name() const { return name_; }
///
- std::string const & latexName() const { return latexName_; }
+ std::string const latexName() const { return latexName_; }
///
- std::string const & guiName() const { return guiName_; }
+ std::string const guiName() const { return guiName_; }
///
- std::string const & iconvName() const { return iconvName_; }
+ std::string const iconvName() const { return iconvName_; }
///
bool hasFixedWidth() const { return fixedwidth_; }
///
*/
bool isForced(char_type c) const;
///
- std::string name_;
+ trivstring name_;
///
- std::string latexName_;
+ trivstring latexName_;
///
- std::string guiName_;
+ trivstring guiName_;
///
- std::string iconvName_;
+ trivstring iconvName_;
/// Is this a fixed width encoding?
bool fixedwidth_;
/// Is this encoding TeX unsafe, e.g. control characters like {, }
typedef std::set<char_type> CharSet;
/// Set of UCS4 characters that we can encode (for singlebyte
/// encodings only)
- mutable CharSet encodable_;
+ CharSet encodable_;
/// Set of UCS4 characters that we can't encode
CharSet const * forced_;
/// All code points below this are encodable. This helps us to avoid
/// lokup of ASCII characters in encodable_ and gives about 1 sec
/// speedup on export of the Userguide.
- mutable char_type start_encodable_;
+ char_type start_encodable_;
/// Which LaTeX package handles this encoding?
Package package_;
/**
* This is needed especially for the multibyte encodings, if we
* complete all encoding info on startup it takes 2-3 minutes.
*/
- mutable bool complete_;
+ bool complete_;
};
class Encodings {
///
typedef std::set<char_type> MathSymbolSet;
///
- typedef std::map<std::string, Encoding> EncodingList;
+ typedef std::map<trivstring, Encoding> EncodingList;
/// iterator to iterate over all encodings.
/// We hide the fact that our encoding list is implemented as a map.
class const_iterator : public EncodingList::const_iterator {