diff options
Diffstat (limited to 'Master/texmf-dist/tex/luatex/lualibs/lualibs-extended-merged.lua')
-rw-r--r-- | Master/texmf-dist/tex/luatex/lualibs/lualibs-extended-merged.lua | 80 |
1 files changed, 57 insertions, 23 deletions
diff --git a/Master/texmf-dist/tex/luatex/lualibs/lualibs-extended-merged.lua b/Master/texmf-dist/tex/luatex/lualibs/lualibs-extended-merged.lua index 672787f9e50..b3fecf2c3e7 100644 --- a/Master/texmf-dist/tex/luatex/lualibs/lualibs-extended-merged.lua +++ b/Master/texmf-dist/tex/luatex/lualibs/lualibs-extended-merged.lua @@ -1,6 +1,6 @@ -- merged file : lualibs-extended-merged.lua -- parent file : lualibs-extended.lua --- merge date : Sun Jul 14 15:31:26 2019 +-- merge date : Tue Aug 13 20:12:59 2019 do -- begin closure to overcome local limits and interference @@ -332,6 +332,13 @@ local template=[[ %s return function(%s) return %s end ]] +local pattern=Cs(Cc('"')*( + (1-S('"\\\n\r'))^1+P('"')/'\\"'+P('\\')/'\\\\'+P('\n')/'\\n'+P('\r')/'\\r' +)^0*Cc('"')) +patterns.escapedquotes=pattern +function string.escapedquotes(s) + return lpegmatch(pattern,s) +end local preamble="" local environment={ global=global or _G, @@ -358,6 +365,7 @@ local environment={ formattedfloat=number.formattedfloat, stripzero=patterns.stripzero, stripzeros=patterns.stripzeros, + escapedquotes=string.escapedquotes, FORMAT=string.f9, } local arguments={ "a1" } @@ -415,7 +423,7 @@ local format_q=function() end local format_Q=function() n=n+1 - return format("format('%%q',tostring(a%s))",n) + return format("escapedquotes(tostring(a%s))",n) end local format_i=function(f) n=n+1 @@ -1389,15 +1397,15 @@ function tables.encapsulate(core,capsule,protect) } ) end end -local f_hashed_string=formatters["[%q]=%q,"] -local f_hashed_number=formatters["[%q]=%s,"] -local f_hashed_boolean=formatters["[%q]=%l,"] -local f_hashed_table=formatters["[%q]="] -local f_indexed_string=formatters["[%s]=%q,"] +local f_hashed_string=formatters["[%Q]=%Q,"] +local f_hashed_number=formatters["[%Q]=%s,"] +local f_hashed_boolean=formatters["[%Q]=%l,"] +local f_hashed_table=formatters["[%Q]="] +local f_indexed_string=formatters["[%s]=%Q,"] local f_indexed_number=formatters["[%s]=%s,"] local f_indexed_boolean=formatters["[%s]=%l,"] local f_indexed_table=formatters["[%s]="] -local f_ordered_string=formatters["%q,"] +local f_ordered_string=formatters["%Q,"] local f_ordered_number=formatters["%s,"] local f_ordered_boolean=formatters["%l,"] function table.fastserialize(t,prefix) @@ -1560,22 +1568,22 @@ local f_start_key_boo=formatters["%w[%l]={"] local f_start_key_nop=formatters["%w{"] local f_stop=formatters["%w},"] local f_key_num_value_num=formatters["%w[%s]=%s,"] -local f_key_str_value_num=formatters["%w[%q]=%s,"] +local f_key_str_value_num=formatters["%w[%Q]=%s,"] local f_key_boo_value_num=formatters["%w[%l]=%s,"] -local f_key_num_value_str=formatters["%w[%s]=%q,"] -local f_key_str_value_str=formatters["%w[%q]=%q,"] -local f_key_boo_value_str=formatters["%w[%l]=%q,"] +local f_key_num_value_str=formatters["%w[%s]=%Q,"] +local f_key_str_value_str=formatters["%w[%Q]=%Q,"] +local f_key_boo_value_str=formatters["%w[%l]=%Q,"] local f_key_num_value_boo=formatters["%w[%s]=%l,"] -local f_key_str_value_boo=formatters["%w[%q]=%l,"] +local f_key_str_value_boo=formatters["%w[%Q]=%l,"] local f_key_boo_value_boo=formatters["%w[%l]=%l,"] local f_key_num_value_not=formatters["%w[%s]={},"] -local f_key_str_value_not=formatters["%w[%q]={},"] +local f_key_str_value_not=formatters["%w[%Q]={},"] local f_key_boo_value_not=formatters["%w[%l]={},"] local f_key_num_value_seq=formatters["%w[%s]={ %, t },"] -local f_key_str_value_seq=formatters["%w[%q]={ %, t },"] +local f_key_str_value_seq=formatters["%w[%Q]={ %, t },"] local f_key_boo_value_seq=formatters["%w[%l]={ %, t },"] local f_val_num=formatters["%w%s,"] -local f_val_str=formatters["%w%q,"] +local f_val_str=formatters["%w%Q,"] local f_val_boo=formatters["%w%l,"] local f_val_not=formatters["%w{},"] local f_val_seq=formatters["%w{ %, t },"] @@ -1583,7 +1591,7 @@ local f_fin_seq=formatters[" %, t }"] local f_table_return=formatters["return {"] local f_table_name=formatters["%s={"] local f_table_direct=formatters["{"] -local f_table_entry=formatters["[%q]={"] +local f_table_entry=formatters["[%Q]={"] local f_table_finish=formatters["}"] local spaces=utilities.strings.newrepeater(" ") local original_serialize=table.serialize @@ -2826,10 +2834,13 @@ do local f_key_val_num=f_key_val_seq local f_key_val_yes=formatters[ "\n"..'%w"%s" : true' ] local f_key_val_nop=formatters[ "\n"..'%w"%s" : false' ] + local f_key_val_null=formatters[ "\n"..'%w"%s" : null' ] local f_val_num=formatters[ "\n"..'%w%s' ] local f_val_str=formatters[ "\n"..'%w"%s"' ] local f_val_yes=formatters[ "\n"..'%wtrue' ] local f_val_nop=formatters[ "\n"..'%wfalse' ] + local f_val_null=formatters[ "\n"..'%wnull' ] + local f_val_empty=formatters[ "\n"..'%w{ }' ] local f_val_seq=f_val_num local t={} local n=0 @@ -2857,8 +2868,10 @@ do n=n+1 t[n]='"' elseif tv=="boolean" then n=n+1 t[n]=v and "true" or "false" - else + elseif v then n=n+1 t[n]=tostring(v) + else + n=n+1 t[n]="null" end end n=n+1 t[n]=" ]" @@ -2915,8 +2928,11 @@ do if st then n=n+1 t[n]=f_val_seq(depth,st) else - tojsonpp(v,k,depth,level+1,0) + tojsonpp(v,nil,depth,level+1,#v) end + else + n=n+1 + t[n]=f_val_empty(depth) end elseif tv=="boolean" then n=n+1 @@ -2925,6 +2941,9 @@ do else t[n]=f_val_nop(depth,v) end + else + n=n+1 + t[n]=f_val_null(depth) end end elseif next(root) then @@ -2942,12 +2961,12 @@ do n=n+1 t[n]=f_key_val_num(depth,k,v) elseif tk=="string" then k=lpegmatch(escaper,k) or k - n=n+1 t[n]=f_key_val_str(depth,k,v) + n=n+1 t[n]=f_key_val_num(depth,k,v) end elseif tv=="string" then if tk=="number" then v=lpegmatch(escaper,v) or v - n=n+1 t[n]=f_key_val_num(depth,k,v) + n=n+1 t[n]=f_key_val_str(depth,k,v) elseif tk=="string" then k=lpegmatch(escaper,k) or k v=lpegmatch(escaper,v) or v @@ -2985,6 +3004,15 @@ do t[n]=f_key_val_nop(depth,k) end end + else + if tk=="number" then + n=n+1 + t[n]=f_key_val_null(depth,k) + elseif tk=="string" then + k=lpegmatch(escaper,k) or k + n=n+1 + t[n]=f_key_val_null(depth,k) + end end end end @@ -3042,6 +3070,8 @@ do n=n+1;t[n]=value elseif kind=="boolean" then n=n+1;t[n]=tostring(value) + else + n=n+1;t[n]="null" end return t,n end @@ -3066,7 +3096,7 @@ do tojsonpp(value,name,0,0,#value) value=concat(t,"",1,n) else - tojson(value,0) + t,n=tojson(value,0) value=concat(t,"",1,n) end t=nil @@ -3279,7 +3309,11 @@ function statistics.show() end function statistics.memused() local round=math.round or math.floor - return format("%s MB (ctx: %s MB)",round(collectgarbage("count")/1000),round(status.luastate_bytes/1000000)) + return format("%s MB, ctx: %s MB, max: %s MB)", + round(collectgarbage("count")/1000), + round(status.luastate_bytes/1000000), + status.luastate_bytes_max and round(status.luastate_bytes_max/1000000) or "unknown" + ) end starttiming(statistics) function statistics.formatruntime(runtime) |