spiegel-keyman/developer/src/tike/project/Keyman.Developer.System.Project.modelTsProjectFile.pas

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.