వికీపీడియా:Lua: కూర్పుల మధ్య తేడాలు

వికీపీడియా నుండి
Jump to navigation Jump to search
పంక్తి 62: పంక్తి 62:
Transcluded Wikipedia headers frequently contain a hidden code such as "UNIQ5ae8f2aa414ff233-h-3--QINU" which may need to be stripped out in order for them to be parsed effectively.
Transcluded Wikipedia headers frequently contain a hidden code such as "UNIQ5ae8f2aa414ff233-h-3--QINU" which may need to be stripped out in order for them to be parsed effectively.


Wikilinks of the type '''<nowiki>[[Wikipedia:Help|]]</nowiki>''' won't work if returned as output - they need to be written explicitly as '''<nowiki>[[Wikipedia:Help|Help]]</nowiki>'''
Wikilinks of the type '''<nowiki>[[Wikipedia:Help|]]</nowiki>''' won't work if returned as output - they need to be written explicitly as '''<nowiki>[[Wikipedia:Help|Help]]</nowiki>'''. Other pre-save transforms, such as replacing <code>~~<nowiki/>~~</code> with signatures, will also fail to be processed. Template transclusions, parser function calls, and variable substitutions (i.e. anything with a <code><nowiki>{{...}}</nowiki></code>) will not be processed, nor will tags such as {{tag|ref|o}} or {{tag|nowiki|o}}. [[User:Anomie|Anomie]][[User talk:Anomie|⚔]] 12:06, 12 March 2013 (UTC)


== Labeling converted templates ==
== Labeling converted templates ==

12:06, 12 మార్చి 2013 నాటి కూర్పు

 WP:Lua
Project
 WT:Lua
Project talk
 Modules
 
 Help
 
 To do
 
 Requests
 
 Resources
en: m: mw: external
 

మూస:Info page

వికీపీడియా డేటా స్ట్రక్చర్
సబ్జెక్టు పేరుబరులు చర్చ పేరుబరులు
0 (ప్రధాన/వ్యాసం) చర్చ 1
2 వాడుకరి వాడుకరి చర్చ 3
4 వికీపీడియా వికీపీడియా చర్చ 5
6 దస్త్రం దస్త్రంపై చర్చ 7
8 మీడియావికీ మీడియావికీ చర్చ 9
10 మూస మూస చర్చ 11
12 సహాయం సహాయం చర్చ 13
14 వర్గం వర్గం చర్చ 15
100 వేదిక వేదిక చర్చ 101
118 [[వికీపీడియా:డ్రాఫ్టులు|]] 119
710 TimedText TimedText talk 711
828 మాడ్యూల్ మాడ్యూల్ చర్చ 829
రద్దైనవి
2300 [[వికీపీడియా:గాడ్జెట్|]] 2301
2302 [[వికీపీడియా:గాడ్జెట్|]] 2303
-1 ప్రత్యేక
-2 మీడియా

Lua is a programming language that is now available, via the Scribunto MediaWiki extension, on the English Wikipedia. Lua code can now be embedded into wiki templates by employing the "{{#invoke:}}" functionality of the Scribunto MediaWiki extension.

The Lua source code is stored in pages called modules (e.g., Module:Bananas). These individual modules are then invoked (by "{{#invoke:}}") on template pages (e.g., Module:Bananas/doc uses the code {{#invoke:Bananas|hello}} to print the text "Hello, world!").

Example modules

Request a script

Visit Wikipedia:Lua requests to request help in writing a Lua script to perform a specific task on Wikipedia or another Wikimedia Foundation project.

History

Sordid history. {{qif}}, ParserFunctions, Lua extension, wiki scripting language debated (JavaScript v. Lua), mw:Extension:WikiScripts, Tim writes Scribunto with initial support for Lua.

Discussed for years, Lua was installed in 2012 for testing on test2.wikipedia.org, with open invitation to all editors to experiment with developing Lua modules. Lua was installed on the English Wikipedia in February 2013, after testing on mediawiki.org and Wikimedia test wikis.

About Lua

Brad Jorsch’s short presentation for a basic example of how to convert a wikitext template into a Lua module.

Lua is a scripting language which can be used to analyze data, calculate expressions, and format results using functions or object-oriented programming. Although some Lua script can be kept simple, for easy understanding, Lua allows complex structures which would challenge a computer scientist, with tables, dynamic functions, and associative arrays where index subscripts can be words as well as index numbers. Lua also supports recursion of re-nested functions or allows coroutines for cooperative multitasking, so care should be taken to avoid excessive complexity where other users would not understand how to maintain a Lua module. The following is an example of Lua source code for a factorial function:

  function factorial(n)
    if n == 0 then
      return 1 --this returns the result 1 when passed zero
    else
      return n * factorial(n - 1)
    end
  end
  for index = 1,5 do
      print(index, "n! = ", factorial(index) )
  end

A sample of Lua is highlighted by tag "<source lang="lua">...</source>" placed around the Lua source code. To view some more complex examples of Lua, see article: "Lua (programming language)".

For instructions on how to use Lua within MediaWiki, see mw:Extension:Scribunto/Lua reference manual.

Unit testing

A unit testing framework for Lua scripts on Wikipedia is available at Module:UnitTests. It allows you to execute your script on a given set of inputs and verify that the expected outputs are produced. Unit tests are especially useful for rapidly detecting regressions, where modifications to a script introduce new problems.

By convention, unit tests for a module like Module:Bananas are placed in Module:Bananas/tests, and are executed on Module talk:Bananas/tests with e.g. {{#invoke: Bananas/tests | run_tests}}. Test methods must begin with "test". A simple example from Module:Bananas/tests is below.

-- Unit tests for [[Module:Bananas]]. Click talk page to run tests.
local p = require('Module:UnitTests')
 
function p:test_hello()
    self:preprocess_equals('{{#invoke:Bananas | hello}}', 'Hello, world!')
end
 
return p

For a list of all modules using unit tests, see Special:Whatlinkshere/Module:UnitTests.

Wikipedia-specific features

Overall: Lua can only get input as text strings passed to the {{#invoke:}} and what can be fetched via frame:expandTemplate, frame:preprocess, and the like. Lua on Wikipedia can only output wikitext not including pre-save transforms or transclusions and other {{...}} constructs. Also, all Lua in the page is limited to 10 seconds CPU time (you can look in the source code of a rendered page to see how long a template or module took to parse). And relative to standard Lua, Scribunto's Lua lacks all sorts of functions (see mw:Extension:Scribunto/Lua reference manual#Differences from standard Lua).

Lua input limitations

Lua code in Scribunto is only run when the page is being parsed. Therefore, the only user input that Lua can receive is by page editing - it cannot create a box that calculates the square root of a number you type in, or recalculate a piece of the Mandelbrot set depending on which part of the parent set you click on. The input Lua can receive includes any transcludeable text page on Wikipedia. This does not include graphics files (not even .SVG files, although they are actually text, unless you cut and paste it onto a Wiki text page), the list of pages listed in a category, nor the contents of Special: pages.

Wikitext

Transcluded Wikipedia headers frequently contain a hidden code such as "UNIQ5ae8f2aa414ff233-h-3--QINU" which may need to be stripped out in order for them to be parsed effectively.

Wikilinks of the type [[Wikipedia:Help|]] won't work if returned as output - they need to be written explicitly as [[Wikipedia:Help|Help]]. Other pre-save transforms, such as replacing ~~~~ with signatures, will also fail to be processed. Template transclusions, parser function calls, and variable substitutions (i.e. anything with a {{...}}) will not be processed, nor will tags such as ‎<ref> or ‎<nowiki>. Anomie 12:06, 12 March 2013 (UTC)

Labeling converted templates

Please place {{Lua talk}} template to all templates, that use Lua. It will help to better communicate Lua usage and template conversions. It looks like this:

See also

English Wikipedia-specific resources