„Modul:Table row counter“ – Versionsunterschied
Erscheinungsbild
[gesichtete Version] | [gesichtete Version] |
Inhalt gelöscht Inhalt hinzugefügt
K fix |
+kopf, fuss, zeile |
||
Zeile 1: | Zeile 1: | ||
-- Original bei https://en.wikipedia.org/wiki/Module:Table_row_counter |
-- Original bei https://en.wikipedia.org/wiki/Module:Table_row_counter Parameter kopf, fuss, zeile hinzugefügt |
||
-- Verwendung: {{#invoke:table row counter|main}} |
-- Verwendung: {{#invoke:table row counter|main}} |
||
-- Zweck: zählt Zeilen einer Tabelle |
-- Zweck: zählt Zeilen einer Tabelle |
||
Zeile 35: | Zeile 35: | ||
do |
do |
||
local iWikitable = 0 |
local iWikitable = 0 |
||
if args.fuss then |
|||
⚫ | |||
args.fuss = "{{" .. args.fuss |
|||
else |
|||
args.fuss = "\n|}" |
|||
⚫ | |||
if args.kopf then |
|||
local s1 = content:match('^({{' .. args.kopf .. '.-' .. args.fuss .. ')') |
|||
else |
|||
⚫ | |||
⚫ | |||
if s1 then |
if s1 then |
||
iWikitable = iWikitable + 1 |
iWikitable = iWikitable + 1 |
||
wikitables[iWikitable] = s1 |
wikitables[iWikitable] = s1 |
||
end |
end |
||
if args.kopf then |
|||
⚫ | |||
for s in content:gmatch('({{' .. args.kopf .. '.-' .. args.fuss .. ')') do |
|||
⚫ | |||
iWikitable = iWikitable + 1 |
|||
wikitables[iWikitable] = s |
|||
end |
|||
else |
|||
⚫ | |||
⚫ | |||
wikitables[iWikitable] = s |
|||
end |
|||
end |
end |
||
end |
end |
||
Zeile 64: | Zeile 81: | ||
-- Count the number of rows. |
-- Count the number of rows. |
||
local count |
local count |
||
if args.zeile then |
|||
⚫ | |||
local temp |
do |
||
local temp |
|||
temp, count = wikitable:gsub(' |
temp, count = wikitable:gsub('{{' .. args.zeile, "") |
||
end |
|||
⚫ | |||
else |
|||
⚫ | |||
⚫ | |||
⚫ | |||
end |
|||
-- Control for missing row markers at the start. |
|||
if not wikitable:find('^{|[^\n]*%s*\n|%-') then |
|||
count = count + 1 |
count = count + 1 |
||
end |
|||
-- Control for extra row markers at the end. |
|||
if wikitable:find('\n|%-[^\n]-%s*\n|}$') then |
|||
count = count - 1 |
count = count - 1 |
||
end |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
local temp |
|||
temp, headers = wikitable:gsub('\n|%-\n!', '\n|-\n!') |
|||
end |
|||
⚫ | |||
⚫ | |||
end |
|||
count = count - (tonumber(args.ignore) or headers) |
|||
end |
end |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
if count < 0 then |
if count < 0 then |
||
count = 0 |
count = 0 |
Version vom 14. Januar 2024, 16:40 Uhr
Quelle w:Module:Table row counter, zu Parametern, siehe w:Template:Table row counter
Verwendung ohne Parameter
{{#invoke:table row counter|main}}
Beispiel mit Parameter
Column 1 | Column 2 |
---|---|
Cell 1 | Cell 2 |
Cell 3 | Cell 4 |
Cell 5 | Cell 6 |
- Code
- {{#invoke:table row counter|main|id=foo|page=Modul:Table row counter/Doku}}
- Resultat
- 3
Beispiel 2
- Code
- {{#invoke:table row counter|main|kopf=Denkmalliste Schweiz Tabellenkopf|fuss=Denkmalliste Schweiz Tabellenfuss|zeile=Denkmalliste Schweiz Tabellenzeile|page=Vorlage:Denkmalliste Schweiz Tabellenzeile/Doku}}
- Resultat
- 1
-- Original bei https://en.wikipedia.org/wiki/Module:Table_row_counter Parameter kopf, fuss, zeile hinzugefügt
-- Verwendung: {{#invoke:table row counter|main}}
-- Zweck: zählt Zeilen einer Tabelle
-- This module counts table rows in wikitext.
local p = {}
local getArgs
function p.main(frame)
if not getArgs then
getArgs = require('Modul:Arguments').getArgs
end
return p._main(getArgs(frame, {wrappers = 'Vorlage:Table row counter'}))
end
function p._main(args)
-- Get the title object.
local titleObj
do
local success
success, titleObj = pcall(mw.title.new, args.page)
if not success or not titleObj then
titleObj = mw.title.getCurrentTitle()
end
end
-- Get the page content.
local content = titleObj:getContent()
if not content then
return nil
end
-- Find the wikitables on that page.
local wikitables = {}
do
local iWikitable = 0
if args.fuss then
args.fuss = "{{" .. args.fuss
else
args.fuss = "\n|}"
end
if args.kopf then
local s1 = content:match('^({{' .. args.kopf .. '.-' .. args.fuss .. ')')
else
local s1 = content:match('^({|.-\n|})')
end
if s1 then
iWikitable = iWikitable + 1
wikitables[iWikitable] = s1
end
if args.kopf then
for s in content:gmatch('({{' .. args.kopf .. '.-' .. args.fuss .. ')') do
iWikitable = iWikitable + 1
wikitables[iWikitable] = s
end
else
for s in content:gmatch('\n({|.-\n|})') do
iWikitable = iWikitable + 1
wikitables[iWikitable] = s
end
end
end
-- Find the wikitable to work on.
local wikitable
if args.id then
for i, s in ipairs(wikitables) do
if s:match('^{|[^\n]*id *= *" *(%w+) *"') == args.id then
wikitable = s
break
end
end
else
wikitable = wikitables[tonumber(args.tableno) or 1]
end
if not wikitable then
return nil
end
-- Count the number of rows.
local count
if args.zeile then
do
local temp
temp, count = wikitable:gsub('{{' .. args.zeile, "")
end
count = count - (tonumber(args.ignore) or 0)
else
do
local temp
temp, count = wikitable:gsub('\n|%-', '\n|-')
end
-- Control for missing row markers at the start.
if not wikitable:find('^{|[^\n]*%s*\n|%-') then
count = count + 1
end
-- Control for extra row markers at the end.
if wikitable:find('\n|%-[^\n]-%s*\n|}$') then
count = count - 1
end
-- Subtract the number of rows to ignore, or the number of header
-- rows if it's empty, and make sure the result isn't below zero.
local headers
do
local temp
temp, headers = wikitable:gsub('\n|%-\n!', '\n|-\n!')
end
if not wikitable:find('^{|[^\n]*%s*\n|%-\n!') then
headers = headers + 1
end
count = count - (tonumber(args.ignore) or headers)
end
if count < 0 then
count = 0
end
return count
end
return p