Hendrik Boom wrote on 04/30/2017 08:25 AM:
On Sat, Apr 29, 2017 at 05:24:39PM -0400, Neil Van Dyke wrote:
Alternatively, and simpler: you might have two window panes, one in which
the user writes Scribble source, and another that gives an almost-live
semi-WYSIWYG view of how the source would render. Ideally have the
semi-WYSIWYG one approximate UI cues like text cursor point and selection
highlighting in the semi-WYSIWG view.
This is the approach that makes sense to me. But pointing and
selecting in the semi-WYSIWYG window would probaby require deep
involvement in scribble's own code.
Doing it perfectly would. I'm proposing this as an exercise in clever
hacking for a student, not routine engineering.
For one approach, a semi-WYSIWYG program could "experiment" with the
renderer, to see what the output is for a given input construct, and see
whether it can trace the input text through, and what happens to it. If
it can't see where the text went, then maybe that text just appears
non-WYSIWYG with an box around it, and you can still represent points
and selections. But if the program can find the input text in the
output, then the program can look for attributes of the rendering in
which it is interested (mainly typeface/size/color changes), and
selectively apply those to its semi-WYSIWYG view.
Constructs that require more complex structure, like itemized lists, are
a harder problem, but not intractable, if you don't need to be perfect.
These are easier if you're wiling to send real valid documents through a
renderer, and remember things you've learned.
There are also some UI design decisions to make about how semi-WYSIWYG
handles output it can't figure out. Consider a user-defined procedure
`plural`, which, for example, takes the input "try" and ultimately
renders as "tries". You can't trace that text through (unless you want
to throw linguistics at this particular contrived example, which I
suspect would be irrelevant overkill for real world situations). You
might decide that such things are rendered semi-WYSIWYG as a two-part
input-output box, or you might just show the input in a box, or (if you
don't need to be editable) show only an approximation of the output, or
show only the output approximation except when the cursor/pointer is in
it or adjacent.
You received this message because you are subscribed to the Google Groups "Racket
To unsubscribe from this group and stop receiving emails from it, send an email
For more options, visit https://groups.google.com/d/optout.