Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
WebBrowser automation
Message
De
18/11/2010 04:20:11
Dragan Nedeljkovich (En ligne)
Now officially retired
Zrenjanin, Serbia
 
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Versions des environnements
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Divers
Thread ID:
01489079
Message ID:
01489516
Vues:
86
J'aime (1)
>>BTW, the whole site works on Fox generated pages ftp'd using Chilkat COM object. It's all static, but as dynamic as static gets.
>
>Dragan
>
>I had thought of doing something similar. I'd be interested to know how you generate the pages in Fox.

I guess 200 lines of code won't be too much for a message...
* normal.h
#define cr chr(13)
#define lf chr(10)
#define ff chr(12)
#define crlf cr+lf
#define c_tab chr(9)
#define c_quote ["]
#define c_apo	[']
#define c_tz	[;]
#define c_bslash	[\]
#define c_delim " -.,()$!?#/&\|[]@{}"+c_quote+c_apo
#define c_prazna ""


* dcHtml.prg
#include normal.h


define class cHtml as custom
	nPretextLevel=0
	cCellClass=""
	cRowClass=""
	cTableClass=""
	cTitle=""
	cCSS=""
	descr=""
	keywords="VFP, Visual, FoxPro, Visual FoxPro"
	language="en-us"
	cPreFooter=""
	ccrlf=chr(13)+chr(10)

*******************************
	procedure destroy()
		_pretext=""
	endproc

*******************************
	procedure IncPretext()
		this.nPretextLevel = this.nPretextLevel + 1
		_pretext=replicate(c_tab, this.nPretextLevel)
	endproc
*******************************
	procedure DecPretext()
		this.nPretextLevel = max(this.nPretextLevel - 1, 0)
		_pretext=replicate(c_tab, this.nPretextLevel)
	endproc


*******************************
	procedure MakeCell(c, cAttrib)
		local cClass
		if empty(c)
			c=" "
		endif
		this.IncPretext()
		cClass=iif(empty(this.cCellClass)," ",[ class="]+this.cCellClass+[" ])
		cClass = cClass + iif(empty(cAttrib), "", cAttrib)
		c="<td"+cClass+">"+this.ccrlf+;
			this.indent(c)+ this.ccrlf+;
			"</td>"
		this.DecPretext()
		return c
*******************************
	procedure MakeHeaderCell(c, cAttrib)
		local cClass
		if empty(c)
			c="&nbsp;"
		endif
		this.IncPretext()
		cClass=iif(empty(this.cCellClass)," ",[ class="]+this.cCellClass+[" ])
		cClass = cClass + iif(empty(cAttrib), "", cAttrib)
		c=_pretext+"<th"+cClass+">"+this.ccrlf+;
			this.indent(c)+ this.ccrlf+;
			"</th>"
		this.DecPretext()
		return c
*******************************
	procedure MakeRow(c, cAttrib)
		local c, cClass
		this.IncPretext()
		cClass=iif(empty(this.cRowClass)," ",[ class="]+this.cRowClass+[" ])
		cClass = cClass + iif(empty(cAttrib), "", cAttrib)
		c=_pretext+"<tr"+cClass+">"+this.ccrlf+;
			this.indent(c)+ this.ccrlf+;
			"</tr>"
		this.DecPretext()
		return c
*******************************
	procedure MakeTable(c, cAttrib)
		local c, cClass
		this.IncPretext()
		cClass=iif(empty(this.cTableClass)," ",[ class="]+this.cTableClass+[" ])
		cClass = cClass + iif(empty(cAttrib), "", cAttrib)
		c=crlf+_pretext+"<table"+cClass+">"+crlf+;
			this.indent(c)+ crlf+;
			"</table>"
		this.DecPretext()
		return c
*******************************
	procedure PageHeader
		local c, cS
		if empty(this.cCSS)
			cS=""
		else
			cS=crlf+c_tab+[<link rel="stylesheet" href="]+this.cCSS+[" type="text/css">]
		endif
		this.descr=iif(empty(this.descr), this.cTitle, this.descr)
*-- TEXT BLOCK BEGIN
		text TO c NOSHOW TEXTMERGE
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
 <HTML>
<HEAD>
	<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1250">
	<META NAME="Author" CONTENT="Dragan Nedeljković, ndragan@ndragan.com">
	<META NAME="GENERATOR" CONTENT="<<sys(16,1)>>, <<ttoc(datetime())>>">
	<meta name="keywords" content="<<this.keywords>>">
	<meta name="revisit-after" content="15 days">
	<meta name="robots" content="index,follow">
	<meta name="language" content="<<this.language>>">
	<meta name="rating" content="General">
	<meta name="resource-type" content="document">
	<meta name="distribution" content="Global">
	<meta name="copyright" content="Copyright <<Year(Date())>> Dragan Nedeljkovich">
	<META NAME="Description" CONTENT="<<this.descr>>">
	<TITLE><<this.cTitle>></TITLE><<cS>>
</HEAD>
<BODY >

		ENDTEXT
*-- TEXT BLOCK END

		return c
	endproc
*******************************
	procedure PageFooter
		local c
		c=crlf+this.cPreFooter+crlf+"</BODY>"+crlf+"</HTML>"
		return c
	endproc

*******************************
	procedure MakeComment(cComm)
		local c
		c=crlf+_pretext+"<!-- "+cComm+" -->"
		return c
	endproc
*******************************
	procedure indent(c)
		local a[1], n, i
		n=alines(a,c)
		c=""
		for i=1 to n
			c = c + c_tab+a[i]+crlf
		endfor
		return c
	endproc

*********************
	procedure ReColor(tnColor, tnFactor)
* return the html string for the color multiplied by the factor
		local r,g,b, lcColor, lnNewColor
		store 0 to r,g,b
		if vartype(tnColor)="C"
			tnColor=evaluate("0x"+tnColor)
		endif
		rgbcomp(tnColor, @r, @g, @b)
		lnNewColor=rgb(r*tnFactor,g*tnFactor,b*tnFactor)
		lcColor="#"+right(transform(lnNewColor, "@0"),6)
		return lcColor
	endproc


*******************************
	procedure wraptag(c, cTag)
		c="<"+cTag+">"+c+"</"+getwordnum(cTag,1)+">"
		return c
	endproc

*******************************
	procedure AddKeyword(cKW)
		this.keywords = this.keywords + ", "+cKW
	endproc

*******************************
	procedure ResetKeywords()
		this.keywords="VFP, Visual, FoxPro, Visual FoxPro"
	endproc

*******************************
*[2006/12/21 18:24:28] dragan - load template and replace all properties in comments
*-- with their values
	procedure LoadTemplate(oP, tcTemplate)
		#define lGR "<!--"
		#define dGR	"-->"
		#define lTemp "#1#"
		#define dTemp "#2#"
*-- if it contains the delimiter, it's a template, else it's a filename of one
		if not lGR$tcTemplate
			c=filetostr(tcTemplate)
		else
			c=tcTemplate
		endif
		n=occurs(lGR, c)
		for i=1 to n
			lcChop=strextract(c, lGR, dGR,1,1+4)
			lcToRepl=strextract(lcChop, lGR, dGR)
			do case
				case 	inlist(lcToRepl, space(1), chr(9))
*-- do nothing, this is a comment
					lcRepl=lTemp+lcToRepl+dTemp
				case type(lcToRepl)#"U"
*-- it's an expression
					lcRepl=transform(evaluate(lcToRepl))
				case pemstatus(oP,lcToRepl,5)
*-- it's a property of the parameter object
					lcRepl=transform(getpem(oP,lcToRepl))
				otherwise
					lcRepl=lTemp+lcToRepl+dTemp
			endcase
			if lcRepl#lcChop
				c=strtran(c, lcChop, lcRepl)
			endif
		endfor
*-- we kept this one just to keep the number of occurrences constant, now it can go.
*	c=Strtran(c, lGR+" OK "+dGR, "")
		c=strtran(c, lTemp, lGR)
		c=strtran(c, dTemp, dGR)
		return c
enddefine
Then any generator has its own instance of this class, fills in the properties, provides a template, calls the code to get html text, strtofile()s it and then ftps it to the site. And it's blazingly fast.

back to same old

the first online autobiography, unfinished by design
What, me reckless? I'm full of recks!
Balkans, eh? Count them.
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform