Example #1
0
function MatchPageNames($pagelist, $pat) {
  global $Charset, $EnableRangeMatchUTF8;
  # allow range matches in utf8; doesn't work on pmwiki.org and possibly elsewhere
  $pcre8 = (IsEnabled($EnableRangeMatchUTF8,0) && $Charset=='UTF-8')? 'u' : '';
  $pagelist = (array)$pagelist;
  foreach((array)$pat as $p) {
    if (count($pagelist) < 1) break;
    if (!$p) continue;
    switch ($p{0}) {
      case '/': 
        $pagelist = preg_grep($p, $pagelist); 
        continue;
      case '!':
        $pagelist = array_diff($pagelist, preg_grep($p, $pagelist)); 
        continue;
      default:
        list($inclp, $exclp) = GlobToPCRE(str_replace('/', '.', $p));
        if ($exclp) 
          $pagelist = array_diff($pagelist, preg_grep("/$exclp/i$pcre8", $pagelist));
        if ($inclp)
          $pagelist = preg_grep("/$inclp/i$pcre8", $pagelist);
    }
  }
  return $pagelist;
}
Example #2
0
function MatchPageNames($pagelist, $pat) {
  $pagelist = (array)$pagelist;
  foreach((array)$pat as $p) {
    if (count($pagelist) < 1) break;
    if (!$p) continue;
    switch ($p{0}) {
      case '/': 
        $pagelist = preg_grep($p, $pagelist); 
        continue;
      case '!':
        $pagelist = array_diff($pagelist, preg_grep($p, $pagelist)); 
        continue;
      default:
        list($inclp, $exclp) = GlobToPCRE(str_replace('/', '.', $p));
        if ($exclp) 
          $pagelist = array_diff($pagelist, preg_grep("/$exclp/i", $pagelist));
        if ($inclp)
          $pagelist = preg_grep("/$inclp/i", $pagelist);
    }
  }
  return $pagelist;
}
Example #3
0
function PageListVariables(&$list, &$opt, $pn, &$page) {
  switch ($opt['=phase']) {
    case PAGELIST_PRE:
      $varlist = preg_grep('/^\\$/', array_keys($opt));
      if (!$varlist) return 0;
      foreach($varlist as $v) {
        list($inclp, $exclp) = GlobToPCRE($opt[$v]);
        if ($inclp) $opt['=varinclp'][$v] = "/$inclp/i";
        if ($exclp) $opt['=varexclp'][$v] = "/$exclp/i";
      }
      return PAGELIST_ITEM;

    case PAGELIST_ITEM:
      if (@$opt['=varinclp'])
        foreach($opt['=varinclp'] as $v => $pat) 
          if (!preg_match($pat, PageVar($pn, $v))) return 0;
      if (@$opt['=varexclp'])
        foreach($opt['=varexclp'] as $v => $pat) 
           if (preg_match($pat, PageVar($pn, $v))) return 0;
      return 1;
  }
}
Example #4
0
function MatchPageNames($pagelist, $pat) {
  global $Charset;
  $pcre8 = ($Charset == 'UTF-8')? 'u' : ''; # allow range matches in utf8
  $pagelist = (array)$pagelist;
  foreach((array)$pat as $p) {
    if (count($pagelist) < 1) break;
    if (!$p) continue;
    switch ($p{0}) {
      case '/': 
        $pagelist = preg_grep($p, $pagelist); 
        continue;
      case '!':
        $pagelist = array_diff($pagelist, preg_grep($p, $pagelist)); 
        continue;
      default:
        list($inclp, $exclp) = GlobToPCRE(str_replace('/', '.', $p));
        if ($exclp) 
          $pagelist = array_diff($pagelist, preg_grep("/$exclp/i$pcre8", $pagelist));
        if ($inclp)
          $pagelist = preg_grep("/$inclp/i$pcre8", $pagelist);
    }
  }
  return $pagelist;
}
function PmFormUpdateText($pagename, &$text, $msgtext, $opt, $safe_opt)
{
    if (preg_match('/^\\s*([^\\s,]+)/', @$opt['where'], $w)) {
        $where = $w[1];
    } else {
        $where = 'new';
    }
    if (@$opt['where'] != @$safe_opt['where']) {
        list($inclp, $exclp) = GlobToPCRE(@$safe_opt['where']);
        if (!preg_match("/{$inclp}/", $where) || preg_match("/{$exclp}/", $where)) {
            return "\$[Invalid 'where' option] 1";
        }
    }
    if ($where == 'new') {
        if (!isset($text)) {
            $text = $msgtext;
        }
        return NULL;
    }
    $mark = @$safe_opt['=mark'];
    switch ($where) {
        case 'top':
            $ipos = 0;
            $ilen = 0;
            break;
        case 'bottom':
            $ipos = strlen($text);
            $ilen = 0;
            break;
        case 'above':
            $ipos = strpos($text, $mark);
            $ilen = 0;
            break;
        case 'below':
            $ipos = strpos($text, $mark) + strlen($mark);
            $ilen = 0;
            break;
        default:
            return "\$[Invalid 'where' option] 2";
    }
    $text = substr_replace($text, $msgtext, $ipos, $ilen);
    return NULL;
}
function MxMakePList($pagename, $args, $opt = '')
{
    if ($args[0] == '' && $opt == '') {
        return $pagename;
    }
    StopWatch('plist start');
    $grp = PageVar($pagename, '$Group');
    $exlist = array();
    $inlist = array();
    $plist = array();
    if (isset($opt['groups'])) {
        $grps = explode(",", $opt['groups']);
        foreach ($grps as $g) {
            $args[] = "{$g}.*";
        }
        $opt['fmt'] = 'groups';
    }
    if (isset($opt['group'])) {
        $gp = explode(",", $opt['group']);
        foreach ($gp as $g) {
            $args[] = "{$g}.*";
        }
    }
    if (isset($opt['name'])) {
        $ns = explode(",", $opt['name']);
        foreach ($ns as $n) {
            $args[] = "*.{$n}";
        }
    }
    foreach ($args as $src) {
        $pgs = preg_split("/[\\s,|]+/", $src, -1, PREG_SPLIT_NO_EMPTY);
        $plist = array_merge($plist, $pgs);
    }
    foreach ((array) $plist as $pn) {
        //check for exclusions
        if ($pn[0] == '-') {
            $pn = substr($pn, 1);
            //check for group.name pattern
            if (strstr($pn, '.')) {
                $pgpat = $pn;
            } else {
                $pgpat = $grp . "." . $pn;
            }
            //make preg pattern from wildcard pattern
            $prpat = GlobToPCRE(FixGlob($pgpat));
            //make list from preg name pattern
            $exlist = array_merge($exlist, ListPages("/{$prpat['0']}/"));
        } elseif (strstr($pn, '#')) {
            $inlist[] = $pn;
        } else {
            //check for group.name pattern
            if (strstr($pn, '.')) {
                $pgpat = $pn;
            } else {
                $pgpat = $grp . "." . $pn;
            }
            //make preg pattern from wildcard pattern
            $prpat = GlobToPCRE(FixGlob($pgpat));
            //make list from preg name pattern
            $inlist = array_merge($inlist, ListPages("/{$prpat['0']}/"));
        }
    }
    $plist = array_diff($inlist, $exlist);
    sort($plist);
    if ($opt['fmt'] == 'groups') {
        $glist = array();
        foreach ($plist as $p) {
            $pp = explode('.', $p);
            if (in_array($pp[0], $glist)) {
                continue;
            }
            $glist[] = $pp[0];
        }
        $plist = $glist;
    }
    $sep = @$opt['sep'] ? $opt['sep'] : ",";
    $sep = str_replace('\\n', "\n", $sep);
    if ($sep == 'LF') {
        $sep = "\n";
    }
    foreach ($plist as $i => $p) {
        $plist[$i] = @$opt['pre'] . $p . @$opt['suf'];
    }
    StopWatch('plist end');
    return implode($sep, $plist);
}