days_in($em, $ey)) {
$ed -= days_in($em, $ey);
$em++;
if ($em > 12) {
$em = 1; $ey++;
}
}
$end = sprintf("%04d%02d%02d%s", $ey, $em, $ed, "235959");
return array($start, $end);
}
global $In_Year;
$In_Year = array(
array( 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 ),
array( 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 ),
);
function week2ymd($y, $week) {
$tstamp = strtotime('+' . $week-1 . ' week',mktime(0,0,0,1,1,$y));
$tsa = localtime($tstamp);
return array($tsa[5]+1900, $tsa[4]+1, $tsa[3]);
}
function wday_from_ts($y, $m, $d) {
global $In_Year;
$leap = $y % 4 == 0 && ($y % 100 != 0 || $y % 400 == 0) ? 1 : 0;
$y--;
## Copied from Date::Calc.
$days = $y * 365;
$days += $y >>= 2;
$days -= intval($y /= 25);
$days += $y >> 2;
$days += $In_Year[$leap][$m-1] + $d;
return $days % 7;
}
function yday_from_ts($y, $m, $d) {
global $In_Year;
$leap = $y % 4 == 0 && ($y % 100 != 0 || $y % 400 == 0) ? 1 : 0;
return $In_Year[$leap][$m-1] + $d;
}
function format_ts($format, $ts, $blog, $lang = null) {
global $Languages;
if (!isset($lang) || empty($lang)) {
$lang = ($blog && $blog['blog_language'] ? $blog['blog_language'] : 'en');
}
if (!isset($format) || empty($format)) {
if (count($Languages[$lang]) >= 4)
$format = $Languages[$lang][3];
$format or $format = "%B %e, %Y %I:%M %p";
}
global $_format_ts_cache;
if (!isset($_format_ts_cache)) {
$_format_ts_cache = array();
}
if (isset($_format_ts_cache[$ts.$lang])) {
$f = $_format_ts_cache[$ts.$lang];
} else {
$L = $Languages[$lang];
$tsa = array(substr($ts, 0, 4), substr($ts, 4, 2), substr($ts, 6, 2),
substr($ts, 8, 2), substr($ts, 10, 2), substr($ts, 12, 2));
list($f['Y'], $f['m'], $f['d'], $f['H'], $f['M'], $f['S']) = $tsa;
$f['w'] = wday_from_ts($tsa[0],$tsa[1],$tsa[2]);
$f['j'] = yday_from_ts($tsa[0],$tsa[1],$tsa[2]);
$f['y'] = substr($f['Y'], 2);
$f['b'] = substr($L[1][$f['m']-1], 0, 3);
$f['B'] = $L[1][$f['m']-1];
if ($lang == 'jp') {
$f['a'] = substr($L[0][$f['w']], 0, 8);
} else {
$f['a'] = substr($L[0][$f['w']], 0, 3);
}
$f['A'] = $L[0][$f['w']];
$f['e'] = $f['d'];
$f['e'] = preg_replace('!^0!', ' ', $f['e']);
$f['I'] = $f['H'];
if ($f['I'] > 12) {
$f['I'] -= 12;
$f['p'] = $L[2][1];
} elseif ($f['I'] == 0) {
$f['I'] = 12;
$f['p'] = $L[2][0];
} elseif ($f['I'] == 12) {
$f['p'] = $L[2][1];
} else {
$f['p'] = $L[2][0];
}
$f['I'] = sprintf("%02d", $f['I']);
$f['k'] = $f['H'];
$f['k'] = preg_replace('!^0!', ' ', $f['k']);
$f['l'] = $f['I'];
$f['l'] = preg_replace('!^0!', ' ', $f['l']);
$f['j'] = sprintf("%03d", $f['j']);
$f['Z'] = '';
$_format_ts_cache[$ts . $lang] = $f;
}
$date_format = null;
if (count($Languages[$lang]) >= 5)
$date_format = $Languages[$lang][4];
$date_format or $date_format = "%B %d, %Y";
$time_format = null;
if (count($Languages[$lang]) >= 6)
$time_format = $Languages[$lang][5];
$time_format or $time_format = "%I:%M %p";
$format = preg_replace('!%x!', $date_format, $format);
$format = preg_replace('!%X!', $time_format, $format);
## This is a dreadful hack. I can't think of a good format specifier
## for "%B %Y" (which is used for monthly archives, for example) so
## I'll just hardcode this, for Japanese dates.
if ($lang == 'jp') {
if (count($Languages[$lang]) >= 7)
$format = preg_replace('!%B %Y!', $Languages[$lang][6], $format);
}
if (isset($format)) {
$format = preg_replace('!%(\w)!e', '\$f[\'\1\']', $format);
}
return $format;
}
function dirify($s) {
$s = convert_high_ascii($s); ## convert high-ASCII chars to 7bit.
$s = strtolower($s); ## lower-case.
$s = strip_tags($s); ## remove HTML tags.
$s = preg_replace('!&[^;\s]+;!', '', $s); ## remove HTML entities.
$s = preg_replace('![^\w\s]!', '', $s); ## remove non-word/space chars.
$s = str_replace(' ','_',$s); ## change space chars to underscores.
return($s);
}
global $HighASCII;
$HighASCII = array(
"\xc0" => 'A', # A`
"\xe0" => 'a', # a`
"\xc1" => 'A', # A'
"\xe1" => 'a', # a'
"\xc2" => 'A', # A^
"\xe2" => 'a', # a^
"\xc4" => 'Ae', # A:
"\xe4" => 'ae', # a:
"\xc3" => 'A', # A~
"\xe3" => 'a', # a~
"\xc8" => 'E', # E`
"\xe8" => 'e', # e`
"\xc9" => 'E', # E'
"\xe9" => 'e', # e'
"\xca" => 'E', # E^
"\xea" => 'e', # e^
"\xcb" => 'Ee', # E:
"\xeb" => 'ee', # e:
"\xcc" => 'I', # I`
"\xec" => 'i', # i`
"\xcd" => 'I', # I'
"\xed" => 'i', # i'
"\xce" => 'I', # I^
"\xee" => 'i', # i^
"\xcf" => 'Ie', # I:
"\xef" => 'ie', # i:
"\xd2" => 'O', # O`
"\xf2" => 'o', # o`
"\xd3" => 'O', # O'
"\xf3" => 'o', # o'
"\xd4" => 'O', # O^
"\xf4" => 'o', # o^
"\xd6" => 'Oe', # O:
"\xf6" => 'oe', # o:
"\xd5" => 'O', # O~
"\xf5" => 'o', # o~
"\xd8" => 'Oe', # O/
"\xf8" => 'oe', # o/
"\xd9" => 'U', # U`
"\xf9" => 'u', # u`
"\xda" => 'U', # U'
"\xfa" => 'u', # u'
"\xdb" => 'U', # U^
"\xfb" => 'u', # u^
"\xdc" => 'Ue', # U:
"\xfc" => 'ue', # u:
"\xc7" => 'C', # ,C
"\xe7" => 'c', # ,c
"\xd1" => 'N', # N~
"\xf1" => 'n', # n~
"\xdf" => 'ss',
);
function convert_high_ascii($s) {
global $HighASCII;
return strtr($s, $HighASCII);
}
global $Languages;
$Languages = array(
'en' => array(
array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'),
array('January','February','March','April','May','June',
'July','August','September','October','November','December'),
array('AM','PM'),
),
'fr' => array(
array('dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi' ),
array('janvier', "février", 'mars', 'avril', 'mai', 'juin',
'juillet', "août", 'septembre', 'octobre', 'novembre',
"décembre"),
array('AM','PM'),
),
'es' => array(
array('Domingo', 'Lunes', 'Martes', "Miércoles", 'Jueves',
'Viernes', "Sábado"),
array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto',
'Septiembre','Octubre','Noviembre','Diciembre'),
array('AM','PM'),
),
'pt' => array(
array('domingo', 'segunda-feira', "terça-feira", 'quarta-feira',
'quinta-feira', 'sexta-feira', "sábado"),
array('janeiro', 'fevereiro', "março", 'abril', 'maio', 'junho',
'julho', 'agosto', 'setembro', 'outubro', 'novembro',
'dezembro' ),
array('AM','PM'),
),
'nl' => array(
array('zondag','maandag','dinsdag','woensdag','donderdag','vrijdag',
'zaterdag'),
array('januari','februari','maart','april','mei','juni','juli','augustus',
'september','oktober','november','december'),
array('am','pm'),
"%d %B %Y %H:%M",
"%d %B %Y"
),
'dk' => array(
array("søndag", 'mandag', 'tirsdag', 'onsdag', 'torsdag',
'fredag', "lørdag"),
array('januar','februar','marts','april','maj','juni','juli','august',
'september','oktober','november','december'),
array('am','pm'),
"%d.%m.%Y %H:%M",
"%d.%m.%Y",
"%H:%M",
),
'se' => array(
array("söndag", "måndag", 'tisdag', 'onsdag', 'torsdag',
'fredag', "lördag"),
array('januari','februari','mars','april','maj','juni','juli','augusti',
'september','oktober','november','december'),
array('FM','EM'),
),
'no' => array(
array("Søndag", "Mandag", 'Tirsdag', 'Onsdag', 'Torsdag',
'Fredag', "Lørdag"),
array('Januar','Februar','Mars','April','Mai','Juni','Juli','August',
'September','Oktober','November','Desember'),
array('FM','EM'),
),
'de' => array(
array('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag',
'Samstag'),
array('Januar', 'Februar', "März", 'April', 'Mai', 'Juni',
'Juli', 'August', 'September', 'Oktober', 'November',
'Dezember'),
array('FM','EM'),
"%d.%m.%y %H:%M",
"%d.%m.%y",
"%H:%M",
),
'it' => array(
array('Domenica', "Lunedì", "Martedì", "Mercoledì",
"Giovedì", "Venerdì", 'Sabato'),
array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio',
'Agosto','Settembre','Ottobre','Novembre','Dicembre'),
array('AM','PM'),
"%d.%m.%y %H:%M",
"%d.%m.%y",
"%H:%M",
),
'pl' => array(
array('niedziela', "poniedziałek", 'wtorek', "środa",
'czwartek', "piątek", 'sobota'),
array('stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca',
'lipca', 'sierpnia', "września", "października",
'listopada', 'grudnia'),
array('AM','PM'),
"%e %B %Y %k:%M",
"%e %B %Y",
"%k:%M",
),
'fi' => array(
array('sunnuntai','maanantai','tiistai','keskiviikko','torstai','perjantai',
'lauantai'),
array('tammikuu', 'helmikuu', 'maaliskuu', 'huhtikuu', 'toukokuu',
"kesäkuu", "heinäkuu", 'elokuu', 'syyskuu', 'lokakuu',
'marraskuu', 'joulukuu'),
array('AM','PM'),
"%d.%m.%y %H:%M",
),
'is' => array(
array('Sunnudagur', "Mánudagur", "Þriðjudagur",
"Miðvikudagur", 'Fimmtudagur', "Föstudagur",
'Laugardagur'),
array("janúar", "febrúar", 'mars', "apríl", "maí",
"júní", "júlí", "ágúst", 'september',
"október", "nóvember", 'desember'),
array('FH','EH'),
"%d.%m.%y %H:%M",
),
'si' => array(
array('nedelja', 'ponedeljek', 'torek', 'sreda', "ãetrtek",
'petek', 'sobota'),
array('januar','februar','marec','april','maj','junij','julij','avgust',
'september','oktober','november','december'),
array('AM','PM'),
"%d.%m.%y %H:%M",
),
'cz' => array(
array('Neděle', 'Pondělí', 'Úterý',
'Středa', 'Čtvrtek', 'Pátek', 'Sobota'),
array('Leden', 'Únor', 'Březen', 'Duben', 'Květen',
'Červen', 'Červenec', 'Srpen', 'Září',
'Øíjen', 'Listopad', 'Prosinec'),
array('AM','PM'),
"%e. %B %Y %k:%M",
"%e. %B %Y",
"%k:%M",
),
'sk' => array(
array('nedeľa', 'pondelok', 'utorok', 'streda',
'štvrtok', 'piatok', 'sobota'),
array('január', 'február', 'marec', 'apríl',
'máj', 'jún', 'júl', 'august', 'september',
'október', 'november', 'december'),
array('AM','PM'),
"%e. %B %Y %k:%M",
"%e. %B %Y",
"%k:%M",
),
'jp' => array(
array('日曜日', '月曜日',
'火曜日', '水曜日',
'木曜日', '金曜日',
'土曜日'),
array('1','2','3','4','5','6','7','8','9','10','11','12'),
array('AM','PM'),
"%Y年%m月%d日 %H:%M",
"%Y年%m月%d日",
"%H:%M",
"%Y年%m月",
),
'et' => array(
array('ipühapäev','esmaspäev','teisipäev',
'kolmapäev','neljapäev','reede','laupäev'),
array('jaanuar', 'veebruar', 'märts', 'aprill', 'mai',
'juuni', 'juuli', 'august', 'september', 'oktoober',
'november', 'detsember'),
array('AM','PM'),
"%m.%d.%y %H:%M",
"%e. %B %Y",
"%H:%M",
),
);
global $_encode_xml_Map;
$_encode_xml_Map = array('&' => '&', '"' => '"',
'<' => '<', '>' => '>',
'\'' => ''');
function encode_xml($str, $nocdata = 0) {
global $mt, $_encode_xml_Map;
$nocdata or (isset($mt->config['NoCDATA']) and $nocdata = $mt->config['NoCDATA']);
if ((!$nocdata) && (preg_match('/
<[^>]+> ## HTML markup
| ## or
&(?:(?!(\#([0-9]+)|\#x([0-9a-fA-F]+))).*?);
## something that looks like an HTML entity.
/x', $str))) {
## If ]]> exists in the string, encode the > to >.
$str = preg_replace('/]]>/', ']]>', $str);
$str = '';
} else {
$str = strtr($str, $_encode_xml_Map);
}
return $str;
}
function decode_xml($str) {
if (preg_match('//', $str)) {
$str = preg_replace('//', '\1', $str);
## Decode encoded ]]>
$str = preg_replace('/]]&(gt|#62);/', ']]>', $str);
} else {
global $_encode_xml_Map;
$str = strtr($str, array_flip($_encode_xml_Map));
}
return $str;
}
function encode_js($str) {
if (!isset($str)) return '';
$str = preg_replace('!\'!', '\\\'', $str);
$str = preg_replace('!"!', '\\"', $str);
$str = preg_replace('!\n!', '\\n', $str);
$str = preg_replace('!\f!', '\\f', $str);
$str = preg_replace('!\r!', '\\r', $str);
$str = preg_replace('!\t!', '\\t', $str);
return $str;
}
function gmtime($ts = null) {
if (!isset($ts)) {
$ts = time();
}
$offset = date('Z', $ts);
$ts -= $offset;
$tsa = localtime($ts);
$tsa[8] = 0;
return $tsa;
}
function offset_time_list($ts, $blog = null, $dir = null) {
return gmtime(offset_time($ts, $blog, $dir));
}
function strip_hyphen($s) {
return preg_replace('/-+/', '-', $s);
}
function first_n_words($text, $n) {
$text = strip_tags($text);
$words = preg_split('/\s+/', $text);
$max = count($words) > $n ? $n : count($words);
return join(' ', array_slice($words, 0, $max));
}
function html_text_transform($str = '') {
$paras = preg_split('/\r?\n\r?\n/', $str);
if ($str == '') {
return '';
}
foreach ($paras as $k => $p) {
if (!preg_match('/^<\/?(?:h1|h2|h3|h4|h5|h6|table|ol|ul|menu|dir|p|pre|center|form|select|fieldset|blockquote|address|div|hr)/', $p)) {
$p = preg_replace('/\r?\n/', "
\n", $p);
$p = "
$p
"; $paras[$k] = $p; } } return implode("\n\n", $paras); } function encode_html($str, $quote_style = ENT_COMPAT) { if (!isset($str)) return ''; $trans_table = get_html_translation_table(HTML_SPECIALCHARS, $quote_style); if( $trans_table["'"] != ''' ) { # some versions of PHP match single quotes to ' $trans_table["'"] = '''; } return (strtr($str, $trans_table)); } function decode_html($str, $quote_style = ENT_COMPAT) { if (!isset($str)) return ''; $trans_table = get_html_translation_table(HTML_SPECIALCHARS, $quote_style); if( $trans_table["'"] != ''' ) { # some versions of PHP match single quotes to ' $trans_table["'"] = '''; } return (strtr($str, array_flip($trans_table))); } function get_category_context(&$ctx) { # Get our hands on the category for the current context # Either in MTCategories, a Category Archive Template # Or the category for the current entry $cat = $ctx->stash('category') or $ctx->stash('archive_category'); if (!isset($cat)) { # No category found so far, test the entry if ($ctx->stash('entry')) { $entry = $ctx->stash('entry'); $cat = $ctx->mt->db->fetch_category($entry['placement_category_id']); # Return empty string if entry has no category # as the tag has been used in the correct context # but there is no category to work with if (!isset($cat)) { return null; } } else { $tag = $ctx->this_tag(); return $ctx->error("MT$tag must be used in a category context"); } } return $cat; } function length_text($text) { if (!extension_loaded('mbstring')) { $len = strlen($text); } else { $len = mb_strlen($text); } return $len; } function substr_text($text, $startpos, $length) { if (!extension_loaded('mbstring')) { $text = substr($text, $startpos, $length); } else { $text = mb_substr($text, $startpos, $length); } return $text; } function first_n_text($text, $n) { $text = strip_tags($text); $text = preg_replace('/\r?\n/', " ", $text); substr_text($text, 0, $n); return $text; } ?>