If you've never tried it, West-Wind Help Builder can be a life-saver. A great tool for creating both Technical and EndUser help files. On the technical side, it lets you import in class definitions and data dictionaries, making it easier to get a total scope of a project.
But what's been missing has been a way to move existing help projects (those built using the Microsoft HTML Help Workshop) into Help Builder.
Now , under the hood, WW's Help Builder uses the Visual FoxPro data file so if you're intrigued, you can type in USE myHelp.VBP and browse the project to get a good feeling behind all of the data.
So the HTML Workshop builds its table of contents with an HHC file which is a terrible HTML file that looks like this:
But what's been missing has been a way to move existing help projects (those built using the Microsoft HTML Help Workshop) into Help Builder.
Now , under the hood, WW's Help Builder uses the Visual FoxPro data file so if you're intrigued, you can type in USE myHelp.VBP and browse the project to get a good feeling behind all of the data.
So the HTML Workshop builds its table of contents with an HHC file which is a terrible HTML file that looks like this:
-
So I imported it into a VFP memvar and then populated the West-Wind Help Project's VBP file. Here's the full code. It's NOT polished but I noted it on the FoxShow podcast and wanted to ensure it was up here:
LPARAMETERS tcFile,tcProj
IF NOT FILE(tcFile)
RETURN .F.
ENDIF
IF NOT EMPTY(tcProj) AND NOT USED("PROJFILE")
USE (tcProj) IN 0 AGAIN SHARED ALIAS projFile
ENDIF
lcFile = FILETOSTR(tcFile)
LOCAL lnlines
lnLInes = ALINES(la,lcFile)
LOCAL llStart,lcParent,lcPrevParent
** Note: the INDEX is the top level root ID of the HBP file.
lcPrevParent = "INDEX"
lcParent = "INDEX"
llStart = .F.
lnAdded = 0
lnID=3
lcLast = "INDEX"
lnStart = 900
FOR lni = 1 TO lnLines
lcLine = STRTRAN(ALLTRIM(la(lni))," ")
IF lcLine = "- "
llStart = .T.
lcPrevParent = lcParent
lcParent = lcLast
LOOP
ENDIF
IF NOT llStart
LOOP
ENDIF
IF lcLine = "
lcParent = lcPrevParent
ENDIF
ENDFOR
** Now the rest of this code was written to clean up some of the garbage that came in with those old HTML files.
SELECT projfile
REPLACE ALL body WITH STRTRAN(body,[])
REPLACE ALL body WITH STRTRAN(body,[])
REPLACE ALL body WITH STRTRAN(body,[])
REPLACE ALL body WITH STRTRAN(body,[])
REPLACE ALL body WITH STRTRAN(body,[])
REPLACE ALL body WITH STRTRAN(body,[])
REPLACE ALL body WITH STRTRAN(body,[])
replace ALL body WITH STRTRAN(body,"<","<<")
replace ALL body WITH STRTRAN(body,">",">>")
? lnAdded
Thinking back, I could likely have just used STREXTRACT for some of these but I needed something quick and dirty and this definitely does the trick. Also note that one of other cool things it does is IMPORT in the actual source.
You'll still have a lot of clean-up work to do but not a lot of re-writing.
West Wind HTML Help Builder
Comments