spiegel-keyman/windows/src/developer/kmcmpdll/xstring.cpp
Marc Durdin b65b982584 Keyman Desktop and Keyman Developer open source 10.0 alpha seed (#121)
* Keyman for Windows 10.0 Open Source

* Squashed 'windows/src/ext/jedi/jedi/' content from commit f444ad2

git-subtree-dir: windows/src/ext/jedi/jedi
git-subtree-split: f444ad2da4693851e523f1ea6bd541f701904c24

* Squashed 'windows/src/ext/jedi/jcl/' content from commit d63d3c9fd

git-subtree-dir: windows/src/ext/jedi/jcl
git-subtree-split: d63d3c9fd9ff84efdd8159084ec6a60313644243

* Squashed 'windows/src/ext/jedi/jvcl/' content from commit bee19f3b4

git-subtree-dir: windows/src/ext/jedi/jvcl
git-subtree-split: bee19f3b46909fde2fa92c06cd2706f41d99f6c3

* Add required .res files

* Add required .res files

* Add docbook files (forced)

* Add required libxslt

* Add required jedi files

* Add installation files

* Tweak .gitignore for open

* CI

* Remove KMW from Developer source (#122)

* Remove KMW from Developer source (copies during build)

* Remove KMW from Developer source (copies during build)

* Remove KMW from Developer source (copies during build)

* Fixup release build and copy license, readme from kmw during build

* Remove obsolete build help documentation

* Keyman Engine 10 on Windows regression for shift states (#129)

* Improve #128 -- cleaner debug messages

* Fixes #127, shift state now resets correctly; and more work for #128

* Fixes #130 (#131)
2017-07-25 10:53:06 +07:00

48 lines
1.4 KiB
C++

class XString
{
friend class XStringPointer;
private:
int RefCount; /* If RefCount > 0 when ~XString called, log an error */
WCHAR *buf; /* Buffer for XString */
int nbuf; /* Length of buf in bytes */
public:
XString(); /* New, empty XString */
XString(PWSTR FInitWStr); /* New, copy from FInitWStr */
XString(XString *FInitXStr); /* New, copy from FInitXStr */
~XString();
int Length(); /* Length in characters */
int WordLength() { return nbuf; } /* Length in WORDs */
void Append(XString *FAppendXStr);
void Append(WCHAR *FAppendWStr);
void Append(WCHAR FAppendChar);
void Delete(int Position); /* Delete the character at Position */
void Delete(int Position, int Length); /* Delete the character at Position to Pos+Len-1 */
};
class XStringPointer
{
private:
XString str;
WCHAR *p;
public:
XStringPointer(XString FParent);
~XStringPointer();
operator++();
operator--();
WCHAR operator[](int n);
WCHAR *cp() { return p; }
BOOL IsSurrogate();
BOOL IsFunction();
BOOL IsFunction(int FunctionID);
int Position(); /* Returns the current character position */
int WordPosition(); /* Returns the current word position */
void Insert(XString *FInsertXStr); /* Insert a character before pointer position */
void Insert(WCHAR *FInsertWStr);
void Insert(WCHAR FInsertChar);
void Delete(); /* Delete the current character */
void Delete(int n); /* Delete the current character + n-1 chrs */
};