From 2bf7ac5bf93ed1c8966c526b44aa5f4348c3d03b Mon Sep 17 00:00:00 2001 From: Mark van Renswoude Date: Wed, 25 Jun 2014 14:06:25 +0000 Subject: [PATCH] Added: IsValidXMLChar and GetValidXMLText functions --- UnitTests/Units/XMLDataBindingUtilsTest.pas | 39 +++++++++++++++++++++ UnitTests/X2UtUnitTests.dpr | 4 ++- UnitTests/X2UtUnitTests.dproj | 15 +++++++- XMLDataBindingUtils.pas | 37 ++++++++++++++++--- 4 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 UnitTests/Units/XMLDataBindingUtilsTest.pas diff --git a/UnitTests/Units/XMLDataBindingUtilsTest.pas b/UnitTests/Units/XMLDataBindingUtilsTest.pas new file mode 100644 index 0000000..4654277 --- /dev/null +++ b/UnitTests/Units/XMLDataBindingUtilsTest.pas @@ -0,0 +1,39 @@ +unit XMLDataBindingUtilsTest; + +interface +uses + TestFramework; + + +type + TXMLDataBindingUtilsTest = class(TTestCase) + published + procedure TestIsValidXMLChar; + procedure TestGetValidXMLText; + end; + + +implementation +uses + XMLDataBindingUtils; + + +{ TXMLDataBindingUtilsTest } +procedure TXMLDataBindingUtilsTest.TestIsValidXMLChar; +begin + CheckTrue(IsValidXMLChar('A')); + CheckTrue(IsValidXMLChar('ë')); + CheckFalse(IsValidXMLChar(#$1A)); +end; + + +procedure TXMLDataBindingUtilsTest.TestGetValidXMLText; +begin + CheckEquals('AB', GetValidXMLText('AB')); +end; + + +initialization + RegisterTest(TXMLDataBindingUtilsTest.Suite); + +end. diff --git a/UnitTests/X2UtUnitTests.dpr b/UnitTests/X2UtUnitTests.dpr index 81e715c..93b4fbf 100644 --- a/UnitTests/X2UtUnitTests.dpr +++ b/UnitTests/X2UtUnitTests.dpr @@ -11,7 +11,9 @@ uses X2UtHashes in '..\X2UtHashes.pas', X2UtHashesVariants in '..\X2UtHashesVariants.pas', NamedFormatTest in 'Units\NamedFormatTest.pas', - StringsTest in 'Units\StringsTest.pas'; + StringsTest in 'Units\StringsTest.pas', + XMLDataBindingUtilsTest in 'Units\XMLDataBindingUtilsTest.pas', + XMLDataBindingUtils in '..\XMLDataBindingUtils.pas'; //SettingsTest in 'Units\SettingsTest.pas', //IniParserTest in 'Units\IniParserTest.pas'; diff --git a/UnitTests/X2UtUnitTests.dproj b/UnitTests/X2UtUnitTests.dproj index f394162..0843410 100644 --- a/UnitTests/X2UtUnitTests.dproj +++ b/UnitTests/X2UtUnitTests.dproj @@ -31,6 +31,12 @@ Base true + + true + Cfg_2 + true + true + System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= @@ -38,7 +44,7 @@ ip-to-country.csv countries.csv geo.db - Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 1033 CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= @@ -73,6 +79,11 @@ False False + + Vcl;$(DCC_Namespace) + None + 1033 + Delphi.Personality.12 VCLApplication @@ -136,6 +147,8 @@ + + Cfg_2 Base diff --git a/XMLDataBindingUtils.pas b/XMLDataBindingUtils.pas index 186293b..ea25b5d 100644 --- a/XMLDataBindingUtils.pas +++ b/XMLDataBindingUtils.pas @@ -1,9 +1,5 @@ { Helpers functions for the X2Software XML Data Binding - - Last changed: $Date: 2010-07-15 12:57:03 +0200 (do, 15 jul 2010) $ - Revision: $Rev: 54 $ - URL: $URL: http://svn.kamadev.net/private/XMLDataBinding/trunk/Shared/XMLDataBindingUtils.pas $ } unit XMLDataBindingUtils; @@ -83,6 +79,8 @@ const procedure CreateRequiredAttributes(AParent: IXMLNode; ANodes: array of string); procedure SortChildNodes(AParent: IXMLNode; ASortOrder: array of string); + function IsValidXMLChar(AChar: WideChar): Boolean; + function GetValidXMLText(AText: WideString): WideString; { Now wraps the JclMime implementation: Lightening fast Mime (Base64) Encoding and Decoding routines. @@ -583,6 +581,37 @@ begin end; +function IsValidXMLChar(AChar: WideChar): Boolean; +begin + Result := (Ord(AChar) in [9, 10, 13]) or + (Ord(AChar) >= 32); +end; + + +function GetValidXMLText(AText: WideString): WideString; +var + validText: WideString; + sourcePos: Integer; + destPos: Integer; + +begin + SetLength(validText, Length(AText)); + destPos := 0; + + for sourcePos := 1 to Length(AText) do + begin + if IsValidXMLChar(AText[sourcePos]) then + begin + Inc(destPos); + validText[destPos] := AText[sourcePos]; + end; + end; + + SetLength(validText, destPos); + Result := validText; +end; + + { --- JclMime implementation from here. } type {$IFDEF WIN64}