Merge pull request #2 from wiphi/dev-remove-dependencies
Dev remove dependencies
This commit is contained in:
commit
d86bfbb276
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -1,6 +0,0 @@
|
|||||||
[submodule "vendor/x2utils"]
|
|
||||||
path = vendor/x2utils
|
|
||||||
url = https://github.com/MvRens/x2utils.git
|
|
||||||
[submodule "vendor/x2log"]
|
|
||||||
path = vendor/x2log
|
|
||||||
url = https://github.com/MvRens/x2log.git
|
|
@ -63,15 +63,12 @@ object MainForm: TMainForm
|
|||||||
Top = 68
|
Top = 68
|
||||||
Width = 416
|
Width = 416
|
||||||
Height = 93
|
Height = 93
|
||||||
ActivePage = spFolder
|
ActivePage = spFile
|
||||||
Anchors = [akLeft, akTop, akRight]
|
Anchors = [akLeft, akTop, akRight]
|
||||||
Style = tsButtons
|
Style = tsButtons
|
||||||
TabOrder = 2
|
TabOrder = 2
|
||||||
object spFile: TTabSheet
|
object spFile: TTabSheet
|
||||||
TabVisible = False
|
TabVisible = False
|
||||||
DesignSize = (
|
|
||||||
408
|
|
||||||
83)
|
|
||||||
object lblFile: TLabel
|
object lblFile: TLabel
|
||||||
Left = 4
|
Left = 4
|
||||||
Top = 7
|
Top = 7
|
||||||
@ -79,15 +76,21 @@ object MainForm: TMainForm
|
|||||||
Height = 13
|
Height = 13
|
||||||
Caption = 'Output file:'
|
Caption = 'Output file:'
|
||||||
end
|
end
|
||||||
object feFile: TJvFilenameEdit
|
object feFile: TEdit
|
||||||
Left = 89
|
Left = 65
|
||||||
Top = 3
|
Top = 4
|
||||||
Width = 316
|
Width = 269
|
||||||
Height = 21
|
Height = 21
|
||||||
DialogOptions = [ofHideReadOnly, ofCreatePrompt]
|
|
||||||
Anchors = [akLeft, akTop, akRight]
|
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
Text = ''
|
end
|
||||||
|
object ButtonOutputFileBrowseButton: TButton
|
||||||
|
Left = 340
|
||||||
|
Top = 4
|
||||||
|
Width = 65
|
||||||
|
Height = 21
|
||||||
|
Caption = 'Browse'
|
||||||
|
TabOrder = 1
|
||||||
|
OnClick = ButtonOutputFileBrowseButtonClick
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
object spFolder: TTabSheet
|
object spFolder: TTabSheet
|
||||||
@ -201,15 +204,21 @@ object MainForm: TMainForm
|
|||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
OnClick = btnHintsClick
|
OnClick = btnHintsClick
|
||||||
end
|
end
|
||||||
object feSchema: TJvFilenameEdit
|
object feSchema: TEdit
|
||||||
Left = 104
|
Left = 72
|
||||||
Top = 8
|
Top = 8
|
||||||
Width = 316
|
Width = 289
|
||||||
Height = 21
|
Height = 21
|
||||||
OnAfterDialog = feSchemaAfterDialog
|
|
||||||
DialogOptions = [ofHideReadOnly, ofFileMustExist]
|
|
||||||
TabOrder = 4
|
TabOrder = 4
|
||||||
Text = ''
|
end
|
||||||
|
object SchmeFileBrowseButton: TButton
|
||||||
|
Left = 367
|
||||||
|
Top = 8
|
||||||
|
Width = 65
|
||||||
|
Height = 21
|
||||||
|
Caption = 'Browse'
|
||||||
|
TabOrder = 5
|
||||||
|
OnClick = SchmeFileBrowseButtonClick
|
||||||
end
|
end
|
||||||
object dlgSchema: TOpenDialog
|
object dlgSchema: TOpenDialog
|
||||||
Filter = 'W3C XML Schema files (*.xsd)|*.xsd|All files (*.*)|*.*'
|
Filter = 'W3C XML Schema files (*.xsd)|*.xsd|All files (*.*)|*.*'
|
||||||
|
@ -14,7 +14,7 @@ uses
|
|||||||
XMLDOM,
|
XMLDOM,
|
||||||
XMLIntf,
|
XMLIntf,
|
||||||
DataBindingHintsXML,
|
DataBindingHintsXML,
|
||||||
XMLDataBindingGenerator, JvExMask, JvToolEdit
|
XMLDataBindingGenerator
|
||||||
{
|
{
|
||||||
cxButtonEdit,
|
cxButtonEdit,
|
||||||
cxContainer,
|
cxContainer,
|
||||||
@ -51,9 +51,11 @@ type
|
|||||||
edtFolderPrefix: TEdit;
|
edtFolderPrefix: TEdit;
|
||||||
edtFolderPostfix: TEdit;
|
edtFolderPostfix: TEdit;
|
||||||
deFolder: TEdit;
|
deFolder: TEdit;
|
||||||
feSchema: TJvFilenameEdit;
|
|
||||||
deFolderPropertiesButton: TButton;
|
deFolderPropertiesButton: TButton;
|
||||||
feFile: TJvFilenameEdit;
|
feSchema: TEdit;
|
||||||
|
SchmeFileBrowseButton: TButton;
|
||||||
|
feFile: TEdit;
|
||||||
|
ButtonOutputFileBrowseButton: TButton;
|
||||||
|
|
||||||
procedure btnCloseClick(Sender: TObject);
|
procedure btnCloseClick(Sender: TObject);
|
||||||
procedure btnGenerateClick(Sender: TObject);
|
procedure btnGenerateClick(Sender: TObject);
|
||||||
@ -64,8 +66,8 @@ type
|
|||||||
procedure feSchemaPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
|
procedure feSchemaPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
|
||||||
procedure feSchemaPropertiesChange(Sender: TObject);
|
procedure feSchemaPropertiesChange(Sender: TObject);
|
||||||
procedure btnHintsClick(Sender: TObject);
|
procedure btnHintsClick(Sender: TObject);
|
||||||
procedure feSchemaAfterDialog(Sender: TObject; var AName: string;
|
procedure SchmeFileBrowseButtonClick(Sender: TObject);
|
||||||
var AAction: Boolean);
|
procedure ButtonOutputFileBrowseButtonClick(Sender: TObject);
|
||||||
private
|
private
|
||||||
function CheckValidSchemaFile: Boolean;
|
function CheckValidSchemaFile: Boolean;
|
||||||
function CheckReadOnly(const AFileName: String): Boolean;
|
function CheckReadOnly(const AFileName: String): Boolean;
|
||||||
@ -176,11 +178,11 @@ begin
|
|||||||
|
|
||||||
if rbFile.Checked then
|
if rbFile.Checked then
|
||||||
begin
|
begin
|
||||||
if not CheckReadOnly(feFile.FileName) then
|
if not CheckReadOnly(feFile.Text) then
|
||||||
Exit;
|
Exit;
|
||||||
|
|
||||||
generator.OutputType := otSingle;
|
generator.OutputType := otSingle;
|
||||||
generator.OutputPath := feFile.FileName;
|
generator.OutputPath := feFile.Text;
|
||||||
end else if rbFolder.Checked then
|
end else if rbFolder.Checked then
|
||||||
begin
|
begin
|
||||||
generator.OutputType := otMultiple;
|
generator.OutputType := otMultiple;
|
||||||
@ -190,9 +192,9 @@ begin
|
|||||||
generator.HasChecksEmpty := cbHasChecksEmpty.Checked;
|
generator.HasChecksEmpty := cbHasChecksEmpty.Checked;
|
||||||
generator.HasGenerateGetOptionalOrDefault := cbGenerateGetOptionalOrDefault.Checked;
|
generator.HasGenerateGetOptionalOrDefault := cbGenerateGetOptionalOrDefault.Checked;
|
||||||
generator.OnGetFileName := GetFileName;
|
generator.OnGetFileName := GetFileName;
|
||||||
generator.Execute(feSchema.Filename);
|
generator.Execute(feSchema.Text);
|
||||||
|
|
||||||
SaveSettings(feSchema.FileName);
|
SaveSettings(feSchema.Text);
|
||||||
|
|
||||||
ShowMessage('The data binding has been generated.');
|
ShowMessage('The data binding has been generated.');
|
||||||
finally
|
finally
|
||||||
@ -235,12 +237,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TMainForm.feSchemaAfterDialog(Sender: TObject; var AName: string;
|
|
||||||
var AAction: Boolean);
|
|
||||||
begin
|
|
||||||
feFile.FileName := ChangeFileExt(AName, '.pas');
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TMainForm.feSchemaPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
|
procedure TMainForm.feSchemaPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
|
||||||
begin
|
begin
|
||||||
if dlgSchema.Execute then
|
if dlgSchema.Execute then
|
||||||
@ -337,9 +333,17 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TMainForm.SchmeFileBrowseButtonClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if dlgSchema.Execute then
|
||||||
|
begin
|
||||||
|
feSchema.Text := dlgSchema.FileName;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function TMainForm.CheckValidSchemaFile: Boolean;
|
function TMainForm.CheckValidSchemaFile: Boolean;
|
||||||
begin
|
begin
|
||||||
Result := FileExists(feSchema.FileName);
|
Result := FileExists(feSchema.Text);
|
||||||
|
|
||||||
if not Result then
|
if not Result then
|
||||||
begin
|
begin
|
||||||
@ -392,6 +396,14 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TMainForm.ButtonOutputFileBrowseButtonClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if dlgOutputFile.Execute then
|
||||||
|
begin
|
||||||
|
feFile.Text := dlgOutputFile.FileName;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ THintsDelphiXMLDataBindingGenerator }
|
{ THintsDelphiXMLDataBindingGenerator }
|
||||||
procedure THintsDelphiXMLDataBindingGenerator.GenerateDataBinding;
|
procedure THintsDelphiXMLDataBindingGenerator.GenerateDataBinding;
|
||||||
begin
|
begin
|
||||||
|
@ -15,9 +15,6 @@
|
|||||||
- Influence the generator by using a Hints file
|
- Influence the generator by using a Hints file
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
- JEDI Component Library (jcl /jvcl)
|
* Works up from Delphi XE2
|
||||||
- x2utils (https://github.com/MvRens/x2utils.git) (git submodule)
|
|
||||||
- x2log (https://github.com/MvRens/x2log.git) (git submodule)
|
|
||||||
|
|
||||||
|
|
||||||
Documentation is available on [ReadTheDocs](https://x2xmldatabinding.readthedocs.io/).
|
Documentation is available on [ReadTheDocs](https://x2xmldatabinding.readthedocs.io/).
|
@ -84,9 +84,7 @@ uses
|
|||||||
StrUtils,
|
StrUtils,
|
||||||
SysUtils,
|
SysUtils,
|
||||||
|
|
||||||
X2UtNamedFormat,
|
X2UtNamedFormat;
|
||||||
|
|
||||||
X2Log.Global;
|
|
||||||
|
|
||||||
const
|
const
|
||||||
VariantText = 'Variant';
|
VariantText = 'Variant';
|
||||||
@ -937,8 +935,6 @@ var
|
|||||||
member: TDelphiXMLMember;
|
member: TDelphiXMLMember;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
TX2GlobalLog.Verbose('WriteSchemaInterfaceProperties: ' + AItem.Name);
|
|
||||||
|
|
||||||
if ASection = dxsForward then
|
if ASection = dxsForward then
|
||||||
Exit;
|
Exit;
|
||||||
|
|
||||||
@ -1812,7 +1808,8 @@ begin
|
|||||||
if OutputType = otMultiple then
|
if OutputType = otMultiple then
|
||||||
begin
|
begin
|
||||||
path := IncludeTrailingPathDelimiter(Result);
|
path := IncludeTrailingPathDelimiter(Result);
|
||||||
fileName := ASchemaName + '.pas';
|
fileName := ASchemaName.Replace('-', '_');
|
||||||
|
fileName := fileName + '.pas';
|
||||||
|
|
||||||
if Assigned(FOnGetFileName) then
|
if Assigned(FOnGetFileName) then
|
||||||
FOnGetFileName(Self, ASchemaName, path, fileName);
|
FOnGetFileName(Self, ASchemaName, path, fileName);
|
||||||
|
248
Units/X2UtNamedFormat.pas
Normal file
248
Units/X2UtNamedFormat.pas
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
{
|
||||||
|
:: X2UtNamedFormat implements Format-style functionality using named
|
||||||
|
:: instead of indexed parameters.
|
||||||
|
::
|
||||||
|
:: Last changed: $Date$
|
||||||
|
:: Revision: $Rev$
|
||||||
|
:: Author: $Author$
|
||||||
|
}
|
||||||
|
unit X2UtNamedFormat;
|
||||||
|
|
||||||
|
interface
|
||||||
|
uses
|
||||||
|
Classes,
|
||||||
|
SysUtils;
|
||||||
|
|
||||||
|
|
||||||
|
type
|
||||||
|
TNamedFormatStringList = class(TStringList)
|
||||||
|
public
|
||||||
|
procedure AddLn();
|
||||||
|
|
||||||
|
function Format(AParams: array of const): String;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
AFormat uses the same format strings as SysUtils.Format, where each
|
||||||
|
format specifier may use a named instead of a numeric index, surrounded by
|
||||||
|
<>, eg:
|
||||||
|
|
||||||
|
%<Value1>:s %<Value2>:.2d
|
||||||
|
|
||||||
|
|
||||||
|
AParams contains alternating the parameter name and it's value.
|
||||||
|
|
||||||
|
Note: NamedFormat works by mapping names to indices and passing the result
|
||||||
|
to SysUtils.Format. Unnamed or existing indexed specifiers will therefore
|
||||||
|
be affected by named specifiers! It is strongly recommended to name all
|
||||||
|
specifiers.
|
||||||
|
}
|
||||||
|
function NamedFormat(const AFormat: String; AParams: array of const; AFormatSettings: TFormatSettings): String; overload;
|
||||||
|
function NamedFormat(const AFormat: String; AParams: array of const): String; overload;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
uses
|
||||||
|
Windows;
|
||||||
|
|
||||||
|
type
|
||||||
|
TProtectedMemoryStream = class(TMemoryStream);
|
||||||
|
|
||||||
|
|
||||||
|
const
|
||||||
|
SpecifierChar = '%';
|
||||||
|
SpecifierNameStart = '<';
|
||||||
|
SpecifierNameEnd = '>';
|
||||||
|
ValidNameChars = ['A'..'Z', 'a'..'z', '0'..'9', '_'];
|
||||||
|
|
||||||
|
|
||||||
|
procedure StreamWriteChar(const AStream: TStream; const AValue: Char);
|
||||||
|
begin
|
||||||
|
AStream.WriteBuffer(AValue, SizeOf(Char));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure StreamWriteString(const AStream: TStream; const AValue: String);
|
||||||
|
begin
|
||||||
|
AStream.WriteBuffer(PChar(AValue)^, Length(AValue) * SizeOf(Char));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function FindNameEnd(const APosition: PChar; const AEnd: PChar): PChar;
|
||||||
|
var
|
||||||
|
position: PChar;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result := nil;
|
||||||
|
position := APosition;
|
||||||
|
|
||||||
|
while position < AEnd do
|
||||||
|
begin
|
||||||
|
if position^ = SpecifierNameEnd then
|
||||||
|
begin
|
||||||
|
Result := position;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if not CharInSet(position^, ValidNameChars) then
|
||||||
|
break;
|
||||||
|
|
||||||
|
Inc(position);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function NamedFormat(const AFormat: String; AParams: array of const): String; overload;
|
||||||
|
var
|
||||||
|
formatSettings: TFormatSettings;
|
||||||
|
|
||||||
|
begin
|
||||||
|
formatSettings := TFormatSettings.Create;
|
||||||
|
Result := NamedFormat(AFormat, AParams, formatSettings);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function NamedFormat(const AFormat: string; AParams: array of const; AFormatSettings: TFormatSettings): String;
|
||||||
|
var
|
||||||
|
currentPos: PChar;
|
||||||
|
formatEnd: PChar;
|
||||||
|
formatStream: TMemoryStream;
|
||||||
|
formatString: String;
|
||||||
|
name: String;
|
||||||
|
nameEnd: PChar;
|
||||||
|
nameStart: PChar;
|
||||||
|
param: TVarRec;
|
||||||
|
paramIndex: Integer;
|
||||||
|
paramNames: TStringList;
|
||||||
|
paramValues: array of TVarRec;
|
||||||
|
specifierIndex: Integer;
|
||||||
|
errorMsg: String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if Length(AParams) mod 2 = 1 then
|
||||||
|
raise Exception.Create('AParams must contains a multiple of 2 number of items');
|
||||||
|
|
||||||
|
currentPos := PChar(AFormat);
|
||||||
|
SetLength(paramValues, 0);
|
||||||
|
|
||||||
|
formatEnd := currentPos;
|
||||||
|
Inc(formatEnd, Length(AFormat));
|
||||||
|
|
||||||
|
paramNames := TStringList.Create();
|
||||||
|
try
|
||||||
|
paramNames.CaseSensitive := False;
|
||||||
|
|
||||||
|
formatStream := TMemoryStream.Create();
|
||||||
|
try
|
||||||
|
{ Most likely scenario; the names are longer than the replacement
|
||||||
|
indexes. }
|
||||||
|
TProtectedMemoryStream(formatStream).Capacity := Length(AFormat) * SizeOf(Char);
|
||||||
|
|
||||||
|
while currentPos < formatEnd do
|
||||||
|
begin
|
||||||
|
{ Search for % }
|
||||||
|
if currentPos^ = SpecifierChar then
|
||||||
|
begin
|
||||||
|
StreamWriteChar(formatStream, currentPos^);
|
||||||
|
Inc(currentPos);
|
||||||
|
|
||||||
|
{ Check if this is indeed a named specifier }
|
||||||
|
if (currentPos < formatEnd) and (currentPos^ = SpecifierNameStart) then
|
||||||
|
begin
|
||||||
|
Inc(currentPos);
|
||||||
|
|
||||||
|
nameStart := currentPos;
|
||||||
|
nameEnd := FindNameEnd(currentPos, formatEnd);
|
||||||
|
|
||||||
|
if Assigned(nameEnd) then
|
||||||
|
begin
|
||||||
|
SetString(name, nameStart, nameEnd - nameStart);
|
||||||
|
|
||||||
|
specifierIndex := paramNames.IndexOf(name);
|
||||||
|
if specifierIndex = -1 then
|
||||||
|
specifierIndex := paramNames.Add(name);
|
||||||
|
|
||||||
|
StreamWriteString(formatStream, IntToStr(specifierIndex));
|
||||||
|
|
||||||
|
currentPos := nameEnd;
|
||||||
|
end;
|
||||||
|
end else
|
||||||
|
StreamWriteChar(formatStream, currentPos^);
|
||||||
|
end else
|
||||||
|
StreamWriteChar(formatStream, currentPos^);
|
||||||
|
|
||||||
|
Inc(currentPos);
|
||||||
|
end;
|
||||||
|
|
||||||
|
SetString(formatString, PChar(formatStream.Memory), formatStream.Size div SizeOf(Char));
|
||||||
|
finally
|
||||||
|
FreeAndNil(formatStream);
|
||||||
|
end;
|
||||||
|
|
||||||
|
SetLength(paramValues, paramNames.Count);
|
||||||
|
paramIndex := 0;
|
||||||
|
|
||||||
|
while paramIndex < High(AParams) do
|
||||||
|
begin
|
||||||
|
param := AParams[paramIndex];
|
||||||
|
|
||||||
|
case param.VType of
|
||||||
|
vtChar: name := string(param.VChar);
|
||||||
|
vtString: name := string(param.VString^);
|
||||||
|
vtPChar: name := string(param.VPChar);
|
||||||
|
vtAnsiString: name := string(PChar(param.VAnsiString));
|
||||||
|
vtWideChar: name := string(param.VWideChar);
|
||||||
|
vtWideString: name := string(WideString(param.VWideString));
|
||||||
|
vtUnicodeString: name := string(UnicodeString(param.VUnicodeString));
|
||||||
|
else
|
||||||
|
raise Exception.CreateFmt('Parameter name at index %d is not a string value',
|
||||||
|
[paramIndex div 2]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Inc(paramIndex);
|
||||||
|
|
||||||
|
specifierIndex := paramNames.IndexOf(name);
|
||||||
|
if specifierIndex > -1 then
|
||||||
|
paramValues[specifierIndex] := AParams[paramIndex];
|
||||||
|
|
||||||
|
Inc(paramIndex);
|
||||||
|
end;
|
||||||
|
|
||||||
|
try
|
||||||
|
|
||||||
|
Result := Format(formatString, paramValues, AFormatSettings);
|
||||||
|
except
|
||||||
|
on E:EConvertError do
|
||||||
|
begin
|
||||||
|
errorMsg := E.Message;
|
||||||
|
|
||||||
|
{ Translate specifiers in error messages back to names }
|
||||||
|
for paramIndex := 0 to Pred(paramNames.Count) do
|
||||||
|
errorMsg := StringReplace(errorMsg, SpecifierChar + IntToStr(paramIndex) + ':',
|
||||||
|
SpecifierChar + SpecifierNameStart +
|
||||||
|
paramNames[paramIndex] + SpecifierNameEnd + ':',
|
||||||
|
[rfReplaceAll]);
|
||||||
|
|
||||||
|
raise EConvertError.Create(errorMsg);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
FreeAndNil(paramNames);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TNamedFormatStringList }
|
||||||
|
procedure TNamedFormatStringList.AddLn;
|
||||||
|
begin
|
||||||
|
Add('');
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function TNamedFormatStringList.Format(AParams: array of const): String;
|
||||||
|
begin
|
||||||
|
Result := NamedFormat(Text, AParams);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
145
Units/X2UtTempFile.pas
Normal file
145
Units/X2UtTempFile.pas
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
{: Provides temporary file functions.
|
||||||
|
|
||||||
|
Last changed: $Date$
|
||||||
|
Revision: $Rev$
|
||||||
|
Author: $Author$
|
||||||
|
}
|
||||||
|
unit X2UtTempFile;
|
||||||
|
|
||||||
|
interface
|
||||||
|
function GetAppDataPath(): String;
|
||||||
|
|
||||||
|
function GetTempFile(const APrefix: String): String; overload;
|
||||||
|
function GetTempFile(const APath, AFileName, AExtension: String): String; overload;
|
||||||
|
function GetTempFile(const APath, AFileName: String): String; overload;
|
||||||
|
function GetTempAppDataFile(const ASubPath, AFileName, AExtension: String): String; overload;
|
||||||
|
function GetTempAppDataFile(const ASubPath, AFileName: String): String; overload;
|
||||||
|
|
||||||
|
function IsValidFileChar(const AChar: Char): Boolean;
|
||||||
|
function CheckValidFileName(var AFileName: String; const AReplacement: Char = #0): Boolean;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
uses
|
||||||
|
ShlObj,
|
||||||
|
SysUtils,
|
||||||
|
Windows;
|
||||||
|
|
||||||
|
function GetAppDataPath(): String;
|
||||||
|
var
|
||||||
|
path: array[0..MAX_PATH] of Char;
|
||||||
|
|
||||||
|
begin
|
||||||
|
FillChar(path, SizeOf(path), #0);
|
||||||
|
if not SHGetSpecialFolderPath(0, @path, CSIDL_APPDATA, True) then
|
||||||
|
begin
|
||||||
|
FillChar(path, SizeOf(path), #0);
|
||||||
|
GetTempPath(SizeOf(path), @path);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Result := path;
|
||||||
|
if Length(Result) > 0 then
|
||||||
|
Result := IncludeTrailingPathDelimiter(Result);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function GetTempFile(const APrefix: String): String; overload;
|
||||||
|
var
|
||||||
|
tempPath: array[0..MAX_PATH] of Char;
|
||||||
|
tempFile: array[0..MAX_PATH] of Char;
|
||||||
|
|
||||||
|
begin
|
||||||
|
FillChar(tempPath, SizeOf(tempPath), #0);
|
||||||
|
FillChar(tempFile, SizeOf(tempFile), #0);
|
||||||
|
|
||||||
|
Windows.GetTempPath(SizeOf(tempPath), @tempPath);
|
||||||
|
Windows.GetTempFileName(@tempPath, PChar(APrefix), 0, @tempFile);
|
||||||
|
|
||||||
|
Result := String(tempFile);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function GetTempFile(const APath, AFileName, AExtension: String): String; overload;
|
||||||
|
var
|
||||||
|
iCounter: Integer;
|
||||||
|
sBase: String;
|
||||||
|
sExtension: String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
iCounter := 0;
|
||||||
|
sBase := IncludeTrailingPathDelimiter(APath);
|
||||||
|
|
||||||
|
if not ForceDirectories(sBase) then
|
||||||
|
begin
|
||||||
|
Result := '';
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
sExtension := AExtension;
|
||||||
|
if (Length(sExtension) > 0) and (AnsiPos('.', sExtension) = 0) then
|
||||||
|
sExtension := '.' + sExtension;
|
||||||
|
|
||||||
|
sBase := sBase + AFileName;
|
||||||
|
Result := sBase + sExtension;
|
||||||
|
|
||||||
|
while FileExists(Result) do
|
||||||
|
begin
|
||||||
|
Inc(iCounter);
|
||||||
|
Result := Format('%s(%d)%s', [sBase, iCounter, sExtension]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function GetTempFile(const APath, AFileName: String): String; overload;
|
||||||
|
var
|
||||||
|
sExt: String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
sExt := ExtractFileExt(AFileName);
|
||||||
|
Result := GetTempFile(APath, Copy(AFileName, 1, Length(AFileName) - Length(sExt)),
|
||||||
|
sExt);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function GetTempAppDataFile(const ASubPath, AFileName, AExtension: String): String; overload;
|
||||||
|
begin
|
||||||
|
Result := GetTempFile(GetAppDataPath + ASubPath, AFileName, AExtension);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function GetTempAppDataFile(const ASubPath, AFileName: String): String; overload;
|
||||||
|
var
|
||||||
|
sExt: String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
sExt := ExtractFileExt(AFileName);
|
||||||
|
Result := GetTempAppDataFile(ASubPath, Copy(AFileName, 1,
|
||||||
|
Length(AFileName) - Length(sExt)),
|
||||||
|
sExt);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function IsValidFileChar(const AChar: Char): Boolean;
|
||||||
|
begin
|
||||||
|
Result := not CharInSet(AChar, ['\', '/', ':', '*', '?', '"', '<', '>', '|']);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function CheckValidFileName(var AFileName: String; const AReplacement: Char): Boolean;
|
||||||
|
var
|
||||||
|
iPos: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result := True;
|
||||||
|
|
||||||
|
for iPos := Length(AFileName) downto 1 do
|
||||||
|
if not IsValidFileChar(AFileName[iPos]) then
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
if AReplacement = #0 then
|
||||||
|
Delete(AFileName, iPos, 1)
|
||||||
|
else
|
||||||
|
AFileName[iPos] := AReplacement;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
@ -489,6 +489,7 @@ function TXMLDataBindingGenerator.LoadSchema(const AStream: TStream; const ASche
|
|||||||
begin
|
begin
|
||||||
location := ADocRefs[refIndex].SchemaLocation;
|
location := ADocRefs[refIndex].SchemaLocation;
|
||||||
schemaName := ChangeFileExt(ExtractFileName(location), '');
|
schemaName := ChangeFileExt(ExtractFileName(location), '');
|
||||||
|
schemaName := schemaName.Replace('./', ''); // fix explizit current dir
|
||||||
refSchema := FindSchema(schemaName);
|
refSchema := FindSchema(schemaName);
|
||||||
|
|
||||||
if not Assigned(refSchema) then
|
if not Assigned(refSchema) then
|
||||||
|
1331
Units/XMLDataBindingUtils.pas
Normal file
1331
Units/XMLDataBindingUtils.pas
Normal file
File diff suppressed because it is too large
Load Diff
@ -11,7 +11,10 @@ uses
|
|||||||
DelphiXMLDataBindingResources in 'Units\DelphiXMLDataBindingResources.pas',
|
DelphiXMLDataBindingResources in 'Units\DelphiXMLDataBindingResources.pas',
|
||||||
DataBindingSettingsXML in 'Units\DataBindingSettingsXML.pas',
|
DataBindingSettingsXML in 'Units\DataBindingSettingsXML.pas',
|
||||||
DataBindingHintsXML in 'Units\DataBindingHintsXML.pas',
|
DataBindingHintsXML in 'Units\DataBindingHintsXML.pas',
|
||||||
MSXML2_TLB in 'Units\MSXML2_TLB.pas';
|
MSXML2_TLB in 'Units\MSXML2_TLB.pas',
|
||||||
|
XMLDataBindingUtils in 'Units\XMLDataBindingUtils.pas',
|
||||||
|
X2UtNamedFormat in 'Units\X2UtNamedFormat.pas',
|
||||||
|
X2UtTempFile in 'Units\X2UtTempFile.pas';
|
||||||
|
|
||||||
{$R *.res}
|
{$R *.res}
|
||||||
|
|
||||||
|
@ -52,7 +52,6 @@
|
|||||||
<VerInfo_Locale>1043</VerInfo_Locale>
|
<VerInfo_Locale>1043</VerInfo_Locale>
|
||||||
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
|
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
|
||||||
<SanitizedProjectName>X2XMLDataBinding</SanitizedProjectName>
|
<SanitizedProjectName>X2XMLDataBinding</SanitizedProjectName>
|
||||||
<DCC_UnitSearchPath>vendor\x2utils;vendor\x2log;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||||
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||||
@ -142,6 +141,429 @@
|
|||||||
<Platform value="Win32">True</Platform>
|
<Platform value="Win32">True</Platform>
|
||||||
<Platform value="Win64">True</Platform>
|
<Platform value="Win64">True</Platform>
|
||||||
</Platforms>
|
</Platforms>
|
||||||
|
<Deployment Version="3">
|
||||||
|
<DeployFile LocalName="bin\X2XMLDataBinding.exe" Configuration="Build" Class="ProjectOutput">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<RemoteName>X2XMLDataBinding.exe</RemoteName>
|
||||||
|
<Overwrite>true</Overwrite>
|
||||||
|
</Platform>
|
||||||
|
</DeployFile>
|
||||||
|
<DeployClass Name="AdditionalDebugSymbols">
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidClassesDexFile">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>classes</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidGDBServer">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidLibnativeArmeabiFile">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>library\lib\armeabi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidLibnativeMipsFile">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>library\lib\mips</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidServiceOutput">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidSplashImageDef">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="AndroidSplashStyles">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\values</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_DefaultAppIcon">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_LauncherIcon144">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_LauncherIcon36">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-ldpi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_LauncherIcon48">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-mdpi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_LauncherIcon72">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-hdpi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_LauncherIcon96">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-xhdpi</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_SplashImage426">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-small</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_SplashImage470">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-normal</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_SplashImage640">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-large</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="Android_SplashImage960">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>res\drawable-xlarge</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="DebugSymbols">
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="DependencyFramework">
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.framework</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="DependencyModule">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
<Extensions>.dll;.bpl</Extensions>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Required="true" Name="DependencyPackage">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
<Extensions>.dylib</Extensions>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
<Extensions>.bpl</Extensions>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="File">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\Resources\StartUp\</RemoteDir>
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPad_Launch1024">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPad_Launch1536">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPad_Launch2048">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPad_Launch768">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPhone_Launch320">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPhone_Launch640">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="iPhone_Launch640x1136">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectAndroidManifest">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectiOSDeviceDebug">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectiOSDeviceResourceRules">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectiOSEntitlements">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<RemoteDir>..\</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<RemoteDir>..\</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectiOSInfoPList">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectiOSResource">
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectOSXEntitlements">
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>..\</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectOSXInfoPList">
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectOSXResource">
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\Resources</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Required="true" Name="ProjectOutput">
|
||||||
|
<Platform Name="Android">
|
||||||
|
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSDevice64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="iOSSimulator">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Linux64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="OSX32">
|
||||||
|
<RemoteDir>Contents\MacOS</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>0</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="ProjectUWPManifest">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win64">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="UWP_DelphiLogo150">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<RemoteDir>Assets</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win64">
|
||||||
|
<RemoteDir>Assets</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<DeployClass Name="UWP_DelphiLogo44">
|
||||||
|
<Platform Name="Win32">
|
||||||
|
<RemoteDir>Assets</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
<Platform Name="Win64">
|
||||||
|
<RemoteDir>Assets</RemoteDir>
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
|
</DeployClass>
|
||||||
|
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||||
|
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||||
|
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||||
|
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
|
||||||
|
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||||
|
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/>
|
||||||
|
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||||
|
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||||
|
</Deployment>
|
||||||
</BorlandProject>
|
</BorlandProject>
|
||||||
<ProjectFileVersion>12</ProjectFileVersion>
|
<ProjectFileVersion>12</ProjectFileVersion>
|
||||||
</ProjectExtensions>
|
</ProjectExtensions>
|
||||||
@ -160,6 +582,9 @@
|
|||||||
<DCCReference Include="Units\DataBindingSettingsXML.pas"/>
|
<DCCReference Include="Units\DataBindingSettingsXML.pas"/>
|
||||||
<DCCReference Include="Units\DataBindingHintsXML.pas"/>
|
<DCCReference Include="Units\DataBindingHintsXML.pas"/>
|
||||||
<DCCReference Include="Units\MSXML2_TLB.pas"/>
|
<DCCReference Include="Units\MSXML2_TLB.pas"/>
|
||||||
|
<DCCReference Include="Units\XMLDataBindingUtils.pas"/>
|
||||||
|
<DCCReference Include="Units\X2UtNamedFormat.pas"/>
|
||||||
|
<DCCReference Include="Units\X2UtTempFile.pas"/>
|
||||||
<BuildConfiguration Include="Build">
|
<BuildConfiguration Include="Build">
|
||||||
<Key>Cfg_2</Key>
|
<Key>Cfg_2</Key>
|
||||||
<CfgParent>Base</CfgParent>
|
<CfgParent>Base</CfgParent>
|
||||||
@ -170,4 +595,5 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/>
|
<Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/>
|
||||||
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
|
||||||
|
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
|
||||||
</Project>
|
</Project>
|
||||||
|
1
vendor/x2log
vendored
1
vendor/x2log
vendored
@ -1 +0,0 @@
|
|||||||
Subproject commit 8b17a99c33453d0cf6c94d26af735beb3bb8666c
|
|
1
vendor/x2utils
vendored
1
vendor/x2utils
vendored
@ -1 +0,0 @@
|
|||||||
Subproject commit 1e7a0873558140b506c01af5c50c73cfe940466e
|
|
Loading…
Reference in New Issue
Block a user