mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-11 07:11:54 +00:00
- forward the error state of the translation parser to the calling code so that it can print a message pointing to the problem content.
This commit is contained in:
parent
73248e7f86
commit
5d436cd3ed
3 changed files with 38 additions and 26 deletions
|
@ -51,6 +51,7 @@
|
||||||
#include "r_data/sprites.h"
|
#include "r_data/sprites.h"
|
||||||
#include "r_state.h"
|
#include "r_state.h"
|
||||||
#include "vm.h"
|
#include "vm.h"
|
||||||
|
#include "v_text.h"
|
||||||
|
|
||||||
#include "gi.h"
|
#include "gi.h"
|
||||||
#include "stats.h"
|
#include "stats.h"
|
||||||
|
@ -84,7 +85,7 @@ static bool IndexOutOfRange(const int color)
|
||||||
|
|
||||||
if (outOfRange)
|
if (outOfRange)
|
||||||
{
|
{
|
||||||
Printf("Palette index %i is out of range [0..255]\n", color);
|
Printf(TEXTCOLOR_ORANGE "Palette index %i is out of range [0..255]\n", color);
|
||||||
}
|
}
|
||||||
|
|
||||||
return outOfRange;
|
return outOfRange;
|
||||||
|
@ -370,11 +371,11 @@ FNativePalette *FRemapTable::GetNative()
|
||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
void FRemapTable::AddIndexRange(int start, int end, int pal1, int pal2)
|
bool FRemapTable::AddIndexRange(int start, int end, int pal1, int pal2)
|
||||||
{
|
{
|
||||||
if (IndexOutOfRange(start, end, pal1, pal2))
|
if (IndexOutOfRange(start, end, pal1, pal2))
|
||||||
{
|
{
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
double palcol, palstep;
|
double palcol, palstep;
|
||||||
|
@ -391,7 +392,7 @@ void FRemapTable::AddIndexRange(int start, int end, int pal1, int pal2)
|
||||||
Remap[start] = pal1;
|
Remap[start] = pal1;
|
||||||
Palette[start] = GPalette.BaseColors[pal1];
|
Palette[start] = GPalette.BaseColors[pal1];
|
||||||
Palette[start].a = start == 0 ? 0 : 255;
|
Palette[start].a = start == 0 ? 0 : 255;
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
palcol = pal1;
|
palcol = pal1;
|
||||||
palstep = (pal2 - palcol) / (end - start);
|
palstep = (pal2 - palcol) / (end - start);
|
||||||
|
@ -402,6 +403,7 @@ void FRemapTable::AddIndexRange(int start, int end, int pal1, int pal2)
|
||||||
Palette[j] = GPalette.BaseColors[k];
|
Palette[j] = GPalette.BaseColors[k];
|
||||||
Palette[j].a = j == 0 ? 0 : 255;
|
Palette[j].a = j == 0 ? 0 : 255;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -410,11 +412,11 @@ void FRemapTable::AddIndexRange(int start, int end, int pal1, int pal2)
|
||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
void FRemapTable::AddColorRange(int start, int end, int _r1,int _g1, int _b1, int _r2, int _g2, int _b2)
|
bool FRemapTable::AddColorRange(int start, int end, int _r1,int _g1, int _b1, int _r2, int _g2, int _b2)
|
||||||
{
|
{
|
||||||
if (IndexOutOfRange(start, end))
|
if (IndexOutOfRange(start, end))
|
||||||
{
|
{
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
double r1 = _r1;
|
double r1 = _r1;
|
||||||
|
@ -466,6 +468,7 @@ void FRemapTable::AddColorRange(int start, int end, int _r1,int _g1, int _b1, in
|
||||||
b += bs;
|
b += bs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -474,11 +477,11 @@ void FRemapTable::AddColorRange(int start, int end, int _r1,int _g1, int _b1, in
|
||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
void FRemapTable::AddDesaturation(int start, int end, double r1, double g1, double b1, double r2, double g2, double b2)
|
bool FRemapTable::AddDesaturation(int start, int end, double r1, double g1, double b1, double r2, double g2, double b2)
|
||||||
{
|
{
|
||||||
if (IndexOutOfRange(start, end))
|
if (IndexOutOfRange(start, end))
|
||||||
{
|
{
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
r1 = clamp(r1, 0.0, 2.0);
|
r1 = clamp(r1, 0.0, 2.0);
|
||||||
|
@ -519,6 +522,7 @@ void FRemapTable::AddDesaturation(int start, int end, double r1, double g1, doub
|
||||||
Palette[cc] = pe;
|
Palette[cc] = pe;
|
||||||
Palette[cc].a = cc == 0 ? 0:255;
|
Palette[cc].a = cc == 0 ? 0:255;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -527,11 +531,11 @@ void FRemapTable::AddDesaturation(int start, int end, double r1, double g1, doub
|
||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
void FRemapTable::AddColourisation(int start, int end, int r, int g, int b)
|
bool FRemapTable::AddColourisation(int start, int end, int r, int g, int b)
|
||||||
{
|
{
|
||||||
if (IndexOutOfRange(start, end))
|
if (IndexOutOfRange(start, end))
|
||||||
{
|
{
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = start; i < end; ++i)
|
for (int i = start; i < end; ++i)
|
||||||
|
@ -549,6 +553,7 @@ void FRemapTable::AddColourisation(int start, int end, int r, int g, int b)
|
||||||
Palette[j] = PalEntry(j == 0 ? 0 : 255, int(br), int(bg), int(bb));
|
Palette[j] = PalEntry(j == 0 ? 0 : 255, int(br), int(bg), int(bb));
|
||||||
Remap[j] = ColorMatcher.Pick(Palette[j]);
|
Remap[j] = ColorMatcher.Pick(Palette[j]);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -557,11 +562,11 @@ void FRemapTable::AddColourisation(int start, int end, int r, int g, int b)
|
||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
void FRemapTable::AddTint(int start, int end, int r, int g, int b, int amount)
|
bool FRemapTable::AddTint(int start, int end, int r, int g, int b, int amount)
|
||||||
{
|
{
|
||||||
if (IndexOutOfRange(start, end))
|
if (IndexOutOfRange(start, end))
|
||||||
{
|
{
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = start; i < end; ++i)
|
for (int i = start; i < end; ++i)
|
||||||
|
@ -579,6 +584,7 @@ void FRemapTable::AddTint(int start, int end, int r, int g, int b, int amount)
|
||||||
Palette[j] = PalEntry(j == 0 ? 0 : 255, int(br), int(bg), int(bb));
|
Palette[j] = PalEntry(j == 0 ? 0 : 255, int(br), int(bg), int(bb));
|
||||||
Remap[j] = ColorMatcher.Pick(Palette[j]);
|
Remap[j] = ColorMatcher.Pick(Palette[j]);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -587,7 +593,7 @@ void FRemapTable::AddTint(int start, int end, int r, int g, int b, int amount)
|
||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
void FRemapTable::AddToTranslation(const char *range)
|
bool FRemapTable::AddToTranslation(const char *range)
|
||||||
{
|
{
|
||||||
int start,end;
|
int start,end;
|
||||||
bool desaturated = false;
|
bool desaturated = false;
|
||||||
|
@ -607,7 +613,7 @@ void FRemapTable::AddToTranslation(const char *range)
|
||||||
if (start < 0 || start > 255 || end < 0 || end > 255)
|
if (start < 0 || start > 255 || end < 0 || end > 255)
|
||||||
{
|
{
|
||||||
sc.ScriptError("Palette index out of range");
|
sc.ScriptError("Palette index out of range");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
sc.MustGetAnyToken();
|
sc.MustGetAnyToken();
|
||||||
|
@ -643,7 +649,7 @@ void FRemapTable::AddToTranslation(const char *range)
|
||||||
b2 = sc.Number;
|
b2 = sc.Number;
|
||||||
sc.MustGetToken(']');
|
sc.MustGetToken(']');
|
||||||
|
|
||||||
AddColorRange(start, end, r1, g1, b1, r2, g2, b2);
|
return AddColorRange(start, end, r1, g1, b1, r2, g2, b2);
|
||||||
}
|
}
|
||||||
else if (sc.TokenType == '%')
|
else if (sc.TokenType == '%')
|
||||||
{
|
{
|
||||||
|
@ -683,7 +689,7 @@ void FRemapTable::AddToTranslation(const char *range)
|
||||||
b2 = sc.Float;
|
b2 = sc.Float;
|
||||||
sc.MustGetToken(']');
|
sc.MustGetToken(']');
|
||||||
|
|
||||||
AddDesaturation(start, end, r1, g1, b1, r2, g2, b2);
|
return AddDesaturation(start, end, r1, g1, b1, r2, g2, b2);
|
||||||
}
|
}
|
||||||
else if (sc.TokenType == '#')
|
else if (sc.TokenType == '#')
|
||||||
{
|
{
|
||||||
|
@ -700,7 +706,7 @@ void FRemapTable::AddToTranslation(const char *range)
|
||||||
b = sc.Number;
|
b = sc.Number;
|
||||||
sc.MustGetToken(']');
|
sc.MustGetToken(']');
|
||||||
|
|
||||||
AddColourisation(start, end, r, g, b);
|
return AddColourisation(start, end, r, g, b);
|
||||||
}
|
}
|
||||||
else if (sc.TokenType == '@')
|
else if (sc.TokenType == '@')
|
||||||
{
|
{
|
||||||
|
@ -720,7 +726,7 @@ void FRemapTable::AddToTranslation(const char *range)
|
||||||
b = sc.Number;
|
b = sc.Number;
|
||||||
sc.MustGetToken(']');
|
sc.MustGetToken(']');
|
||||||
|
|
||||||
AddTint(start, end, r, g, b, a);
|
return AddTint(start, end, r, g, b, a);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -731,7 +737,7 @@ void FRemapTable::AddToTranslation(const char *range)
|
||||||
sc.MustGetToken(':');
|
sc.MustGetToken(':');
|
||||||
sc.MustGetToken(TK_IntConst);
|
sc.MustGetToken(TK_IntConst);
|
||||||
pal2 = sc.Number;
|
pal2 = sc.Number;
|
||||||
AddIndexRange(start, end, pal1, pal2);
|
return AddIndexRange(start, end, pal1, pal2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (CRecoverableError &err)
|
catch (CRecoverableError &err)
|
||||||
|
|
|
@ -39,12 +39,12 @@ struct FRemapTable
|
||||||
bool IsIdentity() const;
|
bool IsIdentity() const;
|
||||||
void Serialize(FSerializer &arc);
|
void Serialize(FSerializer &arc);
|
||||||
static void StaticSerializeTranslations(FSerializer &arc);
|
static void StaticSerializeTranslations(FSerializer &arc);
|
||||||
void AddIndexRange(int start, int end, int pal1, int pal2);
|
bool AddIndexRange(int start, int end, int pal1, int pal2);
|
||||||
void AddColorRange(int start, int end, int r1,int g1, int b1, int r2, int g2, int b2);
|
bool AddColorRange(int start, int end, int r1,int g1, int b1, int r2, int g2, int b2);
|
||||||
void AddDesaturation(int start, int end, double r1, double g1, double b1, double r2, double g2, double b2);
|
bool AddDesaturation(int start, int end, double r1, double g1, double b1, double r2, double g2, double b2);
|
||||||
void AddColourisation(int start, int end, int r, int g, int b);
|
bool AddColourisation(int start, int end, int r, int g, int b);
|
||||||
void AddTint(int start, int end, int r, int g, int b, int amount);
|
bool AddTint(int start, int end, int r, int g, int b, int amount);
|
||||||
void AddToTranslation(const char * range);
|
bool AddToTranslation(const char * range);
|
||||||
int StoreTranslation(int slot);
|
int StoreTranslation(int slot);
|
||||||
|
|
||||||
uint8_t *Remap; // For the software renderer
|
uint8_t *Remap; // For the software renderer
|
||||||
|
|
|
@ -761,6 +761,7 @@ DEFINE_PROPERTY(translation, L, Actor)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FRemapTable CurrentTranslation;
|
FRemapTable CurrentTranslation;
|
||||||
|
bool success = true;
|
||||||
|
|
||||||
CurrentTranslation.MakeIdentity();
|
CurrentTranslation.MakeIdentity();
|
||||||
for(int i = 1; i < PROP_PARM_COUNT; i++)
|
for(int i = 1; i < PROP_PARM_COUNT; i++)
|
||||||
|
@ -774,10 +775,15 @@ DEFINE_PROPERTY(translation, L, Actor)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CurrentTranslation.AddToTranslation(str);
|
// parse all ranges to get a complete list of errors, if more than one range fails.
|
||||||
|
success |= CurrentTranslation.AddToTranslation(str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
defaults->Translation = CurrentTranslation.StoreTranslation (TRANSLATION_Decorate);
|
defaults->Translation = CurrentTranslation.StoreTranslation (TRANSLATION_Decorate);
|
||||||
|
if (!success)
|
||||||
|
{
|
||||||
|
bag.ScriptPosition.Message(MSG_WARNING, "Failed to parse translation");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue