Files
@ r18782:6453522c2154
Branch filter:
Location: cpp/openttd-patchpack/source/src/script/api/script_text.hpp - annotation
r18782:6453522c2154
4.2 KiB
text/x-c++hdr
(svn r23640) -Fix: stop using FORCEINLINE (1/3rd of the instances were, the others were still regular inline), but make sure inline is always a 'forced' inline (I am looking at you MSVC)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18778:4848b0595531 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 r18777:cf24fc430b51 | /* $Id$ */
/*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD 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 General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file script_text.hpp Everything to handle text which can be translated. */
#ifndef SCRIPT_TEXT_HPP
#define SCRIPT_TEXT_HPP
#include "script_object.hpp"
#include "../../core/alloc_type.hpp"
/**
* Internal parent object of all Text-like objects.
* @api -all
*/
class Text : public ScriptObject {
public:
/**
* Convert a ScriptText to a normal string.
* @return A string (in a static buffer), or NULL.
* @api -all
*/
virtual const char *GetEncodedText() = 0;
};
/**
* Interal used class to create a raw text in a Text object.
* @api -all
*/
class RawText : public Text {
public:
RawText(const char *text) :
text(strdup(text)) {}
~RawText() { free(this->text); }
/* virtual */ const char *GetEncodedText() { return this->text; }
private:
const char *text;
};
/**
* Class that handles all text related functions. You can define a language
* file in lang/english.txt, in the same format as OpenTTD does, including
* tags like {BLACK}, {STRING1} etc. The name given to this string is made
* available to you in ScriptText, for example: ScriptText.STR_NEWS, if your
* english.txt contains: STR_NEWS :{BLACK}Welcome {COMPANY}!
*
* In translation files like lang/dutch.txt you can then translate such
* strings, like: STR_NEWS :{BLACK}Hallo {COMPANY}!
* When the user has the dutch language selected, it will automatically use
* the translated string when available. The fallback language is always
* the english language.
*
* If you use parameters in your strings, you will have to define those
* parameters, for example like this:
* local text = ScriptText(ScriptText.STR_NEWS); text.AddParam(1);
* This will set the {COMPANY} to the name of Company 1.
*
* @api ai game
*/
class ScriptText : public Text , public ZeroedMemoryAllocator {
public:
static const int SCRIPT_TEXT_MAX_PARAMETERS = 20; ///< The maximum amount of parameters you can give to one object.
/**
* Generate a text from string. You can set parameters to the instance which
* can be required for the string.
* @param string The string of the text.
*/
ScriptText(StringID string);
~ScriptText();
#ifndef DOXYGEN_API
/**
* Used for .param_N and [] set from Squirrel.
*/
SQInteger _set(HSQUIRRELVM vm);
/**
* Set the parameter.
*/
SQInteger SetParam(HSQUIRRELVM vm);
/**
* Add an parameter
*/
SQInteger AddParam(HSQUIRRELVM vm);
#else
/**
* Set the parameter to a value.
* @param parameter Which parameter t oset.
* @param value The value of the parameter. Has to be string, integer or an instance of the class ScriptText.
*/
void SetParam(int parameter, Object value);
/**
* Add a value as parameter (appending it).
* @param value The value of the parameter. Has to be string, integer or an instance of the class ScriptText.
* @return The same object as on which this is called, so you can chain.
*/
ScriptText *AddParam(Object value);
#endif /* DOXYGEN_API */
/* virtual */ const char *GetEncodedText();
private:
StringID string;
char *params[SCRIPT_TEXT_MAX_PARAMETERS];
int parami[SCRIPT_TEXT_MAX_PARAMETERS];
ScriptText *paramt[SCRIPT_TEXT_MAX_PARAMETERS];
int paramc;
/**
* Internal function for recursive calling this function over multiple
* instances, while writing in the same buffer.
* @param p The current position in the buffer.
* @param lastofp The last position valid in the buffer.
* @return The new current position in the buffer.
*/
char *_GetEncodedText(char *p, char *lastofp);
/**
* Set a parameter, where the value is the first item on the stack.
*/
SQInteger _SetParam(int k, HSQUIRRELVM vm);
};
#endif /* SCRIPT_TEXT_HPP */
|