+ var orderedPatterns = { 'decimal' : /\d+/, 'lower-roman': lowerRomanLiteralRegex, 'upper-roman': upperRomanLiteralRegex, 'lower-alpha' : /^[a-z]+$/, 'upper-alpha': /^[A-Z]+$/ },\r
+ unorderedPatterns = { 'disc' : /[l\u00B7\u2002]/, 'circle' : /[\u006F\u00D8]/,'square' : /[\u006E\u25C6]/},\r
+ listMarkerPatterns = { 'ol' : orderedPatterns, 'ul' : unorderedPatterns },\r
+ romans = [ [1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'], [50, 'L'], [40, 'XL'], [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I'] ],\r
+ alpahbets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";\r
+\r
+ // Convert roman numbering back to decimal.\r
+ function fromRoman( str )\r
+ {\r
+ str = str.toUpperCase();\r
+ var l = romans.length, retVal = 0;\r
+ for ( var i = 0; i < l; ++i )\r
+ {\r
+ for ( var j = romans[i], k = j[1].length; str.substr( 0, k ) == j[1]; str = str.substr( k ) )\r
+ retVal += j[ 0 ];\r
+ }\r
+ return retVal;\r
+ }\r
+\r
+ // Convert alphabet numbering back to decimal.\r
+ function fromAlphabet( str )\r
+ {\r
+ str = str.toUpperCase();\r
+ var l = alpahbets.length, retVal = 1;\r
+ for ( var x = 1; str.length > 0; x *= l )\r
+ {\r
+ retVal += alpahbets.indexOf( str.charAt( str.length - 1 ) ) * x;\r
+ str = str.substr( 0, str.length - 1 );\r
+ }\r
+ return retVal;\r
+ }\r
+\r