wiki test: languages

git-svn-id: trunk@35833 -
This commit is contained in:
mattias 2012-03-08 21:26:22 +00:00
parent 0987ec4d3e
commit 44dd07bcd7
6 changed files with 118 additions and 17 deletions

View File

@ -511,6 +511,7 @@ begin
end; end;
while p^=',' do inc(p); while p^=',' do inc(p);
end; end;
Result:=false;
end; end;
function ComparePagesWithFilenames(Page1, Page2: Pointer): integer; function ComparePagesWithFilenames(Page1, Page2: Pointer): integer;

View File

@ -1348,7 +1348,7 @@ begin
end; end;
end else begin end else begin
StartTime:=Now; StartTime:=Now;
//debugln(['TWikiHelp.DoSearch START Search=',Trim(Query.Phrases.Text)]); //debugln(['TWikiHelp.DoSearch START Search=',Trim(Query.Phrases.Text),' Lang="',Query.Languages,'"']);
FoundPages:=nil; FoundPages:=nil;
Converter.Search(Query,Scoring,FoundPages); Converter.Search(Query,Scoring,FoundPages);
HTML:='<html>'+LineEnding HTML:='<html>'+LineEnding
@ -1360,6 +1360,7 @@ begin
+'<body>'+LineEnding; +'<body>'+LineEnding;
for i:=0 to Min(FoundPages.Count-1,MaxResults) do begin for i:=0 to Min(FoundPages.Count-1,MaxResults) do begin
Page:=TW2HelpPage(FoundPages[i]); Page:=TW2HelpPage(FoundPages[i]);
//debugln(['TWikiHelp.DoSearch ',Page.WikiDocumentName,' ',GetWikiPageLanguage(Page.WikiDocumentName),' ',WikiPageHasLanguage(Page.WikiDocumentName,Query.Languages)]);
Node:=Page.GetNodeHighestScore(Query,Scoring); Node:=Page.GetNodeHighestScore(Query,Scoring);
s:='<div class="wikiSearchResultItem">'+FoundNodeToHTMLSnippet(Page,Node,Query)+'</div>'+LineEnding; s:='<div class="wikiSearchResultItem">'+FoundNodeToHTMLSnippet(Page,Node,Query)+'</div>'+LineEnding;
//debugln(['TWikiHelp.TestSearch Score=',Page.Score,' HTML="',s,'"']); //debugln(['TWikiHelp.TestSearch Score=',Page.Score,' HTML="',s,'"']);

View File

@ -17,7 +17,6 @@ begin
RequireDerivedFormResource := True; RequireDerivedFormResource := True;
Application.Initialize; Application.Initialize;
Application.CreateForm(TWikiSearchDemoForm, WikiSearchDemoForm); Application.CreateForm(TWikiSearchDemoForm, WikiSearchDemoForm);
Application.CreateForm(TWikiSearchOptsWnd, WikiSearchOptsWnd);
Application.Run; Application.Run;
end. end.

View File

@ -70,6 +70,7 @@ type
procedure SearchEditChange(Sender: TObject); procedure SearchEditChange(Sender: TObject);
procedure ShowSearchToolButtonClick(Sender: TObject); procedure ShowSearchToolButtonClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject); procedure Timer1Timer(Sender: TObject);
procedure WikiSearchOptsWndOptionsChanged(Sender: TObject);
private private
fLastSearchText: string; fLastSearchText: string;
fLastLanguages: string; fLastLanguages: string;
@ -228,6 +229,7 @@ begin
Result:=WikiSearchOptsWnd.Languages Result:=WikiSearchOptsWnd.Languages
else else
Result:=''; Result:='';
//debugln(['TWikiSearchDemoForm.GetLanguages "',Result,'"']);
end; end;
procedure TWikiSearchDemoForm.IpHtmlPanelHotClick(Sender: TObject); procedure TWikiSearchDemoForm.IpHtmlPanelHotClick(Sender: TObject);
@ -305,6 +307,11 @@ begin
Timer1.Enabled:=WikiHelp.Busy; Timer1.Enabled:=WikiHelp.Busy;
end; end;
procedure TWikiSearchDemoForm.WikiSearchOptsWndOptionsChanged(Sender: TObject);
begin
SearchParamsChanged;
end;
procedure TWikiSearchDemoForm.WikiHelpScanned(Sender: TObject); procedure TWikiSearchDemoForm.WikiHelpScanned(Sender: TObject);
begin begin
UpdateProgress; UpdateProgress;
@ -393,8 +400,10 @@ end;
procedure TWikiSearchDemoForm.ShowOptions; procedure TWikiSearchDemoForm.ShowOptions;
begin begin
if WikiSearchOptsWnd=nil then if WikiSearchOptsWnd=nil then begin
WikiSearchOptsWnd:=TWikiSearchOptsWnd.Create(Self); WikiSearchOptsWnd:=TWikiSearchOptsWnd.Create(Self);
WikiSearchOptsWnd.OnOptionsChanged:=@WikiSearchOptsWndOptionsChanged;
end;
WikiSearchOptsWnd.UpdateAvailableLanguages; WikiSearchOptsWnd.UpdateAvailableLanguages;
WikiSearchOptsWnd.ShowOnTop; WikiSearchOptsWnd.ShowOnTop;
end; end;

View File

@ -6,6 +6,7 @@ object WikiSearchOptsWnd: TWikiSearchOptsWnd
Caption = 'WikiSearchOptsWnd' Caption = 'WikiSearchOptsWnd'
ClientHeight = 308 ClientHeight = 308
ClientWidth = 364 ClientWidth = 364
OnClose = FormClose
OnCreate = FormCreate OnCreate = FormCreate
Position = poScreenCenter Position = poScreenCenter
LCLVersion = '0.9.31' LCLVersion = '0.9.31'
@ -31,6 +32,7 @@ object WikiSearchOptsWnd: TWikiSearchOptsWnd
ShowRoot = False ShowRoot = False
StateImages = ImageList1 StateImages = ImageList1
TabOrder = 0 TabOrder = 0
OnMouseDown = LanguagesTreeViewMouseDown
Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoToolTips, tvoThemedDraw] Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoToolTips, tvoThemedDraw]
end end
end end

View File

@ -25,9 +25,9 @@ unit WikiSearchOptions;
interface interface
uses uses
Classes, SysUtils, FileUtil, AvgLvlTree, LazLogger, WikiHelpManager, Classes, SysUtils, FileUtil, LazLogger, BasicCodeTools,
WikiFormat, WikiStrConsts, Forms, Controls, Graphics, Dialogs, ExtCtrls, CodeToolsStructs, WikiHelpManager, WikiFormat, WikiStrConsts, Forms, Controls,
StdCtrls, ComCtrls; Graphics, Dialogs, ExtCtrls, StdCtrls, ComCtrls;
type type
@ -38,17 +38,26 @@ type
LanguagesGroupBox: TGroupBox; LanguagesGroupBox: TGroupBox;
LanguagesSplitter: TSplitter; LanguagesSplitter: TSplitter;
LanguagesTreeView: TTreeView; LanguagesTreeView: TTreeView;
procedure FormClose(Sender: TObject; var {%H-}CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure LanguagesTreeViewMouseDown(Sender: TObject; {%H-}Button: TMouseButton;
{%H-}Shift: TShiftState; X, Y: Integer);
private private
FLanguages: string; FLanguages: TStringToStringTree;
procedure SetLanguages(AValue: string); FOnOptionsChanged: TNotifyEvent;
function GetLangCodeEnabled(const ID: string): boolean;
function GetLanguages: string;
function LangNodeTextToCode(NodeText: string): string; function LangNodeTextToCode(NodeText: string): string;
function LangToNodeText(LangID: string; Count: integer = -1): string; function LangToNodeText(LangID: string; Count: integer = -1): string;
procedure SetLangCodeEnabled(const ID: string; AValue: boolean);
procedure SetLanguages(AValue: string);
public public
property Languages: string read FLanguages write SetLanguages; property Languages: string read GetLanguages write SetLanguages;
procedure UpdateAvailableLanguages; procedure UpdateAvailableLanguages;
procedure UpdateEnabledLanguages; procedure UpdateEnabledLanguages;
function LangCodeEnabled(const ID: string): boolean; property LangCodeEnabled[const ID: string]: boolean read GetLangCodeEnabled
write SetLangCodeEnabled;
property OnOptionsChanged: TNotifyEvent read FOnOptionsChanged write FOnOptionsChanged;
end; end;
var var
@ -64,12 +73,78 @@ procedure TWikiSearchOptsWnd.FormCreate(Sender: TObject);
begin begin
Caption:=wrsWikiSearchOptions; Caption:=wrsWikiSearchOptions;
LanguagesGroupBox.Caption:=wrsLanguages; LanguagesGroupBox.Caption:=wrsLanguages;
FLanguages:=TStringToStringTree.Create(false);
FLanguages['']:='1';
end;
procedure TWikiSearchOptsWnd.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
FreeAndNil(FLanguages);
end;
procedure TWikiSearchOptsWnd.LanguagesTreeViewMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
TVNode: TTreeNode;
LangID: String;
begin
TVNode:=LanguagesTreeView.GetNodeAt(X,Y);
if TVNode=nil then exit;
if x>=TVNode.DisplayStateIconLeft then begin
LangID:=LangNodeTextToCode(TVNode.Text);
LangCodeEnabled[LangID]:=not LangCodeEnabled[LangID];
end;
end; end;
procedure TWikiSearchOptsWnd.SetLanguages(AValue: string); procedure TWikiSearchOptsWnd.SetLanguages(AValue: string);
var
p: PChar;
StartPos: PChar;
i: Integer;
Lang: String;
begin begin
if FLanguages=AValue then Exit; if AValue=GetLanguages then Exit;
FLanguages:=AValue; FLanguages.Clear;
if AValue='' then begin
// empty = only english,original
FLanguages['']:='1';
end else begin
p:=PChar(AValue);
while p^<>#0 do begin
StartPos:=p;
while not (p^ in [#0,',']) do inc(p);
if p>StartPos then begin
if StartPos^='-' then begin
// not original language
end else if StartPos^='*' then begin
// fit any
for i:=0 to LanguagesTreeView.Items.TopLvlCount-1 do
FLanguages[LangNodeTextToCode(LanguagesTreeView.Items.TopLvlItems[i].Text)]:='1';
end else begin
// a specific language
Lang:=SubString(StartPos,p-StartPos);
if WikiHelp.LangCodeToCaption(Lang)<>Lang then
FLanguages[Lang]:='1';
end;
end;
while p^=',' do inc(p);
end;
end;
UpdateEnabledLanguages;
end;
procedure TWikiSearchOptsWnd.SetLangCodeEnabled(const ID: string;
AValue: boolean);
begin
if AValue=GetLangCodeEnabled(ID) then exit;
if AValue then
FLanguages[ID]:='1'
else
FLanguages.Remove(ID);
UpdateEnabledLanguages;
if Assigned(OnOptionsChanged) then
OnOptionsChanged(Self);
end; end;
function TWikiSearchOptsWnd.LangNodeTextToCode(NodeText: string): string; function TWikiSearchOptsWnd.LangNodeTextToCode(NodeText: string): string;
@ -78,7 +153,7 @@ var
begin begin
p:=Pos(' (',NodeText); p:=Pos(' (',NodeText);
if p>0 then Delete(NodeText,p,length(NodeText)); if p>0 then Delete(NodeText,p,length(NodeText));
Result:=WikiHelp.LangCaptionToCode(NodeText) Result:=WikiHelp.LangCaptionToCode(NodeText);
end; end;
function TWikiSearchOptsWnd.LangToNodeText(LangID: string; Count: integer function TWikiSearchOptsWnd.LangToNodeText(LangID: string; Count: integer
@ -98,7 +173,7 @@ var
TVNode: TTreeNode; TVNode: TTreeNode;
LangToCount: TStringToPointerTree; LangToCount: TStringToPointerTree;
Lang: String; Lang: String;
S2PItem: PStringToPointerItem; S2PItem: PStringToPointerTreeItem;
begin begin
// collect all languages and count them // collect all languages and count them
Langs:=TStringList.Create; Langs:=TStringList.Create;
@ -148,7 +223,7 @@ var
begin begin
for i:=0 to LanguagesTreeView.Items.TopLvlCount-1 do begin for i:=0 to LanguagesTreeView.Items.TopLvlCount-1 do begin
TVNode:=LanguagesTreeView.Items.TopLvlItems[i]; TVNode:=LanguagesTreeView.Items.TopLvlItems[i];
LangEnabled:=LangCodeEnabled(LangNodeTextToCode(TVNode.Text)); LangEnabled:=LangCodeEnabled[LangNodeTextToCode(TVNode.Text)];
if LangEnabled then if LangEnabled then
TVNode.StateIndex:=1 TVNode.StateIndex:=1
else else
@ -156,9 +231,23 @@ begin
end; end;
end; end;
function TWikiSearchOptsWnd.LangCodeEnabled(const ID: string): boolean; function TWikiSearchOptsWnd.GetLangCodeEnabled(const ID: string): boolean;
begin begin
Result:=WikiLangInLanguageFilter(ID,Languages); Result:=FLanguages.Contains(ID);
end;
function TWikiSearchOptsWnd.GetLanguages: string;
var
S2SItem: PStringToStringTreeItem;
begin
Result:='';
if not FLanguages.Contains('') then
Result:='-';
for S2SItem in FLanguages do begin
if S2SItem^.Name='' then continue;
if Result<>'' then Result+=',';
Result+=S2SItem^.Name;
end;
end; end;
end. end.