+// -*- C++ -*-
+/**
+ * \file types.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * Provide a set of typedefs for commonly used things like sizes and
+ * indices wile trying to stay compatible with types used
+ * by the standard containers.
+ *
+ * \author André Pönitz
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
#ifndef LYX_TYPES_H
#define LYX_TYPES_H
-// provide a set of typedefs for commonly used things like sizes and
-// indices while trying to stay compatible with types used by the standard
-// containers.
+#include <boost/cstdint.hpp>
+#include <cstddef>
-// this probably could be improved by using <cstddef>...
-#include <vector>
+namespace lyx {
+
+ /// The type used to hold characters in paragraphs
+#if defined(HAVE_WCHAR_T) && SIZEOF_WCHAR_T == 4
+ // Prefer this if possible because GNU libstdc++ has usable
+ // std::ctype<wchar_t> locale facets but not
+ // std::ctype<boost::uint32_t>. gcc older than 3.4 is also missing
+ // usable std::char_traits<boost::uint32_t>.
+ typedef wchar_t char_type;
+#else
+ typedef boost::uint32_t char_type;
+#endif
-namespace lyx
-{
/// a type for positions used in paragraphs
// needs to be signed for a while to hold the special value -1 that is
- // used there...
- typedef std::vector<char>::difference_type pos_type;
+ // used there
+ typedef ptrdiff_t pos_type;
+
+ /// a type for paragraph offsets
+ // FIXME: should be unsigned as well.
+ // however, simply changing it breaks a downward loop somewhere...
+ typedef ptrdiff_t pit_type;
+ /// a type for the nesting depth of a paragraph
+ typedef size_t depth_type;
// set this to '0' if you want to have really safe types
#if 1
/// a type for sizes
- typedef std::vector<char>::size_type size_type;
+ typedef size_t size_type;
/// a type used for numbering text classes
- // used to be LyXTextClassList::size_type
- typedef std::vector<char>::size_type textclass_type;
+ typedef size_t textclass_type;
#else
struct size_type {
///
- typedef std::vector<char>::size_type base_type;
+ typedef size_t base_type;
///
size_type(base_type t) { data_ = t; }
///
struct textclass_type {
///
- typedef std::vector<char>::size_type base_type;
+ typedef size_t base_type;
///
textclass_type(base_type t) { data_ = t; }
///
private:
base_type data_;
};
-
+
#endif
-}
+ ///
+ enum word_location {
+ // the word around the cursor, only if the cursor is
+ //not at a boundary
+ WHOLE_WORD_STRICT,
+ // the word around the cursor
+ WHOLE_WORD,
+ /// the word begining from the cursor position
+ PARTIAL_WORD,
+ /// the word around the cursor or before the cursor
+ PREVIOUS_WORD,
+ /// the next word (not yet used)
+ NEXT_WORD
+ };
+
+} // namespace lyx
-#endif
+#endif // LYX_TYPES_H