text: ///////////////////////////////////////////////////////////////////////////////
  // Name:        pdfencoding.h
  // Purpose:
  // Author:      Ulrich Telle
  // Created:     2009-05-30
  // Copyright:   (c) Ulrich Telle
  // Licence:     wxWindows licence
  ///////////////////////////////////////////////////////////////////////////////
  
  /// \file pdfencoding.h Definition of encoding class
  
  #ifndef _PDF_ENCODING_H_
  #define _PDF_ENCODING_H_
  
  // wxWidgets headers
  #include <wx/string.h>
  
  // wxPdfDocument headers
  #include "wx/pdfdocdef.h"
  #include "wx/pdfarraytypes.h"
  #include "wx/pdffontdata.h"
  
  /// Class representing a font encoding
  class WXDLLIMPEXP_PDFDOC wxPdfEncoding
  {
  public:
    /// Default constructor
    wxPdfEncoding();
  
    /// Destructor
    virtual ~wxPdfEncoding();
  
    /// Copy constructor
    wxPdfEncoding(const wxPdfEncoding& encoding);
  
    /// Assignment operator
    wxPdfEncoding& operator=(const wxPdfEncoding& encoding);
  
    /// Check whether the encoding is valid
    /**
    * \return TRUE if the encoding is valid, FALSE otherwise
    */
    bool IsOk() const;
  
    /// Set the encoding
    /**
    * \param encoding the encoding that should be set
    */
    bool SetEncoding(const wxString& encoding);
  
    /// Get the name of the encoding
    /**
    * \return the name of the encoding
    */
    wxString GetEncodingName() const;
  
    /// Get the name of the base encoding
    /**
    * \return the name of the base encoding
    */
    wxString GetBaseEncodingName() const;
  
    /// Get the differences between the encoding and the associated base encoding
    /**
    * \return the difference string
    */
    wxString GetDifferences() const;
  
    /// Get the character map of the encoding
    /**
    * \return the character map
    */
    wxPdfArrayUint32 GetCMap() const;
  
    /// Initialize the encoding map
    void InitializeEncodingMap();
  
    /// Get the encoding map
    /**
    * \return the encoding map
    */
    const wxPdfChar2GlyphMap* GetEncodingMap() const;
  
    /// Get the list of glyph names supported by the encoding
    /**
    * \return a list of glyph names
    */
    wxArrayString GetGlyphNames() const;
  
    /// Convert a glyph name to a unicode character
    /**
    * \param[in] glyphName name of the glyph
    * \param[out] unicode unicode character of the glyph
    * \return TRUE if the conversion was successful, FALSE otherwise
    */
    static bool GlyphName2Unicode(const wxString& glyphName, wxUint32& unicode);
  
    /// Convert a unicode character to a glyph name
    /**
    * \param[in] unicode unicode character of the glyph
    * \param[out] glyphName name of the glyph
    * \return TRUE if the conversion was successful, FALSE otherwise
    */
    static bool Unicode2GlyphName(wxUint32 unicode, wxString& glyphName);
  
    /// Get a list of known encodings
    /**
    * \return an array containing all known encodings
    */
    static wxArrayString GetKnownEncodings();
  
  protected:
    /// Create the encoding conversion map for user defined encodings
    void CreateEncodingConvMap();
  
  private:
    wxString            m_encoding;         ///< name of the encoding
    wxString            m_baseEncoding;     ///< name of the base encoding
    wxPdfArrayUint32    m_cmap;             ///< character map of the encoding
    wxPdfArrayUint32    m_cmapBase;         ///< character map of the base encoding
    wxArrayString       m_glyphNames;       ///< array of glyph names in the encoding
    bool                m_specific;         ///< flag whether the encoding is specific
    int                 m_firstChar;        ///< number of the first valid character
    int                 m_lastChar;         ///< number of the last valid character
    wxPdfChar2GlyphMap* m_encodingMap;      ///< Encoding conversion map
  };
  
  /// Class representing a font encoding checker
  class WXDLLIMPEXP_PDFDOC wxPdfEncodingChecker
  {
  public:
    /// Default constructor
    wxPdfEncodingChecker();
  
    /// Destructor
    virtual ~wxPdfEncodingChecker();
  
    /// Get the name of the encoding used for checking
    /**
    * \return the name of the encoding
    */
    wxString GetEncodingName() const;
  
    /// Check whether a given Unicode character is included in the encoding
    /**
    * \return TRUE if the Unicode character is included, FALSE otherwise
    */
    virtual bool IsIncluded(wxUint32 unicode) const = 0;
  
  protected:
    wxString         m_encoding;         ///< name of the encoding
  };
  
  #endif
  