summaryrefslogtreecommitdiff
path: root/l10ntools/inc/wtratree.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'l10ntools/inc/wtratree.hxx')
-rw-r--r--l10ntools/inc/wtratree.hxx159
1 files changed, 159 insertions, 0 deletions
diff --git a/l10ntools/inc/wtratree.hxx b/l10ntools/inc/wtratree.hxx
new file mode 100644
index 000000000000..6fd33a7cb413
--- /dev/null
+++ b/l10ntools/inc/wtratree.hxx
@@ -0,0 +1,159 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef TX3_WTRATREE_HXX
+#define TX3_WTRATREE_HXX
+
+// USED
+ // Base Classes
+ // Components
+ // Parameters
+#include <tools/string.hxx>
+
+const INT16 C_NR_OF_WTT_RESULTS = 5;
+const INT16 C_NR_OF_POSSIBLE_CHARS = 256;
+
+
+typedef unsigned char u_char;
+typedef const char * constr;
+
+
+class WTT_Node;
+
+
+/** @task
+ This class implements the functionality, that class WordTransformer
+ offers.
+ WordTransformer is dependant of this class, but NOT the other way!
+**/
+class WordTransTree
+{
+ public:
+ enum E_Result
+ {
+ OK = 0,
+ HOTKEY_LOST,
+ OUTPUT_OVERFLOW
+ };
+
+
+ // LIFECYCLE
+ WordTransTree(
+ CharSet i_nWorkingCharSet = RTL_TEXTENCODING_MS_1252);
+ void SetCharSet(
+ CharSet i_nWorkingCharSet);
+ ~WordTransTree();
+
+ void AddWordPair(
+ const ByteString & i_sOldString,
+ const ByteString & i_sReplaceString );
+
+ // OPERATIONS
+ void InitTransformation(
+ const char * i_sInput, /// [!=0], a range of i_nInputLength must be valid memory for read.
+ UINT32 i_nInputLength,
+ UINT32 i_nOutputMaxLength = STRING_MAXLEN - 12 );
+ E_Result TransformNextToken();
+
+ // INQUIRY
+ BOOL TextEndReached() const;
+ const char * Output() const;
+
+ // These 3 functions are valid between two calls of
+ // TransformNextToken():
+ E_Result CurResult() const;
+ ByteString CurReplacedString() const;
+ ByteString CurReplacingString() const;
+ char CurHotkey() const;
+
+ private:
+ // SERVICE FUNCTONS
+ UINT8 CalculateBranch(
+ u_char i_cInputChar ) const;
+
+ void Handle_Hotkey();
+ void Handle_TokenToKeep();
+ void Handle_TokenToTransform();
+
+ // DATA
+ // Fixed data
+ const u_char * sInput;
+ UINT32 nInputLength;
+ const u_char * pInputEnd;
+
+ u_char * sOutput; // DYN
+ UINT32 nOutputMaxLength;
+
+ WTT_Node * dpParsingTreeTop; // DYN
+ WTT_Node * pUnknownAlpha;
+ u_char cChar2Branch[C_NR_OF_POSSIBLE_CHARS];
+ u_char c_AE, c_OE, c_UE, c_ae, c_oe, c_ue;
+
+ // Working data
+ const u_char * pInputCurTokenStart;
+ const u_char * pInputPosition;
+ u_char * pOutputPosition;
+ WTT_Node * pCurParseNode;
+
+ // Data which are valid only after a completed call to TransformNextToken()
+ E_Result eCurResult;
+ u_char cCurHotkey; // Letter wich is used as hotkey
+ u_char cCurHotkeySign; // Letter which is used to assign hotkey ('~'or '&') .
+};
+
+
+
+
+
+
+
+inline BOOL
+WordTransTree::TextEndReached() const
+ { return pInputPosition == pInputEnd; }
+inline const char *
+WordTransTree::Output() const
+ { return TextEndReached() ? (constr) sOutput : ""; }
+inline WordTransTree::E_Result
+WordTransTree::CurResult() const
+ { return eCurResult; }
+inline ByteString
+WordTransTree::CurReplacedString() const
+ { return ByteString((constr) pInputCurTokenStart,pInputPosition-pInputCurTokenStart); }
+inline char
+WordTransTree::CurHotkey() const
+ { return cCurHotkey; }
+inline UINT8
+WordTransTree::CalculateBranch(u_char i_cInputChar) const
+ { return cChar2Branch[i_cInputChar]; }
+
+
+
+#endif
+
+
+