OpenTTD-patches/src/script/api/script_text.hpp
Jonathan G Rennison ba34ec7ade Merge branch 'master' into jgrpp
Replace build and refit, and group collapse implementations
Fix template creation build and refit

# Conflicts:
#	Makefile.bundle.in
#	config.lib
#	src/animated_tile.cpp
#	src/blitter/32bpp_anim.hpp
#	src/blitter/32bpp_base.hpp
#	src/blitter/8bpp_base.hpp
#	src/blitter/null.hpp
#	src/build_vehicle_gui.cpp
#	src/command.cpp
#	src/command_func.h
#	src/console_gui.cpp
#	src/core/smallstack_type.hpp
#	src/date.cpp
#	src/debug.cpp
#	src/genworld_gui.cpp
#	src/ground_vehicle.hpp
#	src/group_gui.cpp
#	src/lang/korean.txt
#	src/linkgraph/linkgraph_gui.h
#	src/main_gui.cpp
#	src/misc_gui.cpp
#	src/network/core/game.h
#	src/network/core/packet.cpp
#	src/network/core/udp.cpp
#	src/network/core/udp.h
#	src/network/network_content.cpp
#	src/network/network_type.h
#	src/network/network_udp.cpp
#	src/newgrf_house.h
#	src/openttd.cpp
#	src/order_cmd.cpp
#	src/order_gui.cpp
#	src/os/unix/crashlog_unix.cpp
#	src/os/windows/crashlog_win.cpp
#	src/osk_gui.cpp
#	src/pathfinder/opf/opf_ship.cpp
#	src/rail_cmd.cpp
#	src/rail_gui.cpp
#	src/saveload/saveload.cpp
#	src/settings.cpp
#	src/settings_gui.cpp
#	src/smallmap_gui.h
#	src/station_base.h
#	src/station_cmd.cpp
#	src/table/gameopt_settings.ini
#	src/table/newgrf_debug_data.h
#	src/table/settings.ini
#	src/timetable_gui.cpp
#	src/toolbar_gui.cpp
#	src/train_gui.cpp
#	src/vehicle.cpp
#	src/vehicle_gui.cpp
#	src/vehiclelist.cpp
#	src/viewport.cpp
#	src/widgets/dropdown.cpp
#	src/window_gui.h
2019-03-27 18:12:04 +00:00

156 lines
4.7 KiB
C++

/* $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;
/**
* Convert a #ScriptText into a decoded normal string.
* @return A string (in a static buffer), or NULL.
* @api -all
*/
const char *GetDecodedText();
};
/**
* Internally used class to create a raw text in a Text object.
* @api -all
*/
class RawText : public Text {
public:
RawText(const char *text);
~RawText();
const char *GetEncodedText() override { 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:
* \code local text = ScriptText(ScriptText.STR_NEWS);
* text.AddParam(1); \endcode
* This will set the {COMPANY} to the name of Company 1. Alternatively you
* can directly give those arguments to the ScriptText constructor, like this:
* \code local text = ScriptText(ScriptText.STR_NEWS, 1); \endcode
*
* @api game
*/
class ScriptText : public Text {
public:
static const int SCRIPT_TEXT_MAX_PARAMETERS = 20; ///< The maximum amount of parameters you can give to one object.
#ifndef DOXYGEN_API
/**
* The constructor wrapper from Squirrel.
*/
ScriptText(HSQUIRRELVM vm);
#else
/**
* 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.
* @param ... Optional arguments for this string.
*/
ScriptText(StringID string, ...);
#endif
~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 to set.
* @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 */
/**
* @api -all
*/
virtual const char *GetEncodedText();
private:
StringID string;
char *params[SCRIPT_TEXT_MAX_PARAMETERS];
int64 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.
* @param param_count The number of parameters that are in the string.
* @return The new current position in the buffer.
*/
char *_GetEncodedText(char *p, char *lastofp, int &param_count);
/**
* Set a parameter, where the value is the first item on the stack.
*/
SQInteger _SetParam(int k, HSQUIRRELVM vm);
};
#endif /* SCRIPT_TEXT_HPP */