示例#1
0
/**
* @see PGVRGedcomEHandler()
* @todo add info
* @param array $attrs an array of key value pairs for the attributes
*/
function PGVRGedcomSHandler($attrs)
{
    global $vars, $gedrec, $gedrecStack, $processGedcoms, $fact, $desc, $ged_level;
    if ($processGedcoms > 0) {
        $processGedcoms++;
        return;
    }
    $id = "";
    $gmatch = array();
    $gt = preg_match("/0 @(.+)@/", $gedrec, $gmatch);
    if ($gt > 0) {
        $id = $gmatch[1];
    }
    $tag = $attrs["id"];
    $tag = preg_replace("/@fact/", $fact, $tag);
    //print "[$tag]";
    $tags = explode(':', $tag);
    $newgedrec = "";
    if (count($tags) < 2) {
        $newgedrec = find_gedcom_record($attrs["id"]);
    }
    if (empty($newgedrec)) {
        $tgedrec = $gedrec;
        $newgedrec = "";
        foreach ($tags as $tag) {
            //print "[$tag]";
            $match = array();
            $ct = preg_match("/\\\$(.+)/", $tag, $match);
            if ($ct > 0) {
                if (isset($vars[$match[1]]["gedcom"])) {
                    $newgedrec = $vars[$match[1]]["gedcom"];
                } else {
                    $newgedrec = find_gedcom_record($match[1]);
                }
            } else {
                $ct = preg_match("/@(.+)/", $tag, $match);
                if ($ct > 0) {
                    $gt = preg_match("/\\d {$match['1']} @([^@]+)@/", $tgedrec, $gmatch);
                    //print $gt;
                    if ($gt > 0) {
                        //print "[".$gmatch[1]."]";
                        $newgedrec = find_gedcom_record($gmatch[1]);
                        //print $newgedrec;
                        $tgedrec = $newgedrec;
                    } else {
                        //print "[$tgedrec]";
                        $newgedrec = "";
                        break;
                    }
                } else {
                    //$newgedrec = find_gedcom_record($gmatch[1]);
                    $temp = explode(' ', trim($tgedrec));
                    $level = $temp[0] + 1;
                    if (showFact($tag, $id) && showFactDetails($tag, $id)) {
                        $newgedrec = get_sub_record($level, "{$level} {$tag}", $tgedrec);
                        $tgedrec = $newgedrec;
                    } else {
                        $newgedrec = "";
                        break;
                    }
                }
            }
        }
    }
    if (!empty($newgedrec)) {
        //$newgedrec = privatize_gedcom($newgedrec);
        $gedObj = new GedcomRecord($newgedrec);
        array_push($gedrecStack, array($gedrec, $fact, $desc));
        //print "[$newgedrec]";
        $gedrec = $gedObj->getGedcomRecord();
        $ct = preg_match("/(\\d+) (_?[A-Z0-9]+) (.*)/", $gedrec, $match);
        if ($ct > 0) {
            $ged_level = $match[1];
            $fact = $match[2];
            $desc = trim($match[3]);
        }
    } else {
        $processGedcoms++;
    }
}