cleaned up, before adding more info to morpho

Change-Id: Ia6ee0a1dc5ba825ea3f979fc3a410eed5c9842e7
diff --git a/nkjp2korap.xsl b/nkjp2korap.xsl
index d2d8bc0..9bd3ce6 100644
--- a/nkjp2korap.xsl
+++ b/nkjp2korap.xsl
@@ -27,7 +27,11 @@
           (this is just for testing)  -->
   
   <xsl:param name="SHOW_ORTH_IN_STRUCT" as="xs:boolean" select="true()"/>
-  <!-- for debugging structure.xml production -->
+  <!-- for debugging structure.xml production; otherwise we don't see the referenced span -->
+  
+  <xsl:param name="SHOW_REDUNDANT_ORTH" as="xs:boolean" select="true()"/>
+  <!--  in layers such as morpho or named, one can recover the orth, so this is a bit of 
+        space-wasting luxury, useful at the early stages -->
   
 
 <!--          VARIABLES (= constants...)            -->
@@ -59,6 +63,7 @@
 <!--           MODES               -->
 
   <xsl:mode name="struct" on-no-match="deep-skip"/>
+  <xsl:mode name="morpho" on-no-match="deep-skip"/>
   <xsl:mode name="corpus-header" on-no-match="deep-skip"/>
   <xsl:mode name="text-header" on-no-match="deep-skip"/>
   <xsl:mode name="text_inside_header" on-no-match="text-only-copy"/>
@@ -66,12 +71,12 @@
   <xsl:mode use-accumulators="#all"/>
 
   <xsl:accumulator name="element-index" as="xs:integer" initial-value="0">
-    <xsl:accumulator-rule match="tei:*[ancestor-or-self::tei:text]" select="$value + 1" phase="start"/>
+    <!--<xsl:accumulator-rule match="tei:*[ancestor-or-self::tei:text]" select="$value + 1" phase="start"/>-->
+    <xsl:accumulator-rule
+      match="tei:teiCorpus/tei:TEI/(tei:text | tei:text/tei:body | tei:text/tei:body/tei:p | tei:text/tei:body/tei:p/tei:s | tei:text/tei:body/tei:p/tei:s/tei:seg)"
+      select="$value + 1" phase="start"/>
   </xsl:accumulator>
-  
-  
-  
-  <!--I think I may be able to actually merge the two accumulators, but let's see-->
+
   <xsl:accumulator name="morpho-offsets" as="map(xs:string, item()+)+" initial-value="(map{'null':(0,0)})">
  
     <xsl:accumulator-rule match="tei:body/tei:p" phase="start">
@@ -89,7 +94,7 @@
         string(@xml:id): ($preceding_index,$our_base)
         }"/>
     </xsl:accumulator-rule>
-                                                                            <!-- this is morpho-offsets -->
+ 
     <xsl:accumulator-rule match="tei:s" phase="start">
       <xsl:variable name="preceding_index" as="xs:integer">
         <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
@@ -103,7 +108,6 @@
         string(@xml:id): ($preceding_index,$our_base)
         }"/>
     </xsl:accumulator-rule>
-                                                                            <!-- this is morpho-offsets -->
     
 <!--   I want something that won't be matched in other layers, for efficiency - that 
       may allow me to merge the accumulators, eventually;
@@ -123,7 +127,7 @@
         }"/>
       
     </xsl:accumulator-rule>
-                                                                            <!-- this is morpho-offsets -->
+
     <xsl:accumulator-rule match="tei:s" phase="end">
       <xsl:variable name="preceding_index" as="xs:integer">
         <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
@@ -141,7 +145,7 @@
         string(@xml:id): ($our_base,$preceding_index)
         }"/>
     </xsl:accumulator-rule>
-                                                                            <!-- this is morpho-offsets -->
+
     <xsl:accumulator-rule match="tei:body/tei:p" phase="end">
       <xsl:variable name="preceding_index" as="xs:integer">
         <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
@@ -159,117 +163,7 @@
         string(@xml:id): ($our_base,$preceding_index)
         }"/>
     </xsl:accumulator-rule>
-    
-    <xsl:accumulator-rule match="tei:body" phase="end">
-      <xsl:variable name="preceding_index" as="xs:integer">
-        <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
-        <xsl:sequence select="map:get($the_tail, map:keys($the_tail)[1])[2]"/>
-      </xsl:variable>
-      
-      <xsl:sequence select="
-        $value,
-        map {
-        string(@xml:id): (0, $preceding_index)
-        }"/>
-    </xsl:accumulator-rule>
-    
-    <xsl:accumulator-rule match="tei:text" phase="end">
-      <xsl:variable name="preceding_index" as="xs:integer">
-        <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
-        <xsl:sequence select="map:get($the_tail, map:keys($the_tail)[1])[2]"/>
-      </xsl:variable>
-      
-      <xsl:sequence select="
-        $value,
-        map {
-        string(@xml:id): (0, $preceding_index)
-        }"/>
-    </xsl:accumulator-rule>
-    
-  </xsl:accumulator>
 
-  <xsl:accumulator name="segmentation-offsets" as="map(xs:string, item()+)+" initial-value="(map{'null':(0,0)})">
-    
-    <xsl:accumulator-rule match="tei:body/tei:p" phase="start">
-      <xsl:variable name="preceding_index" as="xs:integer">
-        <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
-        <xsl:sequence select="map:get($the_tail,map:keys($the_tail)[1])[2]"/>
-      </xsl:variable>
-      
-      <xsl:variable name="our_base" as="xs:integer" select="if($preceding_index eq 0) then $preceding_index else $preceding_index + 1"/>
-      <!--  for paragraphs, it's in either being initial or not    -->
-      
-      <xsl:sequence select="
-        $value,
-        map {
-        string(@xml:id): ($preceding_index,$our_base)
-        }"/>
-    </xsl:accumulator-rule>
-    
-    <xsl:accumulator-rule match="tei:s" phase="start">
-      <xsl:variable name="preceding_index" as="xs:integer">
-        <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
-        <xsl:sequence select="map:get($the_tail,map:keys($the_tail)[1])[2]"/>
-      </xsl:variable>
-      <xsl:variable name="our_base" as="xs:integer" select="if($preceding_index eq 0) then $preceding_index else $preceding_index + xs:integer(f:is_preceded_by_ws(.,true()))"/>
-      
-      <xsl:sequence select="
-        $value,
-        map {
-        string(@xml:id): ($preceding_index,$our_base)
-        }"/>
-    </xsl:accumulator-rule>
-    
-    <xsl:accumulator-rule match="tei:w[parent::tei:seg[count(@nkjp:rejected) eq 0]]" phase="end">
-      <xsl:variable name="preceding_index" as="xs:integer">
-        <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
-        <xsl:sequence select="map:get($the_tail,map:keys($the_tail)[1])[2]"/>
-      </xsl:variable>
-      <xsl:variable name="our_base" as="xs:integer" select="$preceding_index + xs:integer(f:is_preceded_by_ws(parent::tei:seg,true()))"/>
-      
-      <xsl:sequence select="
-        $value,
-        map {
-        string(parent::tei:seg/@xml:id): ($our_base,$our_base + string-length())
-        }"/>
-    </xsl:accumulator-rule>
-    
-    <xsl:accumulator-rule match="tei:s" phase="end">
-      <xsl:variable name="preceding_index" as="xs:integer">
-        <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
-        <xsl:sequence select="map:get($the_tail,map:keys($the_tail)[1])[2]"/>
-        
-      </xsl:variable>
-      <xsl:variable name="our_base" as="xs:integer">
-        <xsl:variable name="incomplete" select="map:find($value,string(@xml:id))(1)" as="xs:integer+"/>
-        <xsl:sequence select="$incomplete[2]"/>
-      </xsl:variable>
-      
-      <xsl:sequence select="
-        $value,
-        map {
-        string(@xml:id): ($our_base,$preceding_index)
-        }"/>
-    </xsl:accumulator-rule>
-    
-    <xsl:accumulator-rule match="tei:body/tei:p" phase="end">
-      <xsl:variable name="preceding_index" as="xs:integer">
-        <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
-        <xsl:sequence select="map:get($the_tail,map:keys($the_tail)[1])[2]"/>
-        
-      </xsl:variable>
-      <xsl:variable name="our_base" as="xs:integer">
-        <xsl:variable name="incomplete" select="map:find($value,string(@xml:id))(1)" as="xs:integer+"/>
-        <xsl:sequence select="$incomplete[2]"/>
-      </xsl:variable>
-      
-      <xsl:sequence select="
-        $value,
-        map {
-        string(@xml:id): ($our_base,$preceding_index)
-        }"/>
-    </xsl:accumulator-rule>
-    
     <xsl:accumulator-rule match="tei:body" phase="end">
       <xsl:variable name="preceding_index" as="xs:integer">
         <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
@@ -282,7 +176,7 @@
         string(@xml:id): (0, $preceding_index)
         }"/>
     </xsl:accumulator-rule>
-    
+
     <xsl:accumulator-rule match="tei:text" phase="end">
       <xsl:variable name="preceding_index" as="xs:integer">
         <xsl:variable name="the_tail" as="map(*)" select="head(reverse($value))"/>
@@ -295,6 +189,7 @@
         string(@xml:id): (0, $preceding_index)
         }"/>
     </xsl:accumulator-rule>
+    
   </xsl:accumulator>
 
   <!--           FUNCTIONS             -->
@@ -314,11 +209,7 @@
     <xsl:choose>
       <xsl:when test="local-name($node) eq 'seg'">
         <xsl:choose>
-          <xsl:when test="$node/@nkjp:nps">
-            <xsl:sequence select="fn:false()"/>
-          </xsl:when>
           <xsl:when test="$node/tei:fs/tei:f[@name eq 'nps']">
-            <!--added for traversing ann_morphosyntax-->
             <xsl:sequence select="fn:false()"/>
           </xsl:when>
           <xsl:when
@@ -327,13 +218,7 @@
             <!-- the otherwise very costly check for preceding segs fires only if the first two are true, so it will have minimal search space -->
           </xsl:when>
           <xsl:when
-            test="$suppress_initial and $node/ancestor::tei:s/descendant::tei:seg[count(@nkjp:rejected) eq 0][1]/@xml:id eq $node/@xml:id">
-            <!--  I forget how node identity works now, so let me just compare the IDs        -->
-            <xsl:sequence select="fn:false()"/>
-          </xsl:when>
-          <xsl:when
             test="$suppress_initial and $node/ancestor::tei:s/descendant::tei:seg[tei:fs/tei:f[@name eq 'disamb']][1]/@xml:id eq $node/@xml:id">
-            <!--added for traversing ann_morphosyntax-->
             <xsl:sequence select="fn:false()"/>
           </xsl:when>
           <xsl:otherwise>
@@ -370,18 +255,6 @@
   <xsl:template match="@default" mode="#all"/>
   <!--  this is to delete some auto-inserted attribute throughout -->
 
-  <xsl:template match="tei:w" mode="#all"/> 
-<!-- NKJP-SGJP has apparently resigned from standoff representations by adding <w> everywhere;
-     we reach for them, but from the level of <seg>, so we don't need to process <w> separately -->
-
-    <!-- fall-thru, skipping the potential <paren> element and filtering out the bad guys -->
-  <xsl:template match="tei:choice" mode="struct">
-    <xsl:apply-templates select="descendant::tei:seg[count(@nkjp:rejected) eq 0]" mode="struct"/>
-  </xsl:template>
-  <xsl:template match="tei:choice" mode="morpho">
-    <xsl:apply-templates select="descendant::tei:seg[count(@nkjp:rejected) eq 0]" mode="morpho"/>
-  </xsl:template>
-
   <!--             MAIN PROCESSING              -->
 
   <xsl:template name="xsl:initial-template">
@@ -432,7 +305,6 @@
   <xsl:template name="process_single_sample">
     <xsl:param name="text.doc" as="document-node()"/>
     <xsl:param name="ann_morphosyntax.doc" as="document-node()"/>
-<!--    <xsl:param name="ann_segmentation.xml" as="document-node()"/>-->
     <xsl:param name="my_textID" as="xs:string" select="'0-BAD_textID'"/>
     <!-- empty textID should never happen, but if it does, it will be signalled at the top of the output   -->
     <xsl:param name="ann_named.doc" as="document-node()*"/>
@@ -466,12 +338,7 @@
       <xsl:with-param name="target" select="$targetBaseDir ||  '/nkjp/morpho.xml'" as="xs:string"/>
     </xsl:call-template>
 
-<!--
-      
-      THESE ARE SAFE
-      
-      
-      <xsl:call-template name="create_text_header">
+   <xsl:call-template name="create_text_header">
       <xsl:with-param name="text.doc" select="$text.doc" as="document-node()"/>
       <xsl:with-param name="compoundID" select="$compoundID" as="xs:string"/>
       <xsl:with-param name="target" select="$targetBaseDir ||  '/header.xml'" as="xs:string"/>
@@ -482,8 +349,8 @@
           <xsl:for-each
             select="$ann_named.doc//tei:seg/tei:ptr">
             <xsl:variable name="trg" as="xs:string" select="fn:substring-before(@target, '#')"/>
-            <!-\- caution: as of 01-June-2022, some of the pointers are malformed (missing '#' when referencing locally).
-             so we need to act around it but also sustainably - in case that error gets corrected -\->
+            <!-- caution: as of 01-June-2022, some of the pointers are malformed (missing '#' when referencing locally).
+             so we need to act around it but also sustainably - in case that error gets corrected -->
 
             <xsl:if test="fn:string-length($trg) and $trg eq 'ann_morphosyntax.xml'">
             <xsl:sequence>
@@ -505,7 +372,7 @@
         <xsl:with-param name="rev_lookup" select="$rev_lookup" as="map(*)"/>
       </xsl:call-template>
     </xsl:if>
--->
+
     <xsl:if test="$ann_words.doc and $ann_groups.doc">
       <xsl:call-template name="create_groups">
         <xsl:with-param name="compoundID" select="$compoundID" as="xs:string"/>
@@ -540,7 +407,6 @@
 
         <xsl:element name="text" namespace="{$KorAP_namespace}">
           <xsl:variable name="content" as="xs:string+">
-            <!--<xsl:for-each select="$ann_morphosyntax.doc/tei:teiCorpus/tei:TEI/tei:text/tei:body/tei:p/tei:s//tei:seg[count(@nkjp:rejected) eq 0]">-->
             <xsl:for-each select="$ann_morphosyntax.doc/tei:teiCorpus/tei:TEI/tei:text/tei:body/tei:p/tei:s/tei:seg[tei:fs/tei:f[@name eq 'disamb']]">
               <xsl:sequence select="
                   if (f:is_preceded_by_ws(.,false())) then
@@ -590,7 +456,11 @@
       <xsl:attribute name="to" select="$offsets[2]"/>
       <xsl:attribute name="l" select="f:compute_nesting(.)"/>
       <xsl:if test="local-name() eq 'seg' and $SHOW_ORTH_IN_STRUCT">
-        <xsl:comment><xsl:value-of select="fn:normalize-space(.)"/></xsl:comment>
+        <xsl:comment select="
+                (if (tei:fs/tei:f[@name eq 'nps']) then
+                  ' '
+                else
+                  ' _') || tei:fs/tei:f[@name eq 'orth']/tei:string"/>
       </xsl:if>
       <xsl:element name="fs" namespace="http://www.tei-c.org/ns/1.0">
         <xsl:attribute name="type" select="'struct'"></xsl:attribute>  <!-- STRUCT vs. LEX for morpho -->
@@ -632,7 +502,7 @@
         <xsl:attribute name="version" select="$KorAP-XML_version"/>
         
         <xsl:element name="spanList" namespace="{$KorAP_namespace}">
-          <xsl:apply-templates select="$ann_morphosyntax.doc//tei:text" mode="morpho"/>
+          <xsl:apply-templates select="$ann_morphosyntax.doc/tei:teiCorpus/tei:TEI/tei:text/tei:body/tei:p/tei:s/tei:seg" mode="morpho"/>
         </xsl:element>
       </xsl:element>
     </xsl:result-document>
@@ -647,8 +517,6 @@
       <xsl:sequence select="map:get(fn:accumulator-after('morpho-offsets')[last()], string(@xml:id))"/>
     </xsl:variable>
 
-    <xsl:variable name="my_id" select="@xml:id" as="xs:string"/>
-    <!--<xsl:variable name="my_morph-seg" as="node()" select="$ann_morphosyntax.doc//tei:seg[substring-after(@corresp,'#') eq $my_id]"/>-->
     <xsl:variable name="my_disamb" select="tei:fs/tei:f[@name eq 'disamb']" as="node()"/>
     <xsl:variable name="my_choice-id" select="substring-after($my_disamb//tei:f[@name eq 'choice']/@fVal,'#')" as="xs:string"/>
     <xsl:variable name="my_choice-lex" select="tei:fs/tei:f[@name eq 'interps']/tei:fs[@type eq 'lex'][descendant::tei:symbol[@xml:id eq $my_choice-id]]" as="node()"/>
@@ -664,11 +532,13 @@
         <xsl:attribute name="type" select="'lex'"/>
         <xsl:element name="f" namespace="http://www.tei-c.org/ns/1.0">
           <xsl:attribute name="name" select="'lex'"/>
-          <xsl:comment select="
+          <xsl:if test="$SHOW_REDUNDANT_ORTH">
+            <xsl:comment select="
                 (if (tei:fs/tei:f[@name eq 'nps']) then
                   ' '
                 else
                   ' _') || tei:fs/tei:f[@name eq 'orth']/tei:string"/>
+          </xsl:if>
           <xsl:element name="fs" namespace="http://www.tei-c.org/ns/1.0">
             <xsl:element name="f" namespace="http://www.tei-c.org/ns/1.0">
               <xsl:attribute name="name" select="'lemma'"/>
@@ -748,11 +618,13 @@
           <xsl:attribute name="type" select="'ne'"/>
           <xsl:element name="f" namespace="http://www.tei-c.org/ns/1.0">
             <xsl:attribute name="name" select="'ne'"/>
-            <xsl:comment select="
-                (if (tei:fs/tei:f[@name eq 'nps']) then
-                  ' '
-                else
-                  ' _') || tei:fs/tei:f[@name eq 'orth']/tei:string"/>
+            <xsl:if test="$SHOW_REDUNDANT_ORTH">
+              <xsl:comment select="
+                  (if (tei:fs/tei:f[@name eq 'nps']) then
+                    ' '
+                  else
+                    ' _') || tei:fs/tei:f[@name eq 'orth']/tei:string"/>
+            </xsl:if>
             <xsl:element name="fs" namespace="http://www.tei-c.org/ns/1.0">
               <xsl:element name="f" namespace="http://www.tei-c.org/ns/1.0">
                 <xsl:attribute name="name" select="'complex-ent'"/>
@@ -798,8 +670,7 @@
         <xsl:attribute name="version" select="$KorAP-XML_version"/>
         
         <xsl:element name="spanList" namespace="{$KorAP_namespace}">
-          <!--<xsl:apply-templates select="$ann_segmentation.xml//tei:text" mode="groups">
-            <xsl:with-param name="ann_morphosyntax.doc" select="$ann_morphosyntax.doc" as="document-node()" tunnel="yes"/>
+          <!--<xsl:apply-templates select="$ann_morphosyntax.doc//tei:text" mode="groups">
             <xsl:with-param name="ann_words.doc" select="$ann_words.doc" as="document-node()" tunnel="yes"/>
             <xsl:with-param name="ann_groups.doc" select="$ann_groups.doc" as="document-node()" tunnel="yes"/>
           </xsl:apply-templates>-->