Platforms to show: All Mac Windows Linux Cross-Platform
/Main/MBS Help Search/MBS Help Search
Required plugins for this example: MBS Util Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /Main/MBS Help Search/MBS Help Search
This example is the version from Thu, 6th Apr 2016.
Project "MBS Help Search.xojo_binary_project"
Class MainWindow Inherits Window
Control iSearch Inherits TextField
ControlInstance iSearch Inherits TextField
EventHandler Sub TextChange()
SearchButton.Enabled=me.text<>""
End EventHandler
End Control
Control StaticText1 Inherits Label
ControlInstance StaticText1 Inherits Label
End Control
Control SearchButton Inherits PushButton
ControlInstance SearchButton Inherits PushButton
EventHandler Sub Action()
dim j,n,i,c,cc,m,k,b as integer
dim f as file
dim a(0) as string
dim s as string
s=iSearch.text
cc=CountFields(s," ")-1
redim a(cc)
for i=0 to cc
a(i)=NthField(s," ",i+1)
next
ListBox1.DeleteAllRows
c=UBound(w.files)
for n=1 to c
f=w.files(n)
s=f.text
if s<>"" then
m=0
b=0
for j=0 to cc
k=CountFields(s,a(j))
if k>1 then
b=b+1
end if
m=m+k-1
next
if b>cc then
ListBox1.AddRow f.titel
s=str(m)
while len(s)<5
s=" "+s
wend
ListBox1.cell(ListBox1.LastIndex,1)=s
ListBox1.Cell(ListBox1.LastIndex,2)=str(n)
end if
end if
NextLoop:
next
ListBox1.SortedColumn=1
ListBox1.ColumnSortDirection(1)=2
ListBox1.Sort
End EventHandler
End Control
Control ListBox1 Inherits Listbox
ControlInstance ListBox1 Inherits Listbox
EventHandler Sub Change()
dim id as integer
if me.ListIndex<>-1 then
id=val(ListBox1.Cell(ListBox1.ListIndex,2))
if id>0 then
w.files(id).file.launch
end if
end if
End EventHandler
EventHandler Sub DoubleClick()
dim id as integer
id=val(ListBox1.Cell(ListBox1.ListIndex,2))
if id>0 then
w.files(id).file.launch
end if
End EventHandler
EventHandler Sub Open()
ListBox1.ColumnAlignment(1)=3
End EventHandler
End Control
Control ProgressMessage Inherits Label
ControlInstance ProgressMessage Inherits Label
End Control
Control ProgressDisplay Inherits ProgressBar
ControlInstance ProgressDisplay Inherits ProgressBar
End Control
EventHandler Sub Open()
w=new Workthread
w.run
End EventHandler
Property w As workthread
End Class
MenuBar Menu
MenuItem UntitledMenu3 = ""
MenuItem UntitledMenu2 = "File"
MenuItem FileQuit = "Quit"
MenuItem UntitledMenu0 = "Edit"
MenuItem EditUndo = "Undo"
MenuItem UntitledMenu1 = "-"
MenuItem EditCut = "Cut"
MenuItem EditCopy = "Copy"
MenuItem EditPaste = "Paste"
MenuItem EditClear = "Clear"
End MenuBar
Class Workthread Inherits Thread
EventHandler Sub Run()
MainWindow.ProgressDisplay.Maximum=0
MainWindow.ProgressDisplay.Value=0
MainWindow.ProgressMessage.text="Reading directory..."
ReadDirectory
MainWindow.ProgressDisplay.Maximum=UBound(files)
MainWindow.ProgressDisplay.Value=0
MainWindow.ProgressMessage.text="Reading files..."
ReadFiles
MainWindow.ProgressMessage.text="Loaded "+str(ubound(files))+" files..."
End EventHandler
Function FindFile(name as string) As FolderItem
// Look for file in parent folders from executable on
dim parent as FolderItem = app.ExecutableFile.Parent
while parent<>Nil
dim file as FolderItem = parent.Child(name)
if file<>Nil and file.Exists then
Return file
end if
parent = parent.Parent
wend
End Function
Sub ReadDirectory()
dim dir as FolderItem
dim file as FolderItem
dim f as file
dim i,c as integer
dir=FindFile("HTML files")
dir=dir.Child("files")
c=dir.Count
for i=1 to c
file=dir.item(i)
if file<>nil and Right(file.name,5)=".html" then
f=new file
f.file=file
files.Append f
end if
next
Exception
End Sub
Sub ReadFiles()
dim p as ProgressBar
dim i,c,n as integer
dim f as file
p=MainWindow.ProgressDisplay
c=UBound(files)
n=1
for i=c downto 1
f=files(i)
p.Value=n
f.process
n=n+1
next
p.Value=n
Exception
End Sub
Property files(0) As file
End Class
Class File
Function FindTitel(s as string) As string
dim p1,p2 as integer
dim p,l as integer
dim t as string
const titlestart="<TITLE>"
const titleend="</TITLE>"
const mbs="Monkeybread Realbasic plugin - "
p1=instr(s,titlestart)
p2=instr(s,titleend)
l=p2-p1-len(mbs)-len(titlestart)
p=p1+len(titlestart)+len(mbs)
t=mid(s,p,l)
Return t
End Function
Function HasIndex() As Boolean
dim f as FolderItem
dim dir as FolderItem
dim t as TextInputStream
dir=HelpIndexFolder
if dir<>Nil and dir.Exists then
f=dir.Child(file.Name)
if f<>nil and f.Exists then
if f.ModificationDate.TotalSeconds>=file.ModificationDate.TotalSeconds then
t=f.OpenAsTextFile
titel=t.ReadLine(Encodings.UTF8)
text=t.ReadAll(Encodings.utf8)
if text<>"" then
Return true
end if
end if
end if
end if
Exception
End Function
Protected Function HelpIndexFolder() As folderitem
dim f as folderitem
f=CreateCachedDataFolderMBS(-32763)
if f=nil then
f=CreateApplicationSupportFolderMBS(-32763)
end if
if f=nil then
// Last way for Windows/Linux
f=SpecialFolder.ApplicationData
end if
f=f.Child("MBS Help Search")
f.CreateAsFolder
Return f
End Function
Function RemoveLinks(s as string) As String
dim p as integer
p=instr(s,"<!-- Ende Content-->")
if p>0 then
s=left(s,p-1)
end if
const start="<!-- Start Content -->"
p=instr(s,start)
if p>0 then
s=mid(s,p+len(start))
end if
Return s
End Function
Sub WriteIndex()
dim f as FolderItem
dim dir as FolderItem
dim t as TextOutputStream
dir=HelpIndexFolder
f=dir.Child(file.Name)
t=f.CreateTextFile
t.WriteLine titel.ConvertEncoding(Encodings.UTF8)
t.Write text.ConvertEncoding(Encodings.UTF8)
t.Close
End Sub
Function name() As string
Return file.Name
Exception
End Function
Sub process()
dim b as BinaryStream
dim s as string
if not hasindex then
b=file.OpenAsBinaryFile(false)
s=b.Read(b.Length, Encodings.ASCII)
if s<>"" then
titel=FindTitel(s)
s=RemoveLinks(s)
s=RemoveHTMLTagsMBS(s)
s=DecodingFromHTMLMBS(s)
s=ConvertEncoding(s,Encodings.UTF8)
s=Shorten(s)
if s<>"" then
text=s
WriteIndex
end if
end if
end if
End Sub
Property file As folderitem
Property text As string
Property titel As string
End Class
Class App Inherits Application
EventHandler Sub Open()
// You should add your own registration here, if you want.
// As only for indexing a registration is needed, you don't need it later for lookup
End EventHandler
End Class
Module Util
Function Shorten(s as string) As string
s=ReplaceAll(s,Encodings.UTF8.chr(13)," ")
s=ReplaceAll(s,Encodings.UTF8.chr(10)," ")
s=ReplaceAll(s,Encodings.UTF8.chr(9)," ")
s=ReplaceAll(s,Encodings.UTF8.chr(160)," ")
Return s
End Function
End Module
End Project
See also:
The items on this page are in the following plugins: MBS Main Plugin.