Files
harbour-core/tests/hbdoc.prg
vszakats a4a357a18b 2013-03-15 11:12 UTC+0100 Viktor Szakats (harbour syenar.net)
* /harbour/* -> /*
    * moved whole Harbour source tree one level up to
      avoid single 'harbour' top dir
2013-03-15 11:13:30 +01:00

101 lines
2.1 KiB
Plaintext

/*
* $Id$
*/
/*
* 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.txt" ) .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