tablesorter/dist/js/parsers/parser-roman.min.js

28 lines
1.8 KiB
JavaScript
Raw Normal View History

/*! Parser: roman - updated 6/28/MMXIV (v2.17.3) */
2015-10-31 15:08:21 +00:00
/*
* code modified from both:
* Steven Levithan @ http://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter
* Jonathan Snook comment @ http://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter#comment-16140
*/
/*jshint jquery:true, unused:false */
!function(a){"use strict";
// allow lower case roman numerals, since lists use i, ii, iii, etc.
var b=/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/i,c=/\b([MCDLXVI]+\b)/gi,d={I:1,V:5,X:10,L:50,C:100,D:500,M:1e3};a.tablesorter.addParser({id:"roman",is:function(){return!1},format:function(a){var c,e=a.toUpperCase().split(""),f=0;
// roman numerals not found!
if(!a||!b.test(a))return a;for(;e.length;)c=d[e.shift()],f+=c*(c<d[e[0]]?-1:1);return f},type:"numeric"}),a.tablesorter.addParser({id:"roman-ignore",is:function(){return!1},format:function(e,f,g,h){var i,j,k=f.config,l=a.isArray(k.roman_ignore)?k.roman_ignore[h]:0,
// find roman numerals
m=(isNaN(l)?
// ignore can be a regex or string
a.trim(e.replace(l,"")):
// or a number to ignore the last x letters...
a.trim(e.substring(0,e.length-l))).match(c),n=b.test(m),o=0;
// roman numerals not found!
if(!n)return e;for(
// save roman numeral for replacement
j=m[0],m=j.toUpperCase().split("");m.length;)i=d[m.shift()],i&&(o+=i*(i<d[m[0]]?-1:1));return o?e.replace(j,o):e},type:"text"}),a.tablesorter.addParser({id:"roman-extract",is:function(){return!1},format:function(e){var f,
// find roman numerals
g=a.grep(e.split(/\b/),function(a,c){return b.test(a)?a:""}).join("").match(c),h=g?b.test(g):0,i=0;
// roman numerals not found!
if(!h)return e;for(
// save roman numeral for replacement
g=g[0].toUpperCase().split("");g.length;)f=d[g.shift()],f&&(i+=f*(f<d[g[0]]?-1:1));return i?i:e},type:"numeric"})}(jQuery);