Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

README for lua_cmsgpack.c
===
Lua-cmsgpack is a MessagePack (http://msgpack.org) implementation and bindings for
Lua 5.1 in a self contained C file without external dependencies.
This library is open source software licensed under the BSD two-clause license.
The library is currently considered in BETA STAGE for lack of extensive testing.
INSTALLATION
---
Using LuaRocks (http://luarocks.org):
* Install current stable release:
sudo luarocks install lua-cmsgpack
* Install current Git master head from GitHub:
sudo luarocks install lua-cmsgpack --from=rocks-cvs
* Install from current working copy
cd lua-cmsgpack/
sudo luarocks make rockspec/lua-cmsgpack-scm-1.rockspec
If you embed Lua and all modules into your C project, just add the
lua_cmsgpack.c file and call the following function after creating the Lua
interpreter:
luaopen_cmsgpack(L);
USAGE
---
The exported API is very simple, consisting in two functions:
* msgpack = cmsgpack.pack(lua_object)
* lua_object = cmsgpack.unpack(msgpack)
However because of the nature of Lua numerical and table type a few behavior
of the library must be well understood to avoid problems:
* A table is converted into a MessagePack array type only if *all* the keys are
composed of incrementing integers starting at 1 end ending at N, without holes,
without additional non numerical keys. All the other tables are converted into
maps.
* An empty table is always converted into a MessagePack array, the rationale is that empty lists are much more common than empty maps (usually used to represent objects with fields).
* A Lua number is converted into an integer type if floor(number) == number, otherwise it is converted into the MessagePack float or double value.
* When a Lua number is converted to float or double, the former is preferred if there is no loss of precision compared to the double representation.
* When a MessagePack big integer (64 bit) is converted to a Lua number it is possible that the resulting number will not represent the original number but just an approximation. This is unavoidable because the Lua numerical type is usually a double precision floating point type.
NESTED TABLES
---
Nested tables are handled correctly up to LUACMSGPACK_MAX_NESTING levels of
nesting (that is set to 16 by default).
Every table that is nested at a greater level than the maxium is encoded
as MessagePack nil value.
It is worth to note that in Lua it is possible to create tables that mutually
refer to each other, creating a cycle. For example:
a = {x=nil,y=5}
b = {x=a}
a['x'] = b
This condition will simply make the encoder reach the max level of nesting,
thus avoiding an infinite loop.
CREDITS
---
This library was written by Salvatore Sanfilippo for Redis, but is maintained as a separated project by the author.
Some of the test vectors in "test.lua" are obtained from the Javascript MessagePack-JS library (https://github.com/cuzic/MessagePack-JS).

About

A self contained Lua MessagePack C implementation.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - yaslama/lua-cmsgpack: A self contained Lua MessagePack C implementation. · GitHub
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

README for lua_cmsgpack.c
===
Lua-cmsgpack is a MessagePack (http://msgpack.org) implementation and bindings for
Lua 5.1 in a self contained C file without external dependencies.
This library is open source software licensed under the BSD two-clause license.
The library is currently considered in BETA STAGE for lack of extensive testing.
INSTALLATION
---
Using LuaRocks (http://luarocks.org):
* Install current stable release:
sudo luarocks install lua-cmsgpack
* Install current Git master head from GitHub:
sudo luarocks install lua-cmsgpack --from=rocks-cvs
* Install from current working copy
cd lua-cmsgpack/
sudo luarocks make rockspec/lua-cmsgpack-scm-1.rockspec
If you embed Lua and all modules into your C project, just add the
lua_cmsgpack.c file and call the following function after creating the Lua
interpreter:
luaopen_cmsgpack(L);
USAGE
---
The exported API is very simple, consisting in two functions:
* msgpack = cmsgpack.pack(lua_object)
* lua_object = cmsgpack.unpack(msgpack)
However because of the nature of Lua numerical and table type a few behavior
of the library must be well understood to avoid problems:
* A table is converted into a MessagePack array type only if *all* the keys are
composed of incrementing integers starting at 1 end ending at N, without holes,
without additional non numerical keys. All the other tables are converted into
maps.
* An empty table is always converted into a MessagePack array, the rationale is that empty lists are much more common than empty maps (usually used to represent objects with fields).
* A Lua number is converted into an integer type if floor(number) == number, otherwise it is converted into the MessagePack float or double value.
* When a Lua number is converted to float or double, the former is preferred if there is no loss of precision compared to the double representation.
* When a MessagePack big integer (64 bit) is converted to a Lua number it is possible that the resulting number will not represent the original number but just an approximation. This is unavoidable because the Lua numerical type is usually a double precision floating point type.
NESTED TABLES
---
Nested tables are handled correctly up to LUACMSGPACK_MAX_NESTING levels of
nesting (that is set to 16 by default).
Every table that is nested at a greater level than the maxium is encoded
as MessagePack nil value.
It is worth to note that in Lua it is possible to create tables that mutually
refer to each other, creating a cycle. For example:
a = {x=nil,y=5}
b = {x=a}
a['x'] = b
This condition will simply make the encoder reach the max level of nesting,
thus avoiding an infinite loop.
CREDITS
---
This library was written by Salvatore Sanfilippo for Redis, but is maintained as a separated project by the author.
Some of the test vectors in "test.lua" are obtained from the Javascript MessagePack-JS library (https://github.com/cuzic/MessagePack-JS).

About

A self contained Lua MessagePack C implementation.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - yaslama/lua-cmsgpack: A self contained Lua MessagePack C implementation. · GitHub
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

README for lua_cmsgpack.c
===
Lua-cmsgpack is a MessagePack (http://msgpack.org) implementation and bindings for
Lua 5.1 in a self contained C file without external dependencies.
This library is open source software licensed under the BSD two-clause license.
The library is currently considered in BETA STAGE for lack of extensive testing.
INSTALLATION
---
Using LuaRocks (http://luarocks.org):
* Install current stable release:
sudo luarocks install lua-cmsgpack
* Install current Git master head from GitHub:
sudo luarocks install lua-cmsgpack --from=rocks-cvs
* Install from current working copy
cd lua-cmsgpack/
sudo luarocks make rockspec/lua-cmsgpack-scm-1.rockspec
If you embed Lua and all modules into your C project, just add the
lua_cmsgpack.c file and call the following function after creating the Lua
interpreter:
luaopen_cmsgpack(L);
USAGE
---
The exported API is very simple, consisting in two functions:
* msgpack = cmsgpack.pack(lua_object)
* lua_object = cmsgpack.unpack(msgpack)
However because of the nature of Lua numerical and table type a few behavior
of the library must be well understood to avoid problems:
* A table is converted into a MessagePack array type only if *all* the keys are
composed of incrementing integers starting at 1 end ending at N, without holes,
without additional non numerical keys. All the other tables are converted into
maps.
* An empty table is always converted into a MessagePack array, the rationale is that empty lists are much more common than empty maps (usually used to represent objects with fields).
* A Lua number is converted into an integer type if floor(number) == number, otherwise it is converted into the MessagePack float or double value.
* When a Lua number is converted to float or double, the former is preferred if there is no loss of precision compared to the double representation.
* When a MessagePack big integer (64 bit) is converted to a Lua number it is possible that the resulting number will not represent the original number but just an approximation. This is unavoidable because the Lua numerical type is usually a double precision floating point type.
NESTED TABLES
---
Nested tables are handled correctly up to LUACMSGPACK_MAX_NESTING levels of
nesting (that is set to 16 by default).
Every table that is nested at a greater level than the maxium is encoded
as MessagePack nil value.
It is worth to note that in Lua it is possible to create tables that mutually
refer to each other, creating a cycle. For example:
a = {x=nil,y=5}
b = {x=a}
a['x'] = b
This condition will simply make the encoder reach the max level of nesting,
thus avoiding an infinite loop.
CREDITS
---
This library was written by Salvatore Sanfilippo for Redis, but is maintained as a separated project by the author.
Some of the test vectors in "test.lua" are obtained from the Javascript MessagePack-JS library (https://github.com/cuzic/MessagePack-JS).

About

A self contained Lua MessagePack C implementation.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - yaslama/lua-cmsgpack: A self contained Lua MessagePack C implementation. · GitHub
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

README for lua_cmsgpack.c
===
Lua-cmsgpack is a MessagePack (http://msgpack.org) implementation and bindings for
Lua 5.1 in a self contained C file without external dependencies.
This library is open source software licensed under the BSD two-clause license.
The library is currently considered in BETA STAGE for lack of extensive testing.
INSTALLATION
---
Using LuaRocks (http://luarocks.org):
* Install current stable release:
sudo luarocks install lua-cmsgpack
* Install current Git master head from GitHub:
sudo luarocks install lua-cmsgpack --from=rocks-cvs
* Install from current working copy
cd lua-cmsgpack/
sudo luarocks make rockspec/lua-cmsgpack-scm-1.rockspec
If you embed Lua and all modules into your C project, just add the
lua_cmsgpack.c file and call the following function after creating the Lua
interpreter:
luaopen_cmsgpack(L);
USAGE
---
The exported API is very simple, consisting in two functions:
* msgpack = cmsgpack.pack(lua_object)
* lua_object = cmsgpack.unpack(msgpack)
However because of the nature of Lua numerical and table type a few behavior
of the library must be well understood to avoid problems:
* A table is converted into a MessagePack array type only if *all* the keys are
composed of incrementing integers starting at 1 end ending at N, without holes,
without additional non numerical keys. All the other tables are converted into
maps.
* An empty table is always converted into a MessagePack array, the rationale is that empty lists are much more common than empty maps (usually used to represent objects with fields).
* A Lua number is converted into an integer type if floor(number) == number, otherwise it is converted into the MessagePack float or double value.
* When a Lua number is converted to float or double, the former is preferred if there is no loss of precision compared to the double representation.
* When a MessagePack big integer (64 bit) is converted to a Lua number it is possible that the resulting number will not represent the original number but just an approximation. This is unavoidable because the Lua numerical type is usually a double precision floating point type.
NESTED TABLES
---
Nested tables are handled correctly up to LUACMSGPACK_MAX_NESTING levels of
nesting (that is set to 16 by default).
Every table that is nested at a greater level than the maxium is encoded
as MessagePack nil value.
It is worth to note that in Lua it is possible to create tables that mutually
refer to each other, creating a cycle. For example:
a = {x=nil,y=5}
b = {x=a}
a['x'] = b
This condition will simply make the encoder reach the max level of nesting,
thus avoiding an infinite loop.
CREDITS
---
This library was written by Salvatore Sanfilippo for Redis, but is maintained as a separated project by the author.
Some of the test vectors in "test.lua" are obtained from the Javascript MessagePack-JS library (https://github.com/cuzic/MessagePack-JS).

About

A self contained Lua MessagePack C implementation.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - yaslama/lua-cmsgpack: A self contained Lua MessagePack C implementation. · GitHub
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

README for lua_cmsgpack.c
===
Lua-cmsgpack is a MessagePack (http://msgpack.org) implementation and bindings for
Lua 5.1 in a self contained C file without external dependencies.
This library is open source software licensed under the BSD two-clause license.
The library is currently considered in BETA STAGE for lack of extensive testing.
INSTALLATION
---
Using LuaRocks (http://luarocks.org):
* Install current stable release:
sudo luarocks install lua-cmsgpack
* Install current Git master head from GitHub:
sudo luarocks install lua-cmsgpack --from=rocks-cvs
* Install from current working copy
cd lua-cmsgpack/
sudo luarocks make rockspec/lua-cmsgpack-scm-1.rockspec
If you embed Lua and all modules into your C project, just add the
lua_cmsgpack.c file and call the following function after creating the Lua
interpreter:
luaopen_cmsgpack(L);
USAGE
---
The exported API is very simple, consisting in two functions:
* msgpack = cmsgpack.pack(lua_object)
* lua_object = cmsgpack.unpack(msgpack)
However because of the nature of Lua numerical and table type a few behavior
of the library must be well understood to avoid problems:
* A table is converted into a MessagePack array type only if *all* the keys are
composed of incrementing integers starting at 1 end ending at N, without holes,
without additional non numerical keys. All the other tables are converted into
maps.
* An empty table is always converted into a MessagePack array, the rationale is that empty lists are much more common than empty maps (usually used to represent objects with fields).
* A Lua number is converted into an integer type if floor(number) == number, otherwise it is converted into the MessagePack float or double value.
* When a Lua number is converted to float or double, the former is preferred if there is no loss of precision compared to the double representation.
* When a MessagePack big integer (64 bit) is converted to a Lua number it is possible that the resulting number will not represent the original number but just an approximation. This is unavoidable because the Lua numerical type is usually a double precision floating point type.
NESTED TABLES
---
Nested tables are handled correctly up to LUACMSGPACK_MAX_NESTING levels of
nesting (that is set to 16 by default).
Every table that is nested at a greater level than the maxium is encoded
as MessagePack nil value.
It is worth to note that in Lua it is possible to create tables that mutually
refer to each other, creating a cycle. For example:
a = {x=nil,y=5}
b = {x=a}
a['x'] = b
This condition will simply make the encoder reach the max level of nesting,
thus avoiding an infinite loop.
CREDITS
---
This library was written by Salvatore Sanfilippo for Redis, but is maintained as a separated project by the author.
Some of the test vectors in "test.lua" are obtained from the Javascript MessagePack-JS library (https://github.com/cuzic/MessagePack-JS).

About

A self contained Lua MessagePack C implementation.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - yaslama/lua-cmsgpack: A self contained Lua MessagePack C implementation. · GitHub
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

README for lua_cmsgpack.c
===
Lua-cmsgpack is a MessagePack (http://msgpack.org) implementation and bindings for
Lua 5.1 in a self contained C file without external dependencies.
This library is open source software licensed under the BSD two-clause license.
The library is currently considered in BETA STAGE for lack of extensive testing.
INSTALLATION
---
Using LuaRocks (http://luarocks.org):
* Install current stable release:
sudo luarocks install lua-cmsgpack
* Install current Git master head from GitHub:
sudo luarocks install lua-cmsgpack --from=rocks-cvs
* Install from current working copy
cd lua-cmsgpack/
sudo luarocks make rockspec/lua-cmsgpack-scm-1.rockspec
If you embed Lua and all modules into your C project, just add the
lua_cmsgpack.c file and call the following function after creating the Lua
interpreter:
luaopen_cmsgpack(L);
USAGE
---
The exported API is very simple, consisting in two functions:
* msgpack = cmsgpack.pack(lua_object)
* lua_object = cmsgpack.unpack(msgpack)
However because of the nature of Lua numerical and table type a few behavior
of the library must be well understood to avoid problems:
* A table is converted into a MessagePack array type only if *all* the keys are
composed of incrementing integers starting at 1 end ending at N, without holes,
without additional non numerical keys. All the other tables are converted into
maps.
* An empty table is always converted into a MessagePack array, the rationale is that empty lists are much more common than empty maps (usually used to represent objects with fields).
* A Lua number is converted into an integer type if floor(number) == number, otherwise it is converted into the MessagePack float or double value.
* When a Lua number is converted to float or double, the former is preferred if there is no loss of precision compared to the double representation.
* When a MessagePack big integer (64 bit) is converted to a Lua number it is possible that the resulting number will not represent the original number but just an approximation. This is unavoidable because the Lua numerical type is usually a double precision floating point type.
NESTED TABLES
---
Nested tables are handled correctly up to LUACMSGPACK_MAX_NESTING levels of
nesting (that is set to 16 by default).
Every table that is nested at a greater level than the maxium is encoded
as MessagePack nil value.
It is worth to note that in Lua it is possible to create tables that mutually
refer to each other, creating a cycle. For example:
a = {x=nil,y=5}
b = {x=a}
a['x'] = b
This condition will simply make the encoder reach the max level of nesting,
thus avoiding an infinite loop.
CREDITS
---
This library was written by Salvatore Sanfilippo for Redis, but is maintained as a separated project by the author.
Some of the test vectors in "test.lua" are obtained from the Javascript MessagePack-JS library (https://github.com/cuzic/MessagePack-JS).

About

A self contained Lua MessagePack C implementation.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - yaslama/lua-cmsgpack: A self contained Lua MessagePack C implementation. · GitHub
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

README for lua_cmsgpack.c
===
Lua-cmsgpack is a MessagePack (http://msgpack.org) implementation and bindings for
Lua 5.1 in a self contained C file without external dependencies.
This library is open source software licensed under the BSD two-clause license.
The library is currently considered in BETA STAGE for lack of extensive testing.
INSTALLATION
---
Using LuaRocks (http://luarocks.org):
* Install current stable release:
sudo luarocks install lua-cmsgpack
* Install current Git master head from GitHub:
sudo luarocks install lua-cmsgpack --from=rocks-cvs
* Install from current working copy
cd lua-cmsgpack/
sudo luarocks make rockspec/lua-cmsgpack-scm-1.rockspec
If you embed Lua and all modules into your C project, just add the
lua_cmsgpack.c file and call the following function after creating the Lua
interpreter:
luaopen_cmsgpack(L);
USAGE
---
The exported API is very simple, consisting in two functions:
* msgpack = cmsgpack.pack(lua_object)
* lua_object = cmsgpack.unpack(msgpack)
However because of the nature of Lua numerical and table type a few behavior
of the library must be well understood to avoid problems:
* A table is converted into a MessagePack array type only if *all* the keys are
composed of incrementing integers starting at 1 end ending at N, without holes,
without additional non numerical keys. All the other tables are converted into
maps.
* An empty table is always converted into a MessagePack array, the rationale is that empty lists are much more common than empty maps (usually used to represent objects with fields).
* A Lua number is converted into an integer type if floor(number) == number, otherwise it is converted into the MessagePack float or double value.
* When a Lua number is converted to float or double, the former is preferred if there is no loss of precision compared to the double representation.
* When a MessagePack big integer (64 bit) is converted to a Lua number it is possible that the resulting number will not represent the original number but just an approximation. This is unavoidable because the Lua numerical type is usually a double precision floating point type.
NESTED TABLES
---
Nested tables are handled correctly up to LUACMSGPACK_MAX_NESTING levels of
nesting (that is set to 16 by default).
Every table that is nested at a greater level than the maxium is encoded
as MessagePack nil value.
It is worth to note that in Lua it is possible to create tables that mutually
refer to each other, creating a cycle. For example:
a = {x=nil,y=5}
b = {x=a}
a['x'] = b
This condition will simply make the encoder reach the max level of nesting,
thus avoiding an infinite loop.
CREDITS
---
This library was written by Salvatore Sanfilippo for Redis, but is maintained as a separated project by the author.
Some of the test vectors in "test.lua" are obtained from the Javascript MessagePack-JS library (https://github.com/cuzic/MessagePack-JS).

About

A self contained Lua MessagePack C implementation.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - yaslama/lua-cmsgpack: A self contained Lua MessagePack C implementation. · GitHub
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

README for lua_cmsgpack.c
===
Lua-cmsgpack is a MessagePack (http://msgpack.org) implementation and bindings for
Lua 5.1 in a self contained C file without external dependencies.
This library is open source software licensed under the BSD two-clause license.
The library is currently considered in BETA STAGE for lack of extensive testing.
INSTALLATION
---
Using LuaRocks (http://luarocks.org):
* Install current stable release:
sudo luarocks install lua-cmsgpack
* Install current Git master head from GitHub:
sudo luarocks install lua-cmsgpack --from=rocks-cvs
* Install from current working copy
cd lua-cmsgpack/
sudo luarocks make rockspec/lua-cmsgpack-scm-1.rockspec
If you embed Lua and all modules into your C project, just add the
lua_cmsgpack.c file and call the following function after creating the Lua
interpreter:
luaopen_cmsgpack(L);
USAGE
---
The exported API is very simple, consisting in two functions:
* msgpack = cmsgpack.pack(lua_object)
* lua_object = cmsgpack.unpack(msgpack)
However because of the nature of Lua numerical and table type a few behavior
of the library must be well understood to avoid problems:
* A table is converted into a MessagePack array type only if *all* the keys are
composed of incrementing integers starting at 1 end ending at N, without holes,
without additional non numerical keys. All the other tables are converted into
maps.
* An empty table is always converted into a MessagePack array, the rationale is that empty lists are much more common than empty maps (usually used to represent objects with fields).
* A Lua number is converted into an integer type if floor(number) == number, otherwise it is converted into the MessagePack float or double value.
* When a Lua number is converted to float or double, the former is preferred if there is no loss of precision compared to the double representation.
* When a MessagePack big integer (64 bit) is converted to a Lua number it is possible that the resulting number will not represent the original number but just an approximation. This is unavoidable because the Lua numerical type is usually a double precision floating point type.
NESTED TABLES
---
Nested tables are handled correctly up to LUACMSGPACK_MAX_NESTING levels of
nesting (that is set to 16 by default).
Every table that is nested at a greater level than the maxium is encoded
as MessagePack nil value.
It is worth to note that in Lua it is possible to create tables that mutually
refer to each other, creating a cycle. For example:
a = {x=nil,y=5}
b = {x=a}
a['x'] = b
This condition will simply make the encoder reach the max level of nesting,
thus avoiding an infinite loop.
CREDITS
---
This library was written by Salvatore Sanfilippo for Redis, but is maintained as a separated project by the author.
Some of the test vectors in "test.lua" are obtained from the Javascript MessagePack-JS library (https://github.com/cuzic/MessagePack-JS).

About

A self contained Lua MessagePack C implementation.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors