mirror of
https://github.com/keymanapp/keyman.git
synced 2026-09-15 20:17:43 +00:00
138 lines
3.8 KiB
ObjectPascal
138 lines
3.8 KiB
ObjectPascal
(*
|
|
Name: Keyman.Developer.System.Project.tsProjectFile
|
|
Copyright: Copyright (C) SIL International.
|
|
Documentation:
|
|
Description:
|
|
Create Date: 1 Aug 2006
|
|
|
|
Modified Date: 24 Aug 2015
|
|
Authors: mcdurdin
|
|
Related Files:
|
|
Dependencies:
|
|
|
|
Bugs:
|
|
Todo:
|
|
Notes:
|
|
History:
|
|
*)
|
|
unit Keyman.Developer.System.Project.modelTsProjectFile; // I3306 // I4687 // I4688 // I4692
|
|
|
|
interface
|
|
|
|
uses
|
|
System.SysUtils,
|
|
Xml.XMLIntf,
|
|
|
|
Keyman.Developer.System.Project.ProjectFile,
|
|
Keyman.Developer.System.Project.ProjectFiles,
|
|
Keyman.Developer.System.Project.ProjectFileType,
|
|
UKeymanTargets;
|
|
|
|
type
|
|
TmodelTsProjectFile = class;
|
|
|
|
TmodelTsProjectFile = class(TOpenableProjectFile)
|
|
private
|
|
FDebug: Boolean;
|
|
FWarnAsError: Boolean;
|
|
FTestKeyboard: string; // I4706
|
|
|
|
function GetTargetFilename: string;
|
|
protected
|
|
function GetRelativeOrder: Integer; override;
|
|
procedure GetFileParameters; override;
|
|
|
|
property IsDebug: Boolean read FDebug;
|
|
public
|
|
procedure Load(node: IXMLNode; LoadState: Boolean); override; // I4698
|
|
procedure Save(node: IXMLNode; SaveState: Boolean); override; // I4698
|
|
procedure LoadState(node: IXMLNode); override; // I4698
|
|
procedure SaveState(node: IXMLNode); override; // I4698
|
|
|
|
property Debug: Boolean read FDebug write FDebug;
|
|
property TestKeyboard: string read FTestKeyboard write FTestKeyboard;
|
|
|
|
property WarnAsError: Boolean read FWarnAsError write FWarnAsError; // I4706
|
|
|
|
property TargetFilename: string read GetTargetFilename;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
System.Classes,
|
|
System.Variants,
|
|
Winapi.Windows,
|
|
|
|
utilsystem;
|
|
|
|
{-------------------------------------------------------------------------------
|
|
- TmodelTsProjectFile -
|
|
-------------------------------------------------------------------------------}
|
|
|
|
procedure TmodelTsProjectFile.Save(node: IXMLNode; SaveState: Boolean); // I4698
|
|
begin
|
|
inherited Save(node, SaveState); // I4698
|
|
if SaveState then
|
|
Self.SaveState(node); // I4698
|
|
end;
|
|
|
|
procedure TmodelTsProjectFile.SaveState(node: IXMLNode); // I4698
|
|
begin
|
|
inherited SaveState(node);
|
|
node.AddChild('Debug').NodeValue := FDebug;
|
|
node.AddChild('TestKeyboard').NodeValue := FTestKeyboard;
|
|
end;
|
|
|
|
procedure TmodelTsProjectFile.Load(node: IXMLNode; LoadState: Boolean); // I4698
|
|
begin
|
|
inherited Load(node, LoadState);
|
|
|
|
if LoadState then
|
|
Self.LoadState(node);
|
|
end;
|
|
|
|
procedure TmodelTsProjectFile.LoadState(node: IXMLNode); // I4698
|
|
begin
|
|
inherited LoadState(node);
|
|
try
|
|
if (node.ChildNodes.IndexOf('Debug') >= 0) and not VarIsNull(node.ChildValues['Debug'])
|
|
then FDebug := node.ChildValues['Debug']
|
|
else FDebug := False;
|
|
if (node.ChildNodes.IndexOf('TestKeyboard') >= 0) and not VarIsNull(node.ChildValues['TestKeyboard'])
|
|
then FTestKeyboard := node.ChildValues['TestKeyboard']
|
|
else FTestKeyboard := '';
|
|
except
|
|
FDebug := False;
|
|
FTestKeyboard := '';
|
|
end;
|
|
end;
|
|
|
|
function TmodelTsProjectFile.GetRelativeOrder: Integer;
|
|
begin
|
|
Result := 20;
|
|
end;
|
|
|
|
function TmodelTsProjectFile.GetTargetFilename: string;
|
|
var
|
|
OutputFileName, FTempFileVersion: string;
|
|
begin
|
|
OutputFileName := ChangeFileExt(FileName, '.js');
|
|
// https://github.com/keymanapp/keyman/issues/631
|
|
// This appears to be a Delphi compiler bug (RSP-20457)
|
|
// Workaround is to make a copy of the parameter locally
|
|
// which fixes the reference counting.
|
|
FTempFileVersion := FileVersion;
|
|
Result := OwnerProject.GetTargetFilename(OutputFileName, FileName, FTempFileVersion);
|
|
end;
|
|
|
|
procedure TmodelTsProjectFile.GetFileParameters;
|
|
begin
|
|
SetFileVersion('1.0'); // I4701
|
|
// TODO: Consider adding external references, e.g. model.tsv etc
|
|
end;
|
|
|
|
initialization
|
|
RegisterProjectFileType('.model.ts', TmodelTsProjectFile);
|
|
end.
|
|
|