• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

ut_types.h

Go to the documentation of this file.
00001 /* -*- mode: C++; tab-width: 4; c-basic-offset: 4; -*- */
00002 
00003 /* AbiSource Program Utilities
00004  * Copyright (C) 1998 AbiSource, Inc.
00005  *
00006  * This program is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU General Public License
00008  * as published by the Free Software Foundation; either version 2
00009  * of the License, or (at your option) any later version.
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program; if not, write to the Free Software
00018  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
00019  * 02111-1307, USA.
00020  */
00021 
00022 #ifndef UT_TYPES_H
00023 #define UT_TYPES_H
00024 
00025 #ifdef HAVE_CONFIG_H
00026 #include "config.h"
00027 #endif
00028 
00029 #include <stdlib.h>
00030 #include <glib.h>
00031 
00032 /*
00033  *  This macro allow using GNUC extension with -pedantic
00034  */
00035 #if     __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
00036 #  define GNUC_EXTENSION __extension__
00037 #else
00038 #  define GNUC_EXTENSION
00039 #endif
00040 
00041 typedef guint8      UT_Byte;
00042 
00043 typedef gunichar        UT_UCS4Char;
00044 typedef guint16      UT_UCS2Char;
00045 typedef gint32          UT_GrowBufElement;
00046 
00047 /* NOTA BENE: UT_UCSChar is deprecated; all new code must use
00048    UT_UCS4Char instead !!! */
00049 typedef UT_UCS4Char     UT_UCSChar; /* Unicode */
00050 
00051 typedef guint8       UT_uint8;
00052 typedef gint8        UT_sint8;
00053 
00054 typedef guint16     UT_uint16;
00055 typedef gint16       UT_sint16;
00056 
00057 typedef guint32     UT_uint32;
00058 typedef gint32          UT_sint32;
00059 
00060 typedef guint64 UT_uint64;
00061 typedef gint64 UT_sint64;
00062 
00063 #ifdef _WIN64
00064 typedef guint64     UT_uintptr;
00065 typedef gint64  UT_sintptr;
00066 #else
00067 typedef unsigned long UT_uintptr;
00068 typedef long        UT_sintptr;
00069 #endif
00070 
00072 #define UT_UNUSED(x) (void)(x);
00073 
00078 #ifdef DEBUG
00079 #define UT_DEBUG_ONLY_ARG(x)
00080 #else
00081 #define UT_DEBUG_ONLY_ARG(x) (void)(x);
00082 #endif
00083 
00088 typedef UT_uint8 UT_Confidence_t;
00089 
00090 #define UT_CONFIDENCE_PERFECT 255
00091 #define UT_CONFIDENCE_GOOD    170
00092 #define UT_CONFIDENCE_SOSO    127
00093 #define UT_CONFIDENCE_POOR     85
00094 #define UT_CONFIDENCE_ZILCH     0
00095 
00096 #if defined(WIN32) /* && !defined(__MINGW32__) */
00097   #define ABI_PLUGIN_EXPORT __declspec(dllexport)
00098   #ifdef ABI_DLL
00099      /* we are building an AbiWord plugin and want to use something declared in a library */
00100      #define ABI_EXPORT __declspec(dllimport)
00101   #else
00102      /* we are building AbiWord and wish for its parts to be used by plugins */
00103      #define ABI_EXPORT __declspec(dllexport)
00104   #endif
00105 #elif defined (DISABLE_EXPORTS)
00106   /* ignore DISABLE_EXPORTS until we have assigned all symbols proper
00107    * visibility */
00108   #define ABI_PLUGIN_EXPORT
00109   #define ABI_EXPORT
00110 #else
00111   #define ABI_PLUGIN_EXPORT
00112   #define ABI_EXPORT
00113 #endif
00114 
00115 #if __GNUC__
00116   #define ABI_NORETURN __attribute__((noreturn))
00117   #define ABI_PRINTF_FORMAT(f,a) __attribute__ ((format (printf, f, a)))
00118 #else
00119   #define ABI_NORETURN
00120   #define ABI_PRINTF_FORMAT(f,a)
00121 #endif
00122 
00123 /* ABI_FAR_CALL: C function that we want to expose across plugin boundaries */
00124 #define ABI_FAR_CALL extern "C" ABI_PLUGIN_EXPORT
00125 
00126 #define _abi_callonce /* only call me once! */
00127 
00128 /*
00129     UT_Error should be used far more than it is.  Any function
00130     which reasonably could fail at runtime for anything other than
00131     a coding error or bug should return an error code.  Error codes
00132     should be propogated properly.
00133 
00134     Addendum: 1-23-99
00135     If you have any problems with or suggestions for error codes,
00136     please send them to Sam Tobin-Hochstadt (sytobinh@uchicago.edu).
00137     I am the person that has worked the most with them.
00138 */
00139 typedef UT_sint32       UT_Error;
00140 #define UT_OK           ((UT_Error) 0)
00141 #define UT_ERROR                ((UT_Error) -1)     /* VERY generic */
00142 #define UT_OUTOFMEM     ((UT_Error) -100)
00143 #define UT_SAVE_WRITEERROR      ((UT_Error) -201)
00144 #define UT_SAVE_NAMEERROR       ((UT_Error) -202)
00145 #define UT_SAVE_EXPORTERROR     ((UT_Error) -203)
00146 #define UT_EXTENSIONERROR       ((UT_Error) -204)
00147 #define UT_SAVE_CANCELLED       ((UT_Error) -205)
00148 #define UT_SAVE_OTHERERROR      ((UT_Error) -200)   /* This should eventually dissapear. */
00149 #define UT_IE_FILENOTFOUND      ((UT_Error) -301)
00150 #define UT_IE_NOMEMORY          ((UT_Error) -302)
00151 #define UT_IE_UNKNOWNTYPE       ((UT_Error) -303)
00152 #define UT_IE_BOGUSDOCUMENT     ((UT_Error) -304)
00153 #define UT_IE_COULDNOTOPEN      ((UT_Error) -305)
00154 #define UT_IE_COULDNOTWRITE     ((UT_Error) -306)
00155 #define UT_IE_FAKETYPE          ((UT_Error) -307)
00156 #define UT_INVALIDFILENAME      ((UT_Error) -308)
00157 #define UT_NOPIECETABLE         ((UT_Error) -309)
00158 #define UT_IE_ADDLISTENERERROR  ((UT_Error) -310)
00159 #define UT_IE_UNSUPTYPE         ((UT_Error) -311)
00160 #define UT_IE_PROTECTED         ((UT_Error) -312)       // (pass) protected doc
00161 #define UT_IE_SKIPINVALID       ((UT_Error) -313)       // (pass) protected doc
00162 #define UT_IE_IMPORTERROR       ((UT_Error) -300)   /* The general case */
00163 #define UT_IE_IMPSTYLEUNSUPPORTED  ((UT_Error) -314)
00164 #define UT_IE_XMLNOANGLEBRACKET    ((UT_Error) -360)
00165 #define UT_IE_TRY_RECOVER          ((UT_Error) -350)    // try recovering the document. ie, we have
00166                                                         // imported something
00167 
00168 #define UT_IS_IE_SUCCESS(x) (((x) == UT_OK) || ((x) == UT_IE_TRY_RECOVER))
00169 
00170 ABI_EXPORT UT_Error UT_errnoToUTError (void);
00171 
00172 /* defined in ut_misc.cpp */
00173 ABI_EXPORT void * UT_calloc ( UT_uint32 nmemb, UT_uint32 size );
00174 
00175 /*
00176     The MSVC debug runtime library can track leaks back to the
00177     original allocation via the following black magic.
00178 */
00179 #if defined(_MSC_VER) && defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
00180 #include <crtdbg.h>
00181 #define UT_DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
00182 #define new UT_DEBUG_NEW
00183 #endif /* _MSC_VER && _DEBUG && _CRTDBG_MAP_ALLOC */
00184 
00185 
00186 /* Unicode character constants.  Try to use these rather than
00187 ** decimal or hex constants throughout the code.  See also bug
00188 ** 512.
00189 */
00190 
00191 /* When objects (fields, etc) must be represented in unicode, use the
00192    BELL code and let UT_isWordDelimiter recognize it as a word
00193    character. See bug 223.  */
00194 #define UCS_ABI_OBJECT  ((UT_UCSChar)0x0007)
00195 
00196 #define UCS_TAB         ((UT_UCSChar)0x0009)
00197 #define UCS_LF          ((UT_UCSChar)0x000a)
00198 #define UCS_VTAB        ((UT_UCSChar)0x000b)
00199 #define UCS_FF          ((UT_UCSChar)0x000c)
00200 #define UCS_CR          ((UT_UCSChar)0x000d)
00201 #define UCS_SPACE       ((UT_UCSChar)0x0020)
00202 #define UCS_NBSP        ((UT_UCSChar)0x00a0)
00203 #define UCS_PILCROW     ((UT_UCSChar)0x00b6)
00204 #define UCS_LINESEP     ((UT_UCSChar)0x2028)            /* Unicode line separator */
00205 #define UCS_PARASEP     ((UT_UCSChar)0x2029)            /* Unicode paragraph separator */
00206 #define UCS_BOM         ((UT_UCSChar)0xFEFF)            /* Byte order mark */
00207 #define UCS_REPLACECHAR ((UT_UCSChar)0xFFFD)
00208 #define UCS_HYPHEN      ((UT_UCSChar)0x2010)
00209 #define UCS_MINUS       ((UT_UCSChar)0x2d)
00210 
00211 /* Note: the following are our interpretations, not Unicode's */
00212 /* Note: use Unicode Private Use Area 0xE000 - 0xF8FF         */
00213 /* Note: GB18030 mandates U+E000 - U+E765 for UDAs 1, 2 and 3 */
00214 /* Note: BIG5-HKSCS uses U+E000 - U+F848                      */
00215 /* Note: Please update UCS_ABICONTROL_START/END if more       */
00216 /* Note: special values are added.  We need to watch out for  */
00217 /* Note: them during import                                   */
00218 #define UCS_ABICONTROL_START    (UCS_FIELDSTART)
00219 #define UCS_FIELDSTART      ((UT_UCSChar)0xF850)
00220 #define UCS_FIELDEND        ((UT_UCSChar)0xF851)
00221 #define UCS_BOOKMARKSTART   ((UT_UCSChar)0xF852)
00222 #define UCS_BOOKMARKEND     ((UT_UCSChar)0xF853)
00223 #define UCS_LIGATURE_PLACEHOLDER ((UT_UCS4Char)0xF854)
00224 #define UCS_ABICONTROL_END  (UCS_LIGATURE_PLACEHOLDER)
00225 
00226 
00227 #if 1 /* try to use the unicode values for special chars */
00228 #define UCS_EN_SPACE        ((UT_UCSChar)0x2002)
00229 #define UCS_EM_SPACE        ((UT_UCSChar)0x2003)
00230 #define UCS_EN_DASH     ((UT_UCSChar)0x2013)
00231 #define UCS_EM_DASH     ((UT_UCSChar)0x2014)
00232 #define UCS_BULLET      ((UT_UCSChar)0x2022)
00233 /* TODO Quote marks need to be localized - not hard-coded */
00234 #define UCS_LQUOTE      ((UT_UCSChar)0x2018)
00235 #define UCS_RQUOTE      ((UT_UCSChar)0x2019)
00236 #define UCS_LDBLQUOTE       ((UT_UCSChar)0x201c)
00237 #define UCS_RDBLQUOTE       ((UT_UCSChar)0x201d)
00238 
00239 /* Note: the following is our interpretation, not Unicode's */
00240 #define UCS_UNKPUNK         ((UT_UCSChar)0xFFFF)  /* "unknown punctuation" used with UT_isWordDelimiter() */
00241 
00242 #else /* see bug 512 */
00243 
00244 #define UCS_EN_SPACE        ((UT_UCSChar)0x0020)
00245 #define UCS_EM_SPACE        ((UT_UCSChar)0x0020)
00246 #define UCS_EN_DASH     ((UT_UCSChar)0x002d)
00247 #define UCS_EM_DASH     ((UT_UCSChar)0x002d)
00248 #define UCS_BULLET      ((UT_UCSChar)0x0095)
00249 #define UCS_LQUOTE      ((UT_UCSChar)0x0027)
00250 #define UCS_RQUOTE      ((UT_UCSChar)0x0027)
00251 #define UCS_LDBLQUOTE       ((UT_UCSChar)0x0022)
00252 #define UCS_RDBLQUOTE       ((UT_UCSChar)0x0022)
00253 #define UCS_UNKPUNK         ((UT_UCSChar)0x00FF)
00254 
00255 #endif
00256 
00257 /* direction markers */
00258 #define UCS_LRM 0x200E
00259 #define UCS_RLM 0x200F
00260 #define UCS_LRE 0x202a
00261 #define UCS_RLE 0x202b
00262 #define UCS_PDF 0x202c
00263 #define UCS_LRO 0x202d
00264 #define UCS_RLO 0x202e
00265 
00266 /*
00267 ** Some useful macros that we use throughout
00268 */
00269 
00270 #define FREEP(p)        do { if (p) { g_free((void *)p); (p)=NULL; } } while (0)
00271 #define DELETEP(p)      do { if (p) { delete(p); (p)=NULL; } } while (0)
00272 #define DELETEPV(pa)    do { if (pa) { delete [] (pa); (pa)=NULL; } } while (0)
00273 #define REPLACEP(p,q)       do { if (p) delete p; p = q; } while (0)
00274 #define REFP(p)         ((p)->ref(), (p))
00275 #define UNREFP(p)       do { if (p) { (p)->unref(); (p)=NULL; } } while (0)
00276 #define CLONEP(p,q)     do { FREEP(p); if (q && *q) p = g_strdup(q); } while (0)
00277 
00278 #define E2B(err)        ((err) == UT_OK)
00279 
00280 /* This is a value from the private-use space of FriBidi */
00281 #define FRIBIDI_TYPE_UNSET -1
00282 #define FRIBIDI_TYPE_IGNORE -2
00283 
00284 // this is maximum revision level; it is intentionally not defined as
00285 // 0xffffffff to avoid problems with bad 64-bit compilers
00286 
00287 #define PD_MAX_REVISION 0x0fffffff
00288 
00289 #endif /* UT_TYPES_H */

Generated on Mon May 28 2012 for AbiWord by  doxygen 1.7.1