In message <20150924082904.GA14703(a)somnambulist.local>
Daniel Silverstone <dsilvers(a)netsurf-browser.org> wrote:
On Wed, Sep 23, 2015 at 21:43:13 +0100, Dave Higton wrote:
> Second version using SLEN() instead of strlen().
> work as well as write().
>From my reading of the spec, it inserts a newline, not a line break.
I agree! I was playing with some test code today that made me realise
the the results of writeln() are very different if enclosed within
<pre></pre> tags. When I submit a test method, I'll use that.
Also, you could chain through Document.write to reduce code
duk_push_lstring(ctx, "write", SLEN("write"));
duk_push_lstring(ctx, "\n", SLEN("\n"));
duk_call_prop(ctx, 0, duk_get_top(ctx) - 1);
This has the advantage that if we change how Document::write functions
then we don't need to remember to change that in writeln. Also it gives
us an example in the codebase of how to invoke a method on an object
in our bindings which may be of use later.
I don't object to your previous approach, just think this might be cleaner.
If I understand correctly, this builds a call to the write() function,
although at my present level of knowledge I don't understand how it
differentiates between "write" being a call to a function and "\n"
being data that will be appended to the evaluated expression that the
function renders to screen.
You pay two small prices:
1) it's slower;
2) the log says "Writing..." regardless of whether write() or writeln()
has been called.
Neither of them is in any way a show stopper of course.
Like you, I prefer to share code where possible, but I don't find this
solution very appealing.
I'd like to call a third function, passing a boolean argument to
represent whether write() or writeln() is called, and make the choice
at two places in the code. But where do you put the third function,
which looks like the Document::write() method but doesn't map to any
FREE ONLINE PHOTOSHARING - Share your photos online with your friends and family!
to find out more!