local lovely = require("lovely") local nativefs = require("nativefs") Notation = nativefs.load(lovely.mod_dir.."/Talisman/big-num/notations/notation.lua")() BaseStandardNotation = {} BaseStandardNotation.__index = BaseStandardNotation BaseStandardNotation.__tostring = function (notation) return "BaseStandardNotation" end setmetatable(BaseStandardNotation, Notation) function BaseStandardNotation:new(opt) opt = opt or {} return setmetatable({ start = opt.start, ones = opt.ones, tens = opt.tens, hundreds = opt.hundreds, dynamic = opt.dynamic, reversed = opt.reversed }, BaseStandardNotation) end function BaseStandardNotation:get_number_name(e) if e >= 3003 then local order_m = math.floor(e / 3000) return string.format("[%d]-MI-", order_m) .. self:get_number_name(e - 3000 * order_m) end local order = math.floor(e / 3) if order < #self.start then return self.start[1 + order] end order = order - 1 local order_ten = math.floor(order / #self.ones) local order_hundred = math.floor(order_ten / #self.tens) return self.hundreds[1 + order_hundred % #self.hundreds] .. self.ones[1 + order % #self.ones] .. self.tens[1 + order_ten % #self.tens] end function BaseStandardNotation:get_number(n, places) local num = n.m * 10 ^ (n.e % 3) return Notation.format_mantissa(num, places) end function BaseStandardNotation:get_prefix(n) if self.reversed then return self:get_number_name(n.e) else return "" end end function BaseStandardNotation:get_suffix(n) if not self.reversed then return self:get_number_name(n.e) else return "" end end return BaseStandardNotation