User:Quarl/coor canonicalize.js

// User:Quarl/coor_canonicalize.js - canonicalizes geographical coordinates

// Example: 59° 55′ N, 10° 44′ E becomes {{coor dm|59|55|N|10|44|E|}}

// requires: wikipage.js, util.js, addlilink.js

// quarl 2006-02-01 initial version

//

coorz = new Object();

var coorz = new autoedit(

'coorz',

'CoorZ', 'ca-coorz', 'Canonicalize geographic coordinates',

'Coor canonicalization');

coorz.buildRegExp = function() {

var sp = function(s) { return ' *' + s + ' *'; }

var d = sp("(?:°|°)");

var m = sp("(?:′|'|′|′)");

var s = sp('(?:″|"|″|″)');

var C = '(-?[0-9.]+)';

var dms = C + d + '(?:' + C + m + '(?:' + C + s + ')?' + ')?';

var all = '\\b' + dms + '\\s*(N|S|[Nn]orth|[Ss]outh)[ \t,]*' + dms + '\\s*(E|W|[Ee]ast|[Ww]est)' + '\\b';

return new RegExp(all);

}

coorz.replaceRegExp = function(d, m)

{

var latitude = [m[1], m[2], m[3]];

var latitude_pole = m[4][0].toUpperCase();

var longitude = [m[5], m[6], m[7]];

var longitude_pole = m[8][0].toUpperCase();

if (latitude[2] || longitude[2]) {

// dms

return ('{{coor dms|' +

latitude[0] + '|' + latitude[1] + '|' + latitude[2] + '|' + latitude_pole + '|' +

longitude[0] + '|' + longitude[1] + '|' + longitude[2] + '|' + longitude_pole + '|}}');

} else if (latitude[1] || longitude[1]) {

// dm

return ('{{coor dm|' +

latitude[0] + '|' + latitude[1] + '|' + latitude_pole + '|' +

longitude[0] + '|' + longitude[1] + '|' + longitude_pole + '|}}');

} else if (latitude[0] || longitude[0]) {

// d

return ('{{coor d|' +

latitude[0] + '|' + latitude_pole + '|' +

longitude[0] + '|' + longitude_pole + '|}}');

} else {

alert ("## internal error a86f430f-f362-4324-b8ce-df5f84e8f65b");

return null;

}

}

coorz._load = function() {

coorz.addTab();

}

addOnloadHook(coorz._load);

//