[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Help With Homework: HTML Tables to CALS

Subject: Re: Help With Homework: HTML Tables to CALS
From: "David Birnbaum djbpitt@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 23 Jan 2020 17:31:05 -0000
Re:  Help With Homework: HTML Tables to CALS
Dear XSL-list,

Is there information anywhere about how to construct a memo function? I see
that support for it it is built into Saxon PE and EE, but does anyone know
of an example or description of how to construct a memo function in HE, or
a different XSLT engine that does already incorporate hooks for that
functionality?

Thanks,

David

On Thu, Jan 23, 2020 at 11:15 AM Michael Kay mike@xxxxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> One technique I have found useful in converting algorithms designed for
> procedural programming languages is to use memo functions. For example, if
> you need to assign  (row, column, height, depth) properties to every cell
> in a table, you don't necessarily need to construct a data structure
> holding that information; if you have a function (or set of functions) that
> computes the properties in terms of the corresponding properties for other
> cells in the table, and if you make that computation a memo function, then
> the data structure is there in the implicit memory of the memo function,
> and doesn't need to be exposed explicitly in variables. To take an example
> with a one-dimensional table where every cell has a colspan attribute, we
> can compute
>
> function f:column($cell) { $cell ! (if (preceding-sibling::cell) then
> (column(preceding-sibling::cell) + (@colspan, 1)[1]) else 1) }
>
> and if this is a memo function, we don't need to worry about the cost of
> repeated computation of the function.
>
> Michael Kay
> Saxonica
>
> On 23 Jan 2020, at 15:59, Eliot Kimber ekimber@xxxxxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Andrew's code will almost certainly allow me to solve my immediate problem.
>
> I would still be interested in an XSLT 3 solution that uses arrays or
> maps, but I might be able to work it out myself, although I know that I
> don't fully grok the best/most compact way to do things, for example,
> taking advantage of higher-order functions or fold-* approaches.
>
> Cheers,
>
> E.
> --
> Eliot Kimber
> http://contrext.com
>
>
> o;?On 1/23/20, 9:37 AM, "Martin Honnen martin.honnen@xxxxxx" <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
>    Am 23.01.2020 um 16:30 schrieb Eliot Kimber ekimber@xxxxxxxxxxxx:
>
> I have XSLT 1-style code that converts HTML tables to CALS tables. I
> discovered that this code fails for certain patterns of HTML tables in that
> it miscalculates column spans in the face of row spans earlier in the
> table. It doesn't fail for all tables, just specific ones (which is why we
> didn't notice this bug earlier). I haven't been able to determine the cause
> of the bug in the short time I've had to debug it (found the bug in the
> course of trying to prepare a rush publishing job that has about 50 complex
> tables in it, of course).
>
> Rather than try to debug and fix the XSLT 1 solution it seemed easier and
> better to re-implement the processing using XSLT 3 and I took a stab at
> doing it using arrays last night, but quickly got bogged down in my own
> lack of facility with such things. The procedural solution in i.e., Java,
> would be easy: just populate the 2x2 matrix that represents the table grid
> to reflect row and column spans as you process the table cells
> left-to-right and top to bottom, using cells projected from earlier rows to
> determine the starting column of cells in subsequent rows that get pushed
> over by row-spanning cells.
>
> However, I couldn't quickly see how to do this using arrays or maps in
> XSLT 3--the immutability of arrays and thus the coding patterns that take
> existing arrays or maps and return new ones threw me and my feeble brain
> just wasn't landing on the right algorithmic pattern.
>
> I know there must be a general pattern for this type of processing but
> none of the examples I could find were helpful.
>
> So my request: can someone help me with this challenge and outline how to
> solve this kind of problem where you take as input an HTML table where any
> cell may span two or more columns and two or more rows and produce a 2x2
> array representing the table's grid, where every grid cell reflects the
> HTML table cell that covers it.
>
> From that array it's then easy to determine what the CALS result should be
> (where CALS represents column spans by naming the start and end columns the
> cell spans).
>
>
>    Does Andrew's XSLT 2 code help?
>    http://andrewjwelch.com/code/xslt/table/table-normalization.html
>
>
>
>
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/3318727> (by
> email <>)

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.