Das Frontend der Suchfunktion von Doxygen wird mit search.php implementiert. Ich verwende Java anstelle von PHP. Für die Verwendung von Doxygen zum Generieren von Quellcodedokumenten ist eine Konfigurationsdatei erforderlich:
#----- ----- --------------------------------------------- ----- ---------------
# Konfiguration::Ergänzungen im Zusammenhang mit der Suchmaschine#------------- ----- --------------------------------------------- ----- -------
SEARCHENGINE = YES
Wenn JA, werden beim Generieren von Dokumenten die Indexdatei search.idx und die Abfrageschnittstelle search.php generiert.
search.php verwendet die abzufragende Zeichenfolge als Eingabeparameter, um die in PHP implementierte Abfragefunktion search($file,$word,&$statsList) aufzurufen
Ich werde dies verwenden Methode und diese Methode Andere aufgerufene Methoden werden wie folgt in die Java-Sprache übersetzt:
import java.io.BufferedInputStream;
import java.io.File;import java.io.FileInputStream;
import java.util.TreeMap;
import java.util.ArrayList;
import java.util.StringTokenizer;
/**
* @author tyrone
*
* TODO Um die Vorlage für diesen generierten Typkommentar zu ändern, gehen Sie zu
* Fenster – Einstellungen – Java – Codestil – Codevorlagen
*/
public class Search {
/**Lesen Sie search.idx*/
public Search(File fp){
String content="";
try{
BufferedInputStreamIn = new BufferedInputStream(new FileInputStream( fp ));
int len=In. available();
this.Content=new byte[len];
In.read(this.Content);
Scontent=new String(this.Content);
}catch(Exception ex ){
ex.printStackTrace();
}
this.Scontent=new String(this.Content);
//this.Content=content.getBytes();
}
private byte[] Content;
private String Scontent;
private int Index;
private void setIndex(int index){
this.Index=index ;
}
private int getIndex(){
return this.Index;
}
private byte[] getContent(){
return this.Content ;
}
private String getScontent(){
return this.Scontent;
}
/**
* Abfrage
* @param Wort
* @param statsList
* @return
*/
public ArrayList Searching (String word,ArrayList statsList) {
this.setIndex(computeIndex(word));
TreeMap stat=new TreeMap();
int count=0 ;
byte[] buf=new byte[4];
if (this.getIndex()!=-1) // einen gültigen Index gefunden
{
int totalHi=0;
int totalFreqHi=0;
int totalFreqLo=0;
//4 Bytes überspringenden Header lesen
/ /int index=readInt(8 ,this.getIn());
if (index>0){// Wörter gefunden, die mit dem Hash-Schlüssel übereinstimmen
start=statsList.size();
count=start ;
String w= readString(index);
while (w.length()!=0){
int statIdx = readInt(this.getIndex());
if (w.compareTo (word)>=0 ){
// Wort gefunden, das übereinstimmt (als Teilzeichenfolge)
stat.put("word",word);
stat.put("match",w);
stat.put( "index",new Integer(statIdx));
if (w.length()==word.length())
stat.put("full","true" );
else
stat.put("full","false");
statsList.add(stat);
}
w = readString(this.getIndex());
}
for (count=start;count
TreeMap statInfo = (TreeMap)statsList.get(count);
int multiplier = 1;
// Ganzwortübereinstimmungen haben eine doppelte Gewichtung
String full=(String)statInfo.get("full");
if (full.compareTo("true")==0) multiplier=2;
Integer inte=(Integer)statInfo.get("index");
int numDocs = readInt(inte.intValue());
TreeMap[] docInfo =new TreeMap[numDocs];
// Informationen zu Dokumenten lesen + Häufigkeit des Auftretens des Wortes
for (int i=0;i
int idx=readInt(this.getIndex());
int freq=readInt(this.getIndex());
docInfo[i]=new TreeMap();
docInfo[i].put("idx",new Integer(idx));
docInfo[i].put("freq",new Integer (freq>>1));
docInfo[i].put("rank",new Double(0.0));
docInfo[i].put("hi",new Integer(freq&1)) ;
if ((freq&1)>0) // Wort kommt in Dokument mit hoher Priorität vor
{
totalHi++;
totalFreqHi+=freq*multiplier;
}
else // Wort tritt in einem Dokument mit niedriger Priorität auf
{
totalFreqLo+=freq*multiplier;
}
}
// liest Namens- und URL-Informationen für das Dokument
for (int i=0;i< ;numDocs;i++)
{
Integer idx=(Integer)docInfo[i].get("idx");
docInfo[i].put("name",readString(idx.intValue( )));
docInfo[i].put("url",readString(this.getIndex()));
}
statInfo.put("docs",docInfo);
}
int totalFreq=(totalHi+1)*totalFreqLo +totalFreqHi;
for (count=start;count
TreeMap statInfo =(TreeMap )statsList.get(count);
int multiplier = 1;
// Ganzwortübereinstimmungen haben eine doppelte Gewichtung
String full=(String)statInfo.get("full");
if (full.compareTo("true")==0) multiplier=2;
TreeMap[] docInfo=(TreeMap[])statInfo.get("docs");
for (int i=0;i< ;docInfo.length;i++)
{
// Häufigkeitsrang des Wortes in jedem Dokument berechnen
Integer inte=(Integer)docInfo[i].get("freq");
int freq=inte.intValue();
inte=(Integer)docInfo[i].get("hi");
if (inte.intValue()>0){
docInfo[i] .put("rank",new Double((freq*multiplier+totalFreqLo)/totalFreq));
}else{
docInfo[i].put("rank",new Double((freq*multiplier) /totalFreq));
}
}
}
}
}
return statsList;
}
private int readInt(int index){
byte[] buf1;
int b1,b2,b3,b4;
try{
b1=this.getContent()[index];
b2=this.getContent( )[index+1];
b3=this.getContent()[index+2];
b4=this.getContent()[index+3];
/**Nach viel Mühe habe ich herausgefunden, dass das in Java in ASCII-Code konvertierte Byte 16 Bit groß ist, während die darin gespeicherte IDX 8 Bit groß ist.*/
b1=b1&0xff;
b2=b2&0xff;
b3=b3&0xff;
b4=b4&0xff;
index=index+4;
this.setIndex(index);
return (b1}catch(Exception ex){
}
return -1;
}
private String readString(int index){
String result="";
byte[] re=new byte[60];
int i= 0;
byte ind;
while((ind=this.getContent()[index])!=0){
re[i]=ind;
if (i==59) {
result=result+new String(re);
i=0;
}else{
i++;
}
index++;
}
result= result+new String(re,0,i);
this.setIndex(++index);
return result;
}
/**
*
* @param word
* @return
*/
private int computeIndex(String word)
{
int hi;
int lo;
if (word.length()// high char of the index
hi =word.charAt(0);
if (hi==0) return -1;
// niedriges Zeichen des Index
lo =word.charAt(1);
if (lo==0) return -1;
// return index
return hi*256+lo;
}
/**args[0]=search.idx, args[1]="word1+word2+..." , ist es nicht mehr wichtig, wie die statsList-Ergebnisse angezeigt werden.*/
public static void main(String[] args){
Search se=new Search(new File(args[0]));
StringTokenizer st = new StringTokenizer(args[1]," +");
ArrayList result=new ArrayList();
while (st.hasMoreTokens()){
result=se.Searching(st.nextToken(),result);
}
for(int i=0;i
TreeMap[] docs=(TreeMap[])tm .get("docs");
for (int l=0;l
System.out.println((String)docs[l].get("url"));
}
}
}
}

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung