<xsl:stylesheet version = "1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:fopl="http:www.cogsci.ed.ac.uk/~kari/firstOrderPredicateLogic"
  xmlns="http://www.w3.org/1999/xhtml">

  <xsl:output method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:param name="group"/>

  <xsl:template match="fopl:assertions">
    <xsl:choose>
      <xsl:when test="$group='yes'">
        <xsl:call-template name="grouped"/>
      </xsl:when>
      <xsl:when test="$group='no'">
        <xsl:call-template name="ungrouped"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>required parameter missing: group [yes|no]</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template name="ungrouped">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template name="grouped">
    <xsl:variable name="individualTypes"
      select="fopl:individual[not(@type=preceding-sibling::fopl:individual/@type)]"/>
    <xsl:text>Types&#xA;&#xA;</xsl:text>
    <xsl:for-each select="$individualTypes">
      <xsl:value-of select="@type"/>
      <xsl:text>&#xA;  </xsl:text>
      <xsl:for-each select="../fopl:individual[@type=current()/@type]">
        <xsl:value-of select="@id"/><xsl:text>&#x20;</xsl:text>
      </xsl:for-each>
      <xsl:text>&#xA;</xsl:text>
    </xsl:for-each>

    <xsl:text>&#xA;</xsl:text>

    <xsl:variable name="relationNames"
      select="fopl:relation[not(@name=preceding-sibling::fopl:relation/@name)]"/>
    <xsl:text>Relations</xsl:text>
    <xsl:text>&#xA;&#xA;</xsl:text>
    <xsl:for-each select="$relationNames">
      <xsl:value-of select="@name"/>
      <xsl:text>&#xA;  </xsl:text>
      <xsl:for-each select="../fopl:relation[@name=current()/@name]">
        <xsl:text>[</xsl:text>
        <xsl:apply-templates select="*[1]"/>
        <xsl:text>, </xsl:text>
        <xsl:apply-templates select="*[2]"/>
        <xsl:text>] </xsl:text>
      </xsl:for-each>
      <xsl:text>&#xA;</xsl:text>
    </xsl:for-each>
  </xsl:template>

  <xsl:template match="fopl:individual">
    <strong>
      <xsl:value-of select="@type"/>
    </strong>
    <xsl:text> (</xsl:text>
    <xsl:value-of select="@id"/>
    <xsl:text>)</xsl:text>
    <xsl:text>&#xA;</xsl:text>
  </xsl:template>

  <xsl:template match="fopl:relation">
    <xsl:value-of select="@name"/>
    <xsl:text> [</xsl:text>
    <xsl:apply-templates select="*[1]"/>
    <xsl:text>, </xsl:text>
    <xsl:apply-templates select="*[2]"/>
    <xsl:text>]</xsl:text>
    <xsl:text>&#xA;</xsl:text>
  </xsl:template>

  <xsl:template match="fopl:pointer">
    <xsl:value-of select="@ref"/>
  </xsl:template>

  <xsl:template match="fopl:atom">
    <xsl:value-of select="@type"/>
    <xsl:text> ("</xsl:text>
    <xsl:apply-templates/>
    <xsl:text>")</xsl:text>
  </xsl:template>

</xsl:stylesheet>
