mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-14 18:52:51 +02:00
wiki: added translation links
git-svn-id: trunk@35889 -
This commit is contained in:
parent
3fff6d9bba
commit
49ec170b4e
@ -59,10 +59,13 @@ type
|
||||
|
||||
TWiki2XHTMLConverter = class(TWiki2FormatConverter)
|
||||
private
|
||||
FAddLinksToTranslations: boolean;
|
||||
FCSSFilename: string;
|
||||
FLinkToBaseDocument: string;
|
||||
FMaxH: integer;
|
||||
FPageFileExt: string;
|
||||
procedure DoAddLinksToTranslations(var doc: TXMLDocument;
|
||||
var Page: TW2XHTMLPage);
|
||||
procedure SetCSSFilename(AValue: string);
|
||||
procedure SetMaxH(AValue: integer);
|
||||
procedure SetPageFileExt(AValue: string);
|
||||
@ -94,6 +97,7 @@ type
|
||||
function PageToFilename(Page: TW2XHTMLPage; Full: boolean): string; virtual;
|
||||
property PageFileExt: string read FPageFileExt write SetPageFileExt;
|
||||
property LinkToBaseDocument: string read FLinkToBaseDocument write FLinkToBaseDocument;
|
||||
property AddLinksToTranslations: boolean read FAddLinksToTranslations write FAddLinksToTranslations;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -106,6 +110,62 @@ begin
|
||||
FCSSFilename:=AValue;
|
||||
end;
|
||||
|
||||
procedure TWiki2XHTMLConverter.DoAddLinksToTranslations(var doc: TXMLDocument;
|
||||
var Page: TW2XHTMLPage);
|
||||
var
|
||||
TranslationPage: TW2XHTMLPage;
|
||||
Lang: String;
|
||||
S2PItem: PStringToPointerTreeItem;
|
||||
LangToPage: TStringToPointerTree;
|
||||
TranslationsNode: TDOMElement;
|
||||
LinkCaption: String;
|
||||
LinkNode: TDOMElement;
|
||||
Captions: TStringList;
|
||||
i: Integer;
|
||||
begin
|
||||
GetPageTranslations(Page.WikiDocumentName, LangToPage);
|
||||
debugln(['TWiki2XHTMLConverter.DoAddLinksToTranslations ',Page.WikiDocumentName,' ',LangToPage.Count]);
|
||||
Captions:=TStringList.Create;
|
||||
try
|
||||
if (LangToPage=nil) or (LangToPage.Count<2) then exit;
|
||||
// add translations
|
||||
TranslationsNode:=doc.CreateElement('p');
|
||||
TranslationsNode.SetAttribute('class','translationLinks');
|
||||
Page.BodyDOMNode.AppendChild(TranslationsNode);
|
||||
// get all translations
|
||||
for S2PItem in LangToPage do begin
|
||||
Lang:=S2PItem^.Name;
|
||||
TranslationPage:=TW2XHTMLPage(S2PItem^.Value);
|
||||
LinkCaption:=WikiLangCodeToCaption(Lang);
|
||||
if Lang<>'' then LinkCaption+=' ('+Lang+')';
|
||||
Captions.AddObject(LinkCaption,TranslationPage);
|
||||
end;
|
||||
// sort them alphabetically
|
||||
Captions.CustomSort(@CompareStrListUTF8LowerCase);
|
||||
// add links
|
||||
for i:=0 to Captions.Count-1 do begin
|
||||
LinkCaption:=Captions[i];
|
||||
TranslationPage:=TW2XHTMLPage(Captions.Objects[i]);
|
||||
// add separator |
|
||||
if TranslationsNode.FirstChild<>nil then
|
||||
TranslationsNode.AppendChild(doc.CreateTextNode(' | '));
|
||||
if TranslationPage=Page then
|
||||
// add current page as normal text
|
||||
TranslationsNode.AppendChild(doc.CreateTextNode(LinkCaption))
|
||||
else begin
|
||||
// add link to other translations
|
||||
LinkNode:=doc.CreateElement('a');
|
||||
LinkNode.SetAttribute('href',TranslationPage.WikiDocumentName);
|
||||
TranslationsNode.AppendChild(LinkNode);
|
||||
LinkNode.AppendChild(doc.CreateTextNode(LinkCaption));
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
LangToPage.Free;
|
||||
Captions.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWiki2XHTMLConverter.SetMaxH(AValue: integer);
|
||||
begin
|
||||
if AValue<1 then AValue:=1;
|
||||
@ -306,6 +366,10 @@ begin
|
||||
Node.SetAttribute('class','firstHeading');
|
||||
Node.AppendChild(doc.CreateTextNode(Page.WikiPage.Title));
|
||||
|
||||
// links to translations
|
||||
if AddLinksToTranslations then
|
||||
DoAddLinksToTranslations(doc,Page);
|
||||
|
||||
try
|
||||
Page.SectionLevel:=0;
|
||||
Page.CurDOMNode:=Page.BodyDOMNode;
|
||||
@ -770,7 +834,8 @@ begin
|
||||
FPageFileExt:='.xhtml';
|
||||
ShortFilenameToPage:=TFilenameToPointerTree.Create(false);
|
||||
UsedImages:=TFilenameToPointerTree.Create(false);
|
||||
LinkToBaseDocument:='Online version';
|
||||
fLinkToBaseDocument:='Online version';
|
||||
FAddLinksToTranslations:=true;
|
||||
end;
|
||||
|
||||
destructor TWiki2XHTMLConverter.Destroy;
|
||||
|
@ -25,8 +25,9 @@ unit WikiFormat;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, WikiParser, laz2_XMLRead, LazFileUtils, laz2_DOM,
|
||||
LazLogger, LazUTF8, AvgLvlTree, KeywordFuncLists, CodeToolsStructs;
|
||||
Classes, SysUtils, WikiParser, WikiStrConsts, laz2_XMLRead, LazFileUtils,
|
||||
laz2_DOM, LazLogger, LazUTF8, AvgLvlTree, KeywordFuncLists, CodeToolsStructs,
|
||||
BasicCodeTools;
|
||||
|
||||
type
|
||||
TWiki2FormatConverter = class;
|
||||
@ -41,10 +42,12 @@ type
|
||||
WikiDoc: TXMLDocument;
|
||||
WikiPage: TWikiPage;
|
||||
WikiDocumentName: string; // the path in the Wiki
|
||||
WikiLanguage: string;
|
||||
constructor Create(TheConverter: TWiki2FormatConverter); virtual;
|
||||
destructor Destroy; override;
|
||||
procedure ParseWikiDoc(KeepWikiDoc: boolean);
|
||||
procedure ClearConversion; virtual;
|
||||
procedure ClearPageConnections; virtual;
|
||||
end;
|
||||
TW2FormatPageClass = class of TW2FormatPage;
|
||||
|
||||
@ -88,22 +91,30 @@ type
|
||||
property NoWarnBaseURLs: TStringToStringTree read FNoWarnBaseURLs;
|
||||
property CodeTags: TKeyWordFunctionList read FCodeTags write FCodeTags;
|
||||
function CollectAllLangCodes(Delimiter: char = ','): string;
|
||||
procedure GetPageTranslations(DocumentName: string; out LangToPage: TStringToPointerTree);
|
||||
end;
|
||||
|
||||
function WikiPageToFilename(Page: string; IsInternalLink, AppendCaseID: boolean): string;
|
||||
function WikiPageToFilename(DocumentName: string; IsInternalLink, AppendCaseID: boolean): string;
|
||||
function WikiFilenameToPage(Filename: string): string;
|
||||
function WikiImageToFilename(Image: string; IsInternalLink, InsertCaseID: boolean;
|
||||
KeepScheme: boolean = false): string;
|
||||
function WikiHeaderToLink(Header: string): string;
|
||||
function WikiCreateCommonCodeTagList(AddLazWikiLangs: boolean): TKeyWordFunctionList;
|
||||
function GetWikiPageLanguage(const Page: string): string;
|
||||
function WikiPageHasLanguage(const Page, Languages: string): boolean;
|
||||
|
||||
// language
|
||||
function GetWikiPageLanguage(const DocumentName: string): string;
|
||||
function GetWikiPageLanguageDelimiterPos(const DocumentName: string): integer;
|
||||
function ChompWikiPageLanguage(const DocumentName: string): string;
|
||||
function WikiPageHasLanguage(const DocumentName, Languages: string): boolean;
|
||||
function WikiLangInLanguageFilter(const Lang, Languages: string): boolean;
|
||||
function WikiLangCodeToCaption(ID: string): string;
|
||||
function WikiLangCaptionToCode(Caption: string): string;
|
||||
|
||||
function ComparePagesWithFilenames(Page1, Page2: Pointer): integer;
|
||||
function CompareFilenameWithPage(Filename, Page: Pointer): integer;
|
||||
function ComparePagesWithDocumentNames(Page1, Page2: Pointer): integer;
|
||||
function CompareDocumentNameWithPage(DocumentName, Page: Pointer): integer;
|
||||
function CompareDocumentNameWithPageIgnoreLang(DocumentName, Page: Pointer): integer;
|
||||
|
||||
implementation
|
||||
|
||||
@ -205,6 +216,7 @@ begin
|
||||
Result:=PageClass.Create(Self);
|
||||
Result.WikiFilename:=Filename;
|
||||
Result.WikiDocumentName:=WikiFilenameToPage(Filename);
|
||||
Result.WikiLanguage:=GetWikiPageLanguage(Result.WikiDocumentName);
|
||||
fPages.Add(Result);
|
||||
fPagesSortFilename.Add(Result);
|
||||
fPagesSortDocumentName.Add(Result);
|
||||
@ -254,7 +266,7 @@ begin
|
||||
try
|
||||
for i:=0 to Count-1 do begin
|
||||
Page:=Pages[i];
|
||||
Lang:=GetWikiPageLanguage(Page.WikiDocumentName);
|
||||
Lang:=Page.WikiLanguage;
|
||||
if Lang='' then continue;
|
||||
if Langs.Contains(Lang) then continue;
|
||||
Langs[Lang]:='1';
|
||||
@ -265,6 +277,23 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWiki2FormatConverter.GetPageTranslations(DocumentName: string; out
|
||||
LangToPage: TStringToPointerTree);
|
||||
var
|
||||
AVLNode: TAvgLvlTreeNode;
|
||||
Page: TW2FormatPage;
|
||||
begin
|
||||
LangToPage:=TStringToPointerTree.Create(false);
|
||||
DocumentName:=ChompWikiPageLanguage(DocumentName);
|
||||
AVLNode:=fPagesSortDocumentName.FindLeftMostKey(Pointer(DocumentName),@CompareDocumentNameWithPageIgnoreLang);
|
||||
while (AVLNode<>nil)
|
||||
and (CompareDocumentNameWithPageIgnoreLang(Pointer(DocumentName),AVLNode.Data)=0) do begin
|
||||
Page:=TW2FormatPage(AVLNode.Data);
|
||||
LangToPage[GetWikiPageLanguage(Page.WikiDocumentName)]:=Page;
|
||||
AVLNode:=fPagesSortDocumentName.FindSuccessor(AVLNode);
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TW2FormatPage }
|
||||
|
||||
constructor TW2FormatPage.Create(TheConverter: TWiki2FormatConverter);
|
||||
@ -274,6 +303,7 @@ end;
|
||||
|
||||
destructor TW2FormatPage.Destroy;
|
||||
begin
|
||||
ClearPageConnections;
|
||||
ClearConversion;
|
||||
FreeAndNil(WikiDoc);
|
||||
FreeAndNil(WikiPage);
|
||||
@ -317,12 +347,16 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
function WikiPageToFilename(Page: string; IsInternalLink, AppendCaseID: boolean): string;
|
||||
procedure TW2FormatPage.ClearPageConnections;
|
||||
begin
|
||||
end;
|
||||
|
||||
function WikiPageToFilename(DocumentName: string; IsInternalLink, AppendCaseID: boolean): string;
|
||||
var
|
||||
i: Integer;
|
||||
s: string;
|
||||
begin
|
||||
Result:=Page;
|
||||
Result:=DocumentName;
|
||||
if IsInternalLink then
|
||||
Result:=WikiInternalLinkToPage(Result);
|
||||
i:=1;
|
||||
@ -450,36 +484,58 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function GetWikiPageLanguage(const Page: string): string;
|
||||
function GetWikiPageLanguage(const DocumentName: string): string;
|
||||
var
|
||||
p: Integer;
|
||||
begin
|
||||
p:=GetWikiPageLanguageDelimiterPos(DocumentName);
|
||||
if p>0 then
|
||||
Result:=copy(DocumentName,p+1,length(DocumentName))
|
||||
else
|
||||
Result:='';
|
||||
end;
|
||||
|
||||
function GetWikiPageLanguageDelimiterPos(const DocumentName: string): integer;
|
||||
var
|
||||
l: Integer;
|
||||
p: PChar;
|
||||
begin
|
||||
Result:='';
|
||||
l:=length(Page);
|
||||
Result:=0;
|
||||
l:=length(DocumentName);
|
||||
if l=0 then exit;
|
||||
if (l>3) then begin
|
||||
p:=PChar(Page)+l-3;
|
||||
p:=PChar(DocumentName)+l-3;
|
||||
if (p^='/')
|
||||
and (p[1] in ['a'..'z']) and (p[2] in ['a'..'z']) then
|
||||
// short form: /de
|
||||
exit(RightStr(Page,2));
|
||||
exit(l-2);
|
||||
end;
|
||||
if (l>6) then begin
|
||||
p:=PChar(Page)+l-6;
|
||||
p:=PChar(DocumentName)+l-6;
|
||||
if (p^='/')
|
||||
and (p[1] in ['a'..'z']) and (p[2] in ['a'..'z'])
|
||||
and (p[3]='_')
|
||||
and (p[4] in ['A'..'Z']) and (p[5] in ['A'..'Z'])
|
||||
then
|
||||
// long form: /zh_TW
|
||||
exit(RightStr(Page,5));
|
||||
exit(l-5);
|
||||
end;
|
||||
end;
|
||||
|
||||
function WikiPageHasLanguage(const Page, Languages: string): boolean;
|
||||
function ChompWikiPageLanguage(const DocumentName: string): string;
|
||||
var
|
||||
p: Integer;
|
||||
begin
|
||||
Result:=WikiLangInLanguageFilter(GetWikiPageLanguage(Page),Languages);
|
||||
p:=GetWikiPageLanguageDelimiterPos(DocumentName);
|
||||
if p>0 then
|
||||
Result:=LeftStr(DocumentName,p-1)
|
||||
else
|
||||
Result:=DocumentName;
|
||||
end;
|
||||
|
||||
function WikiPageHasLanguage(const DocumentName, Languages: string): boolean;
|
||||
begin
|
||||
Result:=WikiLangInLanguageFilter(GetWikiPageLanguage(DocumentName),Languages);
|
||||
end;
|
||||
|
||||
function WikiLangInLanguageFilter(const Lang, Languages: string): boolean;
|
||||
@ -514,6 +570,80 @@ begin
|
||||
Result:=false;
|
||||
end;
|
||||
|
||||
function WikiLangCodeToCaption(ID: string): string;
|
||||
begin
|
||||
if ID='' then Result:=wrsLanguageEnglishOriginal
|
||||
else if ID='*' then Result:=wrsAll
|
||||
else if CompareText(ID,'af')=0 then Result:=wrsLanguageAfrikaans
|
||||
else if CompareText(ID,'ar')=0 then Result:=wrsLanguageArabic
|
||||
else if CompareText(ID,'ca')=0 then Result:=wrsLanguageCatalan
|
||||
else if CompareText(ID,'cs')=0 then Result:=wrsLanguageCzech
|
||||
else if CompareText(ID,'de')=0 then Result:=wrsLanguageGerman
|
||||
else if CompareText(ID,'en')=0 then Result:=wrsLanguageEnglish
|
||||
else if CompareText(ID,'es')=0 then Result:=wrsLanguageSpanish
|
||||
else if CompareText(ID,'fa')=0 then Result:=wrsLanguagePersian
|
||||
else if CompareText(ID,'fi')=0 then Result:=wrsLanguageFinnish
|
||||
else if CompareText(ID,'fr')=0 then Result:=wrsLanguageFrench
|
||||
else if CompareText(ID,'he')=0 then Result:=wrsLanguageHebrew
|
||||
else if CompareText(ID,'hu')=0 then Result:=wrsLanguageHungarian
|
||||
else if CompareText(ID,'id')=0 then Result:=wrsLanguageIndonesian
|
||||
else if CompareText(ID,'it')=0 then Result:=wrsLanguageItalian
|
||||
else if CompareText(ID,'ja')=0 then Result:=wrsLanguageJapanese
|
||||
else if CompareText(ID,'ko')=0 then Result:=wrsLanguageKorean
|
||||
else if CompareText(ID,'lt')=0 then Result:=wrsLanguageLithuanian
|
||||
else if CompareText(ID,'mk')=0 then Result:=wrsLanguageMacedonien
|
||||
else if CompareText(ID,'nl')=0 then Result:=wrsLanguageDutch
|
||||
else if CompareText(ID,'pl')=0 then Result:=wrsLanguagePolish
|
||||
else if CompareText(ID,'pt')=0 then Result:=wrsLanguagePortuguese
|
||||
else if CompareText(ID,'pt_BR')=0 then Result:=wrsLanguagePortugueseBr
|
||||
else if CompareText(ID,'ro')=0 then Result:=wrsLanguageRomanian
|
||||
else if CompareText(ID,'ru')=0 then Result:=wrsLanguageRussian
|
||||
else if CompareText(ID,'sk')=0 then Result:=wrsLanguageSlovak
|
||||
else if CompareText(ID,'sq')=0 then Result:=wrsLanguageAlbania
|
||||
else if CompareText(ID,'tr')=0 then Result:=wrsLanguageTurkish
|
||||
else if CompareText(ID,'uk')=0 then Result:=wrsLanguageUkrainian
|
||||
else if CompareText(ID,'zh_CN')=0 then Result:=wrsLanguageChinese
|
||||
else if CompareText(ID,'zh_TW')=0 then Result:=wrsLanguageChineseTaiwan
|
||||
else Result:=ID;
|
||||
end;
|
||||
|
||||
function WikiLangCaptionToCode(Caption: string): string;
|
||||
begin
|
||||
if Caption=wrsLanguageEnglishOriginal then Result:=''
|
||||
else if Caption=wrsAll then Result:='*'
|
||||
else if Caption=wrsLanguageAfrikaans then Result:='af'
|
||||
else if Caption=wrsLanguageAlbania then Result:='sq'
|
||||
else if Caption=wrsLanguageArabic then Result:='ar'
|
||||
else if Caption=wrsLanguageCatalan then Result:='ca'
|
||||
else if Caption=wrsLanguageChinese then Result:='zh_CN'
|
||||
else if Caption=wrsLanguageChineseTaiwan then Result:='zh_TW'
|
||||
else if Caption=wrsLanguageCzech then Result:='cs'
|
||||
else if Caption=wrsLanguageDutch then Result:='nl'
|
||||
else if Caption=wrsLanguageEnglish then Result:='en'
|
||||
else if Caption=wrsLanguageFinnish then Result:='fi'
|
||||
else if Caption=wrsLanguageFrench then Result:='fr'
|
||||
else if Caption=wrsLanguageGerman then Result:='de'
|
||||
else if Caption=wrsLanguageHebrew then Result:='he'
|
||||
else if Caption=wrsLanguageHungarian then Result:='hu'
|
||||
else if Caption=wrsLanguageIndonesian then Result:='id'
|
||||
else if Caption=wrsLanguageItalian then Result:='it'
|
||||
else if Caption=wrsLanguageJapanese then Result:='ja'
|
||||
else if Caption=wrsLanguageKorean then Result:='ko'
|
||||
else if Caption=wrsLanguageLithuanian then Result:='lt'
|
||||
else if Caption=wrsLanguageMacedonien then Result:='mk'
|
||||
else if Caption=wrsLanguagePersian then Result:='fa'
|
||||
else if Caption=wrsLanguagePolish then Result:='pl'
|
||||
else if Caption=wrsLanguagePortuguese then Result:='pt'
|
||||
else if Caption=wrsLanguagePortugueseBr then Result:='pt_BR'
|
||||
else if Caption=wrsLanguageRomanian then Result:='ro'
|
||||
else if Caption=wrsLanguageRussian then Result:='ru'
|
||||
else if Caption=wrsLanguageSlovak then Result:='sk'
|
||||
else if Caption=wrsLanguageSpanish then Result:='es'
|
||||
else if Caption=wrsLanguageTurkish then Result:='tk'
|
||||
else if Caption=wrsLanguageUkrainian then Result:='uk'
|
||||
else Result:=Caption;
|
||||
end;
|
||||
|
||||
function ComparePagesWithFilenames(Page1, Page2: Pointer): integer;
|
||||
var
|
||||
p1: TW2FormatPage absolute Page1;
|
||||
@ -534,14 +664,31 @@ var
|
||||
p1: TW2FormatPage absolute Page1;
|
||||
p2: TW2FormatPage absolute Page2;
|
||||
begin
|
||||
Result:=CompareStr(p1.WikiDocumentName,p2.WikiDocumentName);
|
||||
Result:=BasicCodeTools.CompareText(p1.WikiDocumentName,p2.WikiDocumentName,true);
|
||||
end;
|
||||
|
||||
function CompareDocumentNameWithPage(DocumentName, Page: Pointer): integer;
|
||||
var
|
||||
p: TW2FormatPage absolute Page;
|
||||
begin
|
||||
Result:=CompareStr(AnsiString(DocumentName),p.WikiDocumentName);
|
||||
Result:=BasicCodeTools.CompareText(AnsiString(DocumentName),p.WikiDocumentName,true);
|
||||
end;
|
||||
|
||||
function CompareDocumentNameWithPageIgnoreLang(DocumentName, Page: Pointer
|
||||
): integer;
|
||||
var
|
||||
p: TW2FormatPage absolute Page;
|
||||
DocName: String;
|
||||
l1: Integer;
|
||||
l2: Integer;
|
||||
begin
|
||||
DocName:=AnsiString(DocumentName);
|
||||
l1:=GetWikiPageLanguageDelimiterPos(DocName)-1;
|
||||
if l1<0 then l1:=length(DocName);
|
||||
l2:=GetWikiPageLanguageDelimiterPos(p.WikiDocumentName)-1;
|
||||
if l2<0 then l2:=length(p.WikiDocumentName);
|
||||
Result:=BasicCodeTools.CompareText(PChar(DocName),l1,
|
||||
PChar(p.WikiDocumentName),l2,true);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -29,7 +29,7 @@ interface
|
||||
uses
|
||||
Classes, SysUtils, math, LazFileUtils, LazLogger, LazDbgLog, LazUTF8,
|
||||
laz2_DOM, CodeToolsStructs, BasicCodeTools, KeywordFuncLists, MTProcs,
|
||||
Wiki2HTMLConvert, Wiki2XHTMLConvert, WikiFormat, WikiParser, WikiStrConsts;
|
||||
Wiki2HTMLConvert, Wiki2XHTMLConvert, WikiFormat, WikiParser;
|
||||
|
||||
type
|
||||
TWikiHelp = class;
|
||||
@ -242,8 +242,6 @@ type
|
||||
|
||||
// languages
|
||||
function CollectAllLanguages(AsCaption: boolean): TStrings;
|
||||
function LangCodeToCaption(ID: string): string;
|
||||
function LangCaptionToCode(Caption: string): string;
|
||||
|
||||
// search
|
||||
procedure Search(const Term: string; const Languages: string = '';
|
||||
@ -1423,7 +1421,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)]);
|
||||
//debugln(['TWikiHelp.DoSearch ',Page.WikiDocumentName,' ',Page.WikiLanguage,' ',WikiPageHasLanguage(Page.WikiDocumentName,Query.Languages)]);
|
||||
Node:=Page.GetNodeHighestScore(Query);
|
||||
s:='<div class="wikiSearchResultItem">'+FoundNodeToHTMLSnippet(Page,Node,Query)+'</div>'+LineEnding;
|
||||
//debugln(['TWikiHelp.TestSearch Score=',Page.Score,' HTML="',s,'"']);
|
||||
@ -1584,7 +1582,7 @@ function TWikiHelp.CollectAllLanguages(AsCaption: boolean): TStrings;
|
||||
procedure Add(Code: string);
|
||||
begin
|
||||
if AsCaption then
|
||||
Code:=LangCodeToCaption(Code);
|
||||
Code:=WikiLangCodeToCaption(Code);
|
||||
CollectAllLanguages.Add(Code);
|
||||
end;
|
||||
|
||||
@ -1608,80 +1606,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TWikiHelp.LangCodeToCaption(ID: string): string;
|
||||
begin
|
||||
if ID='' then Result:=wrsLanguageEnglishOriginal
|
||||
else if ID='*' then Result:=wrsAll
|
||||
else if CompareText(ID,'af')=0 then Result:=wrsLanguageAfrikaans
|
||||
else if CompareText(ID,'ar')=0 then Result:=wrsLanguageArabic
|
||||
else if CompareText(ID,'ca')=0 then Result:=wrsLanguageCatalan
|
||||
else if CompareText(ID,'cs')=0 then Result:=wrsLanguageCzech
|
||||
else if CompareText(ID,'de')=0 then Result:=wrsLanguageGerman
|
||||
else if CompareText(ID,'en')=0 then Result:=wrsLanguageEnglish
|
||||
else if CompareText(ID,'es')=0 then Result:=wrsLanguageSpanish
|
||||
else if CompareText(ID,'fa')=0 then Result:=wrsLanguagePersian
|
||||
else if CompareText(ID,'fi')=0 then Result:=wrsLanguageFinnish
|
||||
else if CompareText(ID,'fr')=0 then Result:=wrsLanguageFrench
|
||||
else if CompareText(ID,'he')=0 then Result:=wrsLanguageHebrew
|
||||
else if CompareText(ID,'hu')=0 then Result:=wrsLanguageHungarian
|
||||
else if CompareText(ID,'id')=0 then Result:=wrsLanguageIndonesian
|
||||
else if CompareText(ID,'it')=0 then Result:=wrsLanguageItalian
|
||||
else if CompareText(ID,'ja')=0 then Result:=wrsLanguageJapanese
|
||||
else if CompareText(ID,'ko')=0 then Result:=wrsLanguageKorean
|
||||
else if CompareText(ID,'lt')=0 then Result:=wrsLanguageLithuanian
|
||||
else if CompareText(ID,'mk')=0 then Result:=wrsLanguageMacedonien
|
||||
else if CompareText(ID,'nl')=0 then Result:=wrsLanguageDutch
|
||||
else if CompareText(ID,'pl')=0 then Result:=wrsLanguagePolish
|
||||
else if CompareText(ID,'pt')=0 then Result:=wrsLanguagePortuguese
|
||||
else if CompareText(ID,'pt_BR')=0 then Result:=wrsLanguagePortugueseBr
|
||||
else if CompareText(ID,'ro')=0 then Result:=wrsLanguageRomanian
|
||||
else if CompareText(ID,'ru')=0 then Result:=wrsLanguageRussian
|
||||
else if CompareText(ID,'sk')=0 then Result:=wrsLanguageSlovak
|
||||
else if CompareText(ID,'sq')=0 then Result:=wrsLanguageAlbania
|
||||
else if CompareText(ID,'tr')=0 then Result:=wrsLanguageTurkish
|
||||
else if CompareText(ID,'uk')=0 then Result:=wrsLanguageUkrainian
|
||||
else if CompareText(ID,'zh_CN')=0 then Result:=wrsLanguageChinese
|
||||
else if CompareText(ID,'zh_TW')=0 then Result:=wrsLanguageChineseTaiwan
|
||||
else Result:=ID;
|
||||
end;
|
||||
|
||||
function TWikiHelp.LangCaptionToCode(Caption: string): string;
|
||||
begin
|
||||
if Caption=wrsLanguageEnglishOriginal then Result:=''
|
||||
else if Caption=wrsAll then Result:='*'
|
||||
else if Caption=wrsLanguageAfrikaans then Result:='af'
|
||||
else if Caption=wrsLanguageAlbania then Result:='sq'
|
||||
else if Caption=wrsLanguageArabic then Result:='ar'
|
||||
else if Caption=wrsLanguageCatalan then Result:='ca'
|
||||
else if Caption=wrsLanguageChinese then Result:='zh_CN'
|
||||
else if Caption=wrsLanguageChineseTaiwan then Result:='zh_TW'
|
||||
else if Caption=wrsLanguageCzech then Result:='cs'
|
||||
else if Caption=wrsLanguageDutch then Result:='nl'
|
||||
else if Caption=wrsLanguageEnglish then Result:='en'
|
||||
else if Caption=wrsLanguageFinnish then Result:='fi'
|
||||
else if Caption=wrsLanguageFrench then Result:='fr'
|
||||
else if Caption=wrsLanguageGerman then Result:='de'
|
||||
else if Caption=wrsLanguageHebrew then Result:='he'
|
||||
else if Caption=wrsLanguageHungarian then Result:='hu'
|
||||
else if Caption=wrsLanguageIndonesian then Result:='id'
|
||||
else if Caption=wrsLanguageItalian then Result:='it'
|
||||
else if Caption=wrsLanguageJapanese then Result:='ja'
|
||||
else if Caption=wrsLanguageKorean then Result:='ko'
|
||||
else if Caption=wrsLanguageLithuanian then Result:='lt'
|
||||
else if Caption=wrsLanguageMacedonien then Result:='mk'
|
||||
else if Caption=wrsLanguagePersian then Result:='fa'
|
||||
else if Caption=wrsLanguagePolish then Result:='pl'
|
||||
else if Caption=wrsLanguagePortuguese then Result:='pt'
|
||||
else if Caption=wrsLanguagePortugueseBr then Result:='pt_BR'
|
||||
else if Caption=wrsLanguageRomanian then Result:='ro'
|
||||
else if Caption=wrsLanguageRussian then Result:='ru'
|
||||
else if Caption=wrsLanguageSlovak then Result:='sk'
|
||||
else if Caption=wrsLanguageSpanish then Result:='es'
|
||||
else if Caption=wrsLanguageTurkish then Result:='tk'
|
||||
else if Caption=wrsLanguageUkrainian then Result:='uk'
|
||||
else Result:=Caption;
|
||||
end;
|
||||
|
||||
function TWikiHelp.GetProgressCaption: string;
|
||||
begin
|
||||
EnterCritSect;
|
||||
|
@ -265,7 +265,7 @@ begin
|
||||
|
||||
// search panel
|
||||
SearchLabel.Caption:='Search:';
|
||||
SearchEdit.Text:='Documentation';
|
||||
SearchEdit.Text:='translations';
|
||||
SearchEdit.Hint:='Type one or more words separated by space, use " for phrases with spaces';
|
||||
HideSearchButton.Caption:='Hide';
|
||||
OptionsButton.Caption:='Options';
|
||||
@ -642,7 +642,7 @@ begin
|
||||
NewHTML:=TIpHtml.Create; // Beware: Will be freed automatically by IpHtmlPanel
|
||||
Target.SetHtml(NewHTML);
|
||||
NewHTML.LoadFromStream(aStream);
|
||||
// ToDo: fix TIpHtmlNodeA.MakeVisible
|
||||
// ToDo: fix TIpHtmlNodeA.MakeVisible, the areas are all 0,0,0,0 at this time
|
||||
if Anchor<>'' then
|
||||
Target.MakeAnchorVisible(Anchor+'/'); // ipHTML store anchor names with / at end
|
||||
except
|
||||
|
@ -26,7 +26,7 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LazLogger, BasicCodeTools,
|
||||
CodeToolsStructs, WikiHelpManager, WikiFormat, WikiStrConsts, Forms, Controls,
|
||||
CodeToolsStructs, WikiHelpManager, WikiStrConsts, WikiFormat, Forms, Controls,
|
||||
Graphics, Dialogs, ExtCtrls, StdCtrls, ComCtrls, Grids;
|
||||
|
||||
type
|
||||
@ -185,7 +185,7 @@ begin
|
||||
end else begin
|
||||
// a specific language
|
||||
Lang:=SubString(StartPos,p-StartPos);
|
||||
if WikiHelp.LangCodeToCaption(Lang)<>Lang then
|
||||
if WikiLangCodeToCaption(Lang)<>Lang then
|
||||
FLanguages[Lang]:='1';
|
||||
end;
|
||||
end;
|
||||
@ -238,13 +238,13 @@ var
|
||||
begin
|
||||
p:=Pos(' (',NodeText);
|
||||
if p>0 then Delete(NodeText,p,length(NodeText));
|
||||
Result:=WikiHelp.LangCaptionToCode(NodeText);
|
||||
Result:=WikiLangCaptionToCode(NodeText);
|
||||
end;
|
||||
|
||||
function TWikiSearchOptsWnd.LangToNodeText(LangID: string; Count: integer
|
||||
): string;
|
||||
begin
|
||||
Result:=WikiHelp.LangCodeToCaption(LangID);
|
||||
Result:=WikiLangCodeToCaption(LangID);
|
||||
if Count<0 then
|
||||
Result+=' (?)'
|
||||
else
|
||||
@ -266,7 +266,7 @@ begin
|
||||
LangToCount:=TStringToPointerTree.Create(true);
|
||||
try
|
||||
for i:=0 to WikiHelp.Converter.Count-1 do begin
|
||||
Lang:=GetWikiPageLanguage(WikiHelp.Converter[i].WikiDocumentName);
|
||||
Lang:=WikiHelp.Converter[i].WikiLanguage;
|
||||
LangToCount[Lang]:=LangToCount[Lang]+1;
|
||||
end;
|
||||
for S2PItem in LangToCount do
|
||||
|
Loading…
Reference in New Issue
Block a user