From 8008f314b1f9c58b1e335257f0398a2c9fc87759 Mon Sep 17 00:00:00 2001 From: svenbarth <pascaldragon@googlemail.com> Date: Wed, 12 Aug 2020 19:06:05 +0000 Subject: [PATCH] fcl-res: fix LANGUAGE attribute Reintegrate fpcres-rc branch by Martok git-svn-id: trunk@46385 - --- packages/fcl-res/src/rcparser.pas | 2 +- packages/fcl-res/src/rcparser.y | 2 +- packages/fcl-res/src/rcparserfn.inc | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/fcl-res/src/rcparser.pas b/packages/fcl-res/src/rcparser.pas index b68016041a..a9e887db3f 100644 --- a/packages/fcl-res/src/rcparser.pas +++ b/packages/fcl-res/src/rcparser.pas @@ -266,7 +266,7 @@ begin yyval := yyv[yysp-1]; end; 63 : begin - aktresource.LangID:= MakeLangID(yyv[yysp-2].yyrcnumtype.v, yyv[yysp-0].yyrcnumtype.v); + change_lang_id(MakeLangID(yyv[yysp-2].yyrcnumtype.v, yyv[yysp-0].yyrcnumtype.v)); end; 64 : begin aktresource.Characteristics:= yyv[yysp-0].yyrcnumtype.v; diff --git a/packages/fcl-res/src/rcparser.y b/packages/fcl-res/src/rcparser.y index 515f4f53e0..3fe3072524 100644 --- a/packages/fcl-res/src/rcparser.y +++ b/packages/fcl-res/src/rcparser.y @@ -145,7 +145,7 @@ suboptions ; suboption - : _LANGUAGE numpos ',' numpos { aktresource.LangID:= MakeLangID($2.v, $4.v); } + : _LANGUAGE numpos ',' numpos { change_lang_id(MakeLangID($2.v, $4.v)); } | _CHARACTERISTICS numpos { aktresource.Characteristics:= $2.v; } | _VERSION numpos { aktresource.Version:= $2.v; } | _MOVEABLE { aktresource.MemoryFlags:= aktresource.MemoryFlags or MF_MOVEABLE; } diff --git a/packages/fcl-res/src/rcparserfn.inc b/packages/fcl-res/src/rcparserfn.inc index 3636bb2790..b982df034f 100644 --- a/packages/fcl-res/src/rcparserfn.inc +++ b/packages/fcl-res/src/rcparserfn.inc @@ -295,6 +295,14 @@ begin create_resource(aId, nil, cls); end; +procedure change_lang_id(newlang: TLangID); +begin + // cannot change a language id while it is contained in a list, so remove and re-add + aktresources.Remove(aktresource); + aktresource.LangID:= newlang; + aktresources.Add(aktresource); +end; + procedure raw_write_string(Stream: TMemoryStream; str: rcstrtype); var i: integer;