diff --git a/assets/images/icons.png b/assets/images/icons.png
index 5340b31d..ee772616 100644
Binary files a/assets/images/icons.png and b/assets/images/icons.png differ
diff --git a/assets/images/icons@2x.png b/assets/images/icons@2x.png
index 814076d1..e4ec763a 100644
Binary files a/assets/images/icons@2x.png and b/assets/images/icons@2x.png differ
diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json
index b5f0aca4..0ff676c6 100644
--- a/assets/javascripts/news.json
+++ b/assets/javascripts/news.json
@@ -1,6 +1,6 @@
[
[ "2015-02-15",
- "New io.js and Yii 1.1 documentations"
+ "New io.js, Lua and Yii 1.1 documentations"
], [
"2015-02-08",
"New dark theme\nClick the icon in the bottom left corner to activate.\nFeedback welcome :)"
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index a5818880..89aeb866 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -200,6 +200,11 @@ credits = [
'2012-2015 The Dojo Foundation',
'MIT',
'https://raw.github.com/lodash/lodash/master/LICENSE.txt'
+ ], [
+ 'Lua',
+ '1994–2015 Lua.org, PUC-Rio',
+ 'MIT',
+ 'http://www.lua.org/license.html'
], [
'Marionette.js',
'2014 Muted Solutions, LLC',
diff --git a/assets/stylesheets/application-dark.css.scss b/assets/stylesheets/application-dark.css.scss
index a8a4d877..b7818aee 100644
--- a/assets/stylesheets/application-dark.css.scss
+++ b/assets/stylesheets/application-dark.css.scss
@@ -46,6 +46,7 @@
'pages/laravel',
'pages/less',
'pages/lodash',
+ 'pages/lua',
'pages/marionette',
'pages/markdown',
'pages/maxcdn',
diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss
index 9e246856..5ae93479 100644
--- a/assets/stylesheets/application.css.scss
+++ b/assets/stylesheets/application.css.scss
@@ -46,6 +46,7 @@
'pages/laravel',
'pages/less',
'pages/lodash',
+ 'pages/lua',
'pages/marionette',
'pages/markdown',
'pages/maxcdn',
diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss
index e5662b40..171fa2e4 100644
--- a/assets/stylesheets/global/_icons.scss
+++ b/assets/stylesheets/global/_icons.scss
@@ -86,3 +86,4 @@
%icon-light { background-position: 0 -14rem; }
%icon-light-white { background-position: -1rem -14rem; }
._icon-iojs:before { background-position: -2rem -14rem; }
+._icon-lua:before { background-position: -3rem -14rem; }
diff --git a/assets/stylesheets/pages/_lua.scss b/assets/stylesheets/pages/_lua.scss
new file mode 100644
index 00000000..2d8a7897
--- /dev/null
+++ b/assets/stylesheets/pages/_lua.scss
@@ -0,0 +1,10 @@
+._lua {
+ padding-left: 1rem;
+
+ h1, h2 { margin-left: -1rem; }
+ h2 { @extend %block-heading; }
+ h3 { @extend %block-label, %label-blue; }
+ h4 { font-size: inherit; }
+
+ .apii { float: right; }
+}
diff --git a/lib/docs/filters/lua/clean_html.rb b/lib/docs/filters/lua/clean_html.rb
new file mode 100644
index 00000000..d6be3d12
--- /dev/null
+++ b/lib/docs/filters/lua/clean_html.rb
@@ -0,0 +1,31 @@
+module Docs
+ class Lua
+ class CleanHtmlFilter < Filter
+ def call
+ css('hr', 'h1 img', '.footer').remove
+
+ css('[name]').each do |node|
+ node['id'] = node['name']
+ node.remove_attribute('name')
+ end
+
+ css('h1 > a[id]', 'h2 > a[id]', 'h3 > a[id]').each do |node|
+ node.parent['id'] = node['id']
+ node.before(node.children).remove
+ end
+
+ 3.times { at_css('h1[id="1"]').previous_element.remove }
+
+ css('.apii').each do |node|
+ node.parent.previous_element << node
+ end
+
+ css('pre').each do |node|
+ node.content = node.content.remove(/\A\s*\n/).rstrip.strip_heredoc
+ end
+
+ doc
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/lua/entries.rb b/lib/docs/filters/lua/entries.rb
new file mode 100644
index 00000000..502ad757
--- /dev/null
+++ b/lib/docs/filters/lua/entries.rb
@@ -0,0 +1,29 @@
+module Docs
+ class Lua
+ class EntriesFilter < Docs::EntriesFilter
+ def additional_entries
+ type = nil
+
+ doc.children.each_with_object [] do |node, entries|
+ if node.name == 'h1'
+ type = node.content.strip
+ type.remove! %r{.+\u{2013}\s+}
+ type.remove! 'The '
+ type = 'API' if type == 'Application Program Interface'
+ end
+
+ next if type && type.include?('Incompatibilities')
+ next if node.name == 'h2' && type.in?(%w(API Auxiliary\ Library Standard\ Libraries))
+
+ if node.name == 'h2' || node.name == 'h3'
+ name = node.content
+ name.remove! %r{.+\u{2013}\s+}
+ name.remove! %r{\[.+\]}
+ name.gsub! %r{\s+\(.*\)}, '()'
+ entries << [name, node['id'], type]
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/docs/scrapers/lua.rb b/lib/docs/scrapers/lua.rb
new file mode 100644
index 00000000..81ad81c5
--- /dev/null
+++ b/lib/docs/scrapers/lua.rb
@@ -0,0 +1,17 @@
+module Docs
+ class Lua < UrlScraper
+ self.type = 'lua'
+ self.version = '5.3'
+ self.base_url = 'http://www.lua.org/manual/5.3/'
+ self.root_path = 'manual.html'
+
+ html_filters.push 'lua/clean_html', 'lua/entries'
+
+ options[:skip_links] = true
+
+ options[:attribution] = <<-HTML
+ © 1994–2015 Lua.org, PUC-Rio.
+ Licensed under the MIT License.
+ HTML
+ end
+end
diff --git a/public/icons/docs/lua/16.png b/public/icons/docs/lua/16.png
new file mode 100644
index 00000000..86c695f8
Binary files /dev/null and b/public/icons/docs/lua/16.png differ
diff --git a/public/icons/docs/lua/16@2x.png b/public/icons/docs/lua/16@2x.png
new file mode 100644
index 00000000..6a2ea4db
Binary files /dev/null and b/public/icons/docs/lua/16@2x.png differ
diff --git a/public/icons/docs/lua/SOURCE b/public/icons/docs/lua/SOURCE
new file mode 100644
index 00000000..75627919
--- /dev/null
+++ b/public/icons/docs/lua/SOURCE
@@ -0,0 +1 @@
+http://lua-users.org/wiki/LuaLogo