97 lines
2.1 KiB
Plaintext
97 lines
2.1 KiB
Plaintext
/*
|
|
* HBDOC reader test
|
|
*
|
|
* Copyright 2010 Viktor Szakats (harbour syenar.net)
|
|
* www - http://harbour-project.org
|
|
*
|
|
*/
|
|
|
|
#include "directry.ch"
|
|
#include "simpleio.ch"
|
|
|
|
PROCEDURE Main( cRoot )
|
|
|
|
LOCAL aEntry
|
|
LOCAL cName
|
|
|
|
LOCAL aDir
|
|
LOCAL cDir
|
|
|
|
LOCAL aFile
|
|
|
|
LOCAL tModified
|
|
LOCAL aErrMsg
|
|
LOCAL tmp
|
|
|
|
IF ! HB_ISSTRING( cRoot )
|
|
/* Detect Harbour root */
|
|
cRoot := "." + hb_ps()
|
|
DO WHILE hb_DirExists( cRoot + ".." )
|
|
IF hb_FileExists( cRoot + "README.md" ) .AND. ;
|
|
hb_FileExists( cRoot + "COPYING.txt" ) .AND. ;
|
|
hb_DirExists( cRoot + "config" )
|
|
EXIT
|
|
ENDIF
|
|
cRoot += ".." + hb_ps()
|
|
ENDDO
|
|
ELSE
|
|
cDir := hb_DirSepAdd( cDir )
|
|
ENDIF
|
|
|
|
? "Root: " + cRoot
|
|
|
|
aDir := { cRoot }
|
|
|
|
FOR EACH aFile IN Directory( cRoot + "contrib" + hb_ps() + hb_osFileMask(), "D" )
|
|
IF "D" $ aFile[ F_ATTR ] .AND. ;
|
|
!( aFile[ F_NAME ] == "." ) .AND. ;
|
|
!( aFile[ F_NAME ] == ".." )
|
|
AAdd( aDir, cRoot + "contrib" + hb_ps() + aFile[ F_NAME ] )
|
|
ENDIF
|
|
NEXT
|
|
|
|
FOR EACH cDir IN aDir
|
|
|
|
IF ! Empty( tModified := __hbdoc_DirLastModified( cDir ) )
|
|
|
|
cName := DirGetName( cDir )
|
|
IF Empty( cName )
|
|
cName := "harbour"
|
|
ENDIF
|
|
|
|
aErrMsg := {}
|
|
|
|
aEntry := __hbdoc_LoadDir( cDir, cName, aErrMsg )
|
|
|
|
/* TODO: apply code formatting, HBDOC section and content validation here.
|
|
It's also possible to create output generators at this point.
|
|
These generators should simply parse the list of entry hashes
|
|
and spit out output in selected end-user format, like .html
|
|
or .pdf */
|
|
|
|
FOR EACH tmp IN aErrMsg
|
|
? tmp
|
|
NEXT
|
|
|
|
IF ! Empty( aEntry )
|
|
? __hbdoc_SaveHBD( cName, aEntry ), cName, Len( aEntry ), tModified
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN
|
|
|
|
STATIC FUNCTION DirGetName( cDir )
|
|
|
|
LOCAL cName
|
|
|
|
cDir := hb_DirSepDel( cDir )
|
|
|
|
hb_FNameSplit( cDir,, @cName )
|
|
|
|
IF Empty( cName ) .OR. cName == "." .OR. cName == ".."
|
|
RETURN ""
|
|
ENDIF
|
|
|
|
RETURN cName
|