Această pagină este protejată de mișcare
Această pagină este protejată

Formă: Delink

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Modul care implementează șablonul {{ Deconectați }}.

De asemenea, oferă alte funcții care sunt disponibile în prezent prin {{#invoke:Delink|main|...}} .


 - [[
* Modul pentru a elimina wikilink și linkurile externe de pe wikitext.
*
* Modulul a fost importat din:
* https://en.wikipedia.org/w/index.php?title=Module:Delink&oldid=695173753
]] -

require ( „Modul: fără globali” )

local p = {}
argumente locale

funcție locală delinkReversePipeTrick ( s )
if s : match ( "^% [% [|. * [| \ n ]" ) atunci - Verificați dacă există linii noi sau mai multe conducte.
retur s
altceva
return s : match ( "% [% [| (. *)%]%]" )
Sfârșit
Sfârșit

funcție locală delinkPipeTrick ( s )
linkarea locală , afișează = "" , ""
- Trebuie să ne ocupăm de puncte, paranteze și virgule, în funcție de [[Ajutor: Truc truc]].

- Mai întâi, eliminați textul înainte de primul colon, dacă există.
dacă s : match ( ":" ) atunci
s = s : match ( "% [% [.-: (. *) |%]%]" )
- Dacă nu există două puncte, apucați tot textul în afară de parantezele pătrate și de țeavă.
altceva
s = s : potrivire ( "% [% [(. *) |%]%]" )
Sfârșit

dacă nu args [ 'link unic' ] atunci
- În continuare, paranteze și virgule.
if s : match ( "% (.-%) $" ) atunci - Parantezele depășesc virgulele.
s = s : match ( "(.-)?% (.-%) $" )
elseif s : match ( "," ) atunci - Dacă nu există paranteze, afișați doar textul înainte de prima virgulă.
s = s : match ( "(.-) ,. * $" )
Sfârșit
Sfârșit
retur s
Sfârșit

funcție locală delinkWikilink ( s )
local result = s
- Faceți față trucului invers.
dacă rezultat : potrivire ( "% [% [|" ) atunci
return delinkReversePipeTrick ( rezultat )
Sfârșit

rezultat = mw . uri . decodare ( rezultat , „PATH” ) - decodează entități codate procentual. Lăsați sublinierea și semnele plus.
rezultat = mw . text . decodare ( rezultat , adevărat ) - decodează entități HTML.

- Verificați dacă există titluri proaste. Pentru a face acest lucru, trebuie să găsim
- zona de titlu a legăturii, adică partea dinaintea oricărei conducte.
local titlearea
if result : match ( "|" ) then - Găsiți dacă avem de-a face cu un link canalizat.
titlearea = result : match ( "^% [% [(.-) |. *%]%]" )
altceva
titlearea = result : match ( "^% [% [(.-)%]%]" )
Sfârșit
- Verificați dacă există caractere rele.
dacă mw . ustring . match ( titlearea , "[% [%] <> {} %%?% c \ n ]" ) atunci
retur s
Sfârșit

- Verificați dacă există categorii, interwikis și fișiere.
local colonprefix = result : match ( "% [% [(.-) :. *%]%]" ) - Obțineți textul înainte de primul colon.
dacă colonprefix atunci
local ns = mw . site . namespaces [ colonprefix ] - vezi dacă acesta este un spațiu de nume cunoscut
dacă mw . limba . isKnownLanguageTag ( colonprefix ) sau
ns și ( ns . canonicalName == "Fișier" sau ns . canonicalName == "Categorie" ) apoi
întoarce ""
Sfârșit
Sfârșit

- Eliminați două puncte dacă linkul folosește [[Ajutor: truc pentru două puncte]].
dacă rezultat : meci ( "% [% [:" ) atunci
result = "[[" .. result : match ( "% [% [: (. *%]%])" )
Sfârșit

- Faceți legături folosind [[Help: Pipe trick]].
dacă mw . ustring . potrivire ( rezultat , „^% [% [[^ |] * |%]%]” ) atunci
returnează delinkPipeTrick ( rezultat )
Sfârșit

- Găsiți zona de afișare a wikilink-ului
if result : match ( "|" ) then - Găsiți dacă avem de-a face cu un link canalizat.
model local = "^% [% [.- | (. +)%]%]"
dacă args [ 'link unic' ] și args [ 2 ] == 'v' atunci
pattern = "^% [% [(.-) |. +%]%]"
Sfârșit
rezultat = rezultat : meci ( model )
- Eliminați liniile noi de pe afișajul legăturilor cu linii multiple,
- unde este conducta înainte de prima linie nouă.
result = result : gsub ( " \ n " , "" )
altceva
result = result : match ( "^% [% [(.-)%]%]" )
Sfârșit

rezultatul returului
Sfârșit

funcție locală delinkURL ( s )
- Să presupunem că am deja dezlănțuit legăturile interioare și asta
- ni s-a trecut un text între două paranteze pătrate [foo].

- Dacă textul conține o întrerupere de linie, acesta nu este formatat ca adresă URL, indiferent de alt conținut.
dacă s : match ( " \ n " ) atunci
retur s
Sfârșit

- Verificați dacă textul are un prefix URL valid și cel puțin un caracter URL valid.
local valid_url_prefixes = { "//" , "http: //" , "https: //" , "ftp: //" , "gopher: //" , "mailto:" , "news:" , "irc: // " } 
local url_prefix
pentru i , v în ipairs ( valid_url_prefixes ) do
dacă mw . ustring . match ( s , '^% [' .. v .. '[^ "% s?]. *%]' ) atunci
url_prefix = v
pauză
Sfârșit
Sfârșit

- Obțineți text afișat
dacă nu url_prefix atunci
retur s
Sfârșit
s = s : match ( "^% [" .. url_prefix .. "(. *)%]" ) - Prindeți tot textul după prefixul URL și înaintea parantezei pătrate finale.
s = s : match ( '^ .- (["<>?]. *)' ) sau " " - Prindeți tot textul după primul caracter separator URL (" <>).
s = mw. ustring . match ( s , "^% s * (% S. *) $" ) sau "" - Dacă caracterul de separare era un spațiu, tăiați-l.
	
local s_decoded = mw . text . decodifica ( e , adevărat )
dacă mw . ustring . match ( s_decoded , "% c" ) atunci
retur s
altceva
returnează s_decodat
Sfârșit
Sfârșit

funcție locală delinkLinkClass ( s , pattern , delinkFunction )
dacă nu tastați ( e ) == "șir" atunci
error ( „Încercați să eliminați linkurile din valoarea care nu este un șir.” , 2 )
Sfârșit
dacă nu ( tip ( model ) == "șir" și mw . ustring . sub ( model , 1 , 1 ) == "^" ) atunci
error ( „S-a găsit un model nevalid. Modelele trebuie să înceapă cu„ ^ ”. ' , 2 )
Sfârșit
- Ierați peste șirul de text și înlocuiți orice text potrivit. folosind
- funcția de deconectare. Mai degrabă trebuie să repetăm ​​caracter cu caracter
- decât să folosiți doar gsub, altfel linkurile imbricate nu sunt detectate corect.
local result = ""
în timp ce s ~ = " do
dacă args [ 'link unic' ] atunci
local m = mw . ustring . meci (s, model)
dacă m atunci
m2 local = delink Funcție ( m )
dacă m ~ = m2 atunci
rezultat = mw . text . tăiere ( m2 )
pauză
Sfârșit
Sfârșit
altceva
- Înlocuiți textul folosind o iterație a gsub.
s = mw. ustring . gsub ( s , pattern , delinkFunction , 1 )
Sfârșit
- Adăugați cel mai stâng caracter la șirul de rezultate.
rezultat = rezultat .. mw . ustring . sub ( s , 1 , 1 )
s = mw. ustring . sub ( s , 2 , - 1 )
Sfârșit
rezultatul returului
Sfârșit

funcția p . _main ( frame_args )
args = frame_args
text local = args [ 1 ] sau ""
dacă arg . refs == "da" sau arg . nota == "da" atunci
- Eliminați orice [[Ajutor: marcaje de bandă]] care reprezintă etichete ref. În cele mai multe situații
- aceasta nu este o idee bună - folosiți-o doar dacă știți ce faceți!
text = mw . ustring . gsub ( text , "? UNIQ% w *% - ref% -% d *% - QINU?" , "" )
Sfârșit
dacă nu ( args . comments == "nu" sau args . comments == "nu" ) atunci
text = text : gsub ( "<!% -% -.-% -% ->" , "" ) - Eliminați comentariile html.
Sfârșit
dacă nu ( args . wikilinks == "nu" sau args . wikilink == "nu" ) atunci
text = delinkLinkClass ( text , "^% [% [.-%]%]" , delinkWikilink ) - Deconectați wikilinkurile.
Sfârșit
dacă nu ( args . urls == "nu" sau args . url == "nu" ) atunci
text = delinkLinkClass ( text , "^% [.-%]" , delinkURL ) - Deconectați adresele URL.
Sfârșit
dacă nu ( args . whitespace == "nu" sau args . space == "nu" ) atunci
- Înlocuiți liniile noi simple cu un singur spațiu, dar lăsați liniile noi duble
- și liniile noi care conțin doar spații sau file înainte de a doua linie nouă.
text = mw . ustring . gsub ( text , "([^ \ n \ t ] [ \ t ] *) \ n ([ \ t ] * [^ \ n \ t ]) " , "% 1% 2 " )
text = text : gsub ( "[ \ t ] +" , "" ) - Eliminați filele și spațiile suplimentare.
Sfârșit
returnează textul
Sfârșit

funcția p . principal ( cadru )
local getArgs = require ( 'Modul: Argumente' ). getArgs
retur p . _main ( getArgs ( cadru ))
Sfârșit

retur p