The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Hub::Parse::Transform -

Part of the Hub Library

SYNOPSIS

DESCRIPTION

METHODS

abspath fixpath hashtoattrs packcgi siteurl
attrhash fw html polish trimcss
datetime getext indenttext populate trimhtmlstyle
dhms getname jsstr ps unpackcgi
fcols getpath mkabsdir relpath
findAbsolutePath getspec nbspstr safestr
abspath

 Usage: abspath PATH
 Usage: abspath PATH NOCHECK

File must exist unless NOCHECK is specified.

attrhash

datetime

 Usage: datetime TIMESTAMP?, OPTION*

Friendly date-time formats of seconds-since-the-epoch timestamps.

Default is the current time formatted as: MM/DD/YYYY hh:mm:ss.

The decimal portion of HiRest time is truncated.

Uses `localtime` to localize.

This example returns: true:

    datetime( );

This example returns: regex:

    datetime( 1045837284 );

This example returns: regex:

    datetime( 1045837284, -nosec );

This example returns: regex:

    datetime( 1045837284, -noyear );

This example returns: regex:

    datetime( 1045837284, -ampm );

This example returns: regex:

    datetime( 1045837284, -nozeros );

This example returns: regex:

    datetime( 1045837284, -notime );

This example returns: regex:

    datetime( 1045837284, -nodate );

This example returns: regex:

    datetime( 1045837284, -letter );

Combining options

This example returns: regex:

    datetime( 1045837284, -ampm, -nosec );              

This example returns: regex:

    datetime( 1045837284, -nosec, -nozeros, -noyear );

Methods of passing options via tweaks (see Parser.pm)

This example returns: regex:

    datetime( 1045837284, "nosec,noyear" );
dhms

Hub::dhms( $seconds, $options, $format )

Format the provided number of seconds in days, hours, minutes, and seconds.

  Examples:                                               Returns:
  ------------------------------------------------------- --------------------
  Hub::dhms( 10 )                                              00d:00h:00m:10s
  Hub::dhms( 60 )                                              00d:00h:01m:00s
  Hub::dhms( 3600 )                                            00d:01h:00m:00s
  Hub::dhms( 86400 )                                           01d:00h:00m:00s
  Hub::dhms( 11 )                                              00d:00h:00m:11s
  Hub::dhms( 71 )                                              00d:00h:01m:11s
  Hub::dhms( 3671 )                                            00d:01h:01m:11s
  Hub::dhms( 90071 )                                           01d:01h:01m:11s
  Hub::dhms( 90071, "--nozeros" )                              1d:1h:1m:11s
  Hub::dhms( 90071, "--nozeros" )                              1d:1h:1m:11s
  Hub::dhms( 90071, "--nozeros", "days ::" )   1days 1:1:11
  Hub::dhms( 90071, "days ::" )                01days 01:01:11
fcols

 Usage: fcols STRING, COLS, [OPTIONS]

Divide text into fixed-width columns.

Where OPTIONS can be:

  --split:REGEX                   # Split on regex REGEX (default '\s')
  --flow:ttb|ltr                  # Top-to-bottom or Left-to-right (default 'ttb')
  --pad:NUM                       # Spacing between columns (default 1)
  --padwith:STR                   # Pad with STR (multiplied by --pad)
  --width:NUM                     # Force column width (--pad becomes irrelevant)
  --justify:left|center|right     # Justify within column

Examples:

  1) print fcols( "A B C D E F G", 4, "-flow=ttb" ), "\n";


      A C E G
      B D F


  2) print fcols( "a b c d e f g", 4, "-flow=ltr" ), "\n";


      a b c d
      e f g
findAbsolutePath

  findAbsolutePath( "../usr/" )
  findAbsolutePath( "/usr/local" )


  File may or may not exist
fixpath

 Usage: fixpath( $path )

Clean up malformed paths (usually do to concatenation logic).

Example: This example:

    fixpath( "../../../users/newuser/web/bin/../src/screens" );

matches:

    ../../../users/newuser/web/src/screens

Example: This example:

    fixpath( "users/newuser/web/" );

matches:

    users/newuser/web

Example: This example:

    fixpath( "users/../web/bin/../src" );

matches:

    web/src

Example: This example:

    fixpath( "users//newuser" );

matches:

    users/newuser

Example: This example:

    fixpath( "users//newuser/./files" );

matches:

    users/newuser/files

Example: This example:

    fixpath( "http://site/users//newuser" );

matches:

    http://site/users/newuser

Example: This example:

    fixpath( '/home/hub/build/../../../out/doc/pod' );

matches:

    /out/doc/pod
fw

fixed-width (default padding is a space)

Warning, many calls to this method is a performance hit!

usage examples:

  Hub::fw( 5, "Hello World" )                  "Hello"
  Hub::fw( 5, "Hello World", '-clip=0' )       "Hello world"
  Hub::fw( 5, "Hi" )                           "Hi   "
  Hub::fw( 5, "Hi", '-align=r' )               "   Hi"
  Hub::fw( 5, "Hi", '-align=l' )               "Hi   "
  Hub::fw( 5, "Hi", '-align=c' )               "  Hi "
  Hub::fw( 5, "Hi", '-repeat' )                "HHHHH"
  Hub::fw( 5, "Hi", '-pad=x' )                 "Hixxx"
  Hub::fw( 5, "Hi", '-pad=x', '-align=r' )     "xxxHi"


  Depricated:


  Hub::fw( 5, "Hi", "right" )                  "   Hi"
  Hub::fw( 5, "Hi", "repeat" )                 "HHHHH"
  Hub::fw( 5, "Hi", "padding:x" )              "Hixxx"
  Hub::fw( 5, "Hi", "padding:x", "right" )     "xxxHi"
getext

  getext( $path )


  example:


      getext( "/foo/bar/filename.ext" )
      getext( "filename.cgi" )


  will return:


      "ext"
      "cgi"
getname

  getname( $path )


  Note, if the given path is a full directory path, the last directory is
  still considerred a filename.



  example:


      getname( "../../../users/newuser/web/data/p001/batman-small.jpg" );
      getname( "../../../users/newuser/web/data/p001" );
      getname( "/var/log/*.log" );


  will return:


      "batman-small.jpg"
      "p001"
      "*.log"
getpath

  Exract the parent from the given filepath


  for example:


      getpath( "/etc/passwd" )        /etc
      getpath( "/usr/local/bin" )     /usr/local
getspec

 Usage: getspec PATH

Given a path to a file, return it's parts (directory, filename, extension);

hashtoattrs

 Usage: hashtoattrs

Turn the given hash into an key="value" string.

  {
      'class'     => "foodidly",
      'name'      => "bobsmith",
      'height'    => "5px",
  }

Becomes:

  class="foodidly" name="bobsmith" height="5px"
html

  Format a string, replacing spaces with ' '


  for example:


      html( "<Hello=world!>" )              "&lt;Hello=World&gt;"
indenttext

 Usage: indenttext TEXT, NUM, [PADINGCHAR]

Indent text

jsstr

 Usage: jsstr

Format as one long string for use as the rval in javascript (ie put the backslash continue-ator at the end of each line).

mkabsdir

 Usage: mkabsdir DIR

Create the directory specified.

nbspstr

  Format a string, replacing spaces with '&nbsp;'


  for example:


      nbspstr( "Hello <not html tags> world!" )


  would return:


      "Hello&nbsp;<not html tags>&nbsp;World"
packcgi

 Usage: packcgi $string|\$string

Pack characters into those used for passing by the cgi.

polish

Remove undefined variables

We will chomp lines so that:

  In between two
  lines with text
  or when



  surrounded spaced out..

Will become:

  In between two
  lines with text
  or when


  surrounded spaced out..
populate

Populate template text with values

 Usage: populate $text|\$text, \%values [,\%values...] [option]

options:

  -sdref=0                Turn off scalar dereferencing
  -polish=1               Remove unpopulated variable references

Example: This example:

    populate( 'mum', { foo => 'shroo' } );

matches:

    mushroom

Example: This example:

    ref( populate( 'ac', { b => 'bee' }, '-sdref=0' ) );

matches:

    SCALAR
ps

 Usage: ps

Aka: Proportional Space

Split the given string up into multiple lines which will not exceed the specified character width.

Default padding is a space.

Example: This example:

    ps( 10, "this is really short but splits on ten chars" );

matches:

    this is re
    ally short
 but split
    s on ten c
    hars

Example: This example:

    ps( 10, "this is really short but splits on ten chars", 3 );

matches:

    this is re
   ally short
    but split
   s on ten c
   hars
relpath

Relative path

 Usage: relpath PATH, FROMPATH

OPTIONS:

  -asdir      Specifies that FROMPATH is a directory.  Provided for times when
              FROMPATH does not exist (and hence the -d test will fail).

Return the path to PATH from FROMPATH.

Example: This example:

    relpath( "/home/docs", "/home/docs/install", -asdir );

matches:

    ..

Example: This example:

    relpath( "/home/docs", "/home/docs/README.txt" );

matches:

    .

Example: This example:

    relpath( "/home/src", "/home/docs/install", -asdir );

matches:

    ../../src

Example: This example:

    relpath( "/home/docs/README.txt", "/home/docs", -asdir );

matches:

    README.txt
safestr

 Usage: safestr STRING

Pack nogood characters into good ones. Good characters are letters, numbers, and the underscore.

Example: This example:

    safestr( 'Dogs (Waters, Gilmour) 17:06' );

matches:

    Dogs_20__28_Waters_2c__20_Gilmour_29__20_17_3a_06
siteurl

 Usage: siteurl

Return the target website url.

trimcss

 Usage: trimcss

Remove empty css properties

trimhtmlstyle

 Usage: trimhtmlstyle

Remove empty style declarations

unpackcgi

 Usage: unpackcgi QUERY

Unpack cgi characters into a kv hashref

INTERNAL

_runTweaks
_runTweaks

Standard tweaks

Tweaks allow modification to variable values without modifying the original.

No spaces are allowed in the tweak!

Implemented tweaks:

  tr///               # transliterates search chars with replacement chars
  lc                  # lower case
  uc                  # upper case
  lcfirst             # lower case first letter
  ucfirst             # upper case first letter
  x=                  # repeat the value so many times
  nbspstr             # replace spaces with non-breaking ones
  html                # replace '<' and '>' with '&lt;' and '&gt;'
  jsstr               # escape quotes and end-of-lines with a backslash
  num                 # number (will use zero '0' if empty)
  dt(opts)            # datetime with options (see datetime).

  Hub::dhms(opts)     # day/hour/min/sec with options (see dhms).



  eq                  # equal
  ne                  # not equal
  gt                  # greater than
  lt                  # less than
  if                  # is greater than zero (or non-empty string)


  -                   # minus
  +                   # plus
  *                   # multiply
  /                   # divide
  %                   # mod


  darker(num)         # makes a color darker (default num=0xA)
  lighter(num)        # makes a color lighter (default num=0xA)
  rotate_base         # rotates bases (red -> green, green -> blue, blue -> red)
  inverse             # invert color (like red becomes cyan)

Examples:

               # if v is 'HELLO', it becomes 'hello'
              # if v is '.', it becomes '.....'
          # the value for 'v' is printed when 1 is equal to 2
          # the value for 'v' is printed when 1 isn't equal to 2
            # the value for 'v' is printed when it is equal to 2
       # if v is 's' and c is greater than one, 's' is printed

Tweaks can be chained together, for example:

       # if v is "HELLO", it becomes 'Hello'
    # if v is "hello" and c is greater than 1, it becomes 'HELLO'

AUTHOR

Ryan Gies

COPYRIGHT

Copyright (c) 2006 Livesite Networks, LLC. All rights reserved.

Copyright (c) 2000-2005 Ryan Gies. All rights reserved.

UPDATED

This file created by on at