GEO mode
authorMagnus Manske <magnusmanske@users.mediawiki.org>
Fri, 16 Jul 2004 20:32:44 +0000 (20:32 +0000)
committerMagnus Manske <magnusmanske@users.mediawiki.org>
Fri, 16 Jul 2004 20:32:44 +0000 (20:32 +0000)
includes/Parser.php
includes/SpecialGeo.php [new file with mode: 0644]
includes/SpecialPage.php
languages/Language.php

index a1e26cf..09784db 100644 (file)
@@ -802,6 +802,7 @@ class Parser
                //$text = $this->doTokenizedParser ( $text );
                $text = $this->doTableStuff ( $text ) ;
                $text = $this->magicISBN( $text );
+               $text = $this->magicGEO( $text );
                $text = $this->magicRFC( $text );
                $text = $this->formatHeadings( $text, $isMain );
                $sk =& $this->mOptions->getSkin();
@@ -2090,6 +2091,55 @@ class Parser
                return $text;
        }
 
+       # Return an HTML link for the "GEO ..." text
+       /* private */ function magicGEO( $text ) {
+               global $wgLang, $wgUseGeoMode;
+               if ( !isset ( $wgUseGeoMode ) || !$wgUseGeoMode ) return $text ;
+               $fname = 'Parser::magicGEO';
+               wfProfileIn( $fname );
+
+               # These next five lines are only for the ~35000 U.S. Census Rambot pages...
+               $directions = array ( "N" => "North" , "S" => "South" , "E" => "East" , "W" => "West" ) ;
+               $text = preg_replace ( "/(\d+)&deg;(\d+)'(\d+)\" {$directions['N']}, (\d+)&deg;(\d+)'(\d+)\" {$directions['W']}/" , "(GEO +\$1.\$2.\$3:-\$4.\$5.\$6)" , $text ) ;
+               $text = preg_replace ( "/(\d+)&deg;(\d+)'(\d+)\" {$directions['N']}, (\d+)&deg;(\d+)'(\d+)\" {$directions['E']}/" , "(GEO +\$1.\$2.\$3:+\$4.\$5.\$6)" , $text ) ;
+               $text = preg_replace ( "/(\d+)&deg;(\d+)'(\d+)\" {$directions['S']}, (\d+)&deg;(\d+)'(\d+)\" {$directions['W']}/" , "(GEO +\$1.\$2.\$3:-\$4.\$5.\$6)" , $text ) ;
+               $text = preg_replace ( "/(\d+)&deg;(\d+)'(\d+)\" {$directions['S']}, (\d+)&deg;(\d+)'(\d+)\" {$directions['E']}/" , "(GEO +\$1.\$2.\$3:+\$4.\$5.\$6)" , $text ) ;
+
+               $a = split( 'GEO ', " $text" );
+               if ( count ( $a ) < 2 ) {
+                       wfProfileOut( $fname );
+                       return $text;
+               }
+               $text = substr( array_shift( $a ), 1);
+               $valid = '0123456789.+-:';
+
+               foreach ( $a as $x ) {
+                       $geo = $blank = '' ;
+                       while ( ' ' == $x{0} ) {
+                               $blank .= ' ';
+                               $x = substr( $x, 1 );
+                       }
+                       while ( strstr( $valid, $x{0} ) != false ) {
+                               $geo .= $x{0};
+                               $x = substr( $x, 1 );
+                       }
+                       $num = str_replace( '+', '', $geo );
+                       $num = str_replace( ' ', '', $num );
+
+                       if ( '' == $num || count ( explode ( ":" , $num , 3 ) ) < 2 ) {
+                               $text .= "GEO $blank$x";
+                       } else {
+                               $titleObj = Title::makeTitle( NS_SPECIAL, 'Geo' );
+                               $text .= '<a href="' .
+                               $titleObj->escapeLocalUrl( "coordinates={$num}" ) .
+                                       "\" class=\"internal\">GEO $geo</a>";
+                               $text .= $x;
+                       }
+               }
+               wfProfileOut( $fname );
+               return $text;
+       }
+
        # Return an HTML link for the "RFC 1234" text
        /* private */ function magicRFC( $text ) {
                global $wgLang;
diff --git a/includes/SpecialGeo.php b/includes/SpecialGeo.php
new file mode 100644 (file)
index 0000000..f57f49a
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+# Copyright (C) 2003 Brion Vibber <brion@pobox.com>
+# http://www.mediawiki.org/
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or 
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+function wfSpecialGeo( $page = "" ) {
+       global $wgOut, $wgLang;
+       $coordinates = $_GET['coordinates'] ;
+       $coordinates = explode ( ":" , $coordinates ) ;
+       $ns = array_shift ( $coordinates ) ;
+       $ew = array_shift ( $coordinates ) ;
+       if ( 0 < count ( $coordinates ) ) $zoom = length ( array_shift ( $coordinates ) ) ;
+       else $zoom = 6 ;
+       
+       $ns = explode ( "." , $ns ) ;
+       $ew = explode ( "." , $ew ) ;
+       while ( count ( $ns ) < 3 ) $ns[] = "0" ;
+       while ( count ( $ew ) < 3 ) $ew[] = "0" ;
+       
+       $mapquest = "http://www.mapquest.com/maps/map.adp?latlongtype=decimal&latitude={$ns[0]}.{$ns[1]}&longitude={$ew[0]}.{$ew[1]}&zoom={$zoom}" ;
+       $mapquest = "<a href=\"{$mapquest}\">Mapquest</a>" ;
+       
+       
+       $wgOut->addHTML( "{$mapquest}" ) ;
+/*     
+       if( $wgRequest->getVal( 'action' ) == 'submit') {
+               $page = $wgRequest->getText( 'pages' );
+               $curonly = $wgRequest->getCheck( 'curonly' );
+       } else {
+               # Pre-check the 'current version only' box in the UI
+               $curonly = true;
+       }
+       
+       if( $page != "" ) {
+               header( "Content-type: application/xml; charset=utf-8" );
+               $pages = explode( "\n", $page );
+               $xml = pages2xml( $pages, $curonly );
+               echo $xml;
+               wfAbruptExit();
+       }
+       
+       $wgOut->addWikiText( wfMsg( "exporttext" ) );
+       $titleObj = Title::makeTitle( NS_SPECIAL, "Export" );
+       $action = $titleObj->escapeLocalURL();
+       $wgOut->addHTML( "
+<form method='post' action=\"$action\">
+<input type='hidden' name='action' value='submit' />
+<textarea name='pages' cols='40' rows='10'></textarea><br />
+<label><input type='checkbox' name='curonly' value='true' checked='checked' />
+" . wfMsg( "exportcuronly" ) . "</label><br />
+<input type='submit' />
+</form>
+" );
+*/
+}
+
+?>
index c8e97f2..4dcb7e9 100644 (file)
@@ -37,6 +37,7 @@ $wgSpecialPages = array_merge($wgSpecialPages, array (
        "Recentchangeslinked" => new UnlistedSpecialPage( "Recentchangeslinked" ),
        "Movepage"              => new UnlistedSpecialPage( "Movepage" ),
        "Blockme"       => new UnlistedSpecialPage( "Blockme" ),
+       "Geo" => new SpecialPage( "Geo" ),
        "Booksources"   => new SpecialPage( "Booksources" ),
        "Categories"    => new SpecialPage( "Categories" ),
        "Export"                => new SpecialPage( "Export" ),
index 255c22e..feb4487 100644 (file)
@@ -885,6 +885,7 @@ That comes to '''$5''' average edits per page, and '''$6''' views per edit.",
 # Miscellaneous special pages
 #
 'orphans'              => 'Orphaned pages',
+'geo'          => 'GEO coordinates',
 'lonelypages'  => 'Orphaned pages',
 'unusedimages' => 'Unused images',
 'popularpages' => 'Popular pages',