X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=format.php;h=f931cdd8c3fc6afebe277a129e8862795848686e;hb=608ecf965408645758cdca1e5f01ff5ac3eff166;hp=7acdde3613d4d7dbf7dd1f07434bcf2055adf408;hpb=5b007cbcf532a8efe7fe40bc6d7f5ce4bb708985;p=wfpl.git diff --git a/format.php b/format.php index 7acdde3..f931cdd 100644 --- a/format.php +++ b/format.php @@ -2,21 +2,18 @@ # Copyright (C) 2005 Jason Woofenden # -# This file is part of wfpl. -# -# wfpl is free software; you can redistribute it and/or modify it under the -# terms of the GNU Lesser General Public License as published by the Free -# Software Foundation; either version 2.1 of the License, or (at your option) -# any later version. -# -# wfpl is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for -# more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with wfpl; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . # This file contains basic encodings @@ -48,22 +45,48 @@ function format_int($str) { return ereg_replace('^0*([0-9])', '\1', $str); } -function format_decimal($str) { +function format_decimals($str) { + $str = ereg_replace('[^0-9]', '', $str); + return ereg_replace('^([0-9])0*', '\1', $str); +} + +function _format_positive_decimal($str) { $str = ereg_replace('[^0-9.]', '', $str); $pos = strpos($str, '.'); if($pos !== false) { $str = str_replace('.', '', $str); if($pos == 0) { - return '0.' . $str; + return '0.' . format_decimals($str); } elseif($pos == strlen($str)) { - return $str; + return format_int($str); } else { - return substr($str, 0, $pos) . '.' . substr($str, $pos); + return format_int(substr($str, 0, $pos)) . '.' . format_decimals(substr($str, $pos)); } } + return format_int($str); +} + +function format_positive_decimal($str) { + $str = _format_positive_decimal($str); + if($str === '0.0') { + $str = '0'; + } return $str; } +function format_decimal($str) { + $str = ereg_replace('[^0-9.-]', '', $str); + if(substr($str, 0, 1) == '-') { + $str = format_positive_decimal(substr($str, 1)); + if($str !== '' && $str !== '0') { + $str = '-' . $str; + } + return $str; + } else { + return format_positive_decimal($str); + } +} + # return 0 of there's no digits function format_int_0($str) { $str = format_int($str); @@ -89,24 +112,50 @@ function format_filename($str, $allow_uppercase = false) { return ereg_replace('^[.-]', '_', $str); } +function format_path($str, $allow_uppercase = false) { + if(!$allow_uppercase) { + $str = strtolower($str); + } + $str = ereg_replace('[^a-zA-Z0-9_./-]', '_', $str); + return ereg_replace('^[.-]', '_', $str); +} + function client_path_to_filename($path) { $filename = ereg_replace(".*[:/\\]", '', $path); return format_filename($filename, true); } -function format_h_w_image($str) { +function format_image_w_h($str) { $fields = explode(' ', $str); if(count($fields) != 3) { return ''; } - list($width, $height, $filename) = $fields; + list($filename, $width, $height) = $fields; + $filename = format_path($filename); + $width = format_int_0($width); + $height = format_int_0($height); + + return "$filename $width $height"; +} + +function format_image_w_h_thumb_w_h($str) { + $fields = explode(' ', $str); + if(count($fields) != 6) { + die('count: ' . count($fields)); + return ''; + } + + list($filename, $width, $height, $thumb_filename, $thumb_width, $thumb_height) = $fields; + $filename = format_path($filename); $width = format_int_0($width); $height = format_int_0($height); - $filename = format_filename($filename); + $thumb_filename = format_path($thumb_filename); + $thumb_width = format_int_0($thumb_width); + $thumb_height = format_int_0($thumb_height); - return "$width $height $filename"; + return "$filename $width $height $thumb_filename $thumb_width $thumb_height"; } function format_varname($str) { @@ -195,6 +244,62 @@ function format_mdy_to_ymd($str) { return mdy_to_ymd(format_oneline($str)); } +# date is yyyy-mm-dd +function format_ymd($str) { + require_once('code/wfpl/time.php'); + list($year, $month, $day) = ymd_clean($str); + return sprintf('%04u-%02u-%02u', $year, $month, $day); +} + +# takes any of: HH :MM HH:MM +# returns decimal number of hours +# +# You probably want to use format_hours() instead because it handles hours with a decimal point. +function format_hours_minutes($str) { + if(strlen($str) == 0) { + return $str; + } + $pos = strpos($str, ':'); + if($pos === false) { + $hours = format_int_0($str); + $minutes = 0; + } elseif($pos == 0) { + $hours = 0; + $minutes = format_int_0($str); + } else { + $hours = format_int_0(substr($str, 0, $pos)); + $minutes = format_int_0(substr($str, $pos + 1)); + } + return $hours + ($minutes / 60.0); +} + +# takes any of: HH :MM HH:MM HH.hh(decimal hours) +# returns decimal number of hours +function format_hours($str) { + if(strlen($str) == 0) { + return $str; + } + if(strpos($str, ':') !== false) { + return format_hours_minutes($str); + } else { + return format_decimal($str); + } +} + +# takes eg 12:23am +# returns decimal number of hours since midnight +function format_12hr_to_hours($str) { + if(eregi('noon', $str)) { + return 12; + } + $hours = format_hours($str); + if($hours < 12 && eregi('p', $str)) { + $hours += 12; + } + return $hours; +} + + function format_phone($str) { $str = ereg_replace('[^0-9]', '', $str); $str = ereg_replace('^1*', '', $str);