From 7d3f9b74df63e7c42d11c1eaefc871e49037e244 Mon Sep 17 00:00:00 2001
From: Mark Wooding <mdw@distorted.org.uk>
Date: Thu, 26 May 2016 09:26:09 +0100
Subject: [PATCH] doc/stdmeth.tex: A TikZ diagram of the standard method
 combination.

For safekeeping.  Remove the old (Lisp-specific) SVG version now that we
don't need it any more.
---
 doc/standard-method-combination.svg | 604 ------------------------------------
 doc/stdmeth.tex                     |  96 ++++++
 2 files changed, 96 insertions(+), 604 deletions(-)
 delete mode 100644 doc/standard-method-combination.svg
 create mode 100644 doc/stdmeth.tex

diff --git a/doc/standard-method-combination.svg b/doc/standard-method-combination.svg
deleted file mode 100644
index f2ca2f3..0000000
--- a/doc/standard-method-combination.svg
+++ /dev/null
@@ -1,604 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="389.75183"
-   height="344.37515"
-   id="svg2"
-   sodipodi:version="0.32"
-   inkscape:version="0.46"
-   sodipodi:docname="standard-method-combination.svg"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   version="1.0">
-  <defs
-     id="defs4">
-    <marker
-       inkscape:stockid="Arrow1Mend"
-       orient="auto"
-       refY="0.0"
-       refX="0.0"
-       id="Arrow1Mend"
-       style="overflow:visible;">
-      <path
-         id="path3268"
-         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
-         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
-         transform="scale(0.4) rotate(180) translate(10,0)" />
-    </marker>
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 526.18109 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="744.09448 : 526.18109 : 1"
-       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
-       id="perspective108" />
-    <marker
-       inkscape:stockid="Arrow2Mend"
-       orient="auto"
-       refY="0"
-       refX="0"
-       id="Arrow2Mend"
-       style="overflow:visible">
-      <path
-         id="path3204"
-         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
-         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
-         transform="scale(-0.6,-0.6)" />
-    </marker>
-    <radialGradient
-       xlink:href="#linearGradient3074"
-       r="21.214399"
-       inkscape:collect="always"
-       id="radialGradient3078"
-       fy="158.17307"
-       fx="61.08794"
-       cy="158.17307"
-       cx="61.08794"
-       gradientTransform="scale(1.2180558,0.8209804)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       id="linearGradient3074">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0.53370786;"
-         offset="0.0000000"
-         id="stop3075" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0.69101125;"
-         offset="1.0000000"
-         id="stop3076" />
-    </linearGradient>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     gridtolerance="10000"
-     guidetolerance="10"
-     objecttolerance="10"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="2.268243"
-     inkscape:cx="194.87592"
-     inkscape:cy="172.21547"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:window-width="1337"
-     inkscape:window-height="998"
-     inkscape:window-x="225"
-     inkscape:window-y="17"
-     showborder="false" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <cc:license
-           rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" />
-        <dc:title>SOD standard method combination diagram</dc:title>
-        <dc:date>2009-09-18</dc:date>
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Mark Wooding</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <dc:description>A diagram showing how the applicable methods are invoked by standard method combination in the SOD object system.</dc:description>
-        <dc:rights>
-          <cc:Agent>
-            <dc:title>Straylight/Edgeware</dc:title>
-          </cc:Agent>
-        </dc:rights>
-        <dc:publisher>
-          <cc:Agent>
-            <dc:title>Straylight/Edgeware</dc:title>
-          </cc:Agent>
-        </dc:publisher>
-        <dc:language>en-GB</dc:language>
-      </cc:Work>
-      <cc:License
-         rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#Reproduction" />
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#Distribution" />
-        <cc:requires
-           rdf:resource="http://creativecommons.org/ns#Notice" />
-        <cc:requires
-           rdf:resource="http://creativecommons.org/ns#Attribution" />
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
-        <cc:requires
-           rdf:resource="http://creativecommons.org/ns#ShareAlike" />
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-76.574432,-549.18106)">
-    <g
-       id="g3106">
-      <g
-         transform="translate(-6.4194226,7.8915857)"
-         id="g2941">
-        <use
-           transform="translate(-87.171262,-145.57702)"
-           x="0"
-           y="0"
-           xlink:href="#rect2383"
-           id="use8070"
-           width="744.09448"
-           height="1052.3622" />
-        <use
-           height="1052.3622"
-           width="744.09448"
-           id="use8068"
-           xlink:href="#rect2383"
-           y="0"
-           x="0"
-           transform="translate(-91.171262,-141.57702)" />
-        <use
-           transform="translate(-95.171262,-137.57702)"
-           x="0"
-           y="0"
-           xlink:href="#rect2383"
-           id="use8057"
-           width="744.09448"
-           height="1052.3622" />
-      </g>
-      <text
-         id="text7219"
-         y="743.74951"
-         x="137.82718"
-         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-         xml:space="preserve"><tspan
-           id="tspan7221"
-           y="743.74951"
-           x="137.82718"
-           sodipodi:role="line">Before method</tspan></text>
-      <path
-         sodipodi:nodetypes="cc"
-         id="path7232"
-         d="M 96.33489,740.26133 L 127.09404,709.94688"
-         style="fill:none;fill-rule:evenodd;stroke:#00c800;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <flowRoot
-         transform="translate(-301.49963,-67.218524)"
-         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#00c800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-         id="flowRoot7234"
-         xml:space="preserve"><flowRegion
-           id="flowRegion7236"><rect
-             style="text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#00c800;fill-opacity:1"
-             y="756.86218"
-             x="377"
-             height="38.5"
-             width="35.5"
-             id="rect7238" /></flowRegion><flowPara
-           id="flowPara7240">Most to least specific</flowPara></flowRoot>      <path
-         sodipodi:nodetypes="cc"
-         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         d="M 233.72077,768.23762 L 215.68955,750.20639"
-         id="path7292" />
-      <text
-         xml:space="preserve"
-         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-         x="149.36943"
-         y="762.65088"
-         id="text7294"><tspan
-           sodipodi:role="line"
-           id="tspan7296"
-           x="149.36943"
-           y="762.65088"
-           style="font-style:italic">call-next-method</tspan></text>
-      <path
-         id="path7370"
-         d="M 215.3571,720.94472 L 233.38832,702.91349"
-         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         sodipodi:nodetypes="cc" />
-      <use
-         height="1052.3622"
-         width="744.09448"
-         transform="matrix(1,0,0,-1,193.60423,1471.9955)"
-         id="use2946"
-         xlink:href="#g2941"
-         y="0"
-         x="0" />
-      <text
-         xml:space="preserve"
-         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-         x="334.1524"
-         y="735.396"
-         id="text7428"><tspan
-           sodipodi:role="line"
-           x="334.1524"
-           y="735.396"
-           id="tspan7430">After method</tspan></text>
-      <path
-         style="fill:none;fill-rule:evenodd;stroke:#00c800;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         d="M 414.991,709.26598 L 445.75015,739.58043"
-         id="path7432"
-         sodipodi:nodetypes="cc" />
-      <flowRoot
-         xml:space="preserve"
-         id="flowRoot7434"
-         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#00c800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-         transform="translate(54.25206,-67.572077)"><flowRegion
-           id="flowRegion7436"><rect
-             id="rect7438"
-             width="35.5"
-             height="38.5"
-             x="377"
-             y="756.86218"
-             style="text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#00c800;fill-opacity:1" /></flowRegion><flowPara
-           id="flowPara7440">Least to most specific</flowPara></flowRoot>      <path
-         id="path7442"
-         d="M 309.99443,702.58108 L 328.02565,720.61231"
-         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         sodipodi:nodetypes="cc" />
-      <text
-         id="text7444"
-         y="715.43781"
-         x="326.31656"
-         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-         xml:space="preserve"><tspan
-           style="font-style:italic"
-           y="715.43781"
-           x="326.31656"
-           id="tspan7446"
-           sodipodi:role="line">return</tspan></text>
-      <path
-         sodipodi:nodetypes="cc"
-         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         d="M 328.3581,749.87398 L 310.32688,767.90521"
-         id="path7448" />
-      <path
-         id="path7460"
-         d="M 286.62089,703.05143 L 286.62089,767.7517"
-         style="fill:none;fill-rule:evenodd;stroke:#0000c8;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:0.75000000000000000, 0.75000000000000000;stroke-dashoffset:0;stroke-opacity:1" />
-      <text
-         transform="matrix(0,1,-1,0,0,0)"
-         id="text7983"
-         y="-289.09686"
-         x="705.11279"
-         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#0000c8;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-         xml:space="preserve"><tspan
-           y="-289.09686"
-           x="705.11279"
-           id="tspan7985"
-           sodipodi:role="line">Return value</tspan></text>
-    </g>
-    <g
-       id="g3071">
-      <g
-         id="g2966">
-        <rect
-           y="861.61884"
-           x="211.62221"
-           height="16.482248"
-           width="120.76241"
-           id="rect2383"
-           style="font-size:10px;fill:#c8c8ff;fill-opacity:1;stroke:#000000;stroke-width:0.75;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-        <rect
-           style="font-size:10px;fill:#c8c8ff;fill-opacity:1;stroke:#000000;stroke-width:0.75;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="rect2883"
-           width="120.76241"
-           height="16.482248"
-           x="211.62221"
-           y="828.91174" />
-        <rect
-           style="font-size:10px;fill:#c8c8ff;fill-opacity:1;stroke:#000000;stroke-width:0.75;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           id="rect2875"
-           width="120.76241"
-           height="16.482248"
-           x="211.62221"
-           y="770.448" />
-        <path
-           id="path4477"
-           d="M 243.59829,860.1812 L 243.59829,847.80683"
-           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-        <path
-           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           d="M 295.09829,847.18855 L 295.09829,859.56292"
-           id="path5000" />
-        <text
-           xml:space="preserve"
-           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-           x="239.44922"
-           y="856.36218"
-           id="text2952"
-           sodipodi:linespacing="125%"><tspan
-             sodipodi:role="line"
-             id="tspan2954"
-             x="239.44922"
-             y="856.36218"
-             style="font-style:italic;text-align:end;line-height:125%;writing-mode:lr-tb;text-anchor:end">call-next-method</tspan></text>
-        <text
-           id="text5030"
-           y="855.92719"
-           x="299.5"
-           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-           xml:space="preserve"><tspan
-             style="font-style:italic"
-             y="855.92719"
-             x="299.5"
-             id="tspan5032"
-             sodipodi:role="line">return</tspan></text>
-        <path
-           id="path5048"
-           d="M 295.09829,814.18855 L 295.09829,826.56292"
-           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-        <use
-           x="0"
-           y="0"
-           xlink:href="#text5030"
-           id="use2960"
-           transform="translate(0,-33)"
-           width="744.09448"
-           height="1052.3622" />
-        <path
-           id="path5060"
-           d="M 243.59829,801.6812 L 243.59829,789.30683"
-           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-        <path
-           id="path5046"
-           d="M 243.59829,827.1812 L 243.59829,814.80683"
-           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-        <path
-           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-           d="M 295.09829,788.68855 L 295.09829,801.06292"
-           id="path5062" />
-        <text
-           id="text5072"
-           y="808.65448"
-           x="263"
-           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-           xml:space="preserve"><tspan
-             y="808.65448"
-             x="263"
-             id="tspan5074"
-             sodipodi:role="line">. . .</tspan></text>
-        <use
-           x="0"
-           y="0"
-           xlink:href="#text2952"
-           id="use2956"
-           transform="translate(0,-33)"
-           width="744.09448"
-           height="1052.3622" />
-        <use
-           x="0"
-           y="0"
-           xlink:href="#text2952"
-           id="use2958"
-           transform="translate(0,-58.5)"
-           width="744.09448"
-           height="1052.3622" />
-        <use
-           x="0"
-           y="0"
-           xlink:href="#text5030"
-           id="use2962"
-           transform="translate(0,-58.5)"
-           width="744.09448"
-           height="1052.3622" />
-        <flowRoot
-           xml:space="preserve"
-           id="flowRoot5638"
-           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#00c800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-           transform="translate(-34.5,48.169125)"><flowRegion
-             id="flowRegion5640"><rect
-               id="rect5642"
-               width="35.5"
-               height="38.5"
-               x="377"
-               y="756.86218"
-               style="text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#00c800;fill-opacity:1" /></flowRegion><flowPara
-             id="flowPara5644">Most to least specific</flowPara></flowRoot>        <path
-           id="path3347"
-           d="M 338,876.33367 L 338,772.83367"
-           style="fill:none;fill-rule:evenodd;stroke:#00c800;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      </g>
-      <path
-         id="path3341"
-         d="M 243.59829,892.6812 L 243.59829,880.30683"
-         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <path
-         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-         d="M 295.09829,880.18855 L 295.09829,892.56292"
-         id="path3335" />
-      <use
-         height="1052.3622"
-         width="744.09448"
-         transform="translate(0,33)"
-         id="use2964"
-         xlink:href="#text5030"
-         y="0"
-         x="0" />
-      <g
-         transform="translate(35.976561,0)"
-         id="g2994">
-        <text
-           sodipodi:linespacing="125%"
-           id="text3155"
-           y="873.42499"
-           x="236.11349"
-           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-           xml:space="preserve"><tspan
-             id="tspan3159"
-             y="873.42499"
-             x="236.11349"
-             sodipodi:role="line">Around method</tspan></text>
-        <use
-           x="0"
-           y="0"
-           xlink:href="#text3155"
-           id="use2986"
-           transform="translate(-2.5939942e-6,-32.70712)"
-           width="744.09448"
-           height="1052.3622" />
-        <use
-           x="0"
-           y="0"
-           xlink:href="#text3155"
-           id="use2988"
-           transform="translate(-2.5939942e-6,-91.170866)"
-           width="744.09448"
-           height="1052.3622" />
-      </g>
-    </g>
-    <g
-       id="g3041">
-      <use
-         height="1052.3622"
-         width="744.09448"
-         transform="translate(0,-269.42743)"
-         id="use3038"
-         xlink:href="#text2952"
-         y="0"
-         x="0" />
-      <flowRoot
-         transform="translate(-24.870058,-7.68156)"
-         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-         id="flowRoot7999"
-         xml:space="preserve"><flowRegion
-           id="flowRegion8001"><rect
-             y="558.09454"
-             x="287.08536"
-             height="24.395184"
-             width="79.903069"
-             id="rect8003" /></flowRegion><flowPara
-           id="flowPara8005">âNo next methodâ error</flowPara></flowRoot>      <use
-         height="1052.3622"
-         width="744.09448"
-         transform="translate(-7.6293945e-6,-178.00001)"
-         id="use2990"
-         xlink:href="#g2966"
-         y="0"
-         x="0" />
-      <path
-         id="path7372"
-         d="M 244.26849,590.75383 L 244.26849,578.37946"
-         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000000000000;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
-      <g
-         id="g3138">
-        <path
-           d="M 252.33396,551.87647 L 253.31263,549.30103 L 253.7247,551.92798 L 255.37298,549.97064 L 255.11544,551.97949 L 258.92709,550.3312 L 256.14561,552.80363 L 259.18463,554.91549 L 255.88807,553.98833 L 258.56653,558.62413 L 255.37298,554.81247 L 255.78505,560.58146 L 254.3428,555.58511 L 251.71585,558.26357 L 253.41564,554.70946 L 250.53115,556.25472 L 252.33396,554.45191 L 248.93438,555.37907 L 250.73718,553.7823 L 248.11023,553.16419 L 251.25227,552.54608 L 250.78869,550.12517 L 252.33396,551.87647 z"
-           id="path3079"
-           sodipodi:nodetypes="ccccccccccccccccccccccc"
-           style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.19195631pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-        <path
-           d="M 252.53999,552.6491 L 251.35529,551.41289 L 252.07641,553.00966 L 249.55248,553.2157 L 251.92189,553.67928 L 250.68567,554.55493 L 253.10659,553.98833 L 252.64301,554.76097 L 254.08526,554.03984 L 253.51866,555.63662 L 254.49733,554.86398 L 255.16695,556.61528 L 254.85789,554.24588 L 255.99109,554.76097 L 255.01242,553.57626 L 256.6607,553.67928 L 255.37298,553.11268 L 256.24863,552.13401 L 254.54884,552.39156 L 254.65186,551.41289 L 253.57017,552.90665 L 253.1581,550.94931 L 252.53999,552.6491 z"
-           id="path3080"
-           sodipodi:nodetypes="ccccccccccccccccccccccc"
-           style="fill:#ff3f00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.19195631pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-        <path
-           style="fill:#a6a667;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.23994538;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
-           sodipodi:nodetypes="ccccccccccccccc"
-           id="path1817"
-           d="M 247.30717,549.89628 C 246.00963,549.94176 244.84256,550.91505 244.19739,551.52591 C 243.54502,552.14928 243.51447,553.31251 243.61252,554.07733 C 243.71058,554.84216 243.96644,555.43302 243.96644,555.43302 L 245.06419,554.95313 C 245.06419,554.95313 244.87482,554.509 244.80025,553.92736 C 244.72626,553.35025 244.78543,552.72675 245.16617,552.28974 C 245.60405,551.74993 246.88452,550.98903 248.22897,551.20098 C 249.13851,551.42743 249.67447,552.72927 250.43297,553.23152 C 251.19147,553.73377 252.21663,553.97614 253.54026,553.71141 C 254.12914,553.53696 254.09465,552.46369 253.30631,552.53568 C 252.21323,552.7543 251.61772,552.57935 251.09882,552.23575 C 250.57991,551.89215 250.13911,551.30485 249.60516,550.66411 L 249.59316,550.65811 C 249.11476,550.16521 248.19393,549.88725 247.30717,549.89628 z" />
-        <path
-           style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.19195631pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           sodipodi:nodetypes="cc"
-           id="path2440"
-           d="M 253.49996,552.61443 C 253.49996,552.61443 252.20973,553.87567 251.25293,553.62922" />
-        <path
-           style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.19195631pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           sodipodi:nodetypes="cc"
-           id="path2441"
-           d="M 251.10796,552.23751 C 250.84702,552.54195 249.60028,552.13603 249.0494,551.73012" />
-        <path
-           style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.19195631pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           sodipodi:nodetypes="cc"
-           id="path2442"
-           d="M 247.81716,549.9035 C 247.87515,550.09197 247.1503,551.23722 246.51243,551.39669" />
-        <path
-           style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.19195631pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           sodipodi:nodetypes="cc"
-           id="path2443"
-           d="M 245.2367,550.70084 C 245.2367,550.70084 245.57013,551.62864 245.12073,552.33899" />
-        <path
-           style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.19195631pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           sodipodi:nodetypes="cc"
-           id="path2444"
-           d="M 243.55506,553.2523 C 243.96097,553.2378 244.88878,554.13661 244.93227,554.52803" />
-        <path
-           d="M 242.68783,554.71626 C 242.57768,555.20411 242.65793,556.90337 241.20017,558.32955 C 237.07117,559.4961 234.0618,562.82062 234.0618,566.78418 C 234.0618,571.7145 238.68629,575.71115 244.37945,575.71115 C 250.0726,575.71115 254.6911,571.7145 254.6911,566.78418 C 254.6911,562.61923 251.37869,559.14526 246.92287,558.15833 C 246.14765,557.08259 245.53252,555.5894 245.72314,554.65131 C 245.3779,554.17559 243.72357,553.79879 242.68783,554.71626 z"
-           id="path1193"
-           sodipodi:nodetypes="cccccccc"
-           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
-        <path
-           d="M 103.57781,124.91055 A 30.456171,20.527729 0 1 1 42.665472,124.91055 A 30.456171,20.527729 0 1 1 103.57781,124.91055 z"
-           id="path2452"
-           sodipodi:cx="73.121643"
-           sodipodi:cy="124.91055"
-           sodipodi:rx="30.456171"
-           sodipodi:ry="20.527729"
-           sodipodi:type="arc"
-           style="fill:url(#radialGradient3078);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-           transform="matrix(0.2562315,0,0,0.2197998,225.48526,537.77762)" />
-      </g>
-      <g
-         id="g3028"
-         transform="translate(35.941561,-179.31502)">
-        <text
-           xml:space="preserve"
-           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L"
-           x="236.11349"
-           y="873.42499"
-           id="text3030"
-           sodipodi:linespacing="125%"><tspan
-             sodipodi:role="line"
-             x="236.11349"
-             y="873.42499"
-             id="tspan3032">Primary method</tspan></text>
-        <use
-           height="1052.3622"
-           width="744.09448"
-           transform="translate(-2.5939942e-6,-32.70712)"
-           id="use3034"
-           xlink:href="#text3030"
-           y="0"
-           x="0" />
-        <use
-           height="1052.3622"
-           width="744.09448"
-           transform="translate(-2.5939942e-6,-91.170866)"
-           id="use3036"
-           xlink:href="#text3030"
-           y="0"
-           x="0" />
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/doc/stdmeth.tex b/doc/stdmeth.tex
new file mode 100644
index 0000000..03c3734
--- /dev/null
+++ b/doc/stdmeth.tex
@@ -0,0 +1,96 @@
+%%% -*- mode: latex; TeX-PDF-mode: t -*-
+
+\documentclass{article}
+\usepackage[palatino, helvetica, courier, maths=cmr]{mdwfonts}
+
+\usepackage{syntax}
+\usepackage{tikz}
+\usetikzlibrary{calc}
+\usetikzlibrary{positioning}
+
+\errorcontextlines=999
+
+\begin{document}
+
+\begin{tikzpicture}
+  [>=stealth, thick,
+   order/.append style={color=green!70!black},
+   code/.append style={font=\sffamily},
+   action/.append style={font=\itshape},
+   method/.append style={rectangle, draw=black, thin, fill=blue!30,
+                         text height=\ht\strutbox, text depth=\dp\strutbox,
+                         minimum width=40mm}]
+
+  \def\delgstack#1#2#3{
+    \node (#10) [method, #2] {#3};
+    \node (#11) [method, above=6mm of #10] {#3};
+    \draw [->] ($(#10.north)!.5!(#10.north west) + (0mm, 1mm)$) --
+               ++(0mm, 4mm)
+      node [code, left=4pt, midway] {next_method};
+    \draw [<-] ($(#10.north)!.5!(#10.north east) + (0mm, 1mm)$) --
+               ++(0mm, 4mm)
+      node [action, right=4pt, midway] {return};
+    \draw [->] ($(#11.north)!.5!(#11.north west) + (0mm, 1mm)$) --
+               ++(0mm, 4mm)
+      node [code, left=4pt, midway] {next_method}
+      node (ld) [above] {$\smash\vdots\mathstrut$};
+    \draw [<-] ($(#11.north)!.5!(#11.north east) + (0mm, 1mm)$) --
+               ++(0mm, 4mm)
+      node [action, right=4pt, midway] {return}
+      node (rd) [above] {$\smash\vdots\mathstrut$};
+    \draw [->] ($(ld.north) + (0mm, 1mm)$) -- ++(0mm, 4mm)
+      node [code, left=4pt, midway] {next_method};
+    \draw [<-] ($(rd.north) + (0mm, 1mm)$) -- ++(0mm, 4mm)
+      node [action, right=4pt, midway] {return};
+    \node (p) at ($(ld.north)!.5!(rd.north)$) {};
+    \node (#1n) [method, above=5mm of p] {#3};
+    \draw [->, order] ($(#10.south east) + (4mm, 1mm)$) --
+                        ($(#1n.north east) + (4mm, -1mm)$)
+      node [midway, right, align=left] {Most to \\ least \\ specific};}
+
+  \delgstack{a}{}{Around method}
+  \draw [<-] ($(a0.south)!.5!(a0.south west) - (0mm, 1mm)$) --
+             ++(0mm, -4mm);
+  \draw [->] ($(a0.south)!.5!(a0.south east) - (0mm, 1mm)$) --
+             ++(0mm, -4mm)
+    node [action, right=4pt, midway] {return};
+
+  \draw [->] ($(an.north)!.6!(an.north west) + (0mm, 1mm)$) --
+             ++(-8mm, 8mm)
+    node [code, midway, left=3mm] {next_method}
+    node (b0) [method, above left = 1mm + 4mm and -6mm - 4mm] {};
+  \node (b1) [method] at ($(b0) - (2mm, 2mm)$) {};
+  \node (bn) [method] at ($(b1) - (2mm, 2mm)$) {Before method};
+  \draw [->, order] ($(bn.west) - (6mm, 0mm)$) -- ++(12mm, 12mm)
+    node [midway, above left, align=center] {Most to \\ least \\ specific};
+  \draw [->] ($(b0.north east) + (-10mm, 1mm)$) -- ++(8mm, 8mm)
+    node (p) {};
+
+  \delgstack{m}{above right=1mm and 0mm of an.west |- p}{Primary method}
+  \draw [->] ($(mn.north)!.5!(mn.north west) + (0mm, 1mm)$) -- ++(0mm, 4mm)
+    node [code, left=4pt, midway] {next_method}
+    node [above right = 0mm and -8mm]
+    {$\vcenter{\hbox{\Huge\textcolor{red}{!}}}
+      \vcenter{\hbox{\begin{tabular}[c]{l}
+                       \textsf{next_method} \\
+                       pointer is null
+                     \end{tabular}}}$};
+
+  \draw [->, color=blue, dotted]
+      ($(m0.south)!.2!(m0.south east) - (0mm, 1mm)$) --
+      ($(an.north)!.2!(an.north east) + (0mm, 1mm)$)
+    node [midway, sloped, below] {Return value};
+
+  \draw [<-] ($(an.north)!.6!(an.north east) + (0mm, 1mm)$) --
+             ++(8mm, 8mm)
+    node [action, midway, right=3mm] {return}
+    node (f0) [method, above right = 1mm and -6mm] {};
+  \node (f1) [method] at ($(f0) + (-2mm, 2mm)$) {};
+  \node (fn) [method] at ($(f1) + (-2mm, 2mm)$) {After method};
+  \draw [<-, order] ($(f0.east) + (6mm, 0mm)$) -- ++(-12mm, 12mm)
+    node [midway, above right, align=center] {Least to \\ most \\ specific};
+  \draw [<-] ($(fn.north west) + (6mm, 1mm)$) -- ++(-8mm, 8mm);
+
+\end{tikzpicture}
+
+\end{document}
-- 
2.11.0

