|
* MyServerExecute
LPARAMETERS ScriptFile
LOCAL OutputBuffer
Server.Execute ScriptFile
M.OutputBuffer = Response.OutputBuffer
Response.Clear
RETURN M.OutputBuffer |
FoxWeb Support Team support@foxweb.com email |
I've been having a problem with lines being unwrapped by MergeTxt(). This post describes what I've been able to figure out about the problem, how I got around it, and feature request for a future FoxWeb version.
In our transition from FW 1.29 to 2.6 (big jump, I know...),
we're using a mix of MergeTxt() and .fwx files. With our hundreds
of existing programs in production, but an eagerness to start
implementing FW 2.6's great new features (primarily .fwx files), we are
attempting some fence-straddling during the transition.
So I've got this legacy program, bulletin.prg . At the end of the program, it calls:
HTML_out = m.http_headers + MergeTxt('bulletin.htm') |
Bulletin.htm is one of many legacy templates. Within that
template, there is a call to my << TopNavHeader()
>> function which I've recently updated to call
Server.Execute('pageheader.fwx'). (This creates a global top
navigation bar.)
Pageheader.fwx is a simple .fwx file I've
recently created. Server.Execute() processes that file and
generates a string with only chr(10) as the end-of-line
sequences. This is no great problem in an HTML environment, but
is causing problems within MergeTxt().
MergeTxt() seems to be
choking on long strings without chr(13)+chr(10) line terminators.
I searched the FoxWeb forum for this problem, and found some leads
regarding to memo fields and input that starts out as very long lines,
but those don't apply here...at least not with regard to the source
.fwx file. Pageheader.fwx has 60 lines, none over 80 characters
wide. A hex editor confirms the pageheader.fwx file has
chr(13)+chr(10) line terminators.
With only chr(10) line
terminators, MergeTxt() runs all the intended lines together into
extremely long lines. The chr(10)'s are removed completely...not
even converted to spaces or chr(13)+chr(10) sequences. This is a
minor problem, as that can eliminate white space critical to page
layout. I imagine that could do worse damage to embedded
javascript, <pre> formatted text, etc...although that hasn't been
an issue for any of my pages.
It appears my 60-line .fwx script
is first unwrapped onto one long line, then wrapped back into lines
under roughly 1024 characters long. I say "roughly", as there are
often 800-ish character lines that could have been wrapped much closer
to 1024. (That irregularity really has me scratching my head, but
it's really not the issue at hand.)
What *has* been an issue for
me is the new line ends that MergeTxt inserts. I consider a
major problem. Now I'm getting a chr(13)+chr(10) injected
every thousand characters or so, always replacing a space. Being
HTML, this is generally not a problem, but becomes a real problem when
that space was part of quoted string. That can render CSS,
javascript, etc. completely broken. Even worse, it
is intermittent as the wrapping occurs at different places based
on the length of the dynamic content coming from the database.
After
more hours than I'd care to admit to my boss, I proved all the above
assertions to myself. I have fixed the problem by converting the
output from Server.Execute() to replace chr(10) with chr(13)+chr(10)
via strtran(). This fixes what appears to be a deficiency in
MergeTxt(). This is not much of a solution, as I have to take
care to apply this fix everywhere that Server.Execute() might be
used. At this time, that is only once for the header and once for
the footer, but who knows what lies ahead. Further, who knows
when that particular "fix" will cause other problems in the future.
I'm posting my findings for three reasons:
1. To hopefully help anyone else having this kind of problem.
2.
To invite the super folks on the FoxWeb support team to point out
anything I've got completely backward or something I'm
overlooking. I'm *wide* open to suggestions of better fixes.
3.
To suggest a change in how the .fwx templates are processed.
Ideally, they would preserve the EOL sequences in the source .fwx
file. On a possibly more practical level, it would be a *huge*
improvement to simply always use chr(13)+chr(10) for line
terminators. Looking at the intermediate .prg files generated, it
seems that would be a trivial change to the .fwx parser. It would
also be more platform-appropriate, since we're all running on Windows
platforms.
I am eager to hear any insight or confirmation anyone has to offer.
-dave
ps.
Of course, the ideal solution would be to get MergeTxt() to stop
tinkering with long lines to start with, but I get the impression from
other posts that that is more of a FoxPro issue than a FoxWeb issue, so
we may be stuck with it.