<html><head><title>Nile</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" >
</head>
<body class='pod'>
<!--
  generated by Pod::Simple::HTML v3.28,
  using Pod::Simple::PullParser v3.28,
  under Perl v5.016003 at Sun Jul 13 15:19:39 2014 GMT.

 If you want to change this HTML document, you probably shouldn't do that
   by changing it directly.  Instead, see about changing the calling options
   to Pod::Simple::HTML, and/or subclassing Pod::Simple::HTML,
   then reconverting this document from the Pod source.
   When in doubt, email the author of Pod::Simple::HTML for advice.
   See 'perldoc Pod::Simple::HTML' for more info.

-->

<!-- start doc -->
<a name='___top' class='dummyTopAnchor' ></a>

<h1><a class='u'
name="NAME"
>NAME</a></h1>

<p>Nile - Visual Web App Framework Separating Code From Design Multi Lingual And Multi Theme.</p>

<h1><a class='u'
name="SYNOPSIS"
>SYNOPSIS</a></h1>

<pre>        #!/usr/bin/perl
        use Nile;
        my $app = Nile-&#62;new;
        $app-&#62;init(
                #base application path, auto detected if not set
                #path           =&#62;      dirname(File::Spec-&#62;rel2abs(__FILE__)),
                #site language for user, auto detected if not set
                #lang           =&#62;      &#34;en-US&#34;
                #theme used
                #theme          =&#62;      &#34;default&#34;
                );
        #handle request and send response
        $app-&#62;run;</pre>

<h1><a class='u'
name="DESCRIPTION"
>DESCRIPTION</a></h1>

<p>Nile - Visual Web App Framework Separating Code From Design Multi Lingual And Multi Theme.</p>

<p><b>Alpha</b> version, do not use it for production. The project&#39;s homepage <a href="https://github.com/mewsoft/Nile" class="podlinkurl"
>https://github.com/mewsoft/Nile</a>.</p>

<p>The main idea in this framework is to separate all the html design and layout from programming. The framework uses html templates for the design with special xml tags for inserting the dynamic output into the templates. All the application text is separated in langauge files in xml format supporting multi lingual applications with easy traslating and modifying all the text.</p>

<pre>        #!/usr/bin/perl
        use Nile;
        my $app = Nile-&#62;new;

        $app-&#62;init(
                #base application path, auto detected if not set
                #path           =&#62;      dirname(File::Spec-&#62;rel2abs(__FILE__)),
                #site language for user, auto detected if not set
                #lang           =&#62;      &#34;en-US&#34;
                #theme used
                #theme          =&#62;      &#34;default&#34;
                );
        
        #handle request and send response
        #$app-&#62;run;
        
        # control everything manually
        my $request = $app-&#62;request;

        # load  global shared application configuration file
        $app-&#62;config-&#62;load($app-&#62;file-&#62;catfile($app-&#62;var-&#62;get(&#34;config_dir&#34;), &#34;config&#34;));
        say $app-&#62;config-&#62;get(&#34;database/user&#34;);
        
        # connect to the database. pass the connection params or try to load it from the config object.
        #$app-&#62;connect();
        #$app-&#62;connect(%params);
        
        # set or get some global shared application variables
        #my $var = $app-&#62;var;
        #$var-&#62;Body(&#34;Body variable&#34;); # use auto getter and setter methods
        #say &#34;Title: &#34;. $var-&#62;set(&#34;Title&#34;, &#34;Hello world Title&#34;)-&#62;get(&#34;Title&#34;);
        
        # load langauge file general.xml
        $app-&#62;lang-&#62;load(&#34;general&#34;);
        
        # load routes file route.xml
        $self-&#62;router-&#62;load(&#34;route&#34;);
        
        # run the application and show the content.
        $self-&#62;dispatcher-&#62;dispatch;

        # you can run any plugin or route
        #$self-&#62;dispatcher-&#62;dispatch(&#39;/accounts/register/create&#39;);
        #$self-&#62;dispatcher-&#62;dispatch(&#39;/accounts/register/create&#39;, &#39;POST&#39;);</pre>

<h1><a class='u'
name="EXAMPLE_APPLICATION"
>EXAMPLE APPLICATION</a></h1>

<p>Download and uncompress the module file. You will find an example application folder named <b>app</b>.</p>

<h1><a class='u'
name="URLs"
>URLs</a></h1>

<p>This framework support SEO friendly url&#39;s, routing specific urls and short urls to actions.</p>

<p>The url routing system works in the following formats:</p>

<pre>        http://domain.com/plugin/controller/action      # mapped from route file or to Plugin/Controller/action
        http://domain.com/plugin/action                 # mapped from route file or to Plugin/Plugin/action or Plugin/Plugin/index
        http://domain.com/plugin                        # mapped from route file or to Plugin/Plugin/plugin or Plugin/Plugin/index
        http://domain.com/index.cgi?action=plugin/controller/action
        http://domain.com/?action=plugin/controller/action
        http://domain.com/blog/2014/11/28       # route mapped from route file and args passed as request params</pre>

<p>The following urls formats are all the same and all are mapped to the route Home/Home/index or Home/Home/home (Plugin/Controller/Action):</p>

<pre>        # direct cgi call, you can use action=home, route=home, or cmd=home
        http://domain.com/index.cgi?action=home

        # using .htaccess to redirect to index.cgi
        http://domain.com/?action=home

        # SEO url using with .htaccess. route is auto detected from url.
        http://domain.com/home</pre>

<h1><a class='u'
name="APPLICATION_DIRECTORY_STRUCTURE"
>APPLICATION DIRECTORY STRUCTURE</a></h1>

<p>Applications built with this framework must have basic folder structure. Applications may have any additional directories.</p>

<p>The following is the basic application folder tree that must be created manually before runing:</p>

<pre>                &#9500;&#9472;&#9472;&#9472;config
                &#9500;&#9472;&#9472;&#9472;lang
                &#9474;   &#9492;&#9472;&#9472;&#9472;en-US
                &#9500;&#9472;&#9472;&#9472;lib
                &#9474;   &#9492;&#9472;&#9472;&#9472;Nile
                &#9474;       &#9492;&#9472;&#9472;&#9472;Plugin
                &#9474;           &#9492;&#9472;&#9472;&#9472;Home
                &#9500;&#9472;&#9472;&#9472;log
                &#9500;&#9472;&#9472;&#9472;route
                &#9492;&#9472;&#9472;&#9472;theme
                        &#9492;&#9472;&#9472;&#9472;default
                                &#9500;&#9472;&#9472;&#9472;image
                                &#9500;&#9472;&#9472;&#9472;view
                                &#9492;&#9472;&#9472;&#9472;widget</pre>

<h1><a class='u'
name="CREATING_YOUR_FIRST_PLUGIN_&#39;HOME&#39;"
>CREATING YOUR FIRST PLUGIN &#39;HOME&#39;</a></h1>

<p>To create your first plugin called Home for your site home page, create a folder called <b>Home</b> in your application path <code>/path/lib/Nile/Plugin/Home</code>, then create the plugin Controller file say <b>Home.pm</b> and put the following code:</p>

<pre>        package Nile::Plugin::Home::Home;

        use Nile::Base;

        sub home  : GET Action {
                
                my ($self) = @_;

                my $view = $self-&#62;me-&#62;view(&#34;home&#34;);
                
                $view-&#62;var(
                                fname                   =&#62;      &#39;Ahmed&#39;,
                                lname                   =&#62;      &#39;Elsheshtawy&#39;,
                                email                   =&#62;      &#39;sales@mewsoft.com&#39;,
                                website         =&#62;      &#39;http://www.mewsoft.com&#39;,
                                singleline              =&#62;      &#39;Single line variable &#60;b&#62;Good&#60;/b&#62;&#39;,
                                multiline               =&#62;      &#39;Multi line variable &#60;b&#62;Nice&#60;/b&#62;&#39;,
                        );

                $view-&#62;process;
                $view-&#62;render;
        }

        1;</pre>

<h1><a class='u'
name="YOUR_FIRST_VIEW_&#39;home&#39;"
>YOUR FIRST VIEW &#39;home&#39;</a></h1>

<p>Create an html file name it as <b>home.html</b>, put it in the default theme folder <b>/path/theme/default/views</b> and put in this file the following code:</p>

<pre>        &#60;vars type=&#34;widget&#34; name=&#34;header&#34; charset_name=&#34;UTF-8&#34; lang_name=&#34;en&#34; /&#62;
          
        {first_name} &#60;vars name=&#34;fname&#34;/&#62;
        {last_name} &#60;vars name=&#34;lname&#34; /&#62;
        {email} &#60;vars type=&#34;var&#34; name=&#39;email&#39; /&#62;
        {website} &#60;vars type=&#34;var&#34; name=&#34;website&#34; /&#62;

        {date_now} &#60;vars type=&#34;plugin&#34; name=&#34;Date::Date-&#62;date&#34; format=&#34;%Y %M %D&#34; /&#62;
        {time_now} &#60;vars type=&#34;plugin&#34; name=&#34;Date-&#62;now&#34; format=&#34;%M %Y  %D&#34; /&#62;
        {date_time} &#60;vars type=&#34;plugin&#34; name=&#34;date&#34; format=&#34;%M %Y  %D&#34; /&#62;

        Version: &#60;vars type=&#34;perl&#34;&#62;&#60;![CDATA[print $self-&#62;me-&#62;VERSION; return;]]&#62;&#60;/vars&#62;

        &#60;vars type=&#34;perl&#34;&#62;system (&#39;dir c:\\*.bat&#39;);&#60;/vars&#62;

        &#60;vars type=&#34;var&#34; name=&#34;singleline&#34; width=&#34;400px&#34; height=&#34;300px&#34; content=&#34;ahmed&#60;b&#62;class/subclass&#34;&#62;
                cdata start here is may have html tags and &#39;single&#39; and &#34;double&#34; qoutes
        &#60;/vars&#62;

        &#60;vars type=&#34;var&#34; name=&#34;multiline&#34; width=&#34;400px&#34; height=&#34;300px&#34;&#62;&#60;![CDATA[ 
                cdata start here is may have html tags &#60;b&#62;hello&#60;/b&#62; and &#39;single&#39; and &#34;double&#34; qoutes
                another cdata line
        ]]&#62;&#60;/vars&#62;

        &#60;!--block:first--&#62;
                &#60;table border=&#34;1&#34; style=&#34;color:red;&#34;&#62;
                &#60;tr class=&#34;lines&#34;&#62;
                        &#60;td align=&#34;left&#34; valign=&#34;&#60;--valign--&#62;&#34;&#62;
                                &#60;b&#62;bold&#60;/b&#62;&#60;a href=&#34;http://www.mewsoft.com&#34;&#62;mewsoft&#60;/a&#62;
                                &#60;!--hello--&#62; &#60;--again--&#62;&#60;!--world--&#62;
                                some html content here 1 top
                                &#60;!--block:second--&#62;
                                        some html content here 2 top
                                        &#60;!--block:third--&#62;
                                                some html content here 3 top
                                                &#60;!--block:fourth--&#62;
                                                some html content here 4 top
                                                        &#60;!--block:fifth--&#62;
                                                                some html content here 5a
                                                                some html content here 5b
                                                        &#60;!--endblock--&#62;
                                                &#60;!--endblock--&#62;
                                                some html content here 3a
                                        some html content here 3b
                                &#60;!--endblock--&#62;
                        some html content here 2 bottom
                        &#60;/tr&#62;
                &#60;!--endblock--&#62;
                some html content here 1 bottom
        &#60;/table&#62;
        &#60;!--endblock--&#62;
        some html content here1-5 bottom base

        &#60;vars type=&#34;widget&#34; name=&#34;footer&#34; title=&#34;cairo&#34; lang=&#34;ar&#34; /&#62;</pre>

<h1><a class='u'
name="YOUR_FIRST_WIDGETS_&#39;header&#39;_AND_&#39;footer&#39;"
>YOUR FIRST WIDGETS &#39;header&#39; AND &#39;footer&#39;</a></h1>

<p>The framework supports widgets, widgets are small views that can be repeated in many views for easy layout and design. For example, you could make the site header template as a widget called <b>header</b> and the site footer template as a widget called <b>footer</b> and just put the required xml special tag for these widgets in all the <b>Views</b> you want. Widgets files are html files located in the theme <b>&#39;widget&#39;</b> folder</p>

<p>Example widget <b>header.html</b></p>

<pre>        &#60;!doctype html&#62;
        &#60;html lang=&#34;[:lang_name:]&#34;&#62;
         &#60;head&#62;
          &#60;meta http-equiv=&#34;content-type&#34; content=&#34;text/html; charset=[:charset_name:]&#34; /&#62;
          &#60;title&#62;{page_title}&#60;/title&#62;
          &#60;meta name=&#34;Keywords&#34; content=&#34;{meta_keywords}&#34; /&#62;
          &#60;meta name=&#34;Description&#34; content=&#34;{meta_description}&#34; /&#62;
         &#60;/head&#62;
         &#60;body&#62;</pre>

<p>Example widget <b>footer.html</b></p>

<pre>        &#60;/body&#62;
        &#60;/html&#62;</pre>

<p>then all you need to include the widget in the view is to insert these tags:</p>

<pre>        &#60;vars type=&#34;widget&#34; name=&#34;header&#34; charset_name=&#34;UTF-8&#34; lang_name=&#34;en&#34; /&#62;
        &#60;vars type=&#34;widget&#34; name=&#34;footer&#34; /&#62;</pre>

<p>You can pass args to the widget like <b>charset_name</b> and <b>lang_name</b> to the widget above and will be replaced with their values.</p>

<h1><a class='u'
name="LANGUAGES"
>LANGUAGES</a></h1>

<p>All application text is located in text files in xml format. Each language supported should be put under a folder named with the iso name of the langauge under the folder path/lang.</p>

<p>Example langauge file <b>&#39;general.xml&#39;</b>:</p>

<pre>        &#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34; ?&#62;
        &#60;site_name&#62;Site Name&#60;/site_name&#62;
        &#60;home&#62;Home&#60;/home&#62;
        &#60;register&#62;Register&#60;/register&#62;
        &#60;contact&#62;Contact&#60;/contact&#62;
        &#60;about&#62;About&#60;/about&#62;
        &#60;copyright&#62;Copyright&#60;/copyright&#62;
        &#60;privacy&#62;Privacy&#60;/privacy&#62;

        &#60;page_title&#62;Create New Account&#60;/page_title&#62;
        &#60;first_name&#62;First name:&#60;/first_name&#62;
        &#60;middle_name&#62;Middle name:&#60;/middle_name&#62;
        &#60;last_name&#62;Last name:&#60;/last_name&#62;
        &#60;full_name&#62;Full name:&#60;/full_name&#62;
        &#60;email&#62;Email:&#60;/email&#62;
        &#60;job&#62;Job title:&#60;/job&#62;
        &#60;website&#62;Website:&#60;/website&#62;
        &#60;agree&#62;Agree:&#60;/agree&#62;
        &#60;company&#62;Email:&#60;/company&#62;</pre>

<h1><a class='u'
name="Routing"
>Routing</a></h1>

<p>The framework supports url routing, route specific short name actions like &#39;register&#39; to specific plugins like Accounts/Register/create.</p>

<p>Below is <b>route.xml</b> file example should be created under the path/route folder.</p>

<pre>        &#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34; ?&#62;

        &#60;register route=&#34;register&#34; action=&#34;Accounts/Register/register&#34; method=&#34;get&#34; defaults=&#34;year=1900|month=1|day=23&#34; /&#62;

        &#60;post route=&#34;blog/post/{cid:\d+}/{id:\d+}&#34; action=&#34;Blog/Article/Post&#34; method=&#34;post&#34; /&#62;

        &#60;browse route=&#34;blog/{id:\d+}&#34; action=&#34;Blog/Article/Browse&#34; method=&#34;get&#34; /&#62;
        &#60;view route=&#34;blog/view/{id:\d+}&#34; action=&#34;Blog/Article/View&#34; method=&#34;get&#34; /&#62;
        &#60;edit route=&#34;blog/edit/{id:\d+}&#34; action=&#34;Blog/Article/Edit&#34; method=&#34;get&#34; /&#62;</pre>

<h1><a class='u'
name="CONFIG"
>CONFIG</a></h1>

<p>The framework supports loading and working with config files in xml formate located in the folder &#39;config&#39;.</p>

<p>Example config file path/config/config.xml:</p>

<pre>        &#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34; ?&#62;
        &#60;admin&#62;
                &#60;user&#62;admin_user&#60;/user&#62;
                &#60;password&#62;admin_pass&#60;/password&#62;
        &#60;/admin&#62;
        &#60;database&#62;
                &#60;driver&#62;mysql&#60;/driver&#62;
                &#60;host&#62;localhost&#60;/host&#62;
                &#60;dsn&#62;&#60;/dsn&#62;
                &#60;port&#62;3306&#60;/port&#62;
                &#60;name&#62;blog&#60;/name&#62;
                &#60;user&#62;blog&#60;/user&#62;
                &#60;pass&#62;pass1234&#60;/pass&#62;
                &#60;attribute&#62;
                &#60;/attribute&#62;
                &#60;encoding&#62;utf8&#60;/encoding&#62;
        &#60;/database&#62;</pre>

<h1><a class='u'
name="APPLICATION_INSTANCE_SHARED_DATA"
>APPLICATION INSTANCE SHARED DATA</a></h1>

<p>The framework is fully Object-oriented to allow multiple separate instances, we use the shared <b>var</b> method on the main object to access all application shared data. The plugin modules files will have the following features.</p>

<p>Moose enabled Strict and Warnings enabled. a Moose attribute called &#39;me&#39; or &#39;nile&#39; injected in the same plugin class holds the application singleton instance to access all the shared data and methods.</p>

<p>you will be able to access from the plugin class the shared vars as:</p>

<pre>        $self-&#62;me-&#62;var-&#62;get(&#34;lang&#34;);</pre>

<p>you also can use auto getter/setter</p>

<pre>        $self-&#62;me-&#62;var-&#62;lang;</pre>

<h1><a class='u'
name="URL_REWRITE_.htaccess"
>URL REWRITE .htaccess</a></h1>

<p>To hide the script name <b>index.cgi</b> from the url and allow nice SEO url routing, you need to turn on url rewrite on your web server and have .htaccess file in the application folder with the index.cgi.</p>

<p>Below is a sample .htaccess which redirects all requests to index.cgi file.</p>

<pre>        # Don&#39;t show directory listings for URLs which map to a directory.
        Options -Indexes -MultiViews

        # Follow symbolic links in this directory.
        Options +FollowSymLinks

        #Note that AllowOverride Options and AllowOverride FileInfo must both be in effect for these directives to have any effect, 
        #i.e. AllowOverride All in httpd.conf
        Options +ExecCGI
        AddHandler cgi-script cgi pl 

        # Set the default handler.
        DirectoryIndex index.cgi index.html index.shtml

        # save this file as UTF-8 and enable the next line for utf contents
        #AddDefaultCharset UTF-8

        # REQUIRED: requires mod_rewrite to be enabled in Apache.
        # Please check that, if you get an &#34;Internal Server Error&#34;.
        RewriteEngine On

        #=========================================================#
        # force use www with http and https so http://domain.com redirect to http://www.domain.com
        #add www with https support - you have to put this in .htaccess file in the site root folder
        # skip local host
        RewriteCond %{HTTP_HOST} !^localhost
        # skip IP addresses
        RewriteCond %{HTTP_HOST} ^([a-z.]+)$ [NC]
        RewriteCond %{HTTP_HOST} !^www\. 
        RewriteCond %{HTTPS}s ^on(s)|&#39;&#39;
        RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
        #=========================================================#
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} !=/favicon.ico
        RewriteRule ^(.*)$ index.cgi [L,QSA]</pre>

<h1><a class='u'
name="REQUEST"
>REQUEST</a></h1>

<p>The http request is available as a shared object extending the <a href="http://search.cpan.org/perldoc?CGI%3A%3ASimple" class="podlinkpod"
>CGI::Simple</a> module. This means that all methods supported by <a href="http://search.cpan.org/perldoc?CGI%3A%3ASimple" class="podlinkpod"
>CGI::Simple</a> is available with the additions of these few methods:</p>

<pre>        is_ajax
        is_post
        is_get
        is_head
        is_put
        is_delete
        is_patch</pre>

<p>You access the request object by $self-&#62;me-&#62;request.</p>

<h1><a class='u'
name="ERRORS,_WARNINGS,_ABORTING"
>ERRORS, WARNINGS, ABORTING</a></h1>

<p>To abort the application at anytime with optional message and stacktrace, call the method:</p>

<pre>        $self-&#62;me-&#62;abort(&#34;application error, can not find file required&#34;);</pre>

<p>For fatal errors with custom error message</p>

<pre>        $self-&#62;me-&#62;error(&#34;error message&#34;);</pre>

<p>For fatal errors with custom error message and full starcktrace</p>

<pre>        $self-&#62;me-&#62;errors(&#34;error message&#34;);</pre>

<p>For displaying warning message</p>

<pre>        $self-&#62;me-&#62;warning(&#34;warning message&#34;);</pre>

<h1><a class='u'
name="LOGS"
>LOGS</a></h1>

<p>The framework supports a log object which is a <a href="http://search.cpan.org/perldoc?Log%3A%3ATiny" class="podlinkpod"
>Log::Tiny</a> object which supports unlimited log categories, so simply you can do this:</p>

<pre>        $self-&#62;me-&#62;log-&#62;info(&#34;application run start&#34;);
        $self-&#62;me-&#62;log-&#62;DEBUG(&#34;application run start&#34;);
        $self-&#62;me-&#62;log-&#62;ERROR(&#34;application run start&#34;);
        $self-&#62;me-&#62;log-&#62;INFO(&#34;application run start&#34;);
        $self-&#62;me-&#62;log-&#62;ANYTHING(&#34;application run start&#34;);</pre>

<h1><a class='u'
name="FILE"
>FILE</a></h1>

<p>The file object provides tools for reading files, folders, and most of the functions in the modules <a href="http://search.cpan.org/perldoc?File%3A%3ASpec" class="podlinkpod"
>File::Spec</a> and <a href="http://search.cpan.org/perldoc?File%3A%3ABasename" class="podlinkpod"
>File::Basename</a>.</p>

<p>to get file content as single string or array of strings:</p>

<pre>        $content = $self-&#62;me-&#62;file-&#62;get($file);
        @lines = $self-&#62;me-&#62;file-&#62;get($file);</pre>

<p>supports options same as <a href="http://search.cpan.org/perldoc?File%3A%3ASlurp" class="podlinkpod"
>File::Slurp</a>.</p>

<p>To get list of files in a specific folder:</p>

<pre>        #files($dir, $match, $relative)
        @files = $self-&#62;me-&#62;file-&#62;files(&#34;c:/apache/htdocs/nile/&#34;, &#34;*.pm, *.cgi&#34;);
        
        #files_tree($dir, $match, $relative, $depth)
        @files = $self-&#62;me-&#62;file-&#62;files_tree(&#34;c:/apache/htdocs/nile/&#34;, &#34;*.pm, *.cgi&#34;);

        #folders($dir, $match, $relative)
        @folders = $self-&#62;file-&#62;folders(&#34;c:/apache/htdocs/nile/&#34;, &#34;&#34;, 1);

        #folders_tree($dir, $match, $relative, $depth)
        @folders = $self-&#62;file-&#62;#folders_tree(&#34;c:/apache/htdocs/nile/&#34;, &#34;&#34;, 1);</pre>

<h1><a class='u'
name="XML"
>XML</a></h1>

<p>Loads xml files into hash tree using <a href="http://search.cpan.org/perldoc?XML%3A%3ATreePP" class="podlinkpod"
>XML::TreePP</a></p>

<pre>        $xml = $self-&#62;me-&#62;xml-&#62;load(&#34;configs.xml&#34;);</pre>

<h1><a class='u'
name="DATABASE"
>DATABASE</a></h1>

<p>The database class provides methods for connecting to the sql database and easy methods for sql operations.</p>

<h2><a class='u'
name="Sub_Modules"
>Sub Modules</a></h2>

<p>Views <a href="http://search.cpan.org/perldoc?Nile%3A%3AView" class="podlinkpod"
>Nile::View</a>.</p>

<p>Shared Vars <a href="http://search.cpan.org/perldoc?Nile%3A%3AVar" class="podlinkpod"
>Nile::Var</a>.</p>

<p>Langauge <a href="http://search.cpan.org/perldoc?Nile%3A%3ALang" class="podlinkpod"
>Nile::Lang</a>.</p>

<p>Http Request <a href="http://search.cpan.org/perldoc?Nile%3A%3ARequest" class="podlinkpod"
>Nile::Request</a>.</p>

<p>Dispatcher <a href="http://search.cpan.org/perldoc?Nile%3A%3ADispatcher" class="podlinkpod"
>Nile::Dispatcher</a>.</p>

<p>Router <a href="http://search.cpan.org/perldoc?Nile%3A%3ARouter" class="podlinkpod"
>Nile::Router</a>.</p>

<p>File Utils <a href="http://search.cpan.org/perldoc?Nile%3A%3AFile" class="podlinkpod"
>Nile::File</a>.</p>

<p>Paginatation <a href="http://search.cpan.org/perldoc?Nile%3A%3APaginate" class="podlinkpod"
>Nile::Paginate</a>.</p>

<p>Database <a href="http://search.cpan.org/perldoc?Nile%3A%3ADatabase" class="podlinkpod"
>Nile::Database</a>.</p>

<p>XML <a href="http://search.cpan.org/perldoc?Nile%3A%3AXML" class="podlinkpod"
>Nile::XML</a>.</p>

<p>Settings <a href="http://search.cpan.org/perldoc?Nile%3A%3ASettingNile%3A%3ASetting" class="podlinkpod"
>Nile::SettingNile::Setting</a>.</p>

<p>Abort <a href="http://search.cpan.org/perldoc?Nile%3A%3AAbort" class="podlinkpod"
>Nile::Abort</a>.</p>

<h1><a class='u'
name="Bugs"
>Bugs</a></h1>

<p>This project is available on github at <a href="https://github.com/mewsoft/Nile" class="podlinkurl"
>https://github.com/mewsoft/Nile</a>.</p>

<h1><a class='u'
name="HOMEPAGE"
>HOMEPAGE</a></h1>

<p>Please visit the project&#39;s homepage at <a href="https://metacpan.org/release/Nile" class="podlinkurl"
>https://metacpan.org/release/Nile</a>.</p>

<h1><a class='u'
name="SOURCE"
>SOURCE</a></h1>

<p>Source repository is at <a href="https://github.com/mewsoft/Nile" class="podlinkurl"
>https://github.com/mewsoft/Nile</a>.</p>

<h1><a class='u'
name="AUTHOR"
>AUTHOR</a></h1>

<p>Ahmed Amin Elsheshtawy, &#1575;&#1581;&#1605;&#1583; &#1575;&#1605;&#1610;&#1606; &#1575;&#1604;&#1588;&#1588;&#1578;&#1575;&#1608;&#1609; &#60;mewsoft@cpan.org&#62; Website: http://www.mewsoft.com</p>

<h1><a class='u'
name="COPYRIGHT_AND_LICENSE"
>COPYRIGHT AND LICENSE</a></h1>

<p>Copyright (C) 2014-2015 by Dr. Ahmed Amin Elsheshtawy mewsoft@cpan.org, support@mewsoft.com, <a href="https://github.com/mewsoft/Nile" class="podlinkurl"
>https://github.com/mewsoft/Nile</a>, <a href="http://www.mewsoft.com" class="podlinkurl"
>http://www.mewsoft.com</a></p>

<p>This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.</p>

<!-- end doc -->

</body></html>