Code Folding for Foxpro
Posted: Sat Jan 28, 2006 3:48 am
Hi! this is for a Foxpro prg.
Code: Select all
Extensions: .prg
Line Comment: *
Block Comment: N/A
For begin/end, stuff inside [brackets] are, except for CASE,
optional but would be nice if they could be folded too :)
Begin: IF
End: [ELSE] (Optional)
End: ENDIF
Begin: DO CASE
Alt. Beg: [CASE] (Required)
Alt. Beg: [OTHERWISE] (Optional)
End: ENDCASE
Begin: DO WHILE
End: ENDDO
DO is also another keyword separate from the DO CASE and the
DO WHILE. It is used for calling another prg, procedure, or
function so don't fold on it. Example:
DO SomeOtherPRG
This would run SomeOtherPRG.PRG and continue on. You wouldn't
want to fold on this since there is no ending keyword.
Begin: SCAN
End: ENDSCAN
Begin: FOR
End: ENDFOR
Begin: DEFINE CLASS
End: ENDDEFINE
Begin: WITH
End: ENDWITH
WITH can also be used with other keywords, but will not start
out the line this way. When the line starts out with WITH
then it will be the one you want to fold.
Begin: FUNCTION
End: ENDFUNC
Alt. End: RETURN
I don't use the ENDFUNC, but rather the RETURN since I'm
returning a value.
Begin: PROCEDURE
End: ENDPROC
Alt. End: RETURN
I end most of my procedures with a RETURN instead of using
the ENDPROC. I don't return anything, but it's kind of a
bad habit from using the FUNCTION :( so you could end
with either a RETURN or ENDPROC. They do the same thing.
Also, you can have a comment on the same line as code.
(A && will do this) Example can be found below in the
IF/ENDIF block.
Sample Code:
IF nValue = 1 && This comment is ignored by the compiler
* Some comments...
[ELSE]
** more comments...
ENDIF
**************************************************
DO CASE
CASE nValue = 1
*** Some code would go here, blah blah
CASE nValue = 2
* indenting is not required like in python
OTHERWISE
** optional and used if nvalue = something
** other than 1 or 2
ENDCASE
**************************************************
bError = .F.
DO WHILE bError <> .T.
bError = .T.
ENDDO
**************************************************
SCAN
** used for looping through a table
ENDSCAN
**************************************************
FOR i = 1 to 10
? i
ENDFOR
**************************************************
frmMyForm = CREATEOBJECT("FormChild")
DEFINE CLASS FormChild AS FORM
Height = 295
Width = 524
ENDDEFINE
**************************************************
WITH oApp.oProgBar
.width = 60
ENDWITH
**************************************************
FUNCTION AddNumbers
LPARAMERS tNum1,tNum2
nReturn = tNum1 + tNum2
RETURN nReturn
That's how I use it, but this is also ok.
FUNCTION AddNumbers
LPARAMERS tNum1,tNum2
nReturn = tNum1 + tNum2
RETURN nReturn
ENDFUNC
My preference would be to fold on RETURN since
a function returns a value. But if a ENDFUNC
appears before a RETURN, end folding on the
ENDFUNC.
**************************************************
PROCEDURE ProcedureName
x = 1
? x
RETURN
PROCEDURE ProcedureName2
x = 2
? x
ENDPROC
PROCEDURE ProcedureName3
x = 3
RETURN x
ENDPROC
These are all correct. I would recommend folding
on either RETURN or ENDPROC, whichever come first.
**************************************************