mirror of
				https://github.com/flynx/types.js.git
				synced 2025-10-29 18:40:07 +00:00 
			
		
		
		
	
		
			
	
	
		
			104 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | /********************************************************************** | ||
|  | * | ||
|  | * | ||
|  | **********************************************/  /* c8 ignore next 2 */ | ||
|  | ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define) | ||
|  | (function(require){ var module={} // make module AMD/node compatible...
 | ||
|  | /*********************************************************************/ | ||
|  | 
 | ||
|  | var object = require('ig-object') | ||
|  | 
 | ||
|  | 
 | ||
|  | //---------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | var NumberMixin = | ||
|  | module.NumberMixin = | ||
|  | object.Mixin('NumberMixin', 'soft', { | ||
|  | 	toAlpha: function(n, alpha='abcdefghijklmnopqrstuvwxyz'){ | ||
|  | 		var res = '' | ||
|  | 		var base = alpha.length | ||
|  | 		do{ | ||
|  | 			res = alpha[n % base] + res | ||
|  | 			n = Math.floor(n/base) - 1 | ||
|  | 		}while(n >= 0) | ||
|  | 		return res }, | ||
|  | 	fromAlpha: function(str, alpha='abcdefghijklmnopqrstuvwxyz'){ | ||
|  | 		var res = 0 | ||
|  | 		var base = alpha.length | ||
|  | 		var i = 0 | ||
|  | 		for(var c of [...str].reverse()){ | ||
|  | 			var val = alpha.indexOf(c) + 1 | ||
|  | 			res += val * (base ** i++) } | ||
|  | 		return res-1 }, | ||
|  | 
 | ||
|  | 	toRoman: function(n){ | ||
|  | 		var index = { | ||
|  | 			M: 1000,	 | ||
|  | 				CM: 900, | ||
|  | 			D: 500, | ||
|  | 				CD: 400, | ||
|  | 			C: 100,		 | ||
|  | 				XC: 90, | ||
|  | 			L: 50, | ||
|  | 				XL: 40, | ||
|  | 			X: 10, | ||
|  | 				IX: 9, | ||
|  | 			V: 5,		 | ||
|  | 				IV: 4, | ||
|  | 			I: 1, | ||
|  | 		} | ||
|  | 		var res = '' | ||
|  | 		for(var R in index){ | ||
|  | 			while(n >= index[R]){ | ||
|  | 				res += R | ||
|  | 				n -= index[R] } } | ||
|  | 		return res }, | ||
|  | 	fromRoman: function(str){ | ||
|  | 		var index = { | ||
|  | 			M: 1000,	 | ||
|  | 				CM: 900, | ||
|  | 			D: 500, | ||
|  | 				CD: 400, | ||
|  | 			C: 100,		 | ||
|  | 				XC: 90, | ||
|  | 			L: 50, | ||
|  | 				XL: 40, | ||
|  | 			X: 10, | ||
|  | 				IX: 9, | ||
|  | 			V: 5,		 | ||
|  | 				IV: 4, | ||
|  | 			I: 1, | ||
|  | 		} | ||
|  | 		var n = 0 | ||
|  | 		str = str.toUpperCase() | ||
|  | 		while(str != ''){ | ||
|  | 			if(str.slice(0, 2) in index){ | ||
|  | 				n += index[str.slice(0, 2)] | ||
|  | 				str = str.slice(2) | ||
|  | 			} else if(str[0] in index){ | ||
|  | 				n += index[str[0]] | ||
|  | 				str = str.slice(1) | ||
|  | 			} else { | ||
|  | 				throw new Error('fromRoman(..): Unknown sequence: '+ str) } } | ||
|  | 		return n }, | ||
|  | }) | ||
|  | 
 | ||
|  | NumberMixin(Number) | ||
|  | 
 | ||
|  | // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 | ||
|  | var NumberProtoMixin = | ||
|  | module.NumberProtoMixin = | ||
|  | object.Mixin('NumberProtoMixin', 'soft', { | ||
|  | 	toAlpha: function(alpha='abcdefghijklmnopqrstuvwxyz'){ | ||
|  | 		return this.constructor.toAlpha(this, alpha) }, | ||
|  | 	toRoman: function(n){ | ||
|  | 		return this.constructor.toRoman(this) }, | ||
|  | }) | ||
|  | 
 | ||
|  | NumberProtoMixin(Number.prototype) | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /********************************************************************** | ||
|  | * vim:set ts=4 sw=4 nowrap :                        */ return module }) |