mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-27 10:40:50 +00:00
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@27657 72102866-910b-0410-8b05-ffd578937521
315 lines
8.1 KiB
C
315 lines
8.1 KiB
C
/* GNUstep.h - macros to make easier to port gnustep apps to macos-x
|
|
Copyright (C) 2001 Free Software Foundation, Inc.
|
|
|
|
Written by: Nicola Pero <n.pero@mi.flashnet.it>
|
|
Date: March, October 2001
|
|
|
|
This file is part of GNUstep.
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library 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
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free
|
|
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef __GNUSTEP_GNUSTEP_H_INCLUDED_
|
|
#define __GNUSTEP_GNUSTEP_H_INCLUDED_
|
|
|
|
/* The contents of this file are designed to be usable with either
|
|
* GNUstep-base or MacOS-X Foundation.
|
|
*/
|
|
|
|
#if GS_WITH_GC
|
|
|
|
#ifndef RETAIN
|
|
#define RETAIN(object) ((id)object)
|
|
#endif
|
|
#ifndef RELEASE
|
|
#define RELEASE(object)
|
|
#endif
|
|
#ifndef AUTORELEASE
|
|
#define AUTORELEASE(object) ((id)object)
|
|
#endif
|
|
|
|
#ifndef TEST_RETAIN
|
|
#define TEST_RETAIN(object) ((id)object)
|
|
#endif
|
|
#ifndef TEST_RELEASE
|
|
#define TEST_RELEASE(object)
|
|
#endif
|
|
#ifndef TEST_AUTORELEASE
|
|
#define TEST_AUTORELEASE(object) ((id)object)
|
|
#endif
|
|
|
|
#ifndef ASSIGN
|
|
#define ASSIGN(object,value) (object = value)
|
|
#endif
|
|
#ifndef ASSIGNCOPY
|
|
#define ASSIGNCOPY(object,value) (object = [value copy])
|
|
#endif
|
|
#ifndef DESTROY
|
|
#define DESTROY(object) (object = nil)
|
|
#endif
|
|
|
|
#ifndef CREATE_AUTORELEASE_POOL
|
|
#define CREATE_AUTORELEASE_POOL(X)
|
|
#endif
|
|
|
|
#ifndef RECREATE_AUTORELEASE_POOL
|
|
#define RECREATE_AUTORELEASE_POOL(X)
|
|
#endif
|
|
|
|
#define IF_NO_GC(X)
|
|
|
|
#else
|
|
|
|
#ifndef RETAIN
|
|
/**
|
|
* Basic retain operation ... calls [NSObject-retain]
|
|
*/
|
|
#define RETAIN(object) [object retain]
|
|
#endif
|
|
|
|
#ifndef RELEASE
|
|
/**
|
|
* Basic release operation ... calls [NSObject-release]
|
|
*/
|
|
#define RELEASE(object) [object release]
|
|
#endif
|
|
|
|
#ifndef AUTORELEASE
|
|
/**
|
|
* Basic autorelease operation ... calls [NSObject-autorelease]
|
|
*/
|
|
#define AUTORELEASE(object) [object autorelease]
|
|
#endif
|
|
|
|
#ifndef TEST_RETAIN
|
|
/**
|
|
* Tested retain - only invoke the
|
|
* objective-c method if the receiver is not nil.
|
|
*/
|
|
#define TEST_RETAIN(object) ({\
|
|
id __object = (id)(object); (__object != nil) ? [__object retain] : nil; })
|
|
#endif
|
|
#ifndef TEST_RELEASE
|
|
/**
|
|
* Tested release - only invoke the
|
|
* objective-c method if the receiver is not nil.
|
|
*/
|
|
#define TEST_RELEASE(object) ({\
|
|
id __object = (id)(object); if (__object != nil) [__object release]; })
|
|
#endif
|
|
#ifndef TEST_AUTORELEASE
|
|
/**
|
|
* Tested autorelease - only invoke the
|
|
* objective-c method if the receiver is not nil.
|
|
*/
|
|
#define TEST_AUTORELEASE(object) ({\
|
|
id __object = (id)(object); (__object != nil) ? [__object autorelease] : nil; })
|
|
#endif
|
|
|
|
#ifndef ASSIGN
|
|
/**
|
|
* ASSIGN(object,value) assigns the value to the object with
|
|
* appropriate retain and release operations.
|
|
*/
|
|
#define ASSIGN(object,value) ({\
|
|
id __object = (id)(object); \
|
|
object = [((id)value) retain]; \
|
|
[__object release]; \
|
|
})
|
|
#endif
|
|
|
|
#ifndef ASSIGNCOPY
|
|
/**
|
|
* ASSIGNCOPY(object,value) assigns a copy of the value to the object
|
|
* with release of the original.
|
|
*/
|
|
#define ASSIGNCOPY(object,value) ({\
|
|
id __object = (id)(object); \
|
|
object = [((id)value) copy];\
|
|
[__object release]; \
|
|
})
|
|
#endif
|
|
|
|
#ifndef DESTROY
|
|
/**
|
|
* DESTROY() is a release operation which also sets the variable to be
|
|
* a nil pointer for tidiness - we can't accidentally use a DESTROYED
|
|
* object later. It also makes sure to set the variable to nil before
|
|
* releasing the object - to avoid side-effects of the release trying
|
|
* to reference the object being released through the variable.
|
|
*/
|
|
#define DESTROY(object) ({ \
|
|
id __o = object; \
|
|
object = nil; \
|
|
[__o release]; \
|
|
})
|
|
#endif
|
|
|
|
#ifndef CREATE_AUTORELEASE_POOL
|
|
/**
|
|
* Declares an autorelease pool variable and creates and initialises
|
|
* an autorelease pool object.
|
|
*/
|
|
#define CREATE_AUTORELEASE_POOL(X) \
|
|
NSAutoreleasePool *(X) = [NSAutoreleasePool new]
|
|
#endif
|
|
|
|
#ifndef RECREATE_AUTORELEASE_POOL
|
|
/**
|
|
* Similar, but allows reuse of variables. This destroys the old pool before
|
|
* creating the new one.
|
|
*/
|
|
#define RECREATE_AUTORELEASE_POOL(X) \
|
|
DESTROY(X);\
|
|
(X) = [NSAutoreleasePool new]
|
|
#endif
|
|
|
|
#define IF_NO_GC(X) X
|
|
|
|
#endif
|
|
|
|
|
|
/**
|
|
* <p>
|
|
* This function (macro) is a GNUstep extension.
|
|
* </p>
|
|
* <p>
|
|
* <code>_(@"My string to translate")</code>
|
|
* </p>
|
|
* <p>
|
|
* is exactly the same as
|
|
* </p>
|
|
* <p>
|
|
* <code>NSLocalizedString (@"My string to translate", @"")</code>
|
|
* </p>
|
|
* <p>
|
|
* It is useful when you need to translate an application
|
|
* very quickly, as you just need to enclose all strings
|
|
* inside <code>_()</code>. But please note that when you
|
|
* use this macro, you are not taking advantage of comments
|
|
* for the translator, so consider using
|
|
* <code>NSLocalizedString</code> instead when you need a
|
|
* comment.
|
|
* </p>
|
|
*/
|
|
#define _(X) NSLocalizedString (X, @"")
|
|
|
|
/* The quickest possible way to localize a static string:
|
|
|
|
static NSString *string = __(@"New Game");
|
|
|
|
NSLog (_(string)); */
|
|
|
|
/**
|
|
* <p>
|
|
* This function (macro) is a GNUstep extension.
|
|
* </p>
|
|
* <p>
|
|
* <code>__(@"My string to translate")</code>
|
|
* </p>
|
|
* <p>
|
|
* is exactly the same as
|
|
* </p>
|
|
* <p>
|
|
* <code>GSLocalizedStaticString (@"My string to translate", @"")</code>
|
|
* </p>
|
|
* <p>
|
|
* It is useful when you need to translate an application very
|
|
* quickly. You would use it as follows for static strings:
|
|
* </p>
|
|
* <p>
|
|
* <code>
|
|
* NSString *message = __(@"Hello there");
|
|
* ... more code ...
|
|
* NSLog (_(messages));
|
|
* </code>
|
|
* </p>
|
|
* <p>
|
|
* But please note that when you use this macro, you are not
|
|
* taking advantage of comments for the translator, so
|
|
* consider using <code>GSLocalizedStaticString</code>
|
|
* instead when you need a comment.
|
|
* </p>
|
|
*/
|
|
#define __(X) X
|
|
|
|
/* The better way for a static string, with a comment - use as follows -
|
|
|
|
static NSString *string = GSLocalizedStaticString (@"New Game",
|
|
@"Menu Option");
|
|
|
|
NSLog (_(string));
|
|
|
|
If you need anything more complicated than this, please initialize
|
|
the static strings manually.
|
|
*/
|
|
|
|
/**
|
|
* <p>
|
|
* This function (macro) is a GNUstep extensions, and it is used
|
|
* to localize static strings. Here is an example of a static
|
|
* string:
|
|
* </p>
|
|
* <p>
|
|
* <code>
|
|
* NSString *message = @"Hi there";
|
|
* ... some code ...
|
|
* NSLog (message);
|
|
* </code>
|
|
* </p>
|
|
* <p>
|
|
* This string can not be localized using the standard
|
|
* openstep functions/macros. By using this gnustep extension,
|
|
* you can localize it as follows:
|
|
* </p>
|
|
* <p>
|
|
* <code>
|
|
* NSString *message = GSLocalizedStaticString (@"Hi there",
|
|
* @"Greeting");
|
|
*
|
|
* ... some code ...
|
|
*
|
|
* NSLog (NSLocalizedString (message, @""));
|
|
* </code>
|
|
* </p>
|
|
* <p>
|
|
* When the tools generate the
|
|
* <code>Localizable.strings</code> file from the source
|
|
* code, they will ignore the <code>NSLocalizedString</code>
|
|
* call while they will extract the string (and the comment)
|
|
* to localize from the <code>GSLocalizedStaticString</code>
|
|
* call.
|
|
* </p>
|
|
* <p>
|
|
* When the code is compiled, instead, the
|
|
* <code>GSLocalizedStaticString</code> call is ignored (discarded,
|
|
* it is a macro which simply expands to <code>key</code>), while
|
|
* the <code>NSLocalizedString</code> will actually look up the
|
|
* string for translation in the <code>Localizable.strings</code>
|
|
* file.
|
|
* </p>
|
|
* <p>
|
|
* Please note that there is currently no macro/function to
|
|
* localize static strings using different tables. If you
|
|
* need that functionality, you have either to prepare the
|
|
* localization tables by hand, or to rewrite your code in
|
|
* such a way as not to use static strings.
|
|
* </p>
|
|
*/
|
|
#define GSLocalizedStaticString(key, comment) key
|
|
|
|
|
|
#endif /* __GNUSTEP_GNUSTEP_H_INCLUDED_ */
|