[extpascal] r810 committed - New parser

23 views
Skip to first unread message

extp...@googlecode.com

unread,
Apr 2, 2013, 1:11:10 PM4/2/13
to extp...@googlegroups.com
Revision: 810
Author: wanderl...@gmail.com
Date: Tue Apr 2 10:10:33 2013
Log: New parser
http://code.google.com/p/extpascal/source/detail?r=810

Modified:
/trunk/ExtJSWrapper/Ext.pas
/trunk/ExtJSWrapper/ExtFixes.txt
/trunk/ExtJSWrapper/ExtToPascal.dpr
/trunk/ExtJSWrapper/ExtToPascal.dproj
/trunk/ExtJSWrapper/ExtToPascal.dsk
/trunk/ExtPascalUtils.pas

=======================================
--- /trunk/ExtJSWrapper/Ext.pas Sat Mar 30 15:01:19 2013
+++ /trunk/ExtJSWrapper/Ext.pas Tue Apr 2 10:10:33 2013
File is too large to display a diff.
=======================================
--- /trunk/ExtJSWrapper/ExtFixes.txt Sat Mar 30 15:01:19 2013
+++ /trunk/ExtJSWrapper/ExtFixes.txt Tue Apr 2 10:10:33 2013
@@ -87,8 +87,8 @@
ExtProgressWaitConfig, fn, ExtFunction, false, true,
ExtProgressWaitConfig, scope, ExtObject, false, true,

-ExtTabPanel, beforetabchange, Event, tabPanel, ExtTabPanel, newCard,
ExtPanel, oldCard, ExtPanel
-ExtTabPanel, tabchange, Event, tabPanel, ExtTabPanel, newCard, ExtPanel,
oldCard, ExtPanel
+*ExtTabPanel, beforetabchange, Event, tabPanel, ExtTabPanel, newCard,
ExtPanel, oldCard, ExtPanel
+*ExtTabPanel, tabchange, Event, tabPanel, ExtTabPanel, newCard, ExtPanel,
oldCard, ExtPanel

*ExtComponent, xtype, (xtBox, xtButton, xtButtonGroup, xtColorPalette,
xtComponent, xtContainer, xtCycle, xtDataView, xtDatePicker, xtEditor,
xtEditorGrid, xtFlash, xtGrid, xtListView, xtPaging, xtPanel, xtProgress,
xtPropertyGrid, xtSlider, xtSpacer, xtSplitButton, xtStatusBar, xtTabPanel,
xtTreePanel, xtViewPort, xtWindow, xtToolbar, xtTBButton, xtTBFill,
xtTBItem, xtTBSeparator, xtTBSpacer, xtTBSplit, xtTBText, xtMenu,
xtColorMenu, xtDateMenu, xtMenuBaseItem, xtMenuCheckItem, xtMenuItem,
xtMenuSeparator, xtMenuTextItem, xtForm, xtCheckBox, xtCheckBoxGroup,
xtCombo, xtDateField, xtDisplayField, xtField, xtFieldSet, xtHidden,
xtHTMLEditor, xtLabel, xtNumberField, xtRadio, xtRadioGroup, xtTextArea,
xtTextField, xtTimeField, xtTrigger, xtChart, xtBarChart, xtCartesianChart,
xtColumnChart, xtLineChart, xtPieChart)
*ExtContainer, defaultType, (ExtComponentXType)
=======================================
--- /trunk/ExtJSWrapper/ExtToPascal.dpr Sat Mar 30 13:46:36 2013
+++ /trunk/ExtJSWrapper/ExtToPascal.dpr Tue Apr 2 10:10:33 2013
@@ -12,7 +12,7 @@

uses
SysUtils, StrUtils, Classes, ExtPascalUtils
-//, Ext
+, Ext
;

{.$DEFINE USES_PUBLISHED}
@@ -118,7 +118,7 @@
end;

function FixJSName(JSName : string) : string; begin
- Result := AnsiReplaceStr(JSName, '_', '')
+ Result := AnsiReplaceStr(JSName, AP, '');
end;

type
@@ -410,196 +410,227 @@
Result := S;
end;

-procedure LoadElements(Line : string);
-const
- CurClass : TClass = nil;
- CurProp : TProp = nil;
- CurMethod : TMethod = nil;
- PropName : string = '';
- MetName : string = '';
- PropTypes : TStringList = nil;
- Config : boolean = false;
+procedure ParseClassFile(Line : string);
var
- State : (Initial, InClass, InProperties, InMethods);
- Return, JSName, Params : string;
- Matches, Args : TStringList;
- IsEvent, Optional, Static, Singleton: boolean;
- I, Ci : integer;
-begin
- if Before('@protected', '*/', Line) or
- Before('@ignore', '*/', Line) or
- Before('@deprecated','*/', Line) or
- Before('@abstract', '*/', Line) then exit;
- State := Initial;
- Matches := TStringList.Create;
- while true do begin
- case State of
- Initial : begin
- JSName := '';
- Singleton := Before('@singleton', 'Ext.define(', Line);
- Extract(['/**', '*/'], Line, Matches);
- if (JSName <> '') or
- Extract(['Ext.define(' + AP, AP], Line, Matches) or
- Extract(['Ext.define(' + '"', '"'], Line, Matches) then begin
- if JSName = '' then JSName := Matches[0];
- if pos(JS_LIB, JSName) <> 1 then exit;
- Ci := AllClasses.IndexOf(JSName);
- if Ci = -1 then
- CurClass := TClass.Create(JSName)
- else
- CurClass := TClass(AllClasses.Objects[Ci]);
- State := InClass;
- if not Singleton then Singleton := Before('singleton:', '}',
Line);
- if Singleton then CurClass.Name := CurClass.Name + 'Singleton';
- CurClass.Singleton := Singleton;
- continue;
+ CurClass : TClass;
+ Matches : TStringList;
+
+ procedure ParseFunction(IsEvent : boolean);
+ var
+ JSName, Params, MetName, Return : string;
+ Static, Optional : boolean;
+ CurMethod : TMethod;
+ Args : TStringList;
+ begin
+ JSName := IfThen(IsEvent, Matches[0], Matches[1]);
+ Params := IfThen(IsEvent, Matches[1], Matches[0]);
+ if (length(JSName) > 30) or (FixIdent(JSName) = '') or // Doc fault
+ ((JSName = 'destroy') and not IsEvent) then exit;
+ if JSName = 'create' then CurClass.AltCreate := true;
+ Static := false;// pos('@static', IfThen(IsEvent, Matches[1],
Matches[0])) <> 0;
+ if IsEvent then begin
+ MetName := Unique('On' + FixIdent(JSName), CurClass.Properties);
+ if MetName <> Unique(MetName, CurClass.Events) then exit;
+ end
+ else begin
+ MetName := Unique(FixIdent(JSName), CurClass.Properties);
+ if MetName <> Unique(MetName, CurClass.Methods) then exit;
+ if MetName <> 'Create' then MetName := Unique(MetName,
CurClass.Methods);
+ if pos(MetName, 'ConstructorJS.Create.') <> 0 then begin
+ MetName := 'Create';
+ Return := ''
+ end
+ else
+ Return := 'TExtFunction';
+ end;
+ Args := TStringList.Create;
+ while pos('@param', Params) <> 0 do begin
+ if not Extract(['@param', '{', '} ', ' ', ' '], Params, Matches) then
+ break;
+ Optional := pos('[', Matches[2]) = 1;
+ if Matches.Count = 4 then
+ Optional := Optional or (pos('(optional)', LowerCase(Matches[3]))
<> 0);
+ Matches[2] := Unique(FixIdent(Matches[2]), Args);
+ if IsEvent and SameText(Matches[2], 'This') then
+ Matches[1] := CurClass.Name;
+ Args.AddObject(Matches[2], TParam.Create(Matches[2],
FixType(Matches[1]), Optional));
+ end;
+ CurMethod := TMethod.Create(MetName, JSName, Return, Args, Static,
false);
+ if IsEvent then
+ CurClass.Events.AddObject(CurMethod.Name, CurMethod)
+ else
+ DoOverloads(CurClass, CurMethod);
+ end;
+
+ procedure ParseEvent;
+ var
+ IsEvent : boolean;
+ begin
+ if GetBetween('@event', '*', Line) = '' then begin
+ IsEvent := Extract(['@event', '*/', AP, AP], Line, Matches); //
Alternate syntax
+ if IsEvent then begin
+ Matches[1] := Matches[0];
+ Matches[0] := Matches[2];
+ end;
+ end
+ else
+ IsEvent := Extract(['@event ', ' ', '*/'], Line, Matches);
+ if IsEvent then
+ ParseFunction(True)
+ else
+ Delete(Line, 1, pos('@event', Line) + 6);
+ end;
+
+ procedure ParseMethod; begin
+ if Before('/**', ': function', Line) then
+ if Extract(['/**', '*/', ': function'], Line, Matches) then begin
+ ParseFunction(False);
+ exit;
+ end;
+ Delete(Line, 1, pos(': function', Line) + 10);
+ end;
+
+ procedure ParseField(Config : boolean);
+ var
+ PropName : string;
+ Static : boolean;
+ I : integer;
+ CurProp : TProp;
+ PropTypes : TStringList;
+ begin
+ // To do Extract(['@property ', ' ', '@type ', ' '], Line, Matches)
PropName = Matches[0]; PropType = Matches[2]
+ PropName := Matches[1];
+ Static := false;
+ I := pos('=', PropName);
+ if I <> 0 then
+ PropName := copy(PropName, 1, I-1); // Default value ****
+ if FixIdent(PropName) = '' then exit; // Discard properties nameless
+ if Before('@static', '*/', Line) then Static := true;
+ if IsUppercase(PropName) then Static := true;
+ PropName := Unique(FixIdent(PropName), CurClass.Properties);
+ if not Static then PropName[1] := LowerCase(PropName)[1];
+ if pos('__', Unique(FixIdent(PropName), CurClass.Properties)) <> 0 then
+ exit; // Discard duplicates
+ Matches[0] := ReplaceStr(Matches[0], 'Object/Object[]', 'Object[]');
+ Matches[0] := ReplaceStr(Matches[0], 'String/Number', 'Number/String');
+ PropTypes := Explode('/', Matches[0]);
+ if (pos('"', Matches[0]) <> 0) and (PropTypes.Count <> 0) then begin
// Enumeration
+ CurProp := TProp.Create(PropName, PropName, 'string', Static,
Config);
+ CurProp.Typ := DoEnumeration(PropName, PropTypes);
+ CurProp.Enum := true;
+ CurClass.Properties.AddObject(FixIdent(PropName), CurProp);
+ end
+ else
+ for I := 0 to PropTypes.Count-1 do
+ if I = 0 then begin
+ CurProp := TProp.Create(PropName, PropName, PropTypes[I],
Static, Config);
+ CurClass.Properties.AddObject(FixIdent(PropName), CurProp);
end
else
- break;
+ if CurClass.Properties.IndexOf(FixIdent(PropName +
Sufix(FixType(PropTypes[I])))) = -1 then
+ CurClass.Properties.AddObject(FixIdent(PropName +
Sufix(FixType(PropTypes[I]))),
+ TProp.Create(PropName +
Sufix(FixType(PropTypes[I])), PropName, PropTypes[I], Static, Config));
+ //if Extract([PropName, ':', ','], Line, Matches) then begin
+ if (Before('Default to', '*/', Line) and Extract(['Default
to', '.'], Line, Matches)) or
+ (Before('Defaults to', '*/', Line) and Extract(['Defaults
to', '.'], Line, Matches)) then begin
+ SetDefault(CurProp, Matches[0], Matches);
+ if (CurProp.Default <> '') and not CurClass.Defaults then begin
+ CurClass.Defaults := true;
+ CurClass.AddCreate;
end;
- InClass : begin
- if not Between('extend:', '/*', '*/', Line, false) then
- if Extract(['extend:', AP, AP], Line, Matches) then
- CurClass.Parent := FixIdent(Matches[1], true);
- if Extract(['mixins: {', '}'], Line, Matches) then
- ReadMixins(CurClass.Mixins, Matches[0]);
- if AllClasses.IndexOf(CurClass.Name) = -1 then
- AllClasses.AddObject(CurClass.Name, CurClass);
- State := InProperties;
- continue;
- end;
- InProperties : begin
- if Between('@hide', '/**', '*/', Line) or
- Between('@private', '/**', '*/', Line) or
- Between('@deprecated','/**', '*/', Line) or
- Between('@protected', '/**', '*/', Line) then continue;
- begin
- if Before('@cfg {', '@property {', Line) then
- Config := Extract(['@cfg {', '} ', ' '], Line, Matches)
+ end;
+ FreeAndNil(PropTypes);
+ end;
+
+ procedure ParseCfg; begin
+ if Extract(['@cfg {', '} ', ' '], Line, Matches) then
+ ParseField(True)
+ else
+ Delete(Line, 1, pos('@cfg', Line) + 4);
+ end;
+
+ procedure ParseProperty; begin
+ if Extract(['@property {', '} ', ' '], Line, Matches) then
+ ParseField(False)
+ else
+ Delete(Line, 1, pos('@property', Line) + 10);
+ end;
+
+ procedure SetArraysAndObjects;
+ var
+ I : integer;
+ begin
+ for I := 0 to CurClass.Properties.Count-1 do
+ with TProp(CurClass.Properties.Objects[I]) do
+ if not Static then
+ if Typ = 'TExtObjectList' then begin
+ CurClass.Arrays := true;
+ CurClass.AddCreate;
+ end
else
- Config := False;
- // To do Extract(['@property ', ' ', '@type ', ' '], Line,
Matches) PropName = Matches[0]; PropType = Matches[2]
- if Config or Extract(['@property {', '} ', ' '], Line, Matches)
then begin
- PropName := Matches[1];
- Static := false;
- I := pos('=', PropName);
- if I <> 0 then
- PropName := copy(PropName, 1, I-1); // Default value ****
- if FixIdent(PropName) = '' then continue; // Discard
properties nameless
- if Before('@static', '*/', Line) then Static := true;
- if IsUppercase(PropName) then Static := true;
- PropName := Unique(FixIdent(PropName), CurClass.Properties);
- if not Static then PropName[1] := LowerCase(PropName)[1];
- if pos('__', Unique(FixIdent(PropName), CurClass.Properties))
<> 0 then begin
- State := InMethods;
- continue; // Discard duplicates
+ if (pos('T' + JS_LIB, Typ) = 1) and (Typ <> 'TExtFunction')
then begin
+ CurClass.Objects := true;
+ CurClass.AddCreate;
end;
- Matches[0] :=
ReplaceStr(Matches[0], 'Object/Object[]', 'Object[]');
- Matches[0] :=
ReplaceStr(Matches[0], 'String/Number', 'Number/String');
- PropTypes := Explode('/', Matches[0]);
- if (pos('"', Matches[0]) <> 0) and (PropTypes.Count <> 0) then
begin // Enumeration
- CurProp := TProp.Create(PropName, PropName, 'string',
Static, Config);
- CurProp.Typ := DoEnumeration(PropName, PropTypes);
- CurProp.Enum := true;
- CurClass.Properties.AddObject(FixIdent(PropName), CurProp);
- end
- else
- for I := 0 to PropTypes.Count-1 do
- if I = 0 then begin
- CurProp := TProp.Create(PropName, PropName,
PropTypes[I], Static, Config);
- CurClass.Properties.AddObject(FixIdent(PropName),
CurProp);
- end
- else
- if CurClass.Properties.IndexOf(FixIdent(PropName +
Sufix(FixType(PropTypes[I])))) = -1 then
- CurClass.Properties.AddObject(FixIdent(PropName +
Sufix(FixType(PropTypes[I]))),
- TProp.Create(PropName +
Sufix(FixType(PropTypes[I])), PropName, PropTypes[I], Static, Config));
- //if Extract([PropName, ':', ','], Line, Matches) then begin
- if (Before('Default to', '*/', Line) and Extract(['Default
to', '.'], Line, Matches)) or
- (Before('Defaults to', '*/', Line) and Extract(['Defaults
to', '.'], Line, Matches)) then begin
- SetDefault(CurProp, Matches[0], Matches);
- if (CurProp.Default <> '') and not CurClass.Defaults then
begin
- CurClass.Defaults := true;
- CurClass.AddCreate;
- end;
- end;
- FreeAndNil(PropTypes);
- Extract([' ', '*/'], Line, Matches);
- continue;
- end;
- end;
- for I := 0 to CurClass.Properties.Count-1 do
- with TProp(CurClass.Properties.Objects[I]) do
- if not Static then
- if Typ = 'TExtObjectList' then begin
- CurClass.Arrays := true;
- CurClass.AddCreate;
- end
- else
- if (pos('T' + JS_LIB, Typ) = 1) and (Typ
<> 'TExtFunction') then begin
- CurClass.Objects := true;
- CurClass.AddCreate;
- end;
- State := InMethods;
- continue;
- end;
- InMethods : begin
- if Between('@private', '/**', '*/', Line) or
- Between('@protected', '/**', '*/', Line) or
- Between('@deprecated', '/**', '*/', Line) or
- Between('@template', '/**', '*/', Line) then continue;
- if Before('@event ', ': function', Line) then
- IsEvent := Extract(['@event ', ' ', '*/'], Line, Matches)
+ end;
+
+ procedure ParseClass;
+ var
+ JSName : string;
+ Ci : integer;
+ Singleton : boolean;
+ begin
+ Singleton := Before('@singleton', 'Ext.define(', Line);
+ Extract(['/**', '*/'], Line, Matches);
+ if Extract(['Ext.define(' + AP, AP], Line, Matches) or
+ Extract(['Ext.define(' + '"', '"'], Line, Matches) then begin
+ JSName := Matches[0];
+ if pos(JS_LIB, JSName) <> 1 then Abort;
+ Ci := AllClasses.IndexOf(JSName);
+ if Ci = -1 then
+ CurClass := TClass.Create(JSName)
+ else
+ CurClass := TClass(AllClasses.Objects[Ci]);
+ if not Singleton then Singleton := Before('singleton:', '}', Line);
+ if Singleton then CurClass.Name := CurClass.Name + 'Singleton';
+ CurClass.Singleton := Singleton;
+ end
+ else
+ Abort;
+ if not Between('extend:', '/*', '*/', Line, false) then
+ if Extract(['extend:', AP, AP], Line, Matches) then
+ CurClass.Parent := FixIdent(Matches[1], true);
+ if Extract(['mixins: {', '}'], Line, Matches) then
+ ReadMixins(CurClass.Mixins, Matches[0]);
+ if AllClasses.IndexOf(CurClass.Name) = -1 then
+ AllClasses.AddObject(CurClass.Name, CurClass);
+ end;
+
+begin
+ if Before('@protected', '*/', Line) or Before('@ignore', '*/', Line) or
+ Before('@deprecated','*/', Line) or Before('@abstract', '*/', Line)
then
+ exit;
+ Matches := TStringList.Create;
+ try
+ ParseClass;
+ while true do
+ if not(Between('@hide', '/**', '*/', Line) or
+ Between('@private', '/**', '*/', Line) or
+ Between('@deprecated','/**', '*/', Line) or
+ Between('@protected', '/**', '*/', Line) or
+ Between('@template', '/**', '*/', Line)) then
+ case First(['@cfg', '@property', '@event', ': function'], Line) of
+ 0 : ParseCfg;
+ 1 : ParseProperty;
+ 2 : ParseEvent;
+ 3 : ParseMethod;
else
- if Before('/**', ': function', Line) then
- IsEvent := False
- else
- IsEvent := Extract(['@event ', ' ', '*/'], Line, Matches);
- if IsEvent or Extract(['/**', '*/', ': function'], Line, Matches)
then begin
- JSName := IfThen(IsEvent, Matches[0], Matches[1]);
- if (length(JSName) > 30) or (FixIdent(JSName) = '') or // Doc
fault
- ((JSName = 'destroy') and not IsEvent) then continue;
- if JSName = 'create' then CurClass.AltCreate := true;
- Static := false;// pos('@static', IfThen(IsEvent, Matches[1],
Matches[0])) <> 0;
- if IsEvent then begin
- MetName := Unique('On' + FixIdent(JSName),
CurClass.Properties);
- if MetName <> Unique(MetName, CurClass.Events) then continue;
- end
- else begin
- MetName := Unique(FixIdent(JSName), CurClass.Properties);
- if MetName <> Unique(MetName, CurClass.Methods) then continue;
- if MetName <> 'Create' then MetName := Unique(MetName,
CurClass.Methods);
- if pos(MetName, 'ConstructorJS.Create.') <> 0 then begin
- MetName := 'Create';
- Return := ''
- end
- else
- Return := 'TExtFunction';
- end;
- Args := TStringList.Create;
- Params := IfThen(IsEvent, Matches[1], Matches[0]);
- while pos('@param', Params) <> 0 do begin
- if not Extract(['@param', '{', '} ', ' ', ' '], Params,
Matches) then
- break;
- Optional := pos('[', Matches[2]) = 1;
- if Matches.Count = 4 then
- Optional := Optional or (pos('(optional)',
LowerCase(Matches[3])) <> 0);
- Matches[2] := Unique(FixIdent(Matches[2]), Args);
- if IsEvent and SameText(Matches[2], 'This') then
- Matches[1] := CurClass.Name;
- Args.AddObject(Matches[2], TParam.Create(Matches[2],
FixType(Matches[1]), Optional));
- end;
- CurMethod := TMethod.Create(MetName, JSName, Return, Args,
Static, false);
- if IsEvent then
- CurClass.Events.AddObject(CurMethod.Name, CurMethod)
- else
- DoOverloads(CurClass, CurMethod);
- continue;
+ break;
end;
- break;
- end;
- end;
+ SetArraysAndObjects;
+ finally
+ Matches.Free;
end;
- Matches.Free;
end;

procedure ReadJS(FileName : string);
@@ -615,7 +646,9 @@
readln(JS, L);
Line := Line + ' ' + trim(L)
until SeekEOF(JS);
- LoadElements(Line);
+ try
+ ParseClassFile(Line);
+ except end;
close(JS);
end;

=======================================
--- /trunk/ExtJSWrapper/ExtToPascal.dproj Wed Mar 27 10:21:02 2013
+++ /trunk/ExtJSWrapper/ExtToPascal.dproj Tue Apr 2 10:10:33 2013
@@ -144,3 +144,9 @@
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets"
Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import
Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"
Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
+
+<!-- EurekaLog First Line
+[Exception Log]
+EurekaLog Version=7001
+DeleteMapAfterCompile=1
+EurekaLog Last Line -->
=======================================
--- /trunk/ExtJSWrapper/ExtToPascal.dsk Sat Mar 30 15:01:19 2013
+++ /trunk/ExtJSWrapper/ExtToPascal.dsk Tue Apr 2 10:10:33 2013
@@ -1,63 +1,91 @@
[Closed Files]
-File_0=TSourceModule,'A:\ExtPascal\Ext.pas',0,1,8140,3,8156,0,0,,
-File_1=TSourceModule,'c:\program files (x86)\embarcadero\rad
studio\10.0\source\rtl\common\System.Classes.pas',0,1,6619,1,6644,0,0,,
-File_2=TSourceModule,'c:\program files (x86)\embarcadero\rad
studio\10.0\SOURCE\RTL\SYS\System.pas',0,1,22820,1,22860,0,0,,
-File_3=TSourceModule,'E:\extpascal\ExtJSWrapper\ExtUtil.pas',0,1,1050,37,1073,0,0,,
-File_4=TSourceModule,'E:\extpascal\ext-4.1.1a\src\grid\plugin\Editing.js',0,1,147,33,196,0,0,,
-File_5=TSourceModule,'E:\extpascal\ExtJSWrapper\ExtDd.pas',0,1,285,32,308,0,0,,
-File_6=TSourceModule,'E:\extpascal\FCGIApp.pas',0,1,210,28,231,0,0,,
-File_7=TSourceModule,'E:\extpascal\ext-4.1.1a\src\Ajax.js',0,1,1,4,2,0,0,,
-File_8=TSourceModule,'E:\extpascal\ext-4.1.1a\src\AbstractManager.js',0,1,70,24,19,0,0,,
-File_9=TSourceModule,'E:\extpascal\ext-4.1.1a\src\core\src\class\Loader.js',0,1,1,22,1261,0,0,,
-File_10=TSourceModule,'E:\extpascal\ext-4.1.1a\src\core\src\lang\Error.js',0,1,68,28,127,0,0,,
-File_11=TSourceModule,'E:\extpascal\ext-4.1.1a\src\core\src\class\ClassManager.js',0,1,1482,32,1505,0,0,,
-File_12=TSourceModule,'E:\extpascal\ext-4.1.1a\src\util\MixedCollection.js',0,1,1,4,2,0,0,,
-File_13=TSourceModule,'E:\extpascal\ext-4.1.1a\src\view\AbstractView.js',0,1,1,4,2,0,0,,
-File_14=TSourceModule,'E:\extpascal\ext-4.1.1a\src\window\MessageBox.js',0,1,867,8,890,0,0,,
+File_0=TSourceModule,'c:\program files (x86)\embarcadero\rad
studio\10.0\SOURCE\RTL\SYS\System.pas',0,1,22052,1,22073,0,0,,
+File_1=TSourceModule,'E:\extpascal\ext-4.2.0\src\draw\Surface.js',0,1,211,16,216,0,0,,
+File_2=TSourceModule,'E:\extpascal\ext-4.2.0\src\tab\Panel.js',0,1,413,47,415,0,0,,
+File_3=TSourceModule,'E:\extpascal\ext-4.2.0\src\dom\AbstractElement.js',0,1,5,46,9,0,0,,
+File_4=TSourceModule,'E:\extpascal\ext-4.2.0\src\draw\Component.js',0,1,261,60,262,0,0,,
+File_5=TSourceModule,'E:\extpascal\ext-4.2.0\src\draw\CompositeSprite.js',0,1,69,70,70,0,0,,
+File_6=TSourceModule,'E:\extpascal\ext-4.2.0\docs\resources\prettify\prettify.css',0,1,1,59,2,0,0,,
+File_7=TSourceModule,'E:\extpascal\ext-4.2.0\examples\build\KitchenSink\ext-theme-access\lib\prettify\prettify.css',0,1,16,5,35,0,0,,
+File_8=TSourceModule,'E:\extpascal\ext-4.2.0\examples\build\KitchenSink\ext-theme-access\resources\KitchenSink-example.css',0,1,15618,24,15641,0,0,,
+File_9=TSourceModule,'E:\extpascal\ext-4.2.0\examples\build\KitchenSink\ext-theme-classic\lib\prettify\prettify.css',0,1,1,54,3,0,0,,
+File_10=TSourceModule,'E:\extpascal\ext-4.2.0\examples\build\KitchenSink\ext-theme-neptune\lib\prettify\prettify.css',0,1,1,5,35,0,0,,
+File_11=TSourceModule,'E:\extpascal\ext-4.2.0\examples\build\KitchenSink\ext-theme-classic\resources\KitchenSink-example.css',0,1,15925,50,15948,0,0,,
+File_12=TSourceModule,'E:\extpascal\ext-4.2.0\examples\build\KitchenSink\ext-theme-gray\resources\KitchenSink-example.css',0,1,15925,50,15948,0,0,,
+File_13=TSourceModule,'E:\extpascal\ext-4.2.0\examples\build\KitchenSink\ext-theme-neptune\resources\KitchenSink-example.css',0,1,18972,50,18995,0,0,,
+File_14=TSourceModule,'E:\extpascal\ext-4.2.0\examples\kitchensink\app\view\CodePreview.js',0,1,1,28,6,0,0,,
+File_15=TSourceModule,'E:\extpascal\ext-4.2.0\examples\kitchensink\sass\example\bootstrap.js',0,1,91,21,114,0,0,,

[Modules]
-Module0=A:\ExtPascal\ExtJSWrapper\ExtToPascal.dproj
-Module1=A:\ExtPascal\ExtPascal.pas
-Module2=A:\ExtPascal\ExtJSWrapper\ExtFixes.txt
-Module3=A:\ExtPascal\ExtJSWrapper\ExtFixes3.txt
-Module4=A:\ExtPascal\ExtJSWrapper\Ext.pas
-Module5=A:\ExtPascal\ExtPascalUtils.pas
-Count=6
+Module0=E:\extpascal\ExtJSWrapper\ExtToPascal.dproj
+Module1=E:\extpascal\ExtPascalUtils.pas
+Module2=E:\extpascal\ext-4.2.0\src\view\View.js
+Module3=E:\extpascal\ext-4.2.0\src\selection\Model.js
+Module4=E:\extpascal\ExtJSWrapper\Ext.pas
+Module5=E:\extpascal\ext-4.2.0\src\draw\Sprite.js
+Module6=E:\extpascal\ext-4.2.0\src\data\proxy\JsonP.js
+Module7=E:\extpascal\ExtJSWrapper\ExtFixes.txt
+Module8=E:\extpascal\ext-4.2.0\src\data\reader\Reader.js
+Module9=E:\extpascal\ExtPascal.pas
+Module10=E:\extpascal\ExtJSWrapper\ExtOld.pas
+Count=11
EditWindowCount=1

-[A:\ExtPascal\ExtJSWrapper\ExtToPascal.dproj]
+[E:\extpascal\ExtJSWrapper\ExtToPascal.dproj]
ModuleType=TBaseProject

-[A:\ExtPascal\ExtPascal.pas]
+[E:\extpascal\ExtPascalUtils.pas]
ModuleType=TSourceModule
FormState=0
FormOnTop=0

-[A:\ExtPascal\ExtJSWrapper\ExtFixes.txt]
+[E:\extpascal\ext-4.2.0\src\view\View.js]
ModuleType=TSourceModule

-[A:\ExtPascal\ExtJSWrapper\ExtFixes3.txt]
+[E:\extpascal\ext-4.2.0\src\selection\Model.js]
ModuleType=TSourceModule

-[A:\ExtPascal\ExtJSWrapper\Ext.pas]
+[E:\extpascal\ExtJSWrapper\Ext.pas]
ModuleType=TSourceModule
FormState=0
FormOnTop=0

-[A:\ExtPascal\ExtPascalUtils.pas]
+[E:\extpascal\ext-4.2.0\src\draw\Sprite.js]
ModuleType=TSourceModule
+
+[E:\extpascal\ext-4.2.0\src\data\proxy\JsonP.js]
+ModuleType=TSourceModule
+
+[E:\extpascal\ExtJSWrapper\ExtFixes.txt]
+ModuleType=TSourceModule
+
+[E:\extpascal\ext-4.2.0\src\data\reader\Reader.js]
+ModuleType=TSourceModule
+
+[E:\extpascal\ExtPascal.pas]
+ModuleType=TSourceModule
FormState=0
FormOnTop=0

+[E:\extpascal\ExtJSWrapper\ExtOld.pas]
+ModuleType=TSourceModule
+FormState=0
+FormOnTop=0
+
[EditWindow0]
-ViewCount=6
-CurrentEditView=A:\ExtPascal\ExtJSWrapper\ExtToPascal.dpr
+ViewCount=11
+CurrentEditView=E:\extpascal\ExtJSWrapper\ExtToPascal.dpr
View0=0
View1=1
View2=2
View3=3
View4=4
View5=5
+View6=6
+View7=7
+View8=8
+View9=9
+View10=10
PercentageSizes=1
Create=1
Visible=1
@@ -66,89 +94,144 @@
Left=0
Top=0
Width=10000
-Height=9456
+Height=9521
MaxLeft=-1
MaxTop=-1
ClientWidth=10000
-ClientHeight=9456
+ClientHeight=9521
DockedToMainForm=1
BorlandEditorCodeExplorer=BorlandEditorCodeExplorer@EditWindow0
TopPanelSize=0
LeftPanelSize=0
RightPanelSize=0
-BottomPanelSize=1600
-BottomPanelClients=DockSite1,MessageView
-BottomPanelData=0000080001020100000009000000446F636B536974653172450000000000000240060000000000000100000000724500000F0000004D65737361676556696577466F726DFFFFFFFF
-BottomMiddlePanelSize=0
-BottomMiddlePanelClients=DockSite0,GraphDrawingModel
-BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779A1D00000000000002F206000000000000FFFFFFFF
+BottomPanelSize=0
+BottomPanelClients=DockSite1
+BottomPanelData=0000080001000100000009000000446F636B5369746531D430000000000000002406000000000000FFFFFFFF
+BottomMiddlePanelSize=1348
+BottomMiddlePanelClients=DockSite0,GraphDrawingModel,MessageView
+BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E6756696577F32F0000000000000244050000000000000100000000F32F00000F0000004D65737361676556696577466F726DFFFFFFFF
TabDockLeftClients=DockSite2=0

[View0]
CustomEditViewType=TEditView
-Module=A:\ExtPascal\ExtJSWrapper\ExtToPascal.dpr
-CursorX=3
-CursorY=15
-TopLine=1
+Module=E:\extpascal\ExtJSWrapper\Ext.pas
+CursorX=21
+CursorY=10999
+TopLine=610
LeftCol=1
Elisions=
Bookmarks=
-EditViewName=A:\ExtPascal\ExtJSWrapper\ExtToPascal.dpr
+EditViewName=E:\extpascal\ExtJSWrapper\Ext.pas

[View1]
CustomEditViewType=TEditView
-Module=A:\ExtPascal\ExtJSWrapper\ExtFixes.txt
-CursorX=1
+Module=E:\extpascal\ext-4.2.0\src\selection\Model.js
+CursorX=16
CursorY=89
-TopLine=84
+TopLine=61
LeftCol=1
Elisions=
Bookmarks=
-EditViewName=A:\ExtPascal\ExtJSWrapper\ExtFixes.txt
+EditViewName=E:\extpascal\ext-4.2.0\src\selection\Model.js

[View2]
CustomEditViewType=TEditView
-Module=A:\ExtPascal\ExtJSWrapper\ExtFixes3.txt
-CursorX=27
-CursorY=93
-TopLine=76
+Module=E:\extpascal\ExtJSWrapper\ExtToPascal.dpr
+CursorX=10
+CursorY=613
+TopLine=586
LeftCol=1
Elisions=
Bookmarks=
-EditViewName=A:\ExtPascal\ExtJSWrapper\ExtFixes3.txt
+EditViewName=E:\extpascal\ExtJSWrapper\ExtToPascal.dpr

[View3]
CustomEditViewType=TEditView
-Module=A:\ExtPascal\ExtPascal.pas
-CursorX=1
-CursorY=814
-TopLine=797
+Module=E:\extpascal\ext-4.2.0\src\view\View.js
+CursorX=16
+CursorY=397
+TopLine=296
LeftCol=1
Elisions=
Bookmarks=
-EditViewName=A:\ExtPascal\ExtPascal.pas
+EditViewName=E:\extpascal\ext-4.2.0\src\view\View.js

[View4]
CustomEditViewType=TEditView
-Module=A:\ExtPascal\ExtPascalUtils.pas
-CursorX=27
-CursorY=450
-TopLine=444
+Module=E:\extpascal\ext-4.2.0\src\data\proxy\JsonP.js
+CursorX=16
+CursorY=180
+TopLine=181
LeftCol=1
Elisions=
Bookmarks=
-EditViewName=A:\ExtPascal\ExtPascalUtils.pas
+EditViewName=E:\extpascal\ext-4.2.0\src\data\proxy\JsonP.js

[View5]
CustomEditViewType=TEditView
-Module=A:\ExtPascal\ExtJSWrapper\Ext.pas
-CursorX=45
-CursorY=42739
-TopLine=42741
+Module=E:\extpascal\ext-4.2.0\src\draw\Sprite.js
+CursorX=16
+CursorY=313
+TopLine=551
LeftCol=1
Elisions=
Bookmarks=
-EditViewName=A:\ExtPascal\ExtJSWrapper\Ext.pas
+EditViewName=E:\extpascal\ext-4.2.0\src\draw\Sprite.js
+
+[View6]
+CustomEditViewType=TEditView
+Module=E:\extpascal\ext-4.2.0\src\data\reader\Reader.js
+CursorX=66
+CursorY=306
+TopLine=273
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=E:\extpascal\ext-4.2.0\src\data\reader\Reader.js
+
+[View7]
+CustomEditViewType=TEditView
+Module=E:\extpascal\ExtPascal.pas
+CursorX=1
+CursorY=814
+TopLine=1
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=E:\extpascal\ExtPascal.pas
+
+[View8]
+CustomEditViewType=TEditView
+Module=E:\extpascal\ExtJSWrapper\ExtFixes.txt
+CursorX=2
+CursorY=91
+TopLine=58
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=E:\extpascal\ExtJSWrapper\ExtFixes.txt
+
+[View9]
+CustomEditViewType=TEditView
+Module=E:\extpascal\ExtPascalUtils.pas
+CursorX=75
+CursorY=461
+TopLine=440
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=E:\extpascal\ExtPascalUtils.pas
+
+[View10]
+CustomEditViewType=TEditView
+Module=E:\extpascal\ExtJSWrapper\ExtOld.pas
+CursorX=52
+CursorY=35805
+TopLine=35799
+LeftCol=1
+Elisions=
+Bookmarks=
+EditViewName=E:\extpascal\ExtJSWrapper\ExtOld.pas

[Watches]
Count=5
@@ -168,20 +251,21 @@
State=0
Left=0
Top=0
-Width=3825
-Height=1067
+Width=3828
+Height=1172
MaxLeft=-1
MaxTop=-1
-ClientWidth=3825
-ClientHeight=1067
-TBDockHeight=211
-LRDockWidth=13600
+ClientWidth=3828
+ClientHeight=1172
+TBDockHeight=215
+LRDockWidth=13602
Dockable=1
StayOnTop=0

[Breakpoints]
-Count=1
-Breakpoint0='E:\extpascal\ExtJSWrapper\ExtToPascal.dpr',750,'',0,1,'',1,0,0,'',1,'','','',0,''
+Count=2
+Breakpoint0='E:\extpascal\ExtJSWrapper\ExtToPascal.dpr',762,'',0,1,'',1,0,0,'',1,'','','',0,''
+Breakpoint1='E:\extpascal\ExtJSWrapper\ExtToPascal.dpr',617,'',0,1,'',1,0,0,'',1,'','','',0,''

[EmbarcaderoWin32Debugger_AddressBreakpoints]
Count=0
@@ -195,17 +279,17 @@
Visible=1
Docked=0
State=2
-Left=144
-Top=278
-Width=8931
-Height=8522
-MaxLeft=-6
-MaxTop=-11
-MaxWidth=8931
-MaxHeight=8522
+Left=141
+Top=273
+Width=8930
+Height=8525
+MaxLeft=-8
+MaxTop=-10
+MaxWidth=8930
+MaxHeight=8525
ClientWidth=10000
-ClientHeight=9756
-BottomPanelSize=9456
+ClientHeight=9785
+BottomPanelSize=9521
BottomPanelClients=EditWindow0

BottomPanelData=0000080000000000000000000000000000000000000000000000000100000000000000000C0000004564697457696E646F775F30FFFFFFFF

@@ -217,14 +301,14 @@
State=0
Left=0
Top=0
-Width=2000
-Height=1422
+Width=1648
+Height=8770
MaxLeft=-1
MaxTop=-1
-ClientWidth=2000
-ClientHeight=1422
-TBDockHeight=5900
-LRDockWidth=2350
+ClientWidth=1648
+ClientHeight=8770
+TBDockHeight=5898
+LRDockWidth=2352
Dockable=1
StayOnTop=0

@@ -236,14 +320,14 @@
State=0
Left=0
Top=23
-Width=10000
-Height=1344
+Width=9820
+Height=1123
MaxLeft=-1
MaxTop=-1
-ClientWidth=10000
-ClientHeight=1344
-TBDockHeight=1344
-LRDockWidth=2769
+ClientWidth=9820
+ClientHeight=1123
+TBDockHeight=1123
+LRDockWidth=2766
Dockable=1
StayOnTop=0

@@ -255,13 +339,13 @@
State=0
Left=0
Top=0
-Width=2362
-Height=8600
+Width=1648
+Height=8770
MaxLeft=-1
MaxTop=-1
-ClientWidth=2362
-ClientHeight=8600
-TBDockHeight=7156
+ClientWidth=1648
+ClientHeight=8770
+TBDockHeight=7158
LRDockWidth=2000
Dockable=1
StayOnTop=0
@@ -272,16 +356,16 @@
Visible=0
Docked=1
State=0
-Left=-1600
-Top=270
-Width=275
-Height=356
+Left=-1280
+Top=314
+Width=273
+Height=361
MaxLeft=-1
MaxTop=-1
-ClientWidth=275
-ClientHeight=356
-TBDockHeight=356
-LRDockWidth=275
+ClientWidth=273
+ClientHeight=361
+TBDockHeight=361
+LRDockWidth=273
Dockable=1
StayOnTop=0
Name=120
@@ -296,14 +380,14 @@
State=0
Left=0
Top=0
-Width=3825
-Height=1067
+Width=3828
+Height=1172
MaxLeft=-1
MaxTop=-1
-ClientWidth=3825
-ClientHeight=1067
-TBDockHeight=411
-LRDockWidth=4950
+ClientWidth=3828
+ClientHeight=1172
+TBDockHeight=410
+LRDockWidth=4953
Dockable=1
StayOnTop=0

@@ -315,13 +399,13 @@
State=0
Left=0
Top=0
-Width=3825
-Height=1067
+Width=3828
+Height=1172
MaxLeft=-1
MaxTop=-1
-ClientWidth=3825
-ClientHeight=1067
-TBDockHeight=211
+ClientWidth=3828
+ClientHeight=1172
+TBDockHeight=215
LRDockWidth=7406
Dockable=1
StayOnTop=0
@@ -338,14 +422,14 @@
State=0
Left=0
Top=0
-Width=3825
-Height=1067
+Width=3828
+Height=1172
MaxLeft=-1
MaxTop=-1
-ClientWidth=3825
-ClientHeight=1067
+ClientWidth=3828
+ClientHeight=1172
TBDockHeight=1533
-LRDockWidth=3481
+LRDockWidth=3484
Dockable=1
StayOnTop=0

@@ -357,14 +441,14 @@
State=0
Left=0
Top=0
-Width=3825
-Height=1067
+Width=3828
+Height=1172
MaxLeft=-1
MaxTop=-1
-ClientWidth=3825
-ClientHeight=1067
-TBDockHeight=2056
-LRDockWidth=3481
+ClientWidth=3828
+ClientHeight=1172
+TBDockHeight=2061
+LRDockWidth=3484
Dockable=1
StayOnTop=0

@@ -376,14 +460,14 @@
State=0
Left=0
Top=0
-Width=2362
-Height=8600
+Width=1648
+Height=8770
MaxLeft=-1
MaxTop=-1
-ClientWidth=2362
-ClientHeight=8600
-TBDockHeight=4878
-LRDockWidth=2231
+ClientWidth=1648
+ClientHeight=8770
+TBDockHeight=4883
+LRDockWidth=7148
Dockable=1
StayOnTop=0

@@ -395,17 +479,17 @@
State=0
Left=0
Top=0
-Width=2362
-Height=8600
+Width=1648
+Height=8770
MaxLeft=-1
MaxTop=-1
-ClientWidth=2362
-ClientHeight=8600
-TBDockHeight=8878
-LRDockWidth=1894
+ClientWidth=1648
+ClientHeight=8770
+TBDockHeight=9014
+LRDockWidth=1891
Dockable=1
StayOnTop=0
-SplitPos=131
+SplitPos=111

[TFileExplorerForm]
PercentageSizes=1
@@ -413,15 +497,15 @@
Visible=0
Docked=1
State=0
-Left=-1502
-Top=27
+Left=-1202
+Top=38
Width=2844
-Height=6200
+Height=6201
MaxLeft=-1
MaxTop=-1
ClientWidth=2844
-ClientHeight=6200
-TBDockHeight=6200
+ClientHeight=6201
+TBDockHeight=6201
LRDockWidth=2844
Dockable=1
StayOnTop=0
@@ -434,14 +518,14 @@
State=0
Left=0
Top=0
-Width=2338
-Height=967
+Width=2336
+Height=996
MaxLeft=-1
MaxTop=-1
-ClientWidth=2338
-ClientHeight=967
-TBDockHeight=2311
-LRDockWidth=2825
+ClientWidth=2336
+ClientHeight=996
+TBDockHeight=2314
+LRDockWidth=2828
Dockable=1
StayOnTop=0

@@ -453,14 +537,14 @@
State=0
Left=0
Top=0
-Width=2338
-Height=1200
+Width=2336
+Height=1230
MaxLeft=-1
MaxTop=-1
-ClientWidth=2338
-ClientHeight=1200
-TBDockHeight=3200
-LRDockWidth=2825
+ClientWidth=2336
+ClientHeight=1230
+TBDockHeight=3203
+LRDockWidth=2828
Dockable=1
StayOnTop=0

@@ -472,14 +556,14 @@
State=0
Left=0
Top=0
-Width=2338
-Height=1200
+Width=2336
+Height=1230
MaxLeft=-1
MaxTop=-1
-ClientWidth=2338
-ClientHeight=1200
-TBDockHeight=1156
-LRDockWidth=3675
+ClientWidth=2336
+ClientHeight=1230
+TBDockHeight=1152
+LRDockWidth=3672
Dockable=1
StayOnTop=0
Column0Width=314
@@ -497,16 +581,16 @@
Visible=0
Docked=1
State=0
-Left=306
-Top=724
-Width=2856
-Height=3211
+Left=245
+Top=825
+Width=2859
+Height=3213
MaxLeft=-1
MaxTop=-1
-ClientWidth=2856
-ClientHeight=3211
-TBDockHeight=3211
-LRDockWidth=2856
+ClientWidth=2859
+ClientHeight=3213
+TBDockHeight=3213
+LRDockWidth=2859
Dockable=1
StayOnTop=0

@@ -518,14 +602,14 @@
State=0
Left=0
Top=0
-Width=2362
-Height=8600
+Width=1648
+Height=8770
MaxLeft=-1
MaxTop=-1
-ClientWidth=2362
-ClientHeight=8600
-TBDockHeight=4878
-LRDockWidth=5306
+ClientWidth=1648
+ClientHeight=8770
+TBDockHeight=4883
+LRDockWidth=5305
Dockable=1
StayOnTop=0

@@ -535,15 +619,15 @@
Visible=0
Docked=1
State=0
-Left=-1600
+Left=-1280
Top=-49
Width=1844
-Height=3144
+Height=3145
MaxLeft=-1
MaxTop=-1
ClientWidth=1844
-ClientHeight=3144
-TBDockHeight=3144
+ClientHeight=3145
+TBDockHeight=3145
LRDockWidth=1844
Dockable=1
StayOnTop=0
@@ -556,13 +640,13 @@
State=0
Left=0
Top=0
-Width=2338
-Height=1200
+Width=2336
+Height=1230
MaxLeft=-1
MaxTop=-1
-ClientWidth=2338
-ClientHeight=1200
-TBDockHeight=4833
+ClientWidth=2336
+ClientHeight=1230
+TBDockHeight=4824
LRDockWidth=3562
Dockable=1
StayOnTop=0
@@ -575,13 +659,13 @@
State=0
Left=0
Top=0
-Width=2338
-Height=1200
+Width=2336
+Height=1230
MaxLeft=-1
MaxTop=-1
-ClientWidth=2338
-ClientHeight=1200
-TBDockHeight=4833
+ClientWidth=2336
+ClientHeight=1230
+TBDockHeight=4824
LRDockWidth=3562
Dockable=1
StayOnTop=0
@@ -594,14 +678,14 @@
State=0
Left=0
Top=0
-Width=3825
-Height=1067
+Width=3828
+Height=1172
MaxLeft=-1
MaxTop=-1
-ClientWidth=3825
-ClientHeight=1067
-TBDockHeight=1544
-LRDockWidth=8744
+ClientWidth=3828
+ClientHeight=1172
+TBDockHeight=1543
+LRDockWidth=8742
Dockable=1
StayOnTop=0
Column0Width=200
@@ -620,14 +704,14 @@
State=0
Left=0
Top=0
-Width=2362
-Height=8600
+Width=1648
+Height=8770
MaxLeft=-1
MaxTop=-1
-ClientWidth=2362
-ClientHeight=8600
-TBDockHeight=3678
-LRDockWidth=1894
+ClientWidth=1648
+ClientHeight=8770
+TBDockHeight=3672
+LRDockWidth=1891
Dockable=1
StayOnTop=0

@@ -639,14 +723,14 @@
State=0
Left=0
Top=0
-Width=1825
-Height=6178
-MaxLeft=-6
-MaxTop=-11
-ClientWidth=1725
-ClientHeight=5800
-TBDockHeight=6178
-LRDockWidth=1825
+Width=1828
+Height=6182
+MaxLeft=-8
+MaxTop=-10
+ClientWidth=1703
+ClientHeight=5850
+TBDockHeight=6182
+LRDockWidth=1828
Dockable=1
StayOnTop=0

@@ -663,14 +747,14 @@
State=0
Left=0
Top=0
-Width=2338
-Height=1478
+Width=2336
+Height=1475
MaxLeft=-1
MaxTop=-1
-ClientWidth=2338
-ClientHeight=1478
-TBDockHeight=1478
-LRDockWidth=2338
+ClientWidth=2336
+ClientHeight=1475
+TBDockHeight=1475
+LRDockWidth=2336
Dockable=1
StayOnTop=0
TabPosition=1
@@ -687,14 +771,14 @@
State=0
Left=0
Top=23
-Width=3825
-Height=1344
+Width=3828
+Height=1416
MaxLeft=-1
MaxTop=-1
-ClientWidth=3825
-ClientHeight=1344
-TBDockHeight=1344
-LRDockWidth=3825
+ClientWidth=3828
+ClientHeight=1416
+TBDockHeight=1416
+LRDockWidth=3828
Dockable=1
StayOnTop=0
TabPosition=1
@@ -709,19 +793,19 @@
Visible=0
Docked=1
State=0
-Left=1600
+Left=1280
Top=49
-Width=2362
-Height=8878
+Width=1648
+Height=9014
MaxLeft=-1
MaxTop=-1
-ClientWidth=2362
-ClientHeight=8878
-TBDockHeight=8878
-LRDockWidth=2362
+ClientWidth=1648
+ClientHeight=9014
+TBDockHeight=9014
+LRDockWidth=1648
Dockable=1
StayOnTop=0
TabPosition=1
-ActiveTabID=ToolForm
-TabDockClients=ToolForm,PropertyInspector,ProjectManager,DataExplorerContainer,StructureView,ModelViewTool,ClassBrowserTool,TemplateView,TFileExplorerForm
+ActiveTabID=ProjectManager
+TabDockClients=ProjectManager,ToolForm,PropertyInspector,StructureView,DataExplorerContainer,ModelViewTool,TFileExplorerForm,TemplateView,ClassBrowserTool

=======================================
--- /trunk/ExtPascalUtils.pas Sat Mar 30 13:46:36 2013
+++ /trunk/ExtPascalUtils.pas Tue Apr 2 10:10:33 2013
@@ -153,6 +153,10 @@
// Returns true if S string occurs between BeforeS and AfterS strings in T
string
function Between(const S, BeforeS, AfterS : string; var T : string;
Remove : boolean = true) : boolean;

+function GetBetween(const A, B, Line : string) : string;
+
+function First(const A : array of string; const S : string) : integer;
+
// Returns true if all chars in S are uppercase
function IsUpperCase(S : string) : boolean;

@@ -450,6 +454,28 @@
Result := (I <> 0) and (((J <> 0) and (I < J)) or (J = 0));
end;

+function First(const A : array of string; const S : string) : integer;
+var
+ I, J : integer;
+ M : array of integer;
+begin
+ SetLength(M, Length(A));
+ for I := 0 to High(A) do begin
+ M[I] := pos(A[I], S);
+ if M[I] = 0 then
+ M[I] := MAXINT;
+ end;
+ J := MinIntValue(M);
+ if (J = 0) or (J = MAXINT) then
+ Result := -1
+ else
+ for I := 0 to High(M) do
+ if J = M[I] then begin
+ Result := I;
+ exit;
+ end;
+end;
+
function Between(const S, BeforeS, AfterS : string; var T : string;
Remove : boolean = true) : boolean;
var
I, J : integer;
@@ -463,6 +489,18 @@
end;
end;

+function GetBetween(const A, B, Line : string) : string;
+var
+ I, J : integer;
+begin
+ I := pos(A, Line);
+ J := posex(B, Line, I + length(A));
+ if (I = 0) or (J = 0) then
+ Result := ''
+ else
+ Result := Trim(copy(Line, I + length(A), J- (I + length(A))));
+end;
+
function IsUpperCase(S : string) : boolean;
var
I : integer;
Reply all
Reply to author
Forward
0 new messages