294 lines
8.8 KiB
C
294 lines
8.8 KiB
C
|
/*
|
||
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
||
|
*
|
||
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
||
|
*
|
||
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
||
|
* alteration the source code to the Tecplot Input/Output library, known
|
||
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
||
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
||
|
* granted access to the TecIO source code, and may redistribute it for the
|
||
|
* purpose of maintaining the converter. However, no authority is granted
|
||
|
* to alter the TecIO source code in any form or manner.
|
||
|
*
|
||
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
||
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
||
|
*
|
||
|
* Tecplot, Inc.
|
||
|
* 3535 Factoria Blvd, Ste. 550
|
||
|
* Bellevue, WA 98006, USA
|
||
|
* Phone: +1 425 653 1200
|
||
|
* http://www.tecplot.com/
|
||
|
*
|
||
|
*/
|
||
|
/*
|
||
|
*****************************************************************
|
||
|
*****************************************************************
|
||
|
******* ********
|
||
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
||
|
******* ********
|
||
|
*****************************************************************
|
||
|
*****************************************************************
|
||
|
*/
|
||
|
|
||
|
#ifndef TECPLOT_STRUTIL_TRANSLATEDSTRING
|
||
|
#define TECPLOT_STRUTIL_TRANSLATEDSTRING
|
||
|
|
||
|
#if defined MSWIN
|
||
|
#pragma warning(disable : 4181)
|
||
|
#endif
|
||
|
|
||
|
namespace tecplot
|
||
|
{
|
||
|
namespace strutil
|
||
|
{
|
||
|
|
||
|
/**
|
||
|
* Class responsible for translating strings for internationalization. This
|
||
|
* class is used both to perform the translation and to identify which strings
|
||
|
* are/aren't in need of translation.
|
||
|
*
|
||
|
* With the exception of the empty constructor all translated strings are
|
||
|
* created via static methods or inline helper functions named translate() and
|
||
|
* dontTranslate(). Translated strings created with a call to translate() are
|
||
|
* flagged as needing human translation and return the translated value at
|
||
|
* runtime. Translated strings created with a call to dontTranslate() are
|
||
|
* flagged as not needing human translation and return the non-translated value
|
||
|
* at runtime. Examples:
|
||
|
*
|
||
|
* ErrMsg(translate("Can I have %d cookies?", numCookies);
|
||
|
* ErrMsg(dontTranslate("%s"), errMsgString);
|
||
|
*
|
||
|
* Conversion methods exists for std::string so that they operate well
|
||
|
* together. Therefore you can pass translated strings to methods or functions
|
||
|
* that receive std::string or std::string references. Additionally you can
|
||
|
* perform std::string operations by casting the translated string to a
|
||
|
* std::string. For example:
|
||
|
*
|
||
|
* if (string(dialogTitle).size() != 0)
|
||
|
* ...do something useful
|
||
|
*
|
||
|
* We have intentionally not provided conversion methods for "const char*" (an
|
||
|
* internal representation of the object's string) because of the risk of the
|
||
|
* client using the pointer after the translated string object goes out of
|
||
|
* scope.
|
||
|
*
|
||
|
* @author David Ossorio
|
||
|
*/
|
||
|
class TranslatedString
|
||
|
{
|
||
|
public:
|
||
|
/**
|
||
|
* Enumeration describing available translation modes.
|
||
|
*/
|
||
|
typedef enum { DontTranslate, DoTranslate } Mode;
|
||
|
|
||
|
/**
|
||
|
* Constructs an empty translated string. It is equivalent to calling
|
||
|
* TranslatedString::null().
|
||
|
*/
|
||
|
TranslatedString();
|
||
|
|
||
|
/**
|
||
|
* Convenience function for creating a NULL translated string.
|
||
|
*
|
||
|
* @return
|
||
|
* NULL translated string.
|
||
|
*/
|
||
|
static TranslatedString null();
|
||
|
|
||
|
/**
|
||
|
* Creates a translated string object and marks it as a string needing
|
||
|
* translation.
|
||
|
*
|
||
|
* @param str
|
||
|
* Character string to translate.
|
||
|
* @param translatorNotes
|
||
|
* Optional notes for the human translator describing the meaning
|
||
|
* of the string.
|
||
|
*/
|
||
|
static TranslatedString translate(const char* str,
|
||
|
const char* translatorNotes = NULL);
|
||
|
|
||
|
/**
|
||
|
* Creates a translated string object and marks it as a string not needing
|
||
|
* translation.
|
||
|
*
|
||
|
* @param str
|
||
|
* Character string to translate. The str parameter can be a NULL
|
||
|
* pointer.
|
||
|
*/
|
||
|
static TranslatedString dontTranslate(const char* str);
|
||
|
|
||
|
/**
|
||
|
* Destructor.
|
||
|
*/
|
||
|
virtual ~TranslatedString();
|
||
|
|
||
|
/**
|
||
|
* Indicates if the object's string is NULL.
|
||
|
*
|
||
|
* @return
|
||
|
* true if the object's string is NULL, false otherwise.
|
||
|
*/
|
||
|
virtual bool isNull() const;
|
||
|
|
||
|
/**
|
||
|
* Indicates if the object's string is NULL or zero length.
|
||
|
*
|
||
|
* @return
|
||
|
* true if the object's string is NULL or zero length, false otherwise.
|
||
|
*/
|
||
|
virtual bool isNullOrZeroLength() const;
|
||
|
|
||
|
/**
|
||
|
* Returns the internal representation of the object's string. Use this
|
||
|
* result carefully. When this object goes out of scope so does this
|
||
|
* references.
|
||
|
*
|
||
|
* @return
|
||
|
* Pointer to the internal representation of the object's string.
|
||
|
*/
|
||
|
virtual const char* c_str();
|
||
|
|
||
|
#if defined MSWIN
|
||
|
/**
|
||
|
* Returns the internal representation of the wide character version of the
|
||
|
* object's string. Use this result carefully. When this object goes out of
|
||
|
* scope so does this references.
|
||
|
*
|
||
|
* @return
|
||
|
* Pointer to the internal representation of the object's string.
|
||
|
*/
|
||
|
virtual const wchar_t* c_wstr();
|
||
|
#endif
|
||
|
|
||
|
/**
|
||
|
* Returns a copy of the object's string by this object. The result is
|
||
|
* translated or not depending on the platform and how it was created.
|
||
|
*
|
||
|
* @return
|
||
|
* Copy of the object's string.
|
||
|
*/
|
||
|
virtual operator std::string();
|
||
|
|
||
|
#if defined MSWIN
|
||
|
/**
|
||
|
* Returns a copy of the wide character version of the object's string.
|
||
|
* The result is translated or not depending on the platform and how it was
|
||
|
* created.
|
||
|
*
|
||
|
* @return
|
||
|
* Copy of the wide character version of the object's string.
|
||
|
*/
|
||
|
virtual operator std::wstring();
|
||
|
#endif
|
||
|
|
||
|
/**
|
||
|
* Assignment operator.
|
||
|
*/
|
||
|
virtual TranslatedString& operator =(const TranslatedString& other);
|
||
|
|
||
|
/**
|
||
|
* Copy constructor.
|
||
|
*/
|
||
|
TranslatedString(const TranslatedString& other);
|
||
|
|
||
|
#if !defined NO_ASSERTS
|
||
|
/**
|
||
|
* Used only for assertions.
|
||
|
*/
|
||
|
virtual bool isValid() const;
|
||
|
#endif /* !NO_ASSERTS */
|
||
|
|
||
|
private:
|
||
|
/**
|
||
|
* Constructs a translated string. This is declared private to make sure
|
||
|
* clients use translate() or dontTranslate() so that Tecplot's translation
|
||
|
* parser can easily extract strings from the source code.
|
||
|
*
|
||
|
* @param mode
|
||
|
* Indicates if this string is to be translated or not at runtime.
|
||
|
* @param str
|
||
|
* Character string to translate.
|
||
|
* @param translatorNotes
|
||
|
* Optional notes for the human translator describing the meaning
|
||
|
* of the string.
|
||
|
*/
|
||
|
TranslatedString(TranslatedString::Mode mode,
|
||
|
const char* str,
|
||
|
const char* translatorNotes);
|
||
|
|
||
|
/**
|
||
|
* Convenience method for initialize a translated string.
|
||
|
*
|
||
|
* @param mode
|
||
|
* Indicates if this string is to be translated or not at runtime.
|
||
|
* @param str
|
||
|
* Character string to translate.
|
||
|
* @param translatorNotes
|
||
|
* Optional notes for the human translator describing the meaning
|
||
|
* of the string.
|
||
|
*/
|
||
|
void init(TranslatedString::Mode mode,
|
||
|
const char* str,
|
||
|
const char* translatorNotes);
|
||
|
|
||
|
/**
|
||
|
* Private instance data.
|
||
|
*/
|
||
|
TranslatedString::Mode m_mode;
|
||
|
bool m_isNull;
|
||
|
std::string m_string;
|
||
|
std::string *m_utf8String;
|
||
|
#if defined MSWIN
|
||
|
std::wstring *m_wideString;
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Convenience function for creating a translated string object and marking it
|
||
|
* as a string needing translation.
|
||
|
*
|
||
|
* @param str
|
||
|
* Character string to translate.
|
||
|
* @param translatorNotes
|
||
|
* Optional notes for the human translator describing the meaning
|
||
|
* of the string.
|
||
|
*/
|
||
|
inline TranslatedString translate(const char* str,
|
||
|
const char* translatorNotes = NULL)
|
||
|
{
|
||
|
return TranslatedString::translate(str, translatorNotes);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Convenience function for creating a translated string object and marking it
|
||
|
* as a string not needing translation.
|
||
|
*
|
||
|
* @param str
|
||
|
* Character string to translate. The str parameter can be a NULL
|
||
|
* pointer.
|
||
|
*/
|
||
|
inline TranslatedString dontTranslate(const char* str)
|
||
|
{
|
||
|
return TranslatedString::dontTranslate(str);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Convenience function for creating a translated string object and marks it as
|
||
|
* a string not needing translation.
|
||
|
*
|
||
|
* @param str
|
||
|
* String to translate.
|
||
|
*/
|
||
|
inline TranslatedString dontTranslate(const std::string& str)
|
||
|
{
|
||
|
return TranslatedString::dontTranslate(str.c_str());
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif
|