mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-20 13:39:21 +02:00
* Added support for binary toc and index support from fpc
git-svn-id: trunk@22097 -
This commit is contained in:
parent
1f47e04ef2
commit
b7d39f719c
@ -5,9 +5,15 @@ unit chmcontentprovider;
|
|||||||
//{$if (fpc_version=2) and (fpc_release>2) ((fpc_version=2) and (fpc_release=2) and (fpc_patch>2))}
|
//{$if (fpc_version=2) and (fpc_release>2) ((fpc_version=2) and (fpc_release=2) and (fpc_patch>2))}
|
||||||
{$Note Compiling lhelp with search support}
|
{$Note Compiling lhelp with search support}
|
||||||
{$DEFINE CHM_SEARCH}
|
{$DEFINE CHM_SEARCH}
|
||||||
|
|
||||||
//{$else}
|
//{$else}
|
||||||
//{$Note Compiling lhelp *without* search support since your fpc version is not new enough}
|
//{$Note Compiling lhelp *without* search support since your fpc version is not new enough}
|
||||||
//{$endif}
|
//{$endif}
|
||||||
|
{$if (fpc_version=2) and (fpc_release>5) ((fpc_version=2) and (fpc_release=5) and (fpc_patch>0))}
|
||||||
|
{$Note Compiling lhelp *with* binary index and toc support}
|
||||||
|
{$DEFINE CHM_BINARY_INDEX_TOC}
|
||||||
|
{$endif}
|
||||||
|
|
||||||
|
|
||||||
{off $DEFINE CHM_DEBUG_TIME}
|
{off $DEFINE CHM_DEBUG_TIME}
|
||||||
{off $DEFINE CHM_SEARCH}
|
{off $DEFINE CHM_SEARCH}
|
||||||
@ -96,7 +102,7 @@ type
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses ChmSpecialParser{$IFDEF CHM_SEARCH}, chmFIftiMain{$ENDIF}, LCLType;
|
uses ChmSpecialParser{$IFDEF CHM_SEARCH}, chmFIftiMain{$ENDIF}, chmsitemap, LCLType;
|
||||||
|
|
||||||
function GetURIFileName(AURI: String): String;
|
function GetURIFileName(AURI: String): String;
|
||||||
var
|
var
|
||||||
@ -289,6 +295,7 @@ var
|
|||||||
fChm: TChmReader;
|
fChm: TChmReader;
|
||||||
ParentNode: TTreeNode;
|
ParentNode: TTreeNode;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
|
SM: TChmSiteMap;
|
||||||
HasSearchIndex: Boolean = False;
|
HasSearchIndex: Boolean = False;
|
||||||
begin
|
begin
|
||||||
if fFillingToc = True then begin
|
if fFillingToc = True then begin
|
||||||
@ -307,17 +314,26 @@ begin
|
|||||||
ParentNode := fContentsTree.Items.AddChildObject(nil, fChm.Title, fChm);
|
ParentNode := fContentsTree.Items.AddChildObject(nil, fChm.Title, fChm);
|
||||||
ParentNode.ImageIndex := 0;
|
ParentNode.ImageIndex := 0;
|
||||||
ParentNode.SelectedIndex := 0;
|
ParentNode.SelectedIndex := 0;
|
||||||
|
{$IFDEF CHM_BINARY_INDEX_TOC}
|
||||||
|
SM := fChm.GetTOCSitemap;
|
||||||
|
{$ELSE}
|
||||||
Stream := TMemoryStream(fchm.GetObject(fChm.TOCFile));
|
Stream := TMemoryStream(fchm.GetObject(fChm.TOCFile));
|
||||||
if Stream <> nil then begin
|
if Stream <> nil then begin
|
||||||
Stream.position := 0;
|
SM := TChmSiteMap.Create(stTOC);
|
||||||
|
SM.LoadFromStream(Stream);
|
||||||
|
Stream.Free;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
if SM <> nil then begin
|
||||||
{$IFDEF CHM_DEBUG_TIME}
|
{$IFDEF CHM_DEBUG_TIME}
|
||||||
writeln('Stream read: ',FormatDateTime('hh:nn:ss.zzz', Now));
|
writeln('Stream read: ',FormatDateTime('hh:nn:ss.zzz', Now));
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
with TContentsFiller.Create(fContentsTree, Stream, @fStopTimer, fChm) do begin
|
|
||||||
|
with TContentsFiller.Create(fContentsTree, SM, @fStopTimer, fChm) do begin
|
||||||
DoFill(ParentNode);
|
DoFill(ParentNode);
|
||||||
Free;
|
Free;
|
||||||
end;
|
end;
|
||||||
Stream.Free;
|
SM.Free;
|
||||||
if (fContentsTree.Selected = nil) and (fHistory.Count > 0) then
|
if (fContentsTree.Selected = nil) and (fHistory.Count > 0) then
|
||||||
SelectTreeItemFromURL(fHistory.Strings[fHistoryIndex]);
|
SelectTreeItemFromURL(fHistory.Strings[fHistoryIndex]);
|
||||||
end;
|
end;
|
||||||
@ -326,14 +342,22 @@ begin
|
|||||||
// we fill the index here too but only for the main file
|
// we fill the index here too but only for the main file
|
||||||
if fChms.IndexOfObject(fChm) < 1 then
|
if fChms.IndexOfObject(fChm) < 1 then
|
||||||
begin
|
begin
|
||||||
Stream := fchms.GetObject(fChm.IndexFile);
|
{$IFDEF CHM_BINARY_INDEX_TOC}
|
||||||
|
SM := fChm.GetTOCSitemap;
|
||||||
|
{$ELSE}
|
||||||
|
Stream := TMemoryStream(fchm.GetObject(fChm.TOCFile));
|
||||||
if Stream <> nil then begin
|
if Stream <> nil then begin
|
||||||
Stream.position := 0;
|
SM := TChmSiteMap.Create(stTOC);
|
||||||
with TIndexFiller.Create(fIndexView, Stream, fChm) do begin;
|
SM.LoadFromStream(Stream);
|
||||||
|
Stream.Free;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
if SM <> nil then begin
|
||||||
|
with TIndexFiller.Create(fIndexView, SM, fChm) do begin
|
||||||
DoFill;
|
DoFill;
|
||||||
Free;
|
Free;
|
||||||
end;
|
end;
|
||||||
Stream.Free;
|
SM.Free;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -56,8 +56,7 @@ type
|
|||||||
procedure CustomCreateContentTreeItem(Sender: TCustomTreeView; var ATreeNode: TTreenode);
|
procedure CustomCreateContentTreeItem(Sender: TCustomTreeView; var ATreeNode: TTreenode);
|
||||||
procedure AddItem(AItem: TChmSiteMapItem; AParentNode: TTreeNode);
|
procedure AddItem(AItem: TChmSiteMapItem; AParentNode: TTreeNode);
|
||||||
public
|
public
|
||||||
constructor Create(ATreeView: TTreeView; AStream: TStream; StopBoolean: PBoolean; AChm: TObject);
|
constructor Create(ATreeView: TTreeView; ASitemap: TChmSiteMap; StopBoolean: PBoolean; AChm: TObject);
|
||||||
destructor Destroy; override;
|
|
||||||
procedure DoFill(ParentNode: TTreeNode);
|
procedure DoFill(ParentNode: TTreeNode);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -70,8 +69,7 @@ type
|
|||||||
fChm: Tobject;
|
fChm: Tobject;
|
||||||
procedure AddItem(Item: TChmSiteMapItem; ASubItem: Boolean);
|
procedure AddItem(Item: TChmSiteMapItem; ASubItem: Boolean);
|
||||||
public
|
public
|
||||||
constructor Create(AListView: TListView; AStream: TStream; AChm: TObject);
|
constructor Create(AListView: TListView; ASiteMap: TChmSiteMap; AChm: TObject);
|
||||||
destructor Destroy; override;
|
|
||||||
procedure DoFill;
|
procedure DoFill;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -123,22 +121,15 @@ begin
|
|||||||
AddItem(AItem.Children.Item[X], NewNode);
|
AddItem(AItem.Children.Item[X], NewNode);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TContentsFiller.Create(ATreeView: TTreeView; AStream: TStream; StopBoolean: PBoolean; AChm: TObject);
|
constructor TContentsFiller.Create(ATreeView: TTreeView; ASitemap: TChmSiteMap; StopBoolean: PBoolean; AChm: TObject);
|
||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
fTreeView := ATreeView;
|
fTreeView := ATreeView;
|
||||||
fSitemap := TChmSiteMap.Create(stTOC);
|
fSitemap := ASitemap;
|
||||||
fSitemap.LoadFromStream(AStream);
|
|
||||||
fStop := StopBoolean;
|
fStop := StopBoolean;
|
||||||
fChm := AChm;
|
fChm := AChm;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TContentsFiller.Destroy;
|
|
||||||
begin
|
|
||||||
fSitemap.Free;
|
|
||||||
inherited Destroy;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TContentsFiller.DoFill(ParentNode: TTreeNode);
|
procedure TContentsFiller.DoFill(ParentNode: TTreeNode);
|
||||||
var
|
var
|
||||||
OrigEvent: TTVCustomCreateNodeEvent;
|
OrigEvent: TTVCustomCreateNodeEvent;
|
||||||
@ -178,19 +169,13 @@ begin
|
|||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TIndexFiller.Create(AListView: TListView; AStream: TStream; AChm: TObject);
|
constructor TIndexFiller.Create(AListView: TListView; ASiteMap: TChmSiteMap; AChm: TObject);
|
||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
fListView := AListView;
|
fListView := AListView;
|
||||||
fSitemap := TChmSiteMap.Create(stIndex);
|
fSitemap := ASiteMap;
|
||||||
fSitemap.LoadFromStream(AStream);
|
|
||||||
fChm := AChm;
|
fChm := AChm;
|
||||||
end;
|
|
||||||
|
|
||||||
destructor TIndexFiller.Destroy;
|
|
||||||
begin
|
|
||||||
fSitemap.Free;
|
|
||||||
inherited Destroy;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TIndexFiller.DoFill;
|
procedure TIndexFiller.DoFill;
|
||||||
|
@ -254,7 +254,8 @@ begin
|
|||||||
//WriteLn('LeftLoop');
|
//WriteLn('LeftLoop');
|
||||||
|
|
||||||
Result:= fHttpClient.Stream;
|
Result:= fHttpClient.Stream;
|
||||||
Result.Position := 0;
|
if Result <> nil then
|
||||||
|
Result.Position := 0;
|
||||||
//fDataStream.SaveToFile('temp.txt');
|
//fDataStream.SaveToFile('temp.txt');
|
||||||
//Application.Terminate;
|
//Application.Terminate;
|
||||||
fHttpClient.Free;
|
fHttpClient.Free;
|
||||||
|
Loading…
Reference in New Issue
Block a user