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); }
/** * 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 /> " : "") . " <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} -->"; } }