In wrroute, coordinates are used now. WrGeo has a general string to geo conversion...
authorphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Wed, 29 Oct 2008 22:43:31 +0000 (22:43 +0000)
committerphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Wed, 29 Oct 2008 22:43:31 +0000 (22:43 +0000)
git-svn-id: http://www.winterrodeln.org/svn/servermediawiki/trunk/extensions/wrgeo@298 7aebc617-e5e2-0310-91dc-80fb5f6d2477

wrgeo.body.php
wrgeo.php

index 7fe76e8ffa1ea70e36b5262b00d5f31cc77827f0..5dcfaaa802847b1c8ffb36346508529b8dffbe3b 100644 (file)
@@ -2,21 +2,44 @@
 
 function wrGeoParserFirstCallInit() {
        global $wgParser;
-       $wgParser->setHook('geo', 'wrGeoRender');
+       $wgParser->setHook('geo', 'geoParserHook');
        return true;
 }
 
 
-function wrGeoRender($input, $args, $parser) {
+/// \brief This function converts a string like "47.236189 N 11.301471 E" to geographical coordinates in degrees.
+///
+/// Usage:
+/// try {list($latitude, $longitude) = wrGeoStringToGeo("47.236189 N 11.301471 E");}
+/// catch (Exception $e) {return $e->getMessage();}
+///
+/// \throw exception if input is not formatted correctly with german UTF-8 error message. Don't forget to catch it!
+/// \param UTF-8 encoded input string.
+/// \return array($latitude, $longitude)
+function wrGeoStringToGeo($input) {
+       if (!$input) throw new Exception(utf8_encode('Keine Koordinaten angegeben.'));
        $p1 = '';
        $p2 = '';
        $p3 = '';
        $p4 = '';
        $n = sscanf($input, '%f %s %f %s', &$p1, &$p2, &$p3, &$p4);
-       if ($n != 4) return '<em>' . htmlspecialchars($input) . '</em> <small>(Koordinaten falsch formatiert)</small>';
-       if ($p2 != 'N') return '<em>' . htmlspecialchars($input) . '</em> <small>(2. Parameter der Koordinaten muss N sein)</small>';
-       if ($p4 != 'E') return '<em>' . htmlspecialchars($input) . '</em> <small>(4. Parameter der Koordinaten muss E sein)</small>';
-       return '<a href="http://maps.google.at/maps?q=' . sprintf('%f,%f', $p1, $p3) . '">' . sprintf('%f %s %f %s', $p1, $p2, $p3, $p4) . '</a>';
+       if ($n != 4) throw new Exception(utf8_encode('Die Koordinaten sind falsch formatiert.'));
+       if ($p2 != 'N') return new Exception(utf8_encode('2. Parameter der Koordinaten muss N sein.'));
+       if ($p4 != 'E') return new Exception(utf8_encode('4. Parameter der Koordinaten muss E sein.'));
+       return array($p1, $p3);
+}
+
+
+function wrGeoGeoToString($latitude, $longitude) {
+       return sprintf('%f N %f E', $latitude, $longitude);
+}
+
+
+/// Format inside <geo>...</geo> has to be like this: <geo>47.236189 N 11.301471 E</geo>
+function geoParserHook($input, $args, $parser) {
+       try {list($latitude, $longitude) = wrGeoStringToGeo($input);}
+       catch (Exception $e) {return '<em>' . htmlspecialchars($input) . '</em> <small>(' . htmlspecialchars($e->getMessage()) . ')</small>';}
+       return '<a href="http://maps.google.at/maps?q=' . sprintf('%f,%f', $latitude, $longitude) . '">' . wrGeoGeoToString($latitude, $longitude) . '</a>';
 }
 
 
index 734ae1b7c03690366298de19f2562fe345b6e52a..2e6c9d92b9082023ac48faa7df28dad37ba31194 100644 (file)
--- a/wrgeo.php
+++ b/wrgeo.php
@@ -1,7 +1,7 @@
 <?php
 $wgExtensionCredits['parserhook'][] = array(
        'name' => 'Winterrodeln Geo',
-       'version' => '0.1 alpha',
+       'version' => '0.3',
        'author' =>'Philipp Spitzer', 
        'url' => 'http://www.winterrodeln.org', 
        'description' => 'This extension replaces the geo tag with a link.'