Anonymous avatar Anonymous committed 55102bc

Rename to the new module name.

Comments (0)

Files changed (130)

perl/modules/XML-Grammar-Fiction/.cvsignore

+blib*
+Makefile
+Makefile.old
+Build
+_build*
+pm_to_blib*
+*.tar.gz
+.lwpcookies
+XML-Grammar-Screeplay-*
+cover_db

perl/modules/XML-Grammar-Fiction/Build.PL

+use strict;
+use warnings;
+
+use File::Spec;
+use lib File::Spec->catdir(File::Spec->curdir(), "inc");
+
+use XML::Grammar::Builder;
+
+my $builder = XML::Grammar::Builder->new(
+    module_name         => 'XML::Grammar::Screenplay',
+    license             => 'mit',
+    dist_author         => 'Shlomi Fish <shlomif@cpan.org>',
+    dist_version_from   => 'lib/XML/Grammar/Screenplay.pm',
+    build_requires => {
+        'File::Find' => 0,
+        'Test::More' => 0,
+        'Test::XML' => 0,
+    },
+    requires => 
+    {
+        'Carp' => 0,
+        'Data::Dumper' => 0,
+        'HTML::Entities' => 0,
+        'List::Util' => 0,
+        'Moose' => 0,
+        'Parse::RecDescent' => 0,
+        'warnings' => 0,
+        'XML::LibXSLT' => 0,
+        'XML::Writer' => 0,
+    },
+    add_to_cleanup      => [ 'XML-Grammar-Screenplay-*' ],
+    create_makefile_pl => 'passthrough',
+    meta_merge =>
+    {
+        resources =>
+        {
+            repository => "https://svn.berlios.de/svnroot/repos/web-cpan/XML-Grammar-Screenplay/",
+            homepage => "http://web-cpan.berlios.de/modules/XML-Grammar-Screenplay/",
+        },
+        keywords =>
+        [
+            "authoring",
+            "cinema",
+            "creative writing",
+            "films",
+            "grammar",
+            "movies",
+            "parsing",
+            "screenplay",
+            "screenplays",
+            "script",
+            "scripts",
+            "writing",
+            "xml",
+            "xml-libxml",
+            "xslt",
+        ],
+    },
+);
+
+$builder->create_build_script();

perl/modules/XML-Grammar-Fiction/Changes

+Revision history for XML-Grammar-Screenplay
+
+        - Added the resources and keywords to the Build.PL and META.yml.
+
+0.0600  Fri Oct  9 11:35:30 IST 2009
+        - Converted the generated Screenplay-XML to its own namespace:
+        http://web-cpan.berlios.de/modules/XML-Grammar-Screenplay/screenplay-xml-0.2/
+        - Adapted the stylesheets, the RelaxNG schema, etc. to that while
+        adapting the test scripts. 
+
+0.0503  Wed Jul 29 10:12:38 IDT 2009
+        - Included a "package XML::Grammar::Screenplay::FromProto::Nodes"
+        statement at the top of:
+        lib/XML/Grammar/Screenplay/FromProto/Nodes.pm
+        Because otherwise the rpm builder was confused.
+
+0.0502  Wed Mar  4 22:19:43 IST 2009
+        - Upgraded inc/XML/Grammar/Builder.pm to 0.0101 to (hopefully)
+        handle the extradata properly under all conditions.
+
+0.0501  Tue Mar  3 19:38:22 IST 2009
+        - Changed the Build.PL to use XML::Grammar::Builder.
+            - changed the tests accordingly, due to the lack of 
+            "blib/extradata".
+
+0.0500  Fri Feb 27 17:48:52 IST 2009
+        - Converted to use a RelaxNG schema.
+            - Now using it in ::ToHTML instead of the DTD.
+        - Added a sanity check for no inner desc inside the addressing part.
+        - Changed the 'license' field in Build.PL from 'bsd' to 'mit'
+        which is more accurate.
+
+0.0402  Fri Apr 25 13:27:16 IDT 2008
+        - Fixed a thinko with the wrong path to the DTD:
+        "products-syndication.dtd" instead of "screenplay-xml.dtd".
+        Possibly a copy-and-paste bug.
+
+0.0401  Sat Jul 14 10:43:57 IDT 2007
+        - Converted the "Screeplay" strings that were a leftover from
+        the wrong module-starter invocation into "Screenplay".
+
+0.04    Mon Jun 11 21:26:48 IDT 2007
+        - Added the Quick-and-Dirty FromProto parser, which is slightly faster,
+        than the Parse::RecDescent one and with much better diagnostics. 
+        - More parsers can be added later.
+        - Broke some compatibility - now require "use"-ing the parser class.
+
+0.03    Tue May 22 07:46:18 IDT 2007
+        - Added the <br /> tag.
+        - Added a description of the proto-text format in the POD and
+        other POD.
+        - Fixed the space being part of the saying issue in the generated
+        HTML.
+
+0.02    Mon May 21 00:26:35 IDT 2007
+        - Added the title="" attribute to the scene tag.
+        - Added support for SGML-like entities
+        - Added the direct ScreenplayXML -> HTML processor.
+        
+0.0101  Thu May 17 19:14:01 IDT 2007
+        - BUG FIX: Changed to open the filename in 
+        XML::Grammar::Screenplay::FromProto in ":utf8" mode. 
+        - BUG FIX: added more dependencies to the Build.PL.
+
+0.01    
+        First version, released on an unsuspecting world.
+

perl/modules/XML-Grammar-Fiction/MANIFEST

+Build.PL
+Changes
+extradata/screenplay-xml.dtd
+extradata/screenplay-xml.rng
+extradata/screenplay-xml-to-docbook.xslt
+extradata/screenplay-xml-to-html.xslt
+extradata/screenplay-xml-to-xsl-fo.xslt
+inc/Test/Run/Builder.pm
+inc/XML/Grammar/Builder.pm
+lib/XML/Grammar/Screenplay/App/FromProto.pm
+lib/XML/Grammar/Screenplay/App/ToDocBook.pm
+lib/XML/Grammar/Screenplay/App/ToHTML.pm
+lib/XML/Grammar/Screenplay/Base.pm
+lib/XML/Grammar/Screenplay/FromProto/Nodes.pm
+lib/XML/Grammar/Screenplay/FromProto/Parser.pm
+lib/XML/Grammar/Screenplay/FromProto/Parser/PRD.pm
+lib/XML/Grammar/Screenplay/FromProto/Parser/QnD.pm
+lib/XML/Grammar/Screenplay/FromProto.pm
+lib/XML/Grammar/Screenplay.pm
+lib/XML/Grammar/Screenplay/ToDocBook.pm
+lib/XML/Grammar/Screenplay/ToHTML.pm
+Makefile.PL
+MANIFEST
+META.yml # Will be created by "make dist"
+README
+rejects/proto-text-to-xml.t
+t/00-load.t
+t/app-to-html.t
+t/boilerplate.t
+t/data/docbook/with-internal-description.docbook.xml
+t/data/proto-text/dialogue-with-several-paragraphs.txt
+t/data/proto-text-invalid/inner-desc-inside-char-addressing.txt
+t/data/proto-text/nested-s.txt
+t/data/proto-text/scenes-with-titles.txt
+t/data/proto-text/two-nested-s.txt
+t/data/proto-text/with-brs.txt
+t/data/proto-text/with-comments.txt
+t/data/proto-text/with-description.txt
+t/data/proto-text/with-dialogue.txt
+t/data/proto-text/with-entities.txt
+t/data/proto-text/with-internal-description.txt
+t/data/proto-text/with-multi-line-comments.txt
+t/data/proto-text/with-multi-para-desc.txt
+t/data/proto-text/with-tags-inside-paragraphs.txt
+t/data/xml/dialogue-with-several-paragraphs.xml
+t/data/xml/nested-s.xml
+t/data/xml/scenes-with-titles.xml
+t/data/xml/two-nested-s.xml
+t/data/xml/with-brs.xml
+t/data/xml/with-comments.xml
+t/data/xml/with-description.xml
+t/data/xml/with-dialogue.xml
+t/data/xml/with-entities.xml
+t/data/xml/with-internal-description.xml
+t/data/xml/with-multi-line-comments.xml
+t/data/xml/with-multi-para-desc.xml
+t/data/xml/with-tags-inside-paragraphs.xml
+t/lib/run-test-1/XML/Grammar/Screenplay/ConfigData.pm
+t/pod-coverage.t
+t/pod.t
+t/proto-text-invalid.t
+t/proto-text-to-xml-using-custom-parser.t
+t/qnd-parser-unit.t
+t/to-docbook.t
+t/to-xhtml.t

perl/modules/XML-Grammar-Fiction/README

+XML-Grammar-Screenplay
+
+This is a module implementing an XML grammar for screenplays. It contains:
+
+1. A converter from a well-formed plain text format to its custom XML format.
+
+2. A converter from its custom XML format to DocBook/XML.
+
+INSTALLATION
+
+To install this module, run the following commands:
+
+    perl Build.PL
+    ./Build
+    ./Build test
+    ./Build install
+
+
+SUPPORT AND DOCUMENTATION
+
+After installing, you can find documentation for this module with the perldoc command.
+
+    perldoc XML::Grammar::Screenplay
+
+You can also look for information at:
+
+    Search CPAN
+        http://search.cpan.org/dist/XML-Grammar-Screenplay
+
+    CPAN Request Tracker:
+        http://rt.cpan.org/NoAuth/Bugs.html?Dist=XML-Grammar-Screenplay
+
+    AnnoCPAN, annotated CPAN documentation:
+        http://annocpan.org/dist/XML-Grammar-Screenplay
+
+    CPAN Ratings:
+        http://cpanratings.perl.org/d/XML-Grammar-Screenplay
+
+COPYRIGHT AND LICENCE
+
+Copyright (C) 2007 Shlomi Fish
+
+This program is released under the following license: MIT X11.
+

perl/modules/XML-Grammar-Fiction/extradata/screenplay-xml-to-docbook.xslt

+<xsl:stylesheet version = '1.0'
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+    xmlns:sp="http://web-cpan.berlios.de/modules/XML-Grammar-Screenplay/screenplay-xml-0.2/"
+     >
+
+<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
+ doctype-public="-//OASIS//DTD DocBook XML V4.3//EN"
+ doctype-system="/usr/share/sgml/docbook/xml-dtd-4.3/docbookx.dtd"
+ />
+
+<xsl:template match="/">
+        <xsl:apply-templates select="//sp:body" />  
+</xsl:template>
+
+<xsl:template match="sp:body">
+    <article>
+        <xsl:attribute name="id">
+            <xsl:value-of select="@id" />
+        </xsl:attribute>
+        <xsl:apply-templates select="sp:scene" />
+    </article>
+</xsl:template>
+
+<xsl:template match="sp:scene">
+    <section>
+        <xsl:attribute name="id">
+            <xsl:value-of select="@id" />
+        </xsl:attribute>
+        <!-- Make the title the title attribute or "ID" if does not exist. -->
+        <title>
+            <xsl:choose>
+                <xsl:when test="@title">
+                    <xsl:value-of select="@title" />
+                </xsl:when>
+                <xsl:otherwise>
+                    <xsl:value-of select="@id" />
+                </xsl:otherwise>
+            </xsl:choose> 
+        </title>
+        <xsl:apply-templates select="sp:scene|sp:description|sp:saying" />
+    </section>
+</xsl:template>
+
+<xsl:template match="sp:description">
+    <section role="description" id="{generate-id()}">
+        <title></title>
+            <xsl:apply-templates />
+    </section>
+</xsl:template>
+
+<xsl:template match="saying">
+    <section role="sp:saying" id="{generate-id()}">
+        <title></title>
+        <xsl:apply-templates />
+    </section>
+</xsl:template>
+
+<xsl:template match="para">
+    <para>
+        <xsl:if test="local-name(..) = 'saying'">
+            <emphasis role="bold"><xsl:value-of select="../@character" />: </emphasis>
+        </xsl:if>
+        <xsl:if test="local-name(..) = 'description' and ../child::para[position()=1] = .">
+            [
+        </xsl:if>
+        <xsl:apply-templates />
+        <xsl:if test="local-name(..) = 'description' and ../child::para[position()=last()] = .">
+            ]
+        </xsl:if>
+    </para>
+</xsl:template>
+
+<xsl:template match="sp:ulink">
+    <ulink>
+        <xsl:attribute name="url">
+            <xsl:value-of select="@url" />
+        </xsl:attribute>
+    </ulink>
+</xsl:template>
+
+<xsl:template match="sp:bold">
+    <emphasis role="bold">
+        <xsl:apply-templates />
+    </emphasis>
+</xsl:template>
+
+<xsl:template match="sp:inlinedesc">
+    <phrase>[<xsl:apply-templates />]</phrase>
+</xsl:template>
+
+</xsl:stylesheet>

perl/modules/XML-Grammar-Fiction/extradata/screenplay-xml-to-html.xslt

+<xsl:stylesheet version = '1.0'
+     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+     xmlns:sp="http://web-cpan.berlios.de/modules/XML-Grammar-Screenplay/screenplay-xml-0.2/"
+     >
+
+<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
+ doctype-public="-//W3C//DTD XHTML 1.1//EN"
+ doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
+ />
+
+<xsl:template match="/">
+        <xsl:apply-templates select="//sp:body" />  
+</xsl:template>
+
+<xsl:template match="sp:body">
+    <html>
+        <head>
+            <title>My Screenplay</title>
+        </head>
+        <body>
+            <div class="screenplay">
+            <xsl:attribute name="id">
+                <xsl:value-of select="@id" />
+            </xsl:attribute>
+            <xsl:apply-templates select="sp:scene" />
+            </div>
+        </body>
+    </html>
+</xsl:template>
+
+<xsl:template match="sp:scene">
+    <div class="scene" id="scene-{@id}">
+        <!-- Make the title the title attribute or "ID" if does not exist. -->
+        <xsl:element name="h{count(ancestor-or-self::sp:scene)}">
+            <xsl:attribute name="id">
+                <xsl:value-of select="@id" />
+            </xsl:attribute>
+            <xsl:choose>
+                <xsl:when test="@title">
+                    <xsl:value-of select="@title" />
+                </xsl:when>
+                <xsl:otherwise>
+                    <xsl:value-of select="@id" />
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:element>
+        <xsl:apply-templates select="sp:scene|sp:description|sp:saying" />
+    </div>
+</xsl:template>
+
+<xsl:template match="sp:description">
+    <div class="description">
+        <xsl:apply-templates />
+    </div>
+</xsl:template>
+
+<xsl:template match="sp:saying">
+    <div class="saying">
+        <xsl:apply-templates />
+    </div>
+</xsl:template>
+
+<xsl:template match="sp:para">
+    <p>
+        <xsl:if test="local-name(..) = 'saying'">
+            <strong class="sayer"><xsl:value-of select="../@character" />:</strong> 
+            <xsl:text> </xsl:text>
+        </xsl:if>
+        <xsl:if test="local-name(..) = 'description' and ../child::sp:para[position()=1] = .">
+            [
+        </xsl:if>
+        <xsl:apply-templates />
+        <xsl:if test="local-name(..) = 'description' and ../child::sp:para[position()=last()] = .">
+            ]
+        </xsl:if>
+    </p>
+</xsl:template>
+
+<xsl:template match="sp:ulink">
+    <a>
+        <xsl:attribute name="href">
+            <xsl:value-of select="@url" />
+        </xsl:attribute>
+        <xsl:apply-templates />
+    </a>
+</xsl:template>
+
+<xsl:template match="sp:bold">
+    <strong class="bold">
+        <xsl:apply-templates />
+    </strong>
+</xsl:template>
+
+<xsl:template match="sp:inlinedesc">
+    <span class="inlinedesc">[<xsl:apply-templates />]</span>
+</xsl:template>
+
+<xsl:template match="sp:br">
+    <br />
+</xsl:template>
+
+</xsl:stylesheet>

perl/modules/XML-Grammar-Fiction/extradata/screenplay-xml-to-xsl-fo.xslt

+<xsl:stylesheet version = '1.0'
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+    xmlns:fo='http://www.w3.org/1999/XSL/Format'
+     >
+
+<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
+
+<xsl:template match="/">
+        <xsl:apply-templates select="//body" />  
+</xsl:template>
+
+<xsl:template match="body">
+    <fo:root>
+            <xsl:attribute name="id">
+                <xsl:value-of select="@id" />
+            </xsl:attribute>
+            <fo:layout-master-set>
+                <fo:simple-page-master master-name="A4">
+                    <fo:region-body />
+                </fo:simple-page-master>
+            </fo:layout-master-set>
+            <fo:page-sequence master-reference="A4">
+                <fo:flow flow-name="xsl-region-body">
+                    <xsl:apply-templates select="scene" />        
+                </fo:flow>
+            </fo:page-sequence>
+    </fo:root>
+</xsl:template>
+
+<xsl:template match="scene">
+    <fo:block>
+        <!-- Make the title the title attribute or "ID" if does not exist. -->
+        <xsl:element name="h{count(ancestor-or-self::scene)}">
+            <xsl:attribute name="id">
+                <xsl:value-of select="@id" />
+            </xsl:attribute>
+            <xsl:choose>
+                <xsl:when test="@title">
+                    <xsl:value-of select="@title" />
+                </xsl:when>
+                <xsl:otherwise>
+                    <xsl:value-of select="@id" />
+                </xsl:otherwise>
+            </xsl:choose>
+        </xsl:element>
+        <xsl:apply-templates select="scene|description|saying" />
+    </fo:block>
+</xsl:template>
+
+<xsl:template match="description">
+    <div class="description">
+        <xsl:apply-templates />
+    </div>
+</xsl:template>
+
+<xsl:template match="saying">
+    <div class="saying">
+        <xsl:apply-templates />
+    </div>
+</xsl:template>
+
+<xsl:template match="para">
+    <p>
+        <xsl:if test="local-name(..) = 'saying'">
+            <strong class="sayer"><xsl:value-of select="../@character" />:</strong> 
+            <xsl:text> </xsl:text>
+        </xsl:if>
+        <xsl:if test="local-name(..) = 'description' and ../child::para[position()=1] = .">
+            [
+        </xsl:if>
+        <xsl:apply-templates />
+        <xsl:if test="local-name(..) = 'description' and ../child::para[position()=last()] = .">
+            ]
+        </xsl:if>
+    </p>
+</xsl:template>
+
+<xsl:template match="ulink">
+    <a>
+        <xsl:attribute name="href">
+            <xsl:value-of select="@url" />
+        </xsl:attribute>
+        <xsl:apply-templates />
+    </a>
+</xsl:template>
+
+<xsl:template match="bold">
+    <strong class="bold">
+        <xsl:apply-templates />
+    </strong>
+</xsl:template>
+
+<xsl:template match="inlinedesc">
+    <span class="inlinedesc">[<xsl:apply-templates />]</span>
+</xsl:template>
+
+<xsl:template match="br">
+    <br />
+</xsl:template>
+
+</xsl:stylesheet>

perl/modules/XML-Grammar-Fiction/extradata/screenplay-xml.dtd

+<!ELEMENT document (head,body)>
+<!ELEMENT head EMPTY>
+<!ELEMENT body (scene+)>
+<!ELEMENT scene ((description|saying)*,scene*)>
+<!ELEMENT description (para+)>
+<!ELEMENT saying (para+)>
+<!ELEMENT para (#PCDATA|inlinedesc|ulink|bold|br)*>
+<!ELEMENT inlinedesc (#PCDATA|ulink|bold)*>
+<!ELEMENT ulink (#PCDATA|bold)*>
+<!ELEMENT bold (#PCDATA)>
+<!ELEMENT br EMPTY>
+<!ATTLIST scene id ID #REQUIRED title CDATA #IMPLIED>
+<!ATTLIST body id ID #REQUIRED>
+<!ATTLIST saying character CDATA #REQUIRED>
+<!ATTLIST ulink url CDATA #REQUIRED>

perl/modules/XML-Grammar-Fiction/extradata/screenplay-xml.rng

+<?xml version="1.0"?>
+<!-- $Id: testSuite.rng,v 1.12 2003/01/29 12:24:07 jjc Exp $ -->
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+    xmlns:sp="http://web-cpan.berlios.de/modules/XML-Grammar-Screenplay/screenplay-xml-0.2/"
+    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
+    >
+    <start>
+        <element name="sp:document">
+            <element name="sp:head">
+                <empty/>
+            </element>
+            <element name="sp:body">
+                <attribute name="id">
+                    <data type="ID"/>
+                </attribute>
+                <oneOrMore>
+                    <ref name="scene" />
+                </oneOrMore>
+            </element>
+        </element>
+    </start>
+    <define name="several_paras">
+        <oneOrMore>
+            <ref name="para"/>
+        </oneOrMore>
+    </define>
+    <define name="single_inline_elem">
+        <choice>
+            <text/>
+            <ref name="ulink"/>
+            <ref name="bold"/>
+        </choice>
+    </define>
+    <define name="scene">
+        <element name="sp:scene">
+            <attribute name="id">
+                <data type="ID"/>
+            </attribute>
+            <optional>
+                <attribute name="title">
+                    <text/>
+                </attribute>
+            </optional>
+            <zeroOrMore>
+                <choice>
+                    <element name="sp:description">
+                        <ref name="several_paras"/>
+                    </element>
+                    <element name="sp:saying">
+                        <attribute name="character">
+                            <text/>
+                        </attribute>
+                        <ref name="several_paras"/>
+                    </element>
+                </choice>
+            </zeroOrMore>
+            <zeroOrMore>
+                <ref name="scene" />
+            </zeroOrMore>
+        </element>
+    </define>
+    <define name="para">
+        <element name="sp:para">
+            <zeroOrMore>
+                <choice>
+                    <text/>
+                    <element name="sp:inlinedesc">
+                        <zeroOrMore>
+                            <ref name="single_inline_elem"/>
+                        </zeroOrMore>
+                    </element>
+                    <ref name="single_inline_elem"/>
+                    <element name="sp:br">
+                        <empty/>
+                    </element>
+                </choice>
+            </zeroOrMore>
+        </element>
+    </define>
+    <define name="bold">
+        <element name="sp:bold">
+            <text />
+        </element>
+    </define>
+    <define name="ulink">
+        <element name="sp:ulink">
+                <attribute name="url">
+                    <text/>
+                </attribute>
+                <zeroOrMore>
+                    <choice>
+                        <text />
+                        <ref name="bold"/>
+                    </choice>
+            </zeroOrMore>
+        </element>
+    </define>
+</grammar>
+

perl/modules/XML-Grammar-Fiction/inc/Test/Run/Builder.pm

+package Test::Run::Builder;
+
+use strict;
+use warnings;
+
+use Module::Build;
+
+use vars qw(@ISA);
+
+@ISA = (qw(Module::Build));
+
+sub ACTION_runtest
+{
+    my ($self) = @_;
+    my $p = $self->{properties};
+
+    $self->depends_on('code');
+
+    local @INC = @INC;
+
+    # Make sure we test the module in blib/
+    unshift @INC, (File::Spec->catdir($p->{base_dir}, $self->blib, 'lib'),
+		 File::Spec->catdir($p->{base_dir}, $self->blib, 'arch'));
+
+    $self->do_test_run_tests;
+}
+
+sub ACTION_distruntest {
+  my ($self) = @_;
+
+  $self->depends_on('distdir');
+
+  my $start_dir = $self->cwd;
+  my $dist_dir = $self->dist_dir;
+  chdir $dist_dir or die "Cannot chdir to $dist_dir: $!";
+  # XXX could be different names for scripts
+
+  $self->run_perl_script('Build.PL') # XXX Should this be run w/ --nouse-rcfile
+      or die "Error executing 'Build.PL' in dist directory: $!";
+  $self->run_perl_script('Build')
+      or die "Error executing 'Build' in dist directory: $!";
+  $self->run_perl_script('Build', [], ['runtest'])
+      or die "Error executing 'Build test' in dist directory";
+  chdir $start_dir;
+}
+
+sub do_test_run_tests
+{
+    my $self = shift;
+
+    require Test::Run::CmdLine::Iface;
+
+    my $test_run =
+        Test::Run::CmdLine::Iface->new(
+            {
+                'test_files' => [glob("t/*.t")],
+            }   
+            # 'backend_params' => $self->_get_backend_params(),
+        );
+
+    return $test_run->run();
+}
+
+1;
+

perl/modules/XML-Grammar-Fiction/inc/XML/Grammar/Builder.pm

+package XML::Grammar::Builder;
+
+use strict;
+use warnings;
+
+use base 'Test::Run::Builder';
+
+use File::Find;
+
+our $VERSION = '0.0101';
+
+sub new
+{
+    my $package = shift;
+    my %args = @_;
+    my @extradata_files;
+    
+    my $module_name = $args{'module_name'};
+    $module_name =~ s{::}{-}g;
+
+    my $filter_files_cb = sub {
+        my $filename = $File::Find::name;
+        if ((-f $filename) &&
+            ($filename =~ /\.(?:mod|xslt|dtd|ent|cat|jpg|rng|xcf\.bz2)$/)
+        )
+        {
+            push @extradata_files, $filename;
+        }
+    };
+ 
+    find({ wanted => $filter_files_cb, no_chdir => 1}, "extradata");
+
+    my $builder = $package->SUPER::new(
+        extradata_files =>
+        {
+            (map { $_ => $_ } @extradata_files)
+        },
+        @_
+    );
+
+    $builder->add_build_element('extradata');
+
+    $builder->install_path()->{'extradata'} = 
+        File::Spec->catdir(
+                $builder->install_destination("lib"),
+                qw(data modules),
+                $module_name,
+                qw(data)
+        );
+
+    $builder->config_data(
+        'extradata_install_path' =>
+        [$builder->install_path()->{'extradata'}]
+    );
+
+    return $builder;
+}
+
+
+=begin excluded
+
+    my $get_dest_extradata_cb = sub {
+        my $fn = shift;
+
+        # Trying if this makes it work.
+        # TODO : Either remove this line or the rest of the lines.
+        return $fn;
+
+        $fn =~ s{^extradata}{data};
+        return "lib/$module_name/$fn";
+    };
+
+=end excluded
+
+=cut
+
+1;

perl/modules/XML-Grammar-Fiction/lib/XML/Grammar/Screenplay.pm

+package XML::Grammar::Screenplay;
+
+use warnings;
+use strict;
+
+=head1 NAME
+
+XML::Grammar::Screenplay - CPAN distribution implementing an XML grammar for 
+screenplays.
+
+=head1 VERSION
+
+Version 0.0600
+
+=cut
+
+our $VERSION = '0.0600';
+
+=head1 SYNOPSIS
+
+See L<XML::Grammar::Screenplay::FromProto>, 
+L<XML::Grammar::Screenplay::ToDocBook> and
+L<XML::Grammar::Screenplay::ToHTML>.
+
+=head1 DESCRIPTION
+
+XML::Grammar::Screenplay is a Perl module for:
+
+=over 4
+
+=item 1. Converting a well-formed plain text format to a specialized XML format.
+
+=item 2. Converting the XML to DocBook/XML or directly to HTML for rendering.
+
+=back
+
+The best way to use it non-programatically is using
+L<XML::Grammar::Screenplay::App::FromProto>,
+L<XML::Grammar::Screenplay::App::ToDocBook> and
+L<XML::Grammar::Screenplay::App::ToHTML>, which are modules implementing
+command line applications for their processing.
+
+The rest of this page will document the syntax of the custom textual format.
+
+=head1 FORMAT
+
+=head2 Scenes
+
+Scenes are placed in XML-like tags of C<< <section> ... </section> >> or
+abbreviated as C<< <s> ... </s> >>. Opening tags in the format may have 
+attributes whose keys are plaintext and whose values are surrounded by
+double quotes. (Single-quotes are not supported).
+
+The scene tag must have an C<id> attribute (for anchors, etc.) and could
+have an optional C<title> attribute. If the title is not specified, it will
+default to the ID.
+
+Scenes may be B<nested>. There cannot be any sayings or descriptions (see below)
+except inside scenes.
+
+=head2 Text
+
+Text is any of:
+
+=over 4
+
+=item 1. Plaintext
+
+Regular text
+
+=item 2. XML-like tags.
+
+Supported tags are C<< <b> >> for bold tags, C<< <a href="..."> >> for
+hyperlinks, and an empty C<< <br /> >> tag for line-breaks.
+
+=item 3. Entities
+
+The text format supports SGML-like entities such as C<< &amp; >>,
+C<< &lt; >>, C<< &quot; >> and all other entities that are supported by 
+L<HTML::Entities>.
+
+=item 4. Text between [ ... ]
+
+Text between square brackets (C<[ ... ]>) is reserved for descriptions
+or inline descriptions (see below).
+
+=back 
+
+=head2 Sayings
+
+The first paragraph when a character talks starts with the name of the
+character followed by a colon (C<:>) and the rest of the text. Like this:
+
+    David: Goliath, I'm going to kill you! You'll see -
+    I will.
+
+If a character says more than one paragraph, the next paragraph should start
+with any number of "+"-signs followed by a colon:
+
+    David: Goliath, I'm going to kill you! You'll see -
+    I will.
+
+    ++++: I will sling you and bing you till infinity!
+
+=head2 Descriptions.
+
+Descriptions that are not part of saying start with a C<[> at the first
+character of a line and extend till the next C<]>. They can span several
+paragraphs.
+
+There are also internal descriptions to the saying which are placed
+inside the paragraph of the saying and describe what happens while the
+character talks. 
+
+=head2 EXAMPLES
+
+Examples can be found in the C<t/data> directory, and here:
+
+=over 4
+
+=item * The One with the Fountainhead
+
+L<http://www.shlomifish.org/humour/TOWTF/>
+
+=item * Humanity - The Movie
+
+L<http://www.shlomifish.org/humour/humanity/>
+
+=item * Star Trek - "We The Living Dead"
+
+L<http://www.shlomifish.org/humour/Star-Trek/We-the-Living-Dead/>
+
+=back
+
+=head1 DEBUGGING
+
+When trying to convert the well-formed text to XML, one will often 
+encounter an obscure "Parse Error". This is caused by L<Parse::RecDescent>,
+which is used for parsing. The best way I found to deal with it is to
+gradually eliminate parts of the document until the offending markup is
+isolated.
+
+In the future, I plan on writing a custom parser that will provide better
+diagnostics and will hopefully also be faster.
+
+=head1 AUTHOR
+
+Shlomi Fish, L<http://www.shlomifish.org/>.
+
+=head1 BUGS
+
+Please report any bugs or feature requests to
+C<bug-xml-grammar-screenplay at rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=XML-Grammar-Screenplay>.
+I will be notified, and then you'll automatically be notified of progress on
+your bug as I make changes.
+
+=head1 TODO
+
+=over 4
+
+=item * Empty
+
+=back
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+    perldoc XML::Grammar::Screenplay
+
+You can also look for information at:
+
+=over 4
+
+=item * AnnoCPAN: Annotated CPAN documentation
+
+L<http://annocpan.org/dist/XML-Grammar-Screenplay>
+
+=item * CPAN Ratings
+
+L<http://cpanratings.perl.org/d/XML-Grammar-Screenplay>
+
+=item * RT: CPAN's request tracker
+
+L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=XML-Grammar-Screenplay>
+
+=item * Search CPAN
+
+L<http://search.cpan.org/dist/XML-Grammar-Screenplay>
+
+=back
+
+=head1 ACKNOWLEDGEMENTS
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2007 Shlomi Fish, all rights reserved.
+
+This program is released under the following license: MIT X11.
+
+=cut
+
+1;
+

perl/modules/XML-Grammar-Fiction/lib/XML/Grammar/Screenplay/App/FromProto.pm

+package XML::Grammar::Screenplay::App::FromProto;
+
+use strict;
+use warnings;
+
+use base 'Exporter';
+
+our @EXPORT = (qw(run));
+
+use Getopt::Long;
+
+use XML::Grammar::Screenplay::FromProto;
+use XML::Grammar::Screenplay::FromProto::Parser::QnD;
+
+=head1 NAME
+
+XML::Grammar::Screenplay::App::FromProto - module implementing
+a command line application to convert a well-formed text to
+Screenplay XML.
+
+=head1 SYNOPSIS
+
+    perl -MXML::Grammar::Screenplay::App::FromProto -e 'run()' -- \
+	-o $@ $<
+
+=head1 FUNCTIONS
+
+=head2 run()
+
+Call with no arguments to run the application from the commandline.
+
+=cut
+
+sub run
+{
+    my $output_filename;
+
+    GetOptions(
+        "output|o=s" => \$output_filename,
+    );
+
+    if (!defined($output_filename))
+    {
+        die "Output filename not specified! Use the -o|--output flag!";
+    }
+
+    my $converter = XML::Grammar::Screenplay::FromProto->new({
+        parser_class => "XML::Grammar::Screenplay::FromProto::Parser::QnD",
+    });
+
+    my $output_xml = $converter->convert({
+            source => { file => shift(@ARGV), },
+        }
+    );
+
+    open my $out, ">", $output_filename;
+    binmode $out, ":utf8";
+    print {$out} $output_xml;
+    close($out);
+
+    exit(0);
+}
+
+
+=head1 AUTHOR
+
+Shlomi Fish, L<http://www.shlomifish.org/>.
+
+=head1 BUGS
+
+Please report any bugs or feature requests to
+C<bug-xml-grammar-screenplay at rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=XML-Grammar-Screenplay>.
+I will be notified, and then you'll automatically be notified of progress on
+your bug as I make changes.
+
+
+=head1 ACKNOWLEDGEMENTS
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2007 Shlomi Fish, all rights reserved.
+
+This program is released under the following license: MIT X11.
+
+=cut
+
+1;
+

perl/modules/XML-Grammar-Fiction/lib/XML/Grammar/Screenplay/App/ToDocBook.pm

+package XML::Grammar::Screenplay::App::ToDocBook;
+
+use strict;
+use warnings;
+
+use base 'Exporter';
+
+our @EXPORT = (qw(run));
+
+use Getopt::Long;
+
+use XML::Grammar::Screenplay::ToDocBook;
+
+=head1 NAME
+
+XML::Grammar::Screenplay::App::ToDocBook - module implementing
+a command line application to convert a Screenplay XML file to docbook.
+
+=head1 FUNCTIONS
+
+=head2 run()
+
+Call with no arguments to run the application from the commandline.
+
+=cut
+
+sub run
+{
+    my $output_filename;
+
+    GetOptions(
+        "output|o=s" => \$output_filename,
+    );
+
+    if (!defined($output_filename))
+    {
+        die "Output filename not specified! Use the -o|--output flag!";
+    }
+
+    my $converter = XML::Grammar::Screenplay::ToDocBook->new();
+
+    my $output_text = $converter->translate_to_docbook({
+            source => { file => shift(@ARGV), },
+            output => "string",
+        }
+    );
+
+    open my $out, ">", $output_filename;
+    binmode $out, ":utf8";
+    print {$out} $output_text;
+    close($out);
+
+    exit(0);
+}
+
+
+=head1 AUTHOR
+
+Shlomi Fish, L<http://www.shlomifish.org/>.
+
+=head1 BUGS
+
+Please report any bugs or feature requests to
+C<bug-xml-grammar-screenplay at rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=XML-Grammar-Screenplay>.
+I will be notified, and then you'll automatically be notified of progress on
+your bug as I make changes.
+
+
+=head1 ACKNOWLEDGEMENTS
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2007 Shlomi Fish, all rights reserved.
+
+This program is released under the following license: MIT X11.
+
+=cut
+
+1;
+

perl/modules/XML-Grammar-Fiction/lib/XML/Grammar/Screenplay/App/ToHTML.pm

+package XML::Grammar::Screenplay::App::ToHTML;
+
+use strict;
+use warnings;
+
+use base 'Exporter';
+
+our @EXPORT = (qw(run));
+
+use Getopt::Long;
+
+use XML::Grammar::Screenplay::ToHTML;
+
+=head1 NAME
+
+XML::Grammar::Screenplay::App::ToHTML - module implementing
+a command line application to convert a Screenplay XML file to HTML
+
+=head1 FUNCTIONS
+
+=head2 run()
+
+Call with no arguments to run the application from the commandline.
+
+=cut
+
+sub run
+{
+    my $output_filename;
+
+    GetOptions(
+        "output|o=s" => \$output_filename,
+    );
+
+    if (!defined($output_filename))
+    {
+        die "Output filename not specified! Use the -o|--output flag!";
+    }
+
+    my $converter = XML::Grammar::Screenplay::ToHTML->new();
+
+    my $output_text = $converter->translate_to_html({
+            source => { file => shift(@ARGV), },
+            output => "string",
+        }
+    );
+
+    open my $out, ">", $output_filename;
+    binmode $out, ":utf8";
+    print {$out} $output_text;
+    close($out);
+
+    exit(0);
+}
+
+
+=head1 AUTHOR
+
+Shlomi Fish, L<http://www.shlomifish.org/>.
+
+=head1 BUGS
+
+Please report any bugs or feature requests to
+C<bug-xml-grammar-screenplay at rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=XML-Grammar-Screenplay>.
+I will be notified, and then you'll automatically be notified of progress on
+your bug as I make changes.
+
+
+=head1 ACKNOWLEDGEMENTS
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2007 Shlomi Fish, all rights reserved.
+
+This program is released under the following license: MIT X11.
+
+=cut
+
+1;
+

perl/modules/XML-Grammar-Fiction/lib/XML/Grammar/Screenplay/Base.pm

+package XML::Grammar::Screenplay::Base;
+
+use strict;
+use warnings;
+
+=head1 NAME
+
+XML::Grammar::Screenplay::Base - base class for XML::Grammar::Screenplay
+classes.
+
+=head1 METHODS
+
+=head2 $package->new({%args});
+
+Constructs a new package
+
+=cut
+
+sub new
+{
+    my $class = shift;
+    my $self = {};
+
+    bless $self, $class;
+
+    $self->_init(@_);
+
+    return $self;
+}
+
+1;
+

perl/modules/XML-Grammar-Fiction/lib/XML/Grammar/Screenplay/FromProto.pm

+package XML::Grammar::Screenplay::FromProto;
+
+use strict;
+use warnings;
+
+use Carp;
+
+use base 'XML::Grammar::Screenplay::Base';
+
+use XML::Writer;
+use HTML::Entities ();
+
+use XML::Grammar::Screenplay::FromProto::Nodes;
+
+use Moose;
+
+has "_parser" => ('isa' => "XML::Grammar::Screenplay::FromProto::Parser", 'is' => "rw");
+has "_writer" => ('isa' => "XML::Writer", 'is' => "rw");
+
+my $screenplay_ns = q{http://web-cpan.berlios.de/modules/XML-Grammar-Screenplay/screenplay-xml-0.2/};
+
+=head1 NAME
+
+XML::Grammar::Screenplay::FromProto - module that converts well-formed
+text representing a screenplay to an XML format.
+
+=head1 VERSION
+
+Version 0.0600
+
+=cut
+
+our $VERSION = '0.0600';
+
+=head2 new()
+
+Accepts no arguments so far. May take some time as the grammar is compiled
+at that point.
+
+=head2 meta()
+
+Internal - (to settle pod-coverage.).
+
+=cut
+
+sub _init
+{
+    my ($self, $args) = @_;
+
+    local $Parse::RecDescent::skip = "";
+
+    my $parser_class = 
+        ($args->{parser_class} || "XML::Grammar::Screenplay::FromProto::Parser::QnD");
+
+    $self->_parser(
+        $parser_class->new()
+    );
+
+    return 0;
+}
+
+=head2 $self->convert({ source => { file => $path_to_file } })
+
+Converts the file $path_to_file to XML and returns it.
+
+=cut
+
+use Data::Dumper;
+
+sub _output_tag
+{
+    my ($self, $args) = @_;
+
+    my @start = @{$args->{start}};
+    $self->_writer->startTag([$screenplay_ns,$start[0]], @start[1..$#start]);
+
+    $args->{in}->($self, $args);
+
+    $self->_writer->endTag();
+}
+
+sub _output_tag_with_childs
+{
+    my ($self, $args) = @_;
+
+    return 
+        $self->_output_tag({
+            %$args,
+            'in' => sub {
+                foreach my $child (@{$args->{elem}->_get_childs()})
+                {
+                    $self->_write_elem({elem => $child,});
+                }
+            },
+        });
+}
+
+sub _get_text_start
+{
+    my ($self, $elem) = @_;
+
+    if ($elem->isa("XML::Grammar::Screenplay::FromProto::Node::Saying"))
+    {
+        return ["saying", 'character' => $elem->character()];
+    }
+    elsif ($elem->isa("XML::Grammar::Screenplay::FromProto::Node::Description"))
+    {
+        return ["description"];
+    }
+    else
+    {
+        Carp::confess ("Unknown element class - " . ref($elem) . "!");
+    }
+}
+
+sub _write_elem
+{
+    my ($self, $args) = @_;
+
+    my $elem = $args->{elem};
+
+    if (ref($elem) eq "")
+    {
+        $self->_writer->characters($elem);
+    }
+    elsif ($elem->isa("XML::Grammar::Screenplay::FromProto::Node::Paragraph"))
+    {
+        $self->_output_tag_with_childs(
+            {
+               start => ["para"],
+                elem => $elem,
+            },
+        );
+    }
+    elsif ($elem->isa("XML::Grammar::Screenplay::FromProto::Node::Element"))
+    {
+        if (($elem->name() eq "s") || ($elem->name() eq "section"))
+        {
+            $self->_write_scene({scene => $elem});
+        }
+        elsif ($elem->name() eq "a")
+        {
+            $self->_output_tag_with_childs(
+                {
+                    start => ["ulink", "url" => $elem->lookup_attr("href")],
+                    elem => $elem,
+                }
+            );
+        }
+        elsif ($elem->name() eq "b")
+        {
+            $self->_output_tag_with_childs(
+                {
+                    start => ["bold"],
+                    elem => $elem,
+                }
+            );
+        }
+        elsif ($elem->name() eq "br")
+        {
+            $self->_writer->emptyTag("br");
+        }
+        elsif ($elem->isa("XML::Grammar::Screenplay::FromProto::Node::InnerDesc"))
+        {
+            $self->_output_tag_with_childs(
+                {
+                    start => ["inlinedesc"],
+                    elem => $elem,
+                }
+            );
+        }
+    }
+    elsif ($elem->isa("XML::Grammar::Screenplay::FromProto::Node::Text"))
+    {
+        $self->_output_tag_with_childs(
+            {
+                start => $self->_get_text_start($elem),
+                elem => $elem,
+            },
+        );
+    }
+    elsif ($elem->isa("XML::Grammar::Screenplay::FromProto::Node::Comment"))
+    {
+        $self->_writer->comment($elem->text());
+    }
+}
+
+sub _write_scene
+{
+    my ($self, $args) = @_;
+
+    my $scene = $args->{scene};
+
+    my $tag = $scene->name;
+    
+    if (($tag eq "s") || ($tag eq "scene"))
+    {
+        my $id = $scene->lookup_attr("id");
+
+        if (!defined($id))
+        {
+            Carp::confess("Unspecified id for scene!");
+        }
+
+        my $title = $scene->lookup_attr("title");
+        my @t = (defined($title) ? (title => $title) : ());
+
+        $self->_output_tag_with_childs(
+            {
+                'start' => ["scene", id => $id, @t],
+                elem => $scene,
+            }
+        );
+    }
+    else
+    {
+        confess "Improper scene tag - should be '<s>' or '<scene>'!";
+    }
+
+    return;
+}
+
+sub _read_file
+{
+    my ($self, $filename) = @_;
+
+    open my $in, "<", $filename or
+        confess "Could not open the file \"$filename\" for slurping.";
+    binmode $in, ":utf8";
+    my $contents;
+    {
+        local $/;
+        $contents = <$in>;
+    }
+    close($in);
+    
+    return $contents;
+}
+
+sub _calc_tree
+{
+    my ($self, $args) = @_;
+
+    my $filename = $args->{source}->{file} or
+        confess "Wrong filename given.";
+
+    return $self->_parser->process_text($self->_read_file($filename));
+}
+
+sub convert
+{
+    my ($self, $args) = @_;
+
+    # These should be un-commented for debugging.
+    # local $::RD_HINT = 1;
+    # local $::RD_TRACE = 1;
+    
+    # We need this so P::RD won't skip leading whitespace at lines
+    # which are siginificant.  
+
+    my $tree = $self->_calc_tree($args);
+
+    if (!defined($tree))
+    {
+        Carp::confess("Parsing failed.");
+    }
+
+    my $buffer = "";
+    my $writer = XML::Writer->new(
+        OUTPUT => \$buffer, 
+        ENCODING => "utf-8",
+        NAMESPACES => 1,
+        PREFIX_MAP =>
+        {
+             $screenplay_ns => "",
+        }
+    );
+
+    $writer->xmlDecl("utf-8");
+    $writer->doctype("document", undef, "screenplay-xml.dtd");
+    $writer->startTag([$screenplay_ns, "document"]);
+    $writer->startTag([$screenplay_ns, "head"]);
+    $writer->endTag();
+    $writer->startTag([$screenplay_ns, "body"], "id" => "index",);
+
+    # Now we're inside the body.
+    $self->_writer($writer);
+
+    $self->_write_scene({scene => $tree});
+
+    # Ending the body
+    $writer->endTag();
+
+    $writer->endTag();
+    
+    return $buffer;
+}
+
+=head1 AUTHOR
+
+Shlomi Fish, L<http://www.shlomifish.org/>.
+
+=head1 BUGS
+
+Please report any bugs or feature requests to
+C<bug-xml-grammar-screenplay at rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=XML-Grammar-Screenplay>.
+I will be notified, and then you'll automatically be notified of progress on
+your bug as I make changes.
+
+
+=head1 ACKNOWLEDGEMENTS
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2007 Shlomi Fish, all rights reserved.
+
+This program is released under the following license: MIT X11.
+
+=cut
+
+1;
+

perl/modules/XML-Grammar-Fiction/lib/XML/Grammar/Screenplay/FromProto/Nodes.pm

+package XML::Grammar::Screenplay::FromProto::Nodes;
+
+use strict;
+use warnings;
+
+use List::Util ();
+
+package XML::Grammar::Screenplay::FromProto::Node;
+
+use Moose;
+
+package XML::Grammar::Screenplay::FromProto::Node::WithContent;
+
+use Moose;
+
+extends("XML::Grammar::Screenplay::FromProto::Node");
+
+has 'children' => (
+    isa => 'XML::Grammar::Screenplay::FromProto::Node::List', 
+    is => 'rw'
+);
+
+sub _get_childs
+{
+    my $self = shift;
+
+    my $childs = $self->children->contents();
+
+    return $childs || [];
+}
+
+package XML::Grammar::Screenplay::FromProto::Node::Element;
+
+use Moose;
+
+extends("XML::Grammar::Screenplay::FromProto::Node::WithContent");
+
+has 'name' => (isa => 'Str', is => 'rw');
+has 'attrs' => (isa => 'ArrayRef', is => 'rw');
+
+sub lookup_attr
+{
+    my ($self, $attr_name) = @_;
+
+    my $pair = List::Util::first { $_->{key} eq $attr_name } (@{$self->attrs()});
+
+    if (!defined($pair))
+    {
+        return undef;
+    }
+    else
+    {
+        return $pair->{value};
+    }
+}
+
+package XML::Grammar::Screenplay::FromProto::Node::List;
+
+use Moose;
+
+has 'contents' => (isa => "ArrayRef", is => "rw");
+
+package XML::Grammar::Screenplay::FromProto::Node::Text;
+
+use Moose;
+
+extends("XML::Grammar::Screenplay::FromProto::Node::WithContent");
+
+package XML::Grammar::Screenplay::FromProto::Node::Saying;
+
+use Moose;
+
+extends("XML::Grammar::Screenplay::FromProto::Node::Text");
+
+has 'character' => (isa => "Str", is => "rw");
+
+package XML::Grammar::Screenplay::FromProto::Node::Description;
+
+use Moose;
+
+extends("XML::Grammar::Screenplay::FromProto::Node::Text");