Skip to content

textHandling

extrazi edited this page Jun 3, 2021 · 3 revisions
original    original
EN     PL

Manual   m4nfo & Raport Techniczny

Obsługa tekstu

Definiowanie i obsługa tekstów dla właściwości i wywołań zwrotnych
Introduction

Ze względu na dość skomplikowaną obsługę tekstów w TTD jest to również nieco skomplikowane w m4nfo. W TTD, a co za tym idzie w m4nfo, teksty mogą pojawiać się w wielu różnych miejscach i w wielu różnych kontekstach. Po pierwsze, istnieją teksty pojawiające się w funkcjach własności, jak nazwy pojazdów, domów, stacji, obiektów, ... Po drugie, są teksty związane-z-newGRF, zarówno tymczasowe, jak i trwałe, i wreszcie są oryginalne teksty TTD, które mogą być zmieniony przez newGRF w TTDPatch.

Właściwości
Funkcja tekstowa Opis
defgrftext(<Text-ID>,<Language-ID>,{<String>}) Definiuje teksty związane-z-newGRF
grftext(<Text-ID>) Tekst odniesienia jako wynik wywołania zwrotnego
deftxt(<String>,{<Language-ID>,<String>}) Przydziela tekst do użycia w funkcjach właściwości
reftxt(<String>) / reftxtcb(<String>) Odwołanie do przydzielonego tekstu jako text-ID lub callback
makettdtext(<Text-ID>,<Language-ID>,{<String>}) Ustawia oryginalne teksty TTD
subtext(<Text-ID>) Użycie przydzielonego tekstu jako podtekstu w innym tekście

Opis

defgrftext(<Text-ID>,<Language-ID>,{<String>})

Ta funkcja definiuje i przypisuje teksty związane-z-newGRF, takie jak teksty podtypów ładunków, teksty pomocy lokomotywy, komunikaty o błędach itp. Jej pierwszym parametrem musi być ID-tekstu , zaczynając od "0" , aby pierwszy zdefiniowany tekst był zdefiniowany. Więcej tekstów powinno zawierać kolejne ID.

Drugi parametr to ID-języka. W chwili obecnej można używać następujących ID-języków:

  US US English     UK British English     D German     F French   E Spanish
  RUS Russian        SRB Serbian               NL Dutch   H Hungarian   I Italian
  S Swedish   PL Polish   HR Croatian   N Norwegian   CZ Czech
  ALL default (usually English)

Należy odnotować, że ta funkcja może używać tylko jednego języka, ale więcej niż jednego ciągu tekstowego. W rzeczywistości będziesz musiał użyć jednej funkcji defgrftext() na język.

Ta funkcja jest używana w połączeniu z grftext() i callbackami CB_TEXT (dodatkowy tekst w menu zakupu) i CB_TSFX (tekst pod-typu ładunku).

 Przykład 1 (cargo sub-texts for piece goods):
 
 defgrftext(TSF_PGOOD,I,
 	" (imballati)"," (container)",
 	" (compensato)"," (liquido)",
 	" (macchinari)"," (frigorifero)",
 	" (automobili)"," (pallettizzata)",
 	" (paglia)"," (birra)", " (vino)"
 )
 Przykład 2 (error messages):
 
 define(ATT_OK,0x400)
 define(ATT_VAN,0x60)
 define(ATT_CAR,0x61)
 define(ATT_REQLDCAR,0x62)
 ...
 
 defgrftext(ATT_VAN,ALL,
 	" (freight car cannot be attached)",
 	" (coach cannot be attached)",
 	" (long-distance cars required)",
 	...
 )

grftext(<Text-ID>)

Ta funkcja odwołuje się do text-ID, zdefiniowanego przez defgrftext() i zwraca wynik wywołania zwrotnego. Powinien być używany w połączeniu z callbackami CB_TEXT i CB_TSFX (patrz wyżej). W wersji GRF 8 można zwrócić NONE, aby w ogóle nie wyświetlać tekstu.

 Przykład (cargo sub-texts for piece goods):
 
 def(3) refitted(
 	grftext(TSF_BRCK) if(0) // "bricks"
 	grftext(TSF_PLYW) if(1) // "plywood"
 	grftext(NONE) else	// no text
 )
 
 def(4) callback(
 	ref(3) if(CB_TSFX) // cargo sub-texts
 	ref(2) else	   // graphics
 )

deftxt(<String>,{<Language-ID>,<String>})

Ta funkcja przydziela tekst do właściwości obiektów, takich jak 'nazwy' ( nazwa klasy , nazwa obiektu ) dla 'features' , takich jak obiekty i domy. Służy do zdefiniowania jednego ciągu tekstowego w wielu językach w połączeniu z reftxt() w celu zwrócenia text-ID lub reftxtcb() w celu zwrócenia wyniku wywołania zwrotnego w połączeniu z CB_TEXT.

Pierwszym parametrem tej funkcji jest etykieta, która jest używana wzajemnie przez jej inne funkcje reftxt() i reftxtcb(). Etykieta jest początkowo definiowana przez deftxt() i niezdefiniowana na końcu pliku źródłowego.

 Przykład (object class and name):
 
 deftxt(molelight,
 	US, "Mole lights",
 	UK, "Mole lights",
 	D, "Molenbefeuerung",
 	F, UTF8 "Feux de jetée",
 	E, "Luces de muelle",
 	I, "Luci del molo"
 )
 
 defineobject(_LIGHTS,
 	...
 	objectname(molelight)
 	climate(TEMPERATE, ARCTIC, TROPIC)
 	size(1,1)
 	price(80)
 	timeframe(1.1.1880 .. 1.1.2050)
 	...
 )

W przypadku, gdy chcesz używać etykiet w rozproszonych plikach źródłowych, jest to możliwe w ograniczony sposób. Najpierw musisz zdefiniować wszystkie etykiety, do których chcesz uzyskać dostęp z kolejnego pliku, w poprzednim pliku. Po drugie, nie możesz już zdefiniować żadnych etykiet w jednym z następnych plików, z wyjątkiem wcześniejszego wywołania funkcji import() (raz na plik), w przeciwnym razie wszystkie nowo zdefiniowane ID-tekstowe pomieszałyby się z tymi już zdefiniowanymi w poprzednie pliki.

 Przykład (preparing labels to be used in successive files):
 
 deftxt(molelight,
 	US, "Mole lights",
 	UK, "Mole lights",
 	D, "Molenbefeuerung",
 	F, UTF8 "Feux de jetée",
 	E, "Luces de muelle",
 	I, "Luci del molo"
 )
 
 export({molelight})
 
 
 Przykład (using labels in successive file):
 
 import()
 
 defineobject(_LIGHTS,
 	...
 	objectname(molelight)
 	climate(TEMPERATE, ARCTIC, TROPIC)
 	size(1,1)
 	price(80)
 	timeframe(1.1.1880 .. 1.1.2050)
 	...
 )

reftxt(<String>) / reftxtcb(<String>)

Obie funkcje odwołują się do wcześniej zdefiniowanych ciągów tekstowych za pomocą etykiety. Pierwsza zwraca Text-ID, a druga zwraca wynik wywołania zwrotnego. W większości przypadków reftxt() jest używana tylko wewnętrznie. Np. W powyższym przykładzie jest używana przez funkcję objectname() .

Funkcja reftxtcb() jest bardzo podobna do grftext(), ale w przeciwieństwie do defgrftext()/grftext(), pojedynczy ciąg tekstowy zdefiniowany przez poprzednią deftxt() może składać się z wielu języków.

 Przykład (error messages):
 
 deftxt(warn_coast,
 	US, T_BLACK "Mole with stairs cannot be built on coast tiles.",
 	UK, T_BLACK "Mole with stairs cannot be built on coast tiles.",
 	D, UTF8 T_BLACK "Mole mit Treppe kann nicht auf Küstenfeldern gebaut werden.",
 	F, UTF8 T_BLACK "Une jetée avec des escaliers ne peut pas être construite sur la côte.",
 	E, T_BLACK "Muelle con las escaleras no se puede construir en la costa.",
 	I, UTF8 T_BLACK "Non si puó costruire un molo con scale sulla costa."
 )
 
 def(62) callback(
 	reftxtcb(warn_coast) if(CB_TEXT)
 	ref(61) else
 )

makettdtext(<Text-ID>,<Language-ID>,{<String>})

Ta funkcja służy do modyfikowania lub tłumaczenia oryginalnych ciągów tekstowych TTD podanych przez ich ID-tekstowe. Zobacz listę ID-tekstowych (lub link Text IDs ) w nfo/grf Technical Reference, aby uzyskać listę dostępnych ciągów. Należy odnotować, że modyfikowanie oryginalnych ciągów tekstowych nie działa w OpenTTD.

 Przykład (modifying TTD strings, renaming "ship depot"):
 
 makettdtext(0x3806,ALL,"Floating dock")
 makettdtext(0x3806,D,"Schwimmdock")
 makettdtext(0x3806,F,"Dock flottante")
 makettdtext(0x3806,E,"Dique flotante")

subtext(<Text-ID>)

Ta funkcja odwołuje się do ciągu tekstowego z poprzedniej defgrftext() i pozwala wstawić go do innej defgrftext(). Oszczędza to pamięć i ID-tekstowe, jeśli są odpowiednio rozmieszczone.

 Przykład (use of sub-strings):
 
 defgrftext(0xAC,ALL,
 	"Track class: ",
 	" (branch line)",
 	"ank locomotive",
 	"freight service", 
 	"Axle scheme: ", 
 	"Builder: "
 )
 
 define(_TRACK,subtext(0xAC)) // track class
 define(_DBNN,subtext(0xAD)) // (branch line)
 define(_TANK,subtext(0xAE)) // (t)ank engine
 define(_FRS,subtext(0xAF)) // freight service
 define(_AXLE,subtext(0xB0)) // Axle scheme:
 define(_BUILDER,subtext(0xB1)) // Builder
 
 defgrftext(TLH_BR92,ALL,
 	T_BLACK _AXLE T_LORANGE "E   "
 	T_BLACK _BUILDER T_LORANGE "Union" CRLF
 	T_BLACK _TRACK T_LORANGE "A/B" _DBNN CRLF
 	CRLF T_LGREEN
 	"Universal t" _TANK " for basic passenger and " _FRS "."
 )

Należy odnotować, jak użyto tutaj zwykłego makra, aby uniknąć wielokrotnego wstawiania prawidłowego wywołania funkcji subtext() i parametru do długich źródeł.

Oczywiście możliwe jest również wprowadzenie lokalnych makr do definiowania i odwoływania się do ciągów tekstowych:

 Przykład (use of sub-strings):
 
 define(moreinfo,0xAC)
 ...
 defgrftext(moreinfo,ALL,
 	"Track class: ",
 	" (branch line)",
 	"ank locomotive",
 	"freight service", 
 	"Axle scheme: ", 
 	"Builder: "
 )
 
 define(_TRACK,subtext(moreinfo)) // track class
 define(_DBNN,subtext(moreinfo + 1)) // (branch line)
 define(_TANK,subtext(moreinfo + 2)) // (t)ank engine
 define(_FRS,subtext(moreinfo + 3)) // freight service
 define(_AXLE,subtext(moreinfo + 4)) // Axle scheme:
 define(_BUILDER,subtext(moreinfo + 5)) // Builder