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;
while p^=',' do inc(p);
end;
Result:=false;
end;
function ComparePagesWithFilenames(Page1, Page2: Pointer): integer;

View File

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

View File

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

View File

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

View File

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

View File

@ -25,9 +25,9 @@ unit WikiSearchOptions;
interface
uses
Classes, SysUtils, FileUtil, AvgLvlTree, LazLogger, WikiHelpManager,
WikiFormat, WikiStrConsts, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, ComCtrls;
Classes, SysUtils, FileUtil, LazLogger, BasicCodeTools,
CodeToolsStructs, WikiHelpManager, WikiFormat, WikiStrConsts, Forms, Controls,
Graphics, Dialogs, ExtCtrls, StdCtrls, ComCtrls;
type
@ -38,17 +38,26 @@ type
LanguagesGroupBox: TGroupBox;
LanguagesSplitter: TSplitter;
LanguagesTreeView: TTreeView;
procedure FormClose(Sender: TObject; var {%H-}CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure LanguagesTreeViewMouseDown(Sender: TObject; {%H-}Button: TMouseButton;
{%H-}Shift: TShiftState; X, Y: Integer);
private
FLanguages: string;
procedure SetLanguages(AValue: string);
FLanguages: TStringToStringTree;
FOnOptionsChanged: TNotifyEvent;
function GetLangCodeEnabled(const ID: string): boolean;
function GetLanguages: string;
function LangNodeTextToCode(NodeText: string): string;
function LangToNodeText(LangID: string; Count: integer = -1): string;
procedure SetLangCodeEnabled(const ID: string; AValue: boolean);
procedure SetLanguages(AValue: string);
public
property Languages: string read FLanguages write SetLanguages;
property Languages: string read GetLanguages write SetLanguages;
procedure UpdateAvailableLanguages;
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;
var
@ -64,12 +73,78 @@ procedure TWikiSearchOptsWnd.FormCreate(Sender: TObject);
begin
Caption:=wrsWikiSearchOptions;
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;
procedure TWikiSearchOptsWnd.SetLanguages(AValue: string);
var
p: PChar;
StartPos: PChar;
i: Integer;
Lang: String;
begin
if FLanguages=AValue then Exit;
FLanguages:=AValue;
if AValue=GetLanguages then Exit;
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;
function TWikiSearchOptsWnd.LangNodeTextToCode(NodeText: string): string;
@ -78,7 +153,7 @@ var
begin
p:=Pos(' (',NodeText);
if p>0 then Delete(NodeText,p,length(NodeText));
Result:=WikiHelp.LangCaptionToCode(NodeText)
Result:=WikiHelp.LangCaptionToCode(NodeText);
end;
function TWikiSearchOptsWnd.LangToNodeText(LangID: string; Count: integer
@ -98,7 +173,7 @@ var
TVNode: TTreeNode;
LangToCount: TStringToPointerTree;
Lang: String;
S2PItem: PStringToPointerItem;
S2PItem: PStringToPointerTreeItem;
begin
// collect all languages and count them
Langs:=TStringList.Create;
@ -148,7 +223,7 @@ var
begin
for i:=0 to LanguagesTreeView.Items.TopLvlCount-1 do begin
TVNode:=LanguagesTreeView.Items.TopLvlItems[i];
LangEnabled:=LangCodeEnabled(LangNodeTextToCode(TVNode.Text));
LangEnabled:=LangCodeEnabled[LangNodeTextToCode(TVNode.Text)];
if LangEnabled then
TVNode.StateIndex:=1
else
@ -156,9 +231,23 @@ begin
end;
end;
function TWikiSearchOptsWnd.LangCodeEnabled(const ID: string): boolean;
function TWikiSearchOptsWnd.GetLangCodeEnabled(const ID: string): boolean;
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.