localp={}localoutput_mt={}functionoutput_mt:insert(str)self.n=self.n+1self[self.n]=strendfunctionoutput_mt:insert_format(...)self:insert(string.format(...))endoutput_mt.join=table.concatoutput_mt.__index=output_mtlocalfunctionOutput()returnsetmetatable({n=0},output_mt)endfunctionp.show_modules()localoutput=Output()output:insert[[{| class="wikitable" style="text-align: center;"'|+ Character name data modules,<br>organized by first three digits of codepoint in hexadecimal base]]fori=-1,0xFdoifi>=0thenoutput:insert_format('\n! %X',i)elseoutput:insert'\n!'endendoutput:insert'\n|-'localprev=-1localrowlocalfound_module=falsefori=0,0x10Fdolocalfirst_two_digits=math.floor(i/0x10)iffirst_two_digits~=prevtheniffound_modulethenoutput:insert(row:join())endfound_module=falserow=Output{}row:insert_format("\n|-\n! %02Xx",first_two_digits)prev=first_two_digitsendrow:insert'\n| 'localname_module=('Module:Unicode data/names/%03X'):format(i)ifmw.title.new(name_module).existsthenlocalfirst_cp=i*0x1000row:insert_format("[[%s|U+%04X–<br>U+%04X]]",name_module,first_cp,first_cp+0xFFF)found_module=trueendendoutput:insert"\n|}"returnoutput:join()endreturnp