<commit_before><xsl:stylesheet version = '1.0'
    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
    xmlns:bgf="http://planet-sl.org/bgf"
    xmlns:xhtml="http://www.w3.org/1999/xhtml">

  <xsl:output
      method="text"
      encoding="UTF-8"
      omit-xml-declaration="yes"
      />

 <xsl:template match="/bgf:grammar">
      <xsl:apply-templates select="./bgf:*"/>
  </xsl:template>

  <xsl:template match="bgf:production">
    <xsl:if test="./label">
      <xsl:text>[</xsl:text>
      <xsl:value-of select="./label"/>
      <xsl:text>] </xsl:text>
    </xsl:if>
    <xsl:value-of select="./nonterminal"/>
    <xsl:text>:</xsl:text>
    <xsl:choose>
      <xsl:when test="./bgf:expression/choice">
        <xsl:for-each select="./bgf:expression/choice/bgf:expression">
          <xsl:text>
        </xsl:text>
          <xsl:apply-templates select="."/>
        </xsl:for-each>
        <xsl:text>
</xsl:text>
      </xsl:when>
      <xsl:when test="./bgf:expression/sequence">
        <xsl:text>
        </xsl:text>
        <xsl:apply-templates select="./bgf:expression/sequence/*"/>
        <xsl:text>
</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>
        </xsl:text>
        <xsl:apply-templates select="./bgf:expression"/>
        <xsl:text>
</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
  <xsl:template match="bgf:expression">
    <xsl:apply-templates select="./*"/>
  </xsl:template>

  <xsl:template match="marked">
    <xsl:text><![CDATA[<]]> </xsl:text>
    <xsl:apply-templates select="./*"/>
    <xsl:text><![CDATA[>]]> </xsl:text>
  </xsl:template>

  <xsl:template match="plus">
    <xsl:choose>
      <xsl:when test="./bgf:expression/sequence">
        <xsl:text>( </xsl:text>
        <xsl:apply-templates select="./bgf:expression/sequence/*"/>
        <xsl:text>)+ </xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:apply-templates select="./*"/>
        <xsl:text>+ </xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="star">
    <xsl:choose>
      <xsl:when test="./bgf:expression/sequence">
        <xsl:text>( </xsl:text>
        <xsl:apply-templates select="./bgf:expression/sequence/*"/>
        <xsl:text>)* </xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:apply-templates select="./*"/>
        <xsl:text>* </xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
  <xsl:template match="optional">
    <xsl:choose>
      <xsl:when test="./bgf:expression/sequence">
        <xsl:text>( </xsl:text>
        <xsl:apply-templates select="./bgf:expression/sequence/*"/>
        <xsl:text>)? </xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:apply-templates select="./*"/>
        <xsl:text>? </xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
  <xsl:template match="terminal">
    <xsl:text>"</xsl:text>
    <xsl:value-of select="."/>
    <xsl:text>" </xsl:text>
  </xsl:template>
  
  <xsl:template match="value">
    <xsl:choose>
      <xsl:when test=". = 'string'">
        <xsl:text>STRING </xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>INT </xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
  <xsl:template match="epsilon">
    <xsl:text>EPSILON </xsl:text>
  </xsl:template>

  <xsl:template match="empty">
    <xsl:text>EMPTY </xsl:text>
  </xsl:template>

  <xsl:template match="any">
    <xsl:text>ANY </xsl:text>
  </xsl:template>

  <xsl:template match="nonterminal">
    <xsl:value-of select="."/>
    <xsl:text> </xsl:text>
  </xsl:template>

  <xsl:template match="selectable">
    <xsl:value-of select="selector"/>
    <xsl:text>::</xsl:text>
    <xsl:apply-templates select="bgf:expression"/>
  </xsl:template>

  <xsl:template match="sequence">
    <xsl:text>( </xsl:text>
    <xsl:apply-templates select="./*"/>
    <xsl:text>) </xsl:text>
  </xsl:template>

  <!-- top level choices - one per line -->
  <xsl:template match="/bgf:grammar/bgf:production/bgf:expression/choice">
    <xsl:call-template name="car">
      <xsl:with-param name="expr" select="./bgf:expression[1]"/>
    </xsl:call-template>
    <xsl:for-each select="./bgf:expression[position()>1]">
      <xsl:call-template name="cdr">
        <xsl:with-param name="expr" select="."/>
      </xsl:call-template>
    </xsl:for-each>
  </xsl:template>

  <!-- inner choices - BNF bar -->
  <xsl:template match="choice">
    <xsl:text>( </xsl:text>
    <xsl:apply-templates select="./bgf:expression[1]/*"/>
    <xsl:for-each select="./bgf:expression[position()>1]">
      <xsl:text>| </xsl:text>
      <xsl:apply-templates select="./*"/>
    </xsl:for-each>
    <xsl:text>) </xsl:text>
  </xsl:template>

  
  <xsl:template name="car">
    <xsl:param name="expr"/>
    <xsl:text>
</xsl:text>
    <xsl:apply-templates select="$expr/*"/>
    <xsl:text>
</xsl:text>
  </xsl:template>
<commit_msg>pretty-printer working closer to perfection<commit_after><xsl:stylesheet version = '1.0'
    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
    xmlns:bgf="http://planet-sl.org/bgf"
    xmlns:xhtml="http://www.w3.org/1999/xhtml">

  <xsl:output
      method="text"
      encoding="UTF-8"
      omit-xml-declaration="yes"
      />

 <xsl:template match="/bgf:grammar">
      <xsl:apply-templates select="./bgf:*"/>
  </xsl:template>

  <xsl:template match="bgf:production">
    <xsl:if test="./label">
      <xsl:text>[</xsl:text>
      <xsl:value-of select="./label"/>
      <xsl:text>] </xsl:text>
    </xsl:if>
    <xsl:value-of select="./nonterminal"/>
    <xsl:text>:</xsl:text>
    <xsl:choose>
      <xsl:when test="./bgf:expression/choice">
        <xsl:for-each select="./bgf:expression/choice/bgf:expression">
          <xsl:text>
        </xsl:text>
          <xsl:apply-templates select="."/>
        </xsl:for-each>
        <xsl:text>
</xsl:text>
      </xsl:when>
      <xsl:when test="./bgf:expression/sequence">
        <xsl:text>
        </xsl:text>
        <xsl:for-each select="./bgf:expression/sequence/*">
          <xsl:apply-templates select="."/>
          <xsl:text> </xsl:text>
        </xsl:for-each>
        <xsl:text>
</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>
        </xsl:text>
        <xsl:apply-templates select="./bgf:expression"/>
        <xsl:text>
</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
  <xsl:template match="bgf:expression">
    <xsl:apply-templates select="./*"/>
  </xsl:template>

  <xsl:template match="marked">
    <xsl:text><![CDATA[<]]></xsl:text>
    <xsl:apply-templates select="./*"/>
    <xsl:text><![CDATA[>]]></xsl:text>
  </xsl:template>

  <xsl:template match="plus">
    <xsl:apply-templates select="./*"/>
    <xsl:text>+</xsl:text>
  </xsl:template>

  <xsl:template match="star">
    <xsl:apply-templates select="./*"/>
    <xsl:text>*</xsl:text>
  </xsl:template>

  <xsl:template match="optional">
    <xsl:apply-templates select="./*"/>
    <xsl:text>?</xsl:text>
  </xsl:template>
  
  <xsl:template match="terminal">
    <xsl:text>"</xsl:text>
    <xsl:value-of select="."/>
    <xsl:text>"</xsl:text>
  </xsl:template>
  
  <xsl:template match="value">
    <xsl:choose>
      <xsl:when test=". = 'string'">
        <xsl:text>STRING</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>INT</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
  <xsl:template match="epsilon">
    <xsl:text>EPSILON</xsl:text>
  </xsl:template>

  <xsl:template match="empty">
    <xsl:text>EMPTY</xsl:text>
  </xsl:template>

  <xsl:template match="any">
    <xsl:text>ANY</xsl:text>
  </xsl:template>

  <xsl:template match="nonterminal">
    <xsl:value-of select="."/>
  </xsl:template>

  <xsl:template match="selectable">
    <xsl:value-of select="selector"/>
    <xsl:text>::</xsl:text>
    <xsl:apply-templates select="bgf:expression"/>
  </xsl:template>

  <xsl:template match="sequence">
    <xsl:text>( </xsl:text>
    <xsl:for-each select="./*">
      <xsl:apply-templates select="."/>
      <xsl:text> </xsl:text>
    </xsl:for-each>
    <xsl:text>)</xsl:text>
  </xsl:template>

  <!-- top level choices - one per line -->
  <xsl:template match="/bgf:grammar/bgf:production/bgf:expression/choice">
    <xsl:call-template name="car">
      <xsl:with-param name="expr" select="./bgf:expression[1]"/>
    </xsl:call-template>
    <xsl:for-each select="./bgf:expression[position()>1]">
      <xsl:call-template name="cdr">
        <xsl:with-param name="expr" select="."/>
      </xsl:call-template>
    </xsl:for-each>
  </xsl:template>

  <!-- inner choices - BNF bar -->
  <xsl:template match="choice">
    <xsl:text>( </xsl:text>
    <xsl:apply-templates select="./bgf:expression[1]/*"/>
    <xsl:for-each select="./bgf:expression[position()>1]">
      <xsl:text>| </xsl:text>
      <xsl:apply-templates select="./*"/>
    </xsl:for-each>
    <xsl:text>)</xsl:text>
  </xsl:template>

  
  <xsl:template name="car">
    <xsl:param name="expr"/>
    <xsl:text>
</xsl:text>
    <xsl:apply-templates select="$expr/*"/>
    <xsl:text>
</xsl:text>
  </xsl:template>

{'fraction_non_alphanumeric': 0.22218575648178537, 'fraction_numerical': 0.003719505524559676, 'mean_word_length': 2.921921921921922, 'pattern_counts': {'":': 0, '<': 344, '<?xml version=': 0, '>': 348, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 8}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4367384', 'n_tokens_mistral': 3700, 'n_tokens_neox': 3260, 'n_words': 462}