Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Repository files navigation

README for Mixlua
* What is Mixlua?
---------------
Mixlua is a library for Lua 5.1 who provide an onload preprocessor for lua
files and allow mixing of Lua code with other data.
It provide loadstring and loadfile function similar to Lua ones but with
aditional argument for specifing how the data element are recognized and
handled, and produce a regular lua compiled chunk with additional material
for handleing the data.
* Example of use:
---------------
Imagine an application who have a table like this one :
infos = {
{key = "foo", value = "dummy 1"},
{key = "bar", value = "dummy 2"},
...
}
If you want to export it in various formats, you just have to build some
templates like this one for an xml output :
<?xml version="1.0" />
<infos>
$[ for _, item in ipairs(infos) do ]$
<item key="$[=item.key]$" value="$[=item.value]$" />
$[ end $]
</infos>
If you load this file with :
mix.loadfile("template.xml", "$[", "$]")
The xml file with all data will be printed on stdout. If you prefer to save
it elsewhere, there is no problems, just give an output function to mixlua
and it will be ok :
function output(str) io.stderr:write(str) end)
mix.loadfile("template.xml", "$[", "]$", nil, "ouput")
You can see Mixlua as something like the PHP preprocessor but in more
powerfull.
* Usage:
------
Mixlua expose only two function loadstring and loadfile. They work exactly
the same way, except for the first parameter who is a filename for loadfile
and a string for loadfile.
The next two parameters are two string who represent the tag used to surround
block of lua code embeded in the data, they must be given and must not be
empty.
The parameter four is a string who mark an expression statement instead of a
code statement. More on this a below. The default value is "=".
And the last parameter is the name of the output function, by default
"io.write". (this must be the name of the function, not the function itself
cause Mixlua is just a preprocessor who do texte transformation)
When processed throught Mixlua, all data section are transformed into string
and given as the argument to the output function. Lua code are kept untouched
and lua expression are also given to the output function but untouched.
So, for example the example given before will be translated to :
io.write('<?xml version="1.0" />\
<infos>\
') for _, item in ipairs(infos) do io.write('\
<item key="')io.write(item.key)io.write('" value="')io.write(item.value)io.write('" />\
') end io.write('\
</infos>')
And this is passed to the Lua compiler to produce a chunk of compiled code.
The execution of this chunk will produce the output file.
In the preprocess, Mixlua escape data in a way that the line numbers are
kept unchanged so syntax error are reported correctly. And in the Lua
blocks, all string and comment for are skipped correctly so they can embed
the delimiter without any risk to corrupt the output.
* Real case example:
------------------
For example the luapage loading of Cgilua by the Kepler Project can be donne
easily using :
mix.loadfile("filename", "<?lua", "?>", "=")
With the advantage that the "?>" closing tag can now appear in a lua string or
comment.
Another advantage is that after loading the page is now a complied lua chunk
that can be executed in different environement and so producing different
pages depending on the request.
This allow to implement easily a caching of the templates.

About

A preprocessor for files including embedded Lua code

Resources

Stars

5 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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 - LuaDist/mixlua: A preprocessor for files including embedded Lua code · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Repository files navigation

README for Mixlua
* What is Mixlua?
---------------
Mixlua is a library for Lua 5.1 who provide an onload preprocessor for lua
files and allow mixing of Lua code with other data.
It provide loadstring and loadfile function similar to Lua ones but with
aditional argument for specifing how the data element are recognized and
handled, and produce a regular lua compiled chunk with additional material
for handleing the data.
* Example of use:
---------------
Imagine an application who have a table like this one :
infos = {
{key = "foo", value = "dummy 1"},
{key = "bar", value = "dummy 2"},
...
}
If you want to export it in various formats, you just have to build some
templates like this one for an xml output :
<?xml version="1.0" />
<infos>
$[ for _, item in ipairs(infos) do ]$
<item key="$[=item.key]$" value="$[=item.value]$" />
$[ end $]
</infos>
If you load this file with :
mix.loadfile("template.xml", "$[", "$]")
The xml file with all data will be printed on stdout. If you prefer to save
it elsewhere, there is no problems, just give an output function to mixlua
and it will be ok :
function output(str) io.stderr:write(str) end)
mix.loadfile("template.xml", "$[", "]$", nil, "ouput")
You can see Mixlua as something like the PHP preprocessor but in more
powerfull.
* Usage:
------
Mixlua expose only two function loadstring and loadfile. They work exactly
the same way, except for the first parameter who is a filename for loadfile
and a string for loadfile.
The next two parameters are two string who represent the tag used to surround
block of lua code embeded in the data, they must be given and must not be
empty.
The parameter four is a string who mark an expression statement instead of a
code statement. More on this a below. The default value is "=".
And the last parameter is the name of the output function, by default
"io.write". (this must be the name of the function, not the function itself
cause Mixlua is just a preprocessor who do texte transformation)
When processed throught Mixlua, all data section are transformed into string
and given as the argument to the output function. Lua code are kept untouched
and lua expression are also given to the output function but untouched.
So, for example the example given before will be translated to :
io.write('<?xml version="1.0" />\
<infos>\
') for _, item in ipairs(infos) do io.write('\
<item key="')io.write(item.key)io.write('" value="')io.write(item.value)io.write('" />\
') end io.write('\
</infos>')
And this is passed to the Lua compiler to produce a chunk of compiled code.
The execution of this chunk will produce the output file.
In the preprocess, Mixlua escape data in a way that the line numbers are
kept unchanged so syntax error are reported correctly. And in the Lua
blocks, all string and comment for are skipped correctly so they can embed
the delimiter without any risk to corrupt the output.
* Real case example:
------------------
For example the luapage loading of Cgilua by the Kepler Project can be donne
easily using :
mix.loadfile("filename", "<?lua", "?>", "=")
With the advantage that the "?>" closing tag can now appear in a lua string or
comment.
Another advantage is that after loading the page is now a complied lua chunk
that can be executed in different environement and so producing different
pages depending on the request.
This allow to implement easily a caching of the templates.

About

A preprocessor for files including embedded Lua code

Resources

Stars

5 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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 - LuaDist/mixlua: A preprocessor for files including embedded Lua code · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Repository files navigation

README for Mixlua
* What is Mixlua?
---------------
Mixlua is a library for Lua 5.1 who provide an onload preprocessor for lua
files and allow mixing of Lua code with other data.
It provide loadstring and loadfile function similar to Lua ones but with
aditional argument for specifing how the data element are recognized and
handled, and produce a regular lua compiled chunk with additional material
for handleing the data.
* Example of use:
---------------
Imagine an application who have a table like this one :
infos = {
{key = "foo", value = "dummy 1"},
{key = "bar", value = "dummy 2"},
...
}
If you want to export it in various formats, you just have to build some
templates like this one for an xml output :
<?xml version="1.0" />
<infos>
$[ for _, item in ipairs(infos) do ]$
<item key="$[=item.key]$" value="$[=item.value]$" />
$[ end $]
</infos>
If you load this file with :
mix.loadfile("template.xml", "$[", "$]")
The xml file with all data will be printed on stdout. If you prefer to save
it elsewhere, there is no problems, just give an output function to mixlua
and it will be ok :
function output(str) io.stderr:write(str) end)
mix.loadfile("template.xml", "$[", "]$", nil, "ouput")
You can see Mixlua as something like the PHP preprocessor but in more
powerfull.
* Usage:
------
Mixlua expose only two function loadstring and loadfile. They work exactly
the same way, except for the first parameter who is a filename for loadfile
and a string for loadfile.
The next two parameters are two string who represent the tag used to surround
block of lua code embeded in the data, they must be given and must not be
empty.
The parameter four is a string who mark an expression statement instead of a
code statement. More on this a below. The default value is "=".
And the last parameter is the name of the output function, by default
"io.write". (this must be the name of the function, not the function itself
cause Mixlua is just a preprocessor who do texte transformation)
When processed throught Mixlua, all data section are transformed into string
and given as the argument to the output function. Lua code are kept untouched
and lua expression are also given to the output function but untouched.
So, for example the example given before will be translated to :
io.write('<?xml version="1.0" />\
<infos>\
') for _, item in ipairs(infos) do io.write('\
<item key="')io.write(item.key)io.write('" value="')io.write(item.value)io.write('" />\
') end io.write('\
</infos>')
And this is passed to the Lua compiler to produce a chunk of compiled code.
The execution of this chunk will produce the output file.
In the preprocess, Mixlua escape data in a way that the line numbers are
kept unchanged so syntax error are reported correctly. And in the Lua
blocks, all string and comment for are skipped correctly so they can embed
the delimiter without any risk to corrupt the output.
* Real case example:
------------------
For example the luapage loading of Cgilua by the Kepler Project can be donne
easily using :
mix.loadfile("filename", "<?lua", "?>", "=")
With the advantage that the "?>" closing tag can now appear in a lua string or
comment.
Another advantage is that after loading the page is now a complied lua chunk
that can be executed in different environement and so producing different
pages depending on the request.
This allow to implement easily a caching of the templates.

About

A preprocessor for files including embedded Lua code

Resources

Stars

5 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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 - LuaDist/mixlua: A preprocessor for files including embedded Lua code · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Repository files navigation

README for Mixlua
* What is Mixlua?
---------------
Mixlua is a library for Lua 5.1 who provide an onload preprocessor for lua
files and allow mixing of Lua code with other data.
It provide loadstring and loadfile function similar to Lua ones but with
aditional argument for specifing how the data element are recognized and
handled, and produce a regular lua compiled chunk with additional material
for handleing the data.
* Example of use:
---------------
Imagine an application who have a table like this one :
infos = {
{key = "foo", value = "dummy 1"},
{key = "bar", value = "dummy 2"},
...
}
If you want to export it in various formats, you just have to build some
templates like this one for an xml output :
<?xml version="1.0" />
<infos>
$[ for _, item in ipairs(infos) do ]$
<item key="$[=item.key]$" value="$[=item.value]$" />
$[ end $]
</infos>
If you load this file with :
mix.loadfile("template.xml", "$[", "$]")
The xml file with all data will be printed on stdout. If you prefer to save
it elsewhere, there is no problems, just give an output function to mixlua
and it will be ok :
function output(str) io.stderr:write(str) end)
mix.loadfile("template.xml", "$[", "]$", nil, "ouput")
You can see Mixlua as something like the PHP preprocessor but in more
powerfull.
* Usage:
------
Mixlua expose only two function loadstring and loadfile. They work exactly
the same way, except for the first parameter who is a filename for loadfile
and a string for loadfile.
The next two parameters are two string who represent the tag used to surround
block of lua code embeded in the data, they must be given and must not be
empty.
The parameter four is a string who mark an expression statement instead of a
code statement. More on this a below. The default value is "=".
And the last parameter is the name of the output function, by default
"io.write". (this must be the name of the function, not the function itself
cause Mixlua is just a preprocessor who do texte transformation)
When processed throught Mixlua, all data section are transformed into string
and given as the argument to the output function. Lua code are kept untouched
and lua expression are also given to the output function but untouched.
So, for example the example given before will be translated to :
io.write('<?xml version="1.0" />\
<infos>\
') for _, item in ipairs(infos) do io.write('\
<item key="')io.write(item.key)io.write('" value="')io.write(item.value)io.write('" />\
') end io.write('\
</infos>')
And this is passed to the Lua compiler to produce a chunk of compiled code.
The execution of this chunk will produce the output file.
In the preprocess, Mixlua escape data in a way that the line numbers are
kept unchanged so syntax error are reported correctly. And in the Lua
blocks, all string and comment for are skipped correctly so they can embed
the delimiter without any risk to corrupt the output.
* Real case example:
------------------
For example the luapage loading of Cgilua by the Kepler Project can be donne
easily using :
mix.loadfile("filename", "<?lua", "?>", "=")
With the advantage that the "?>" closing tag can now appear in a lua string or
comment.
Another advantage is that after loading the page is now a complied lua chunk
that can be executed in different environement and so producing different
pages depending on the request.
This allow to implement easily a caching of the templates.

About

A preprocessor for files including embedded Lua code

Resources

Stars

5 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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 - LuaDist/mixlua: A preprocessor for files including embedded Lua code · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Repository files navigation

README for Mixlua
* What is Mixlua?
---------------
Mixlua is a library for Lua 5.1 who provide an onload preprocessor for lua
files and allow mixing of Lua code with other data.
It provide loadstring and loadfile function similar to Lua ones but with
aditional argument for specifing how the data element are recognized and
handled, and produce a regular lua compiled chunk with additional material
for handleing the data.
* Example of use:
---------------
Imagine an application who have a table like this one :
infos = {
{key = "foo", value = "dummy 1"},
{key = "bar", value = "dummy 2"},
...
}
If you want to export it in various formats, you just have to build some
templates like this one for an xml output :
<?xml version="1.0" />
<infos>
$[ for _, item in ipairs(infos) do ]$
<item key="$[=item.key]$" value="$[=item.value]$" />
$[ end $]
</infos>
If you load this file with :
mix.loadfile("template.xml", "$[", "$]")
The xml file with all data will be printed on stdout. If you prefer to save
it elsewhere, there is no problems, just give an output function to mixlua
and it will be ok :
function output(str) io.stderr:write(str) end)
mix.loadfile("template.xml", "$[", "]$", nil, "ouput")
You can see Mixlua as something like the PHP preprocessor but in more
powerfull.
* Usage:
------
Mixlua expose only two function loadstring and loadfile. They work exactly
the same way, except for the first parameter who is a filename for loadfile
and a string for loadfile.
The next two parameters are two string who represent the tag used to surround
block of lua code embeded in the data, they must be given and must not be
empty.
The parameter four is a string who mark an expression statement instead of a
code statement. More on this a below. The default value is "=".
And the last parameter is the name of the output function, by default
"io.write". (this must be the name of the function, not the function itself
cause Mixlua is just a preprocessor who do texte transformation)
When processed throught Mixlua, all data section are transformed into string
and given as the argument to the output function. Lua code are kept untouched
and lua expression are also given to the output function but untouched.
So, for example the example given before will be translated to :
io.write('<?xml version="1.0" />\
<infos>\
') for _, item in ipairs(infos) do io.write('\
<item key="')io.write(item.key)io.write('" value="')io.write(item.value)io.write('" />\
') end io.write('\
</infos>')
And this is passed to the Lua compiler to produce a chunk of compiled code.
The execution of this chunk will produce the output file.
In the preprocess, Mixlua escape data in a way that the line numbers are
kept unchanged so syntax error are reported correctly. And in the Lua
blocks, all string and comment for are skipped correctly so they can embed
the delimiter without any risk to corrupt the output.
* Real case example:
------------------
For example the luapage loading of Cgilua by the Kepler Project can be donne
easily using :
mix.loadfile("filename", "<?lua", "?>", "=")
With the advantage that the "?>" closing tag can now appear in a lua string or
comment.
Another advantage is that after loading the page is now a complied lua chunk
that can be executed in different environement and so producing different
pages depending on the request.
This allow to implement easily a caching of the templates.

About

A preprocessor for files including embedded Lua code

Resources

Stars

5 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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 - LuaDist/mixlua: A preprocessor for files including embedded Lua code · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Repository files navigation

README for Mixlua
* What is Mixlua?
---------------
Mixlua is a library for Lua 5.1 who provide an onload preprocessor for lua
files and allow mixing of Lua code with other data.
It provide loadstring and loadfile function similar to Lua ones but with
aditional argument for specifing how the data element are recognized and
handled, and produce a regular lua compiled chunk with additional material
for handleing the data.
* Example of use:
---------------
Imagine an application who have a table like this one :
infos = {
{key = "foo", value = "dummy 1"},
{key = "bar", value = "dummy 2"},
...
}
If you want to export it in various formats, you just have to build some
templates like this one for an xml output :
<?xml version="1.0" />
<infos>
$[ for _, item in ipairs(infos) do ]$
<item key="$[=item.key]$" value="$[=item.value]$" />
$[ end $]
</infos>
If you load this file with :
mix.loadfile("template.xml", "$[", "$]")
The xml file with all data will be printed on stdout. If you prefer to save
it elsewhere, there is no problems, just give an output function to mixlua
and it will be ok :
function output(str) io.stderr:write(str) end)
mix.loadfile("template.xml", "$[", "]$", nil, "ouput")
You can see Mixlua as something like the PHP preprocessor but in more
powerfull.
* Usage:
------
Mixlua expose only two function loadstring and loadfile. They work exactly
the same way, except for the first parameter who is a filename for loadfile
and a string for loadfile.
The next two parameters are two string who represent the tag used to surround
block of lua code embeded in the data, they must be given and must not be
empty.
The parameter four is a string who mark an expression statement instead of a
code statement. More on this a below. The default value is "=".
And the last parameter is the name of the output function, by default
"io.write". (this must be the name of the function, not the function itself
cause Mixlua is just a preprocessor who do texte transformation)
When processed throught Mixlua, all data section are transformed into string
and given as the argument to the output function. Lua code are kept untouched
and lua expression are also given to the output function but untouched.
So, for example the example given before will be translated to :
io.write('<?xml version="1.0" />\
<infos>\
') for _, item in ipairs(infos) do io.write('\
<item key="')io.write(item.key)io.write('" value="')io.write(item.value)io.write('" />\
') end io.write('\
</infos>')
And this is passed to the Lua compiler to produce a chunk of compiled code.
The execution of this chunk will produce the output file.
In the preprocess, Mixlua escape data in a way that the line numbers are
kept unchanged so syntax error are reported correctly. And in the Lua
blocks, all string and comment for are skipped correctly so they can embed
the delimiter without any risk to corrupt the output.
* Real case example:
------------------
For example the luapage loading of Cgilua by the Kepler Project can be donne
easily using :
mix.loadfile("filename", "<?lua", "?>", "=")
With the advantage that the "?>" closing tag can now appear in a lua string or
comment.
Another advantage is that after loading the page is now a complied lua chunk
that can be executed in different environement and so producing different
pages depending on the request.
This allow to implement easily a caching of the templates.

About

A preprocessor for files including embedded Lua code

Resources

Stars

5 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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 - LuaDist/mixlua: A preprocessor for files including embedded Lua code · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Repository files navigation

README for Mixlua
* What is Mixlua?
---------------
Mixlua is a library for Lua 5.1 who provide an onload preprocessor for lua
files and allow mixing of Lua code with other data.
It provide loadstring and loadfile function similar to Lua ones but with
aditional argument for specifing how the data element are recognized and
handled, and produce a regular lua compiled chunk with additional material
for handleing the data.
* Example of use:
---------------
Imagine an application who have a table like this one :
infos = {
{key = "foo", value = "dummy 1"},
{key = "bar", value = "dummy 2"},
...
}
If you want to export it in various formats, you just have to build some
templates like this one for an xml output :
<?xml version="1.0" />
<infos>
$[ for _, item in ipairs(infos) do ]$
<item key="$[=item.key]$" value="$[=item.value]$" />
$[ end $]
</infos>
If you load this file with :
mix.loadfile("template.xml", "$[", "$]")
The xml file with all data will be printed on stdout. If you prefer to save
it elsewhere, there is no problems, just give an output function to mixlua
and it will be ok :
function output(str) io.stderr:write(str) end)
mix.loadfile("template.xml", "$[", "]$", nil, "ouput")
You can see Mixlua as something like the PHP preprocessor but in more
powerfull.
* Usage:
------
Mixlua expose only two function loadstring and loadfile. They work exactly
the same way, except for the first parameter who is a filename for loadfile
and a string for loadfile.
The next two parameters are two string who represent the tag used to surround
block of lua code embeded in the data, they must be given and must not be
empty.
The parameter four is a string who mark an expression statement instead of a
code statement. More on this a below. The default value is "=".
And the last parameter is the name of the output function, by default
"io.write". (this must be the name of the function, not the function itself
cause Mixlua is just a preprocessor who do texte transformation)
When processed throught Mixlua, all data section are transformed into string
and given as the argument to the output function. Lua code are kept untouched
and lua expression are also given to the output function but untouched.
So, for example the example given before will be translated to :
io.write('<?xml version="1.0" />\
<infos>\
') for _, item in ipairs(infos) do io.write('\
<item key="')io.write(item.key)io.write('" value="')io.write(item.value)io.write('" />\
') end io.write('\
</infos>')
And this is passed to the Lua compiler to produce a chunk of compiled code.
The execution of this chunk will produce the output file.
In the preprocess, Mixlua escape data in a way that the line numbers are
kept unchanged so syntax error are reported correctly. And in the Lua
blocks, all string and comment for are skipped correctly so they can embed
the delimiter without any risk to corrupt the output.
* Real case example:
------------------
For example the luapage loading of Cgilua by the Kepler Project can be donne
easily using :
mix.loadfile("filename", "<?lua", "?>", "=")
With the advantage that the "?>" closing tag can now appear in a lua string or
comment.
Another advantage is that after loading the page is now a complied lua chunk
that can be executed in different environement and so producing different
pages depending on the request.
This allow to implement easily a caching of the templates.

About

A preprocessor for files including embedded Lua code

Resources

Stars

5 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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 - LuaDist/mixlua: A preprocessor for files including embedded Lua code · GitHub
Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Repository files navigation

README for Mixlua
* What is Mixlua?
---------------
Mixlua is a library for Lua 5.1 who provide an onload preprocessor for lua
files and allow mixing of Lua code with other data.
It provide loadstring and loadfile function similar to Lua ones but with
aditional argument for specifing how the data element are recognized and
handled, and produce a regular lua compiled chunk with additional material
for handleing the data.
* Example of use:
---------------
Imagine an application who have a table like this one :
infos = {
{key = "foo", value = "dummy 1"},
{key = "bar", value = "dummy 2"},
...
}
If you want to export it in various formats, you just have to build some
templates like this one for an xml output :
<?xml version="1.0" />
<infos>
$[ for _, item in ipairs(infos) do ]$
<item key="$[=item.key]$" value="$[=item.value]$" />
$[ end $]
</infos>
If you load this file with :
mix.loadfile("template.xml", "$[", "$]")
The xml file with all data will be printed on stdout. If you prefer to save
it elsewhere, there is no problems, just give an output function to mixlua
and it will be ok :
function output(str) io.stderr:write(str) end)
mix.loadfile("template.xml", "$[", "]$", nil, "ouput")
You can see Mixlua as something like the PHP preprocessor but in more
powerfull.
* Usage:
------
Mixlua expose only two function loadstring and loadfile. They work exactly
the same way, except for the first parameter who is a filename for loadfile
and a string for loadfile.
The next two parameters are two string who represent the tag used to surround
block of lua code embeded in the data, they must be given and must not be
empty.
The parameter four is a string who mark an expression statement instead of a
code statement. More on this a below. The default value is "=".
And the last parameter is the name of the output function, by default
"io.write". (this must be the name of the function, not the function itself
cause Mixlua is just a preprocessor who do texte transformation)
When processed throught Mixlua, all data section are transformed into string
and given as the argument to the output function. Lua code are kept untouched
and lua expression are also given to the output function but untouched.
So, for example the example given before will be translated to :
io.write('<?xml version="1.0" />\
<infos>\
') for _, item in ipairs(infos) do io.write('\
<item key="')io.write(item.key)io.write('" value="')io.write(item.value)io.write('" />\
') end io.write('\
</infos>')
And this is passed to the Lua compiler to produce a chunk of compiled code.
The execution of this chunk will produce the output file.
In the preprocess, Mixlua escape data in a way that the line numbers are
kept unchanged so syntax error are reported correctly. And in the Lua
blocks, all string and comment for are skipped correctly so they can embed
the delimiter without any risk to corrupt the output.
* Real case example:
------------------
For example the luapage loading of Cgilua by the Kepler Project can be donne
easily using :
mix.loadfile("filename", "<?lua", "?>", "=")
With the advantage that the "?>" closing tag can now appear in a lua string or
comment.
Another advantage is that after loading the page is now a complied lua chunk
that can be executed in different environement and so producing different
pages depending on the request.
This allow to implement easily a caching of the templates.

About

A preprocessor for files including embedded Lua code

Resources

Stars

5 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages