1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
/**
* Yudit Unicode Editor Source File
*
* GNU Copyright (C) 1997-2023 Gaspar Sinai <gaspar@yudit.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2,
* dated June 1991. See file COPYYING for details.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef SEmbedState_h
#define SEmbedState_h
#include "stoolkit/STypes.h"
#include "stoolkit/SString.h"
#include <string.h>
#define SD_BIDI_MAX_EMBED 61
#define SD_BIDI_MAX32 (SD_BIDI_MAX_EMBED/8+1)
class SEmbedState
{
public:
inline SEmbedState(void);
inline SEmbedState operator=(const SEmbedState& es);
inline SEmbedState(const SEmbedState& es);
bool operator == (const SEmbedState& es) const;
bool operator != (const SEmbedState& es) const;
void setEmbeddingMarks (const SV_UCS4& stack);
SV_UCS4 getEmbeddingMarks (const SEmbedState* from) const;
inline unsigned int getExplicitLevel() const;
inline bool isOverride() const;
SString toString() const;
private:
unsigned int getDepth () const;
inline void setExplicitLevel (unsigned int _exlevel, bool _override);
void setMark (unsigned int level, unsigned int _mark);
unsigned int getMark(unsigned int level) const;
SS_UCS4 states[SD_BIDI_MAX32];
char explevel;
};
SEmbedState::SEmbedState(void)
{
memset(states, 0, sizeof (states));
explevel=0;
}
SEmbedState::SEmbedState(const SEmbedState& es)
{
memcpy (states, es.states, sizeof (states));
explevel = es.explevel;
}
SEmbedState
SEmbedState::operator=(const SEmbedState& es)
{
memcpy (states, es.states, sizeof (states));
explevel = es.explevel;
return *this;
}
bool
SEmbedState::isOverride() const
{
return (explevel & 0x40);
}
unsigned int
SEmbedState::getExplicitLevel() const
{
return (unsigned int) (explevel & 0x3f);
}
void
SEmbedState::setExplicitLevel (unsigned int _exlevel, bool _override)
{
explevel = ((_exlevel & 0x3f) | (_override?0x40:0));
}
#endif /* SEmbedState_h */
|