Пример #1
0
function UTF8_wordwrap($text, $width = 75, $break = "\n", $cut = FALSE)
{
    if ($width <= 0) {
        $width = 75;
    }
    if (is_string($text) && strlen($text) <= $width) {
        return $text;
    }
    // Nothing to do
    if ($break == '') {
        $break = "\n";
    }
    $UTF8_text = UTF8_str_split($text);
    $UTF8_break = UTF8_str_split($break);
    $UTF8_result = array();
    while (UTF8_strlen($UTF8_text) > $width) {
        $longWord = FALSE;
        for ($i = $width; $i >= 0; $i--) {
            if ($UTF8_text[$i] == ' ') {
                break;
            }
        }
        if ($i < 0) {
            // We're dealing with a very long word
            // Not too sure what $cut is supposed to accomplish -- we'll just chop the word
            $longWord = TRUE;
            // This means: "not wrapping at a space"
            $i = $width;
        }
        $thisPiece = array_slice($UTF8_text, 0, $i);
        foreach ($thisPiece as $char) {
            // Copy front part of input string
            $UTF8_result[] = $char;
        }
        foreach ($UTF8_break as $char) {
            // Copy separator string
            $UTF8_result[] = $char;
        }
        if (!$longWord) {
            $i++;
        }
        // Skip space at end of piece we've just worked on
        $UTF8_text = UTF8_substr($UTF8_text, $i);
        // Remove that piece
    }
    foreach ($UTF8_text as $char) {
        // Copy remainder of input string
        $UTF8_result[] = $char;
    }
    if (is_array($text)) {
        return $UTF8_result;
    }
    return implode('', $UTF8_result);
}
Пример #2
0
/**
 * builds and returns sosa relationship name in the active language
 *
 * @param string $sosa sosa number
 */
function get_sosa_name($sosa)
{
    global $LANGUAGE, $pgv_lang;
    if ($sosa < 2) {
        return "";
    }
    $sosaname = "";
    $sosanr = floor($sosa / 2);
    $gen = floor(log($sosanr) / log(2));
    // first try a generic algorithm, this is later overridden
    // by language specific algorithms.
    if (!empty($pgv_lang["sosa_{$sosa}"])) {
        $sosaname = $pgv_lang["sosa_{$sosa}"];
    } else {
        if ($gen > 2) {
            switch ($LANGUAGE) {
                case "danish":
                case "norwegian":
                case "swedish":
                    $sosaname = "";
                    $addname = "";
                    $father = UTF8_strtolower($pgv_lang["father"]);
                    $mother = UTF8_strtolower($pgv_lang["mother"]);
                    $grand = "be" . ($LANGUAGE == "danish" ? "dste" : "ste");
                    $great = "olde";
                    $tip = "tip" . ($LANGUAGE == "danish" ? "-" : "p-");
                    for ($i = $gen; $i > 2; $i--) {
                        $sosaname .= $tip;
                    }
                    if ($gen >= 2) {
                        $sosaname .= $great;
                    }
                    if ($gen == 1) {
                        $sosaname .= $grand;
                    }
                    for ($i = $gen; $i > 0; $i--) {
                        if (!(floor($sosa / pow(2, $i)) % 2)) {
                            $addname .= $father;
                        } else {
                            $addname .= $mother;
                        }
                        if ($gen % 2 && !($i % 2) || !($gen % 2) && $i % 2) {
                            $addname .= "s ";
                        }
                    }
                    if ($LANGUAGE == "swedish") {
                        $sosaname = $addname;
                    }
                    if ($sosa % 2 == 0) {
                        $sosaname .= $father;
                        if ($gen > 0) {
                            $addname .= $father;
                        }
                    } else {
                        $sosaname .= $mother;
                        if ($gen > 0) {
                            $addname .= $mother;
                        }
                    }
                    $sosaname = UTF8_str_split($sosaname);
                    $sosaname[0] = UTF8_strtoupper($sosaname[0]);
                    $sosaname = implode('', $sosaname);
                    if ($LANGUAGE != "swedish") {
                        if (!empty($addname)) {
                            $sosaname .= ($gen > 5 ? "<br />&nbsp;&nbsp;&nbsp;&nbsp;" : "") . " <small>(" . $addname . ")</small>";
                        }
                    }
                    break;
                case "dutch":
                    // reference: http://nl.wikipedia.org/wiki/Voorouder
                    // Our numbers are 2 less than those shown in the article.  We number parents
                    // as generation zero where the article numbers them as generation 2.
                    $sosaname = "";
                    // Please leave the following strings untranslated
                    if ($gen & 512) {
                        break;
                    }
                    // 512 or higher
                    if ($gen & 256) {
                        $sosaname .= "hoog";
                    }
                    // 256 to 511
                    if ($gen & 128) {
                        $sosaname .= "opper";
                    }
                    // 128 to 511
                    if ($gen & 64) {
                        $sosaname .= "aarts";
                    }
                    // 64 to 511
                    if ($gen & 32) {
                        $sosaname .= "voor";
                    }
                    // 32 to 511
                    if ($gen & 16) {
                        $sosaname .= "edel";
                    }
                    // 16 to 511
                    if ($gen & 8) {
                        $sosaname .= "stam";
                    }
                    // 8 to 511
                    if ($gen & 4) {
                        $sosaname .= "oud";
                    }
                    // 4 to 511
                    $gen = $gen & 3;
                    if ($gen == 3) {
                        $sosaname .= "betovergroot";
                    }
                    if ($gen == 2) {
                        $sosaname .= "overgroot";
                    }
                    if ($gen == 1) {
                        $sosaname .= "groot";
                    }
                    if ($sosa % 2 == 0) {
                        $sosaname .= $pgv_lang["father"];
                    } else {
                        $sosaname .= $pgv_lang["mother"];
                    }
                    $sosaname = strtolower($sosaname);
                    break;
                case "finnish":
                    $sosaname = "";
                    $father = UTF8_strtolower($pgv_lang["father"]);
                    $mother = UTF8_strtolower($pgv_lang["mother"]);
                    //		$father = "isä";
                    //		$mother = "äiti";
                    //		$pgv_lang["sosa_2"]= "äidin";	//Grand (mother)
                    for ($i = $gen; $i > 0; $i--) {
                        if (!(floor($sosa / pow(2, $i)) % 2)) {
                            $sosaname .= $father . "n";
                        } else {
                            $sosaname .= UTF8_substr($mother, 0, 2) . "din";
                        }
                    }
                    if ($sosa % 2 == 0) {
                        $sosaname .= $father;
                    } else {
                        $sosaname .= $mother;
                    }
                    $sosaname = UTF8_str_split($sosaname);
                    $sosaname[0] = UTF8_strtoupper($sosaname[0]);
                    $sosaname = implode('', $sosaname);
                    break;
                case "hebrew":
                    $sosaname = "";
                    $addname = "";
                    $father = $pgv_lang["father"];
                    $mother = $pgv_lang["mother"];
                    $greatf = $pgv_lang["sosa_22"];
                    $greatm = $pgv_lang["sosa_21"];
                    $of = $pgv_lang["sosa_23"];
                    $grandfather = $pgv_lang["sosa_4"];
                    $grandmother = $pgv_lang["sosa_5"];
                    //		$father = "Aba";
                    //		$mother = "Ima";
                    //		$grandfather = "Saba";
                    //		$grandmother = "Savta";
                    //		$greatf = " raba";
                    //		$greatm = " rabta";
                    //		$of = " shel ";
                    for ($i = $gen; $i >= 0; $i--) {
                        if ($i == 0) {
                            if (!($sosa % 2)) {
                                $addname .= "f";
                            } else {
                                $addname .= "m";
                            }
                        } else {
                            if (!(floor($sosa / pow(2, $i)) % 2)) {
                                $addname .= "f";
                            } else {
                                $addname .= "m";
                            }
                        }
                        if ($i == 0 || strlen($addname) == 3) {
                            if (strlen($addname) == 3) {
                                if (substr($addname, 2, 1) == "f") {
                                    $addname = $grandfather . $greatf;
                                } else {
                                    $addname = $grandmother . $greatm;
                                }
                            } else {
                                if (strlen($addname) == 2) {
                                    if (substr($addname, 1, 1) == "f") {
                                        $addname = $grandfather;
                                    } else {
                                        $addname = $grandmother;
                                    }
                                } else {
                                    if ($addname == "f") {
                                        $addname = $father;
                                    } else {
                                        $addname = $mother;
                                    }
                                }
                            }
                            $sosaname = $addname . ($i < $gen - 2 ? $of : "") . $sosaname;
                            $addname = "";
                        }
                    }
                    break;
                default:
                    $paternal = floor($sosa / pow(2, $gen)) == 2 ? "paternal" : "maternal";
                    $male = $sosa % 2 == 0 ? "male" : "female";
                    if (!empty($pgv_lang["sosa_{$paternal}_{$male}_n_generations"])) {
                        $sosaname = sprintf($pgv_lang["sosa_{$paternal}_{$male}_n_generations"], $gen + 1, $gen, $gen - 1);
                    }
            }
        }
    }
    if (!empty($sosaname)) {
        return "{$sosaname}<!-- sosa={$sosa} nr={$sosanr} gen={$gen} -->";
    } else {
        return "<!-- sosa={$sosa} nr={$sosanr} gen={$gen} -->";
    }
}