Homebase

Two layers of a scholarly edition, and the mapping between them. Drawn for HoMe Base (home.digitaltolkien.com), whose Text Type ribbon this reproduces: the chapter as one linear strip, each cell's width its share of the tokens, green where a primary text has been identified. Below it the document layer — the leaves themselves. Most are not transcribed, which is the point of showing them: the presentation layer is a thin selection over a much larger corpus. Where a leaf is transcribed, the ink sits in a text block inset from the edge, and a partial region shows a P-text starting or ending part-way down a page. P3 survives only as a fragment on one torn scrap. Three features of <isometric> do the work. flow="run" lays a contiguous strip whose widths are proportional weights, which is the only way to get a seamless ribbon: squares set side by side across the screen project to rhombi that meet at a point and leave gaps, so a run has to go along a plane axis. rows with flow="down" wraps the leaves down each column before moving right — fill them across instead and the links cross, because a wrapped sequence then backtracks past a whole column. And shape="line" fans one P-text to its many leaves from along its own length, so the fan shows where in the text each leaf picks up; the four-cornered prism that suits a one-to-one link is unreadable here.

Diagrams 1175 × 592 <isometric><layer><link><rect><style>

Result

Source examples/homebase.svgn

<diagram padding="30" theme="light">
  <!-- Two layers of a scholarly edition, and the mapping between them. Drawn
       for HoMe Base (home.digitaltolkien.com), whose Text Type ribbon this
       reproduces: the chapter as one linear strip, each cell's width its share
       of the tokens, green where a primary text has been identified.

       Below it the document layer — the leaves themselves. Most are not
       transcribed, which is the point of showing them: the presentation layer
       is a thin selection over a much larger corpus. Where a leaf *is*
       transcribed, the ink sits in a text block inset from the edge, and a
       partial region shows a P-text starting or ending part-way down a page.
       P3 survives only as a fragment on one torn scrap.

       Three features of `<isometric>` do the work. `flow="run"` lays a
       contiguous strip whose widths are proportional weights, which is the only
       way to get a seamless ribbon: squares set side by side *across* the
       screen project to rhombi that meet at a point and leave gaps, so a run
       has to go along a plane axis. `rows` with `flow="down"` wraps the leaves
       down each column before moving right — fill them across instead and the
       links cross, because a wrapped sequence then backtracks past a whole
       column. And `shape="line"` fans one P-text to its many leaves from along
       its own length, so the fan shows *where* in the text each leaf picks up;
       the four-cornered prism that suits a one-to-one link is unreadable here. -->
  <style>
    .sv-iso-plane  { fill: #f2f2f2; fill-opacity: 0.7; stroke: #9a9a9a; }
    .sv-iso-tile   { fill: #ffffff; stroke: #444444; }
    .sv-iso-region { fill: #b3ec79; stroke: #6f6f6f; }
    .sv-iso-link   { stroke: #606060; }
    /* the P-texts are the subject and stay solid; the unassigned runs between
       them are context, and go see-through so a link crossing one stays
       traceable back to the P-text it leaves */
    .p { fill: #b3ec79; stroke: #7a7a7a; }
    .x { fill: #cccccc; fill-opacity: 0.6; stroke: #8f8f8f; }
  </style>
  <isometric>
    <!-- a run: contiguous cells, widths proportional, no plane behind it -->
    <layer label="presentation layer" flow="run" tile-upright="true" plane="none" length="620" tile-height="72">
      <rect width="510" class="x"/>
      <rect width="2073" id="P1" label="P1" class="p"/>
      <rect width="815" class="x"/>
      <rect width="2760" id="P2" label="P2" class="p"/>
      <rect width="1515" class="x"/>
      <rect width="710"  id="P3" label="P3" class="p"/>
      <rect width="1351" class="x"/>
    </layer>

    <!-- a grid: 2 rows, filled down-then-right so a wrapped run cannot cross -->
    <layer label="document layer" rows="2" flow="down" tile-width="30" tile-height="34" tile-padding="4.5">
      <rect/><rect/>
      <rect id="p13" region="0.42 1"/><rect id="p14" region="0 1"/>
      <rect id="p15" region="0 1"/><rect id="p16" region="0 1"/>
      <rect id="p17" region="0 0.55"/><rect/>
      <rect/><rect/><rect/><rect/><rect/><rect/>
      <rect id="p19" region="0.30 1"/><rect id="p20" region="0 1"/>
      <rect id="p21" region="0 1"/><rect id="p22" region="0 1"/>
      <rect id="p23" region="0 1"/><rect id="p24" region="0 1"/>
      <rect id="p25" region="0 0.60"/><rect/>
      <rect/><rect/><rect/><rect/>
      <rect id="scrap" ragged="true" width="26" height="28" region="0.30 0.62"/>
    </layer>

    <link from="P1" to="p13 p14 p15 p16 p17" shape="line"/>
    <link from="P2" to="p19 p20 p21 p22 p23 p24 p25" shape="line"/>
    <link from="P3" to="scrap" shape="line"/>
  </isometric>
</diagram>

Open the SVG →