home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2004 December / PCpro_2004_12.ISO / files / webserver / tsw / TSW_3.4.0.exe / Apache2 / perl / Splash.pod < prev    next >
Encoding:
Text File  |  2004-01-30  |  15.8 KB  |  1,031 lines

  1. #============================================================= -*-perl-*-
  2. #
  3. # Template::Library::Splash
  4. #
  5. # DESCRIPTION
  6. #   The Splash! library is built on top of the HTML library and
  7. #   implements a set of widgets for easy construction of stylish HTML
  8. #   pages
  9. #
  10. # AUTHOR
  11. #   Andy Wardley  <abw@andywardley.com>
  12. #
  13. # COPYRIGHT
  14. #   Copyright (C) 1996-2001 Andy Wardley.  All Rights Reserved.
  15. #   Copyright (C) 1998-2001 Canon Research Centre Europe Ltd.
  16. #
  17. #   This module is free software; you can redistribute it and/or
  18. #   modify it under the same terms as Perl itself.
  19. #
  20. # REVISION
  21. #   2.69
  22. #
  23. #========================================================================
  24.  
  25.  
  26. #------------------------------------------------------------------------
  27. # IMPORTANT NOTE
  28. #   This documentation is generated automatically from source
  29. #   templates.  Any changes you make here may be lost.
  30. #   The 'docsrc' documentation source bundle is available for download
  31. #   from http://www.template-toolkit.org/docs.html and contains all
  32. #   the source templates, XML files, scripts, etc., from which the
  33. #   documentation for the Template Toolkit is built.
  34. #------------------------------------------------------------------------
  35.  
  36. =head1 NAME
  37.  
  38. Template::Library::Splash - Template library for building stylish HTML user interfaces
  39.  
  40. =head1 DESCRIPTION
  41.  
  42. B<NOTE:> This documentation is incomplete, incorrect and outdated.
  43. The Splash! library is still evolving and subject to change.  See
  44. the examples for a much more recent and accurate demonstration of
  45. use.
  46.  
  47. =head2 Introduction
  48.  
  49. The 'Splash' template library is distributed as part of the Template
  50. Toolkit.  It can be found in the 'templates' sub-directory of the
  51. installation directory.
  52.  
  53.     /your/tt2/installation
  54.     |
  55.     +-- docs
  56.     |      ...
  57.     |  
  58.     +-- images
  59.     |      ...
  60.     |
  61.     +-- examples
  62.     |      ...
  63.     |
  64.     +-- templates
  65.         |
  66.         +-- html
  67.         |      ...
  68.         +-- pod
  69.         |      ...
  70.         +-- splash     <<<< YOU ARE HERE
  71.                ...
  72.  
  73.  
  74. To use the Splash library, you first need to tell the Template Toolkit
  75. where to find the template files.
  76.  
  77.     use Template;
  78.  
  79.     my $tt2 = Template->new({
  80.     INCLUDE_PATH => '/usr/local/tt2/templates',
  81.     });
  82.  
  83. For a portable way to determine the installation 'templates' directory,
  84. you can use the C<Template::Config-E<gt>instdir()> class method.
  85.  
  86.     use Template;
  87.  
  88.     my $tt2 = Template->new({
  89.     INCLUDE_PATH => Template::Config->instdir('templates'),
  90.     });
  91.  
  92. Note that you should set the INCLUDE_PATH to the 'templates' directory
  93. as shown here and don't be tempted to set the INCLUDE_PATH to
  94. 'templates/splash'.  Many of the Splash! components use elements in
  95. the 'html' directory and contain directives of the form:
  96.  
  97.     [% INCLUDE html/something %].
  98.  
  99. =head2 Configuration
  100.  
  101. The 'splash/config' template defines a 'splash' hash array which
  102. contains numerous configuration items for the Splash library.  You
  103. must PROCESS this template to ensure that the hash definition is
  104. imported into your calling template.  An INCLUDE is not sufficient as
  105. it localises variables and prevents the 'splash' hash array from
  106. existing outside the splash/config template.
  107.  
  108.     [% PROCESS splash/config %]
  109.  
  110. Alternately, you can define the splash/config template as a PRE_PROCESS
  111. item when you create the Template processor. 
  112.  
  113.     use Template;
  114.  
  115.     my $tt2 = Template->new({
  116.     INCLUDE_PATH => Template::Config->instdir('templates'),
  117.     PRE_PROCESS  => 'splash/config',
  118.     });
  119.  
  120. You can modify the default configuration by creating your own
  121. PRE_PROCESS config file which loads the 'splash/config' and then
  122. tweaks the settings to your own preferences.
  123.  
  124.     my $tt2 = Template->new({
  125.     INCLUDE_PATH => [ '/home/abw/tt2/templates',
  126.                   Template::Config->instdir('templates') ],
  127.         PRE_PROCESS => 'config'
  128.     });
  129.  
  130. /home/abw/tt2/templates/config:
  131.  
  132.     [% # load the 'splash' configuration
  133.        PROCESS splash/config;
  134.        
  135.        # tweak values to personal preferences
  136.        splash.images       = '/~abw/tt2/images/splash'
  137.        splash.select.col   = 'leaf'
  138.        splash.unselect.col = 'bud'
  139.     %]
  140.  
  141. The splash/config file includes some instructional comments on 
  142. things you might like to tweak.
  143.  
  144. =head2 Colours
  145.  
  146. The Splash! library uses the colours defined in the html/rgb template.
  147. The 'rgb' hash defined therein is imported as the 'splash.rgb' hash.
  148.  
  149.     [% INCLUDE splash/box col='grey75' %]
  150.  
  151. See the examples for further enlightenment on using colour.
  152.  
  153. =head2 Style
  154.  
  155. There are two very primitive "styles" implemented called "select" and
  156. "unselect".  These are used to indicate which item on a menu is
  157. selected, for example.  Each style defines characteristics like
  158. background colour, font face, size and colour, text alignment, and so
  159. on.  
  160.  
  161. The styles are implemented as hashes within the 'splash' hash.  Many
  162. of the components respond to a 'style' variable being set and you can
  163. pass a direct reference to splash.select or splash.unselect (or your
  164. own styles).  e.g.
  165.  
  166.     [% INCLUDE splash/button 
  167.        content = "Unselected"
  168.            style   = splash.unselect
  169.     %]
  170.     [% INCLUDE splash/button 
  171.            content ="Selected"
  172.            style   = splash.select
  173.     %]
  174.  
  175. Alternately, you can use the 'select' variable to indicate either
  176. of the inbuilt styles: splash.select or splash.unselect.
  177.  
  178.     [% INCLUDE splash/button 
  179.            content = "Unselected"
  180.            select  = 0
  181.     %]
  182.     [% INCLUDE splash/button
  183.            content = "Selected"
  184.            select  = 1
  185.     %]
  186.  
  187. =head1 COMPONENT TEMPLATES
  188.  
  189. This section describes some of the component templates in the Splash!
  190. library.  This documentation is incomplete and may also be inaccurate
  191. in places.  The examples in the 'examples' directory are likely to be
  192. a much better reference.
  193.  
  194.  
  195. =head2 splash/text
  196.  
  197. Simple template to format text according to a selected/unselected style,
  198. adding links, etc.
  199.  
  200.     [% INCLUDE splash/text
  201.            content = 'Template Toolkit'
  202.            link    = 'http://www.template-toolkit.org'
  203.            select  = 0
  204.            bold    = 1
  205.     %]
  206.  
  207.  
  208. Configuration items:
  209.  
  210. =over 4
  211.  
  212.  
  213. =item content
  214.  
  215. Text content.
  216.  
  217.  
  218. =item link
  219.  
  220. URL which can be defined to make the text a link.
  221.  
  222.  
  223. =item style
  224.  
  225. Reference to a style hash.
  226.  
  227.  
  228. =item select
  229.  
  230. Flag to default the style to splash.select (select == true value) or
  231. splash.unselect (select == false value).
  232.  
  233.  
  234. =back
  235.  
  236. The following items default to the relevant style values:
  237.  
  238. =over 4
  239.  
  240.  
  241. =item col (style.col.text)
  242.  
  243.  
  244. =item font (style.font.face)
  245.  
  246.  
  247. =item bold (style.font.bold)
  248.  
  249.  
  250. =item size (style.font.size)
  251.  
  252.  
  253. =back
  254.  
  255.  
  256.  
  257. =head2 splash/table
  258.  
  259. A thin wrapper around html/table, allowing a colour to be specified
  260. by name.
  261.  
  262.     [% WRAPPER splash/table
  263.            col   = 'aqua'
  264.        pad   = 4
  265.            width = '100%'
  266.     %]
  267.     <tr>
  268.       <td>Foo</td>
  269.       <td>Bar</td>
  270.     </tr>
  271.     [% END %]
  272.  
  273.  
  274. Configuration items:
  275.  
  276. =over 4
  277.  
  278.  
  279. =item content
  280.  
  281. Table content.
  282.  
  283.  
  284. =item col
  285.  
  286. Background colour.
  287.  
  288.  
  289. =item border
  290.  
  291. Border width (default: 0)
  292.  
  293.  
  294. =item width
  295.  
  296. Width in absolute pixels (e.g. '100') or as a percentage (e.g. '50%').
  297.  
  298. =item pad
  299.  
  300. Cell padding.
  301.  
  302.  
  303. =item space
  304.  
  305. Cell padding.
  306.  
  307.  
  308. =back
  309.  
  310.  
  311.  
  312. =head2 splash/row
  313.  
  314. Creates a row for an HTML table.
  315.  
  316.     [% WRAPPER splash/table %]
  317.  
  318.        [% WRAPPER splash/row col='marine' %]
  319.        <td>Foo</td><td>Bar</td>
  320.        [% END %]
  321.  
  322.        [% WRAPPER splash/row col='aqua' %]
  323.        <td>Foo</td><td>Bar</td>
  324.        [% END %]
  325.  
  326.     [% END %]
  327.  
  328.  
  329. Configuration items:
  330.  
  331. =over 4
  332.  
  333.  
  334. =item content
  335.  
  336. Row content.
  337.  
  338.  
  339. =item col
  340.  
  341. Background colour.
  342.  
  343.  
  344. =item valign
  345.  
  346. Vertical alignment
  347.  
  348.  
  349. =item rowspan
  350.  
  351. Number of rows to span.
  352.  
  353.  
  354. =back
  355.  
  356.  
  357.  
  358. =head2 splash/cell
  359.  
  360. Creates a cell for an HTML table.
  361.  
  362.     [% WRAPPER splash/table + splash/row + splash/cell col='grey75' %]
  363.     Hello World
  364.     [% END %]
  365.  
  366.  
  367. Configuration items:
  368.  
  369. =over 4
  370.  
  371.  
  372. =item content
  373.  
  374. Cell content.
  375.  
  376.  
  377. =item col
  378.  
  379. Background colour.
  380.  
  381.  
  382. =item align
  383.  
  384. Horizontal alignment
  385.  
  386.  
  387. =item colspan
  388.  
  389. Number of columns to span.
  390.  
  391.  
  392. =back
  393.  
  394.  
  395.  
  396. =head2 splash/box
  397.  
  398. A box created from a union of splash/table, splash/row and splash/cell.
  399. The following is equivalent to the previous example.
  400.  
  401.     [% WRAPPER splash/box col='grey75' %]
  402.     Hello World
  403.     [% END %]
  404.  
  405. Configuration items are as per the individual templates.
  406.  
  407.  
  408. =head2 splash/button
  409.  
  410. Creates a small button with rounded corners.
  411.  
  412.     [% INCLUDE splash/button
  413.            content = 'Template Toolkit'
  414.            select  = 1
  415.            width   = '50%'
  416.     %]
  417.  
  418.  
  419. Configuration items:
  420.  
  421. =over 4
  422.  
  423.  
  424. =item content
  425.  
  426. Button content.
  427.  
  428.  
  429. =item style
  430.  
  431. Reference to a style hash.
  432.  
  433.  
  434. =item select
  435.  
  436. Flag to default the style to splash.select (select == true value) or
  437. splash.unselect (select == false value).
  438.  
  439.  
  440. =item width
  441.  
  442. Width in absolute pixels (e.g. '100') or as a percentage (e.g. '50%').
  443.  
  444. =back
  445.  
  446. The following items default to the relevant style values:
  447.  
  448. =over 4
  449.  
  450.  
  451. =item col (style.col.text)
  452.  
  453.  
  454. =item textcol (style.col.text)
  455.  
  456.  
  457. =item font (style.font.face)
  458.  
  459.  
  460. =item size (style.font.size)
  461.  
  462.  
  463. =item bold (style.font.bold)
  464.  
  465.  
  466. =item width (style.button.width)
  467.  
  468.  
  469. =item align (style.button.align)
  470.  
  471.  
  472. =back
  473.  
  474.  
  475.  
  476. =head2 splash/bar
  477.  
  478. Creates a bar with rounded corners at either the top or bottom, and 
  479. square corners on the other.  Default has rounded at the top, set
  480. 'invert' to select bottom.
  481.  
  482.     [% INCLUDE splash/bar
  483.            content = 'Hello World',
  484.            select  = 1
  485.     %]    
  486.  
  487.  
  488. Configuration items:
  489.  
  490. =over 4
  491.  
  492.  
  493. =item content
  494.  
  495. Bar content.
  496.  
  497.  
  498. =item style
  499.  
  500. Reference to a style hash.
  501.  
  502.  
  503. =item select
  504.  
  505. Flag to default the style to splash.select (select == true value) or
  506. splash.unselect (select == false value).
  507.  
  508.  
  509. =item width
  510.  
  511. Width in absolute pixels (e.g. '100') or as a percentage (e.g. '50%').
  512.  
  513. =item invert
  514.  
  515. Flag to invert bar to hang down instead of sitting
  516. upright.
  517.  
  518.  
  519. =back
  520.  
  521. The following items default to the relevant style values:
  522.  
  523. =over 4
  524.  
  525.  
  526. =item col (style.col.text)
  527.  
  528.  
  529. =item textcol (style.col.text)
  530.  
  531.  
  532. =item font (style.font.face)
  533.  
  534.  
  535. =item size (style.font.size)
  536.  
  537.  
  538. =item bold (style.font.bold)
  539.  
  540.  
  541. =item width (style.button.width)
  542.  
  543.  
  544. =item align (style.button.align)
  545.  
  546.  
  547. =back
  548.  
  549.  
  550. =head2 splash/hair
  551.  
  552. Generates a frame enclosing the content within crosshair corners.
  553.  
  554.     [% INCLUDE splash/hair
  555.            content = 'Template Toolkit'
  556.     %]
  557.  
  558.  
  559. Configuration items:
  560.  
  561. =over 4
  562.  
  563.  
  564. =item content
  565.  
  566. Hair content.
  567.  
  568.  
  569. =item style
  570.  
  571. Reference to a style hash.
  572.  
  573.  
  574. =back
  575.  
  576. The following items default to the relevant style values:
  577.  
  578. =over 4
  579.  
  580.  
  581. =item col (style.col.text)
  582.  
  583.  
  584. =item bgcol (style.col.back)
  585.  
  586.  
  587. =item align (style.button.align)
  588.  
  589.  
  590. =back
  591.  
  592.  
  593. =head2 splash/menu
  594.  
  595. Creates a menu as a series of splash/button elements.
  596.  
  597.     [% buttons = [ 
  598.       { text => 'One', link => 'one.html' }
  599.           { text => 'Two', link => 'two.html' }
  600.        ]
  601.     %]
  602.  
  603.     [% INCLUDE splash/menu
  604.            select = 2        # Two
  605.     %]
  606.  
  607.  
  608. Configuration items:
  609.  
  610. =over 4
  611.  
  612.  
  613. =item buttons
  614.  
  615. A reference to a list of hash arrays containing 'text' and 'link' items.
  616.  
  617.  
  618. =item select (n or 0)
  619.  
  620. Indicates which button should be selected.  First item is 1.  0 indicates
  621. no button selected.
  622.  
  623.  
  624. =item width
  625.  
  626. Width in absolute pixels (e.g. '100') or as a percentage (e.g. '50%').
  627.  
  628. =item align
  629.  
  630. Horizontal alignment
  631.  
  632.  
  633. =back
  634.  
  635.  
  636.  
  637. =head2 splash/menubar
  638.  
  639. As above, but incorporated into a wider bar.
  640.  
  641.     [% WRAPPER splash/menubar %]
  642.        Section Title
  643.     [% END %]
  644.  
  645.  
  646. Configuration items:
  647.  
  648. =over 4
  649.  
  650.  
  651. =item buttons
  652.  
  653. A reference to a list of hash arrays containing 'text' and 'link' items.
  654.  
  655.  
  656. =item select (n or 0)
  657.  
  658. Indicates which button should be selected.  First item is 1.  0 indicates
  659. no button selected.
  660.  
  661.  
  662. =item width
  663.  
  664. Width in absolute pixels (e.g. '100') or as a percentage (e.g. '50%').
  665.  
  666. =item align
  667.  
  668. Horizontal alignment
  669.  
  670.  
  671. =back
  672.  
  673.  
  674.  
  675. =head2 splash/panel
  676.  
  677. A table with a coloured edge.
  678.  
  679.     [% WRAPPER splash/panel edge='black' fill='grey75' border=2 %]
  680.        <tr>
  681.          <td>Hello World</td>
  682.        </tr>
  683.     [% END %]
  684.  
  685.  
  686. Configuration items:
  687.  
  688. =over 4
  689.  
  690.  
  691. =item content
  692.  
  693. Panel content.
  694.  
  695.  
  696. =item style
  697.  
  698. Reference to a style hash.
  699.  
  700.  
  701. =item select
  702.  
  703. Flag to default the style to splash.select (select == true value) or
  704. splash.unselect (select == false value).
  705.  
  706.  
  707. =item width
  708.  
  709. Width in absolute pixels (e.g. '100') or as a percentage (e.g. '50%').
  710.  
  711. =item align
  712.  
  713. Horizontal alignment
  714.  
  715.  
  716. =item border
  717.  
  718. Border width (default: 0)
  719.  
  720.  
  721. =back
  722.  
  723. The following items default to the relevant style values:
  724.  
  725. =over 4
  726.  
  727.  
  728. =item edge (style.col.edge)
  729.  
  730.  
  731. =item fill (style.col.fill)
  732.  
  733.  
  734. =item pad (style.pad)
  735.  
  736.  
  737. =back
  738.  
  739.  
  740.  
  741. =head2 splash/pane
  742.  
  743. A union of splash/row + splash/cell.
  744.  
  745.     [% WRAPPER splash/panel select=1 %]
  746.        [% WRAPPER splash/pane col='grey75' %]
  747.           Hello World
  748.        [% END %]
  749.  
  750.        [% WRAPPER splash/pane col='grey50' %]
  751.           Hello Again
  752.        [% END %]
  753.     [% END %]
  754.  
  755.  
  756. =head2 splash/tab
  757.  
  758. A simple button looking like a page tab.
  759.  
  760.     [% INCLUDE splash/tab
  761.            content = 'Option 1'
  762.            col = 'aqua'
  763.     %]
  764.  
  765.  
  766. Configuration items:
  767.  
  768. =over 4
  769.  
  770.  
  771. =item content
  772.  
  773. Tab content.
  774.  
  775.  
  776. =item style
  777.  
  778. Reference to a style hash.
  779.  
  780.  
  781. =item select
  782.  
  783. Flag to default the style to splash.select (select == true value) or
  784. splash.unselect (select == false value).
  785.  
  786.  
  787. =item width
  788.  
  789. Width in absolute pixels (e.g. '100') or as a percentage (e.g. '50%').
  790.  
  791. =item align
  792.  
  793. Horizontal alignment
  794.  
  795.  
  796. =back
  797.  
  798. The following items default to the relevant style values:
  799.  
  800. =over 4
  801.  
  802.  
  803. =item col (style.col.text)
  804.  
  805.  
  806. =item textcol (style.col.text)
  807.  
  808.  
  809. =item font (style.font.face)
  810.  
  811.  
  812. =item size (style.font.size)
  813.  
  814.  
  815. =item bold (style.font.bold)
  816.  
  817.  
  818. =item tabalign (style.tab.align)
  819.  
  820.  
  821. =back
  822.  
  823.  
  824.  
  825. =head2 splash/tabset
  826.  
  827. A set of splash/tab components, similar to a menu.
  828.  
  829.  
  830. Configuration items:
  831.  
  832. =over 4
  833.  
  834.  
  835. =item tabs
  836.  
  837. List of hash references containing text/link entries, as per 
  838. menu buttons.
  839.  
  840.  
  841. =item select
  842.  
  843. Flag to default the style to splash.select (select == true value) or
  844. splash.unselect (select == false value).
  845.  
  846.  
  847. =item invert
  848.  
  849. Flag to invert tab to hang down instead of sitting
  850. upright.
  851.  
  852.  
  853. =back
  854.  
  855.  
  856.  
  857. =head2 splash/tabbox
  858.  
  859. Add a splash/tab to the top of a splash/box.
  860.  
  861.  
  862. Configuration items:
  863.  
  864. =over 4
  865.  
  866.  
  867. =item title
  868.  
  869.  title.
  870.  
  871.  
  872. =item content
  873.  
  874.  content.
  875.  
  876.  
  877. =item width
  878.  
  879. Width in absolute pixels (e.g. '100') or as a percentage (e.g. '50%').
  880.  
  881. =item tabwidth
  882.  
  883. Width of tabs.
  884.  
  885.  
  886. =item select
  887.  
  888. Flag to default the style to splash.select (select == true value) or
  889. splash.unselect (select == false value).
  890.  
  891.  
  892. =item border
  893.  
  894. Border width (default: 0)
  895.  
  896.  
  897. =back
  898.  
  899. The following items default to the relevant style values:
  900.  
  901. =over 4
  902.  
  903.  
  904. =item col (style.col.text)
  905.  
  906.  
  907. =item fill (style.col.fill)
  908.  
  909.  
  910. =item tabalign (style.tab.align)
  911.  
  912.  
  913. =item tablocate (style.tab.locate)
  914.  
  915.  
  916. =back
  917.  
  918.  
  919.  
  920. =head2 splash/tabsbox
  921.  
  922. Add a splash/tabset to the top of a splash/box.
  923.  
  924.  
  925. Configuration items:
  926.  
  927. =over 4
  928.  
  929.  
  930. =item tabs
  931.  
  932. List of hash references containing text/link entries, as per 
  933. menu buttons.
  934.  
  935.  
  936. =item select
  937.  
  938. Flag to default the style to splash.select (select == true value) or
  939. splash.unselect (select == false value).
  940.  
  941.  
  942. =item content
  943.  
  944.  content.
  945.  
  946.  
  947. =item width
  948.  
  949. Width in absolute pixels (e.g. '100') or as a percentage (e.g. '50%').
  950.  
  951. =item border
  952.  
  953. Border width (default: 0)
  954.  
  955.  
  956. =item invert
  957.  
  958. Flag to invert  to hang down instead of sitting
  959. upright.
  960.  
  961.  
  962. =back
  963.  
  964. The following items default to the relevant style values:
  965.  
  966. =over 4
  967.  
  968.  
  969. =item col (style.col.text)
  970.  
  971.  
  972. =item fill (style.col.fill)
  973.  
  974.  
  975. =item tabalign (style.tab.align)
  976.  
  977.  
  978. =item tablocate (style.tab.locate)
  979.  
  980.  
  981. =back
  982.  
  983.  
  984. =head2 splash/tabspanel
  985.  
  986. As per splash/tabsbox, but attached to a splash/panel instead of a
  987. splash/box.
  988.  
  989.  
  990. =head1 EXAMPLES
  991.  
  992. See the examples in the 'examples' sub-directory of the installation 
  993. for comprehensive examples showing use of the Splash! library.
  994.  
  995. =head1 AUTHOR
  996.  
  997. Andy Wardley E<lt>abw@andywardley.comE<gt>
  998.  
  999. L<http://www.andywardley.com/|http://www.andywardley.com/>
  1000.  
  1001.  
  1002.  
  1003.  
  1004. =head1 VERSION
  1005.  
  1006. 2.69, distributed as part of the
  1007. Template Toolkit version 2.13, released on 30 January 2004.
  1008.  
  1009. =head1 COPYRIGHT
  1010.  
  1011.   Copyright (C) 1996-2004 Andy Wardley.  All Rights Reserved.
  1012.   Copyright (C) 1998-2002 Canon Research Centre Europe Ltd.
  1013.  
  1014. This module is free software; you can redistribute it and/or
  1015. modify it under the same terms as Perl itself.
  1016.  
  1017. =head1 SEE ALSO
  1018.  
  1019. L<Template::Library::HTML|Template::Library::HTML>
  1020.  
  1021. =cut
  1022.  
  1023. # Local Variables:
  1024. # mode: perl
  1025. # perl-indent-level: 4
  1026. # indent-tabs-mode: nil
  1027. # End:
  1028. #
  1029. # vim: expandtab shiftwidth=4:
  1030.