모듈 토크:델링크
Module talk네스트된 링크 최적화
안녕하세요.
1페이지에서 여러 번(수백 회) 사용하는 경우, 이 delink 조작은, 특히 delink의 텍스트가 짧지 않은 경우는, 꽤 길어집니다(수초).lua 운영의 10s 제한을 피하기 위해 프랑스어 위키피디아에 최적화하려고 노력했습니다.내 새 버전은 끈 길이에 따라 4배에서 10배 더 빨리 꿰매진다.
수정사항입니다.주요 효과는 네스트 브래킷을 처리하는 방식에서 비롯된다고 생각합니다.
평가, 비판, 이용은 자유롭게 해 주세요.
Zebulon84 (토크) 2014년 4월 17일 09:07 (UTC)
- 정말 멋진 속임수네요!제가 만든 문자별 연결 난장판보다는 확실히 낫습니다.가능하면 mw.ustring 라이브러리가 아닌 Lua string 라이브러리를 사용하여 성능을 더욱 높일 수 있습니다.mw.ustring을 사용하면 항상 Lua와 PHP를 왔다 갔다 해야 하는 단점이 있기 때문에 성능이 상당히 저하됩니다.또한, 당신의 버전은 인터위키 링크에 대해 다소 퇴보적인 면이 있지만, 그것은 충분히 쉽게 수정될 것입니다.개선할 수 있는지 알아보겠습니다.베스트 — Stradivarius님♪ talk ♪ 2014년 4월 17일 (UTC)
- mw.ustring에서 심플한 함수를 호출하는 것도 문자열에서 같은 함수를 호출하는 것보다 10배 정도 느리다는 것을 알게 되었습니다만, 리스크 없이 대체할 수 있는 것은 무엇인지 알 수 없기 때문에, 같은 함수를 100만 번 실행할 수 있기 때문에, mw.ustring을 기억하고 있습니다.
- 퇴행상을 알고 싶어요.Mediawiki가 같은 결과를 제공하지 않았다는 것을 알았을 때를 제외하고, 나는 같은 결과를 깊게 하려고 노력했다.화면과 같은 텍스트(괄호가 있어도)를 사용하는 것이 목표였습니다.
- Zebulon84 (토크) 2014년 4월 17일 19:56 (UTC)
- 테스트 케이스에서 회귀를 확인할 수 있습니다(모듈 토크:델링크/테스트 케이스)단, 모든 테스트가 메인 모듈에 합격하는 것은 아니기 때문에 주의해 주십시오.언제 mw.ustring 라이브러리 대신 string 라이브러리를 사용할 것인가에 대해서는 2월에 Anomie로부터 매우 도움이 되는 답변을 받았습니다.이 답변은 저에게 있어서 매우 명확해졌습니다.기본적으로 ASCII 텍스트만 찾는다면 Lua 문자열 라이브러리 기능을 사용해도 됩니다.또한, 더 빠르게 할 수 있는 또 다른 방법은 가능한 한 패턴을 고정시키는 것입니다.예를 들어 델링크 내부패턴 '%[%[-%]%]'의 gsub를 실행하고 있는 Wikilink 함수입니다.이 경우 끝 2개의 괄호가 문자열 끝에 있는 것을 알 수 있지만 Lua는 이를 모르기 때문에 시작 괄호와 끝 괄호 양쪽의 가능한 위치를 모두 체크하여 일치 여부를 확인합니다.스트링을 '%[%][-%]%]$와 같이 고정하면 Lua는 시작 괄호의 가능한 모든 위치만 체크하면 되기 때문에 훨씬 빠릅니다.각 부품을 처리하기 전에 Wikilink를 여러 파트의 표로 분할하여 작업을 효율화할 수 있는지 궁금합니다만, 그 계획은 아직 초기 단계입니다.결과가 나오면 여기로 다시 보고할게요.- Stradivarius님♪ talk ♪ 2014년 4월 18일 12:11 (UTC)]
- 모든 세부사항 감사합니다.
- "문자열 라이브러리 기능 사용" 수정사항을 적용했습니다.저도 홑따옴표가 더 좋아서 이 부분도 맡았어요.
- 결과를 개선하기 위해 유닛 테스트를 분석했습니다.Wiki가 링크를 어떻게 디코딩하는지 알게 되었고, 이 모든 것이 옳았습니다.
- sanitizing에 관한 질문 하나만 하겠습니다.로컬 함수는 테이블 내의 함수보다 빠릅니다.그럼 왜 모든 기능을 반환된 기능의 일부로 선언하는 거죠?
p테이블?이름이 밑줄로 시작하는 것은 이 모듈 이외에서는 사용할 수 없음을 나타냅니다. - Zebulon84 (토크) 2014년 4월 25일 (UTC) (
- 테스트 케이스에서 회귀를 확인할 수 있습니다(모듈 토크:델링크/테스트 케이스)단, 모든 테스트가 메인 모듈에 합격하는 것은 아니기 때문에 주의해 주십시오.언제 mw.ustring 라이브러리 대신 string 라이브러리를 사용할 것인가에 대해서는 2월에 Anomie로부터 매우 도움이 되는 답변을 받았습니다.이 답변은 저에게 있어서 매우 명확해졌습니다.기본적으로 ASCII 텍스트만 찾는다면 Lua 문자열 라이브러리 기능을 사용해도 됩니다.또한, 더 빠르게 할 수 있는 또 다른 방법은 가능한 한 패턴을 고정시키는 것입니다.예를 들어 델링크 내부패턴 '%[%[-%]%]'의 gsub를 실행하고 있는 Wikilink 함수입니다.이 경우 끝 2개의 괄호가 문자열 끝에 있는 것을 알 수 있지만 Lua는 이를 모르기 때문에 시작 괄호와 끝 괄호 양쪽의 가능한 위치를 모두 체크하여 일치 여부를 확인합니다.스트링을 '%[%][-%]%]$와 같이 고정하면 Lua는 시작 괄호의 가능한 모든 위치만 체크하면 되기 때문에 훨씬 빠릅니다.각 부품을 처리하기 전에 Wikilink를 여러 파트의 표로 분할하여 작업을 효율화할 수 있는지 궁금합니다만, 그 계획은 아직 초기 단계입니다.결과가 나오면 여기로 다시 보고할게요.- Stradivarius님♪ talk ♪ 2014년 4월 18일 12:11 (UTC)]
delinkURL이 Module과 함께 사용되는 경우 "Tryed to write global s_decoded"에서 실패할 수 있습니다.No_globals(글로벌 없음)
이 편집 요청에 응답했습니다.설정 answered=또는 ans=요청을 다시 활성화하려면 매개 변수를 no로 지정합니다. |
안녕하세요. 잘못된 "편집 템플릿 보호"를 사용한 것에 대해 사과드립니다.이 모듈이 보호되지 않은 것은 알지만, 많은 페이지에서 사용되고 있기 때문에 직접 편집해야 하는지 잘 모르겠습니다.
제 제안은 다음과 같습니다.locals_decoded 변수 선언으로 이동합니다.구체적으로는:
- 오래된 것:
s_decoded = mw.text.decodes(s, true)
- 신규:
로컬 s_decoded = mw.text.decodes(s, true)
변경하지 않으면 다음 명령어를 사용하여 모듈에서 콜이 실패할 수 있습니다.require('Module:No globals').
이러한 모듈의 예로는 Module이 있습니다.HS상장건물
실패한 호출의 예는 다음과 같습니다.
{{#제외:Gnosygnu delink_test [http://a.org b]} 결과는 반환되지 않습니다.대신 다음 오류가 생성됩니다.
스크립트 오류 <!--Lua 오류:글로벌 s_decoded 쓰기를 시도했습니다.-->
다른 정보가 필요하시면 말씀하세요.감사합니다. gnosygnu 2014년 7월 19일 (UTC)
모듈을 업데이트했습니다.최신 코드를 사용하여 Delink/sandbox에 "local"을 추가했습니다.다음을 사용하여 새 결과를 테스트할 수 있습니다.
{{#제외:Gnosygnu delink_delink [http://a.org b]} "스크립트 오류" gnosygnu 23:58, 2014년 7월 19일(UTC) 대신 "b"가 반환됩니다.
Done Jackmcbarn (토크) 2014년 7월 20일 02:21 (UTC)
코드 작성 도움말
를 사용하였습니다.{{Help me}} 템플릿이지만 특정 에디터의 답변을 원했습니다.그래도 도움이 필요한 경우 대신 해당 편집자의 토크 페이지에 질문을 추가하십시오.또는 찻집이나 헬프 데스크에서 질문을 하거나 Wikipedia의 라이브 도움말에 참여하실 수 있습니다.실시간 지원을 받을 수 있는 IRC 채널입니다.즉시 액세스하려면 여기를 클릭하십시오. |
안녕하세요 위키링크를 삭제하는 데 도움이 필요해요현재 템플릿 {{delink}}은 다음과 같이 동작합니다.
{{delink [[article]]}}돌아온다article{{delink [[article display name]]}}돌아온다display name
경험이 있는 사람이 템플릿을 만들기 위한 코드를 제공할 수 있습니까? X라고 합시다. 그러면
{{X [[article]]}}돌아온다article{{X [[article display name]]돌아온다article
즉, 라벨이 아닌 Wikilink의 타깃을 취득하려면 어떻게 해야 합니까?모듈을 사용할 수 있습니다.스트링, 스트링을 조작하는 템플릿이 많이 있는 것 같은데 루아에 대해 아는 게 없어서...잘 부탁드립니다.Tran Xuan Hoa (토크) 2016년 9월 10일 23:24 (UTC)
- 당신을 도울 수 있는 사람을 찾을 수 있는지 IRC에서 확인했더니 당신에게 Stradivarius씨를 안내하라고 제안받았습니다.특정 사용자가 응답해야 한다고 표시합니다.건배! --Cameron11598(Talk) 05:26, 2016년 9월 11일 (UTC)
- @Tran Xuan Hoa: 다음을 사용할 수 있습니다.
- 위키코드:
{{#invoke:String replace {{{1 }}} %[%[ *([^%[%]{{!}}]+)[^%[%]]*%]%] %1 plain=false}} - lua :
article = article:gsub( '%[%[ *([^%[%] ]+)[^%[%]]*%]%]', '%1' )
- 위키코드:
- --Zebulon84 (대화) 2016년 9월 24일 11:46 (UTC)
- @Tran Xuan Hoa: 다음을 사용할 수 있습니다.
@Zebulon84:됐다.사실 나는 내 위키에 템플릿을 쓰고 있어.저도 같은 결과를 얻기 위해 코드를 만들 수 있었지만, 당신의 것이 더 효율적입니다.지금부터 당신의 것을 적용하겠습니다.정말 감사합니다!Tran Xuan Hoa (토크) 2016년 9월 24일 13:39 (UTC)
이 줄 바꿈은 어디서 오는 거야?
파운드 기호(#)로 시작하는 텍스트를 링크하려고 하는데 예기치 않은 결과가 나옵니다.
푸바 {{delink #SomethingNew}} 비즈바즈 {{delink Foo bar #SomethingNew}} 기대:
Foo 바 #Something New
Biz Baz Foo 바 #Something New
실제 결과:
푸바
- 새로운 기능
Biz Baz Foo 바 #Something New
첫 번째 예에서는 파운드 기호 앞에 줄 바꿈이 있습니다.첫 번째 예에서 추가 줄 바꿈은 어디에서 오는 것입니까?
텍스트에 Wikilink가 포함되어 있지 않은 것을 알고 있습니다.템플릿 파라미터의 모든 텍스트에서 Wikilink를 삭제하려고 합니다({YouTube/sandbox} 참조).유튜브/테스트 케이스#Playlist)를 사용하여 변경 전 정상적으로 동작하던 링크되지 않은 텍스트에 영향을 주지 않도록 해야 합니다.– Jonesey95 (대화) 06:39, 2020년 1월 5일 (UTC)
- 모듈은 줄 바꿈 없이 올바른 텍스트를 반환합니다.단, 모듈이 특정 문자로 시작하는 텍스트를 반환할 때 제어 밖의 무언가가 새 줄을 삽입합니다. 그리고 그 문자 중 하나입니다.
#. "템플릿 토크" 참조:Weather box #스페이스.Johnuniq (대화) 09:05, 2020년 1월 5일 (UTC)- 그 외의 예기치 않은 행은, 파서의 버그 T18700과 관련하는 경우가 많습니다.a
<nowiki/>템플릿 콜이 HTML 테이블을 반환하는 템플릿에 도움이 될 수 있습니다. Jts1882 talk 09:28, 2020년 1월 5일 (UTC)]- 이것은 예상되는 동작이며 테이블과는 전혀 관계가 없습니다.파라미터의 첫 번째 공백이 아닌 문자가 리스트 마크업 생성에 사용되는 문자 중 하나일 경우(
: ; * #그러면 목록이 시작됩니다.H:T#문제 및 해결 방법을 참조하십시오. --Redrose64 🌹 (대화) 10:02, 2020년 1월 5일 (UTC)
- 이것은 예상되는 동작이며 테이블과는 전혀 관계가 없습니다.파라미터의 첫 번째 공백이 아닌 문자가 리스트 마크업 생성에 사용되는 문자 중 하나일 경우(
- 그 외의 예기치 않은 행은, 파서의 버그 T18700과 관련하는 경우가 많습니다.a
- T14974는 이 버그입니다.Anomie⚔ 2020년 1월 5일 14:31 (UTC)
HTML 줄 바꿈 처리
이 편집 요청에 응답했습니다.설정 answered=또는 ans=요청을 다시 활성화하려면 매개 변수를 no로 지정합니다. |
안녕!
샌드박스에서 작은 변경을 했습니다.즉, HTML 줄 바꿈(<br>,<br/><br/>등)은 줄 바꿈 문자로 대체되어 일반 줄 바꿈과 동일하게 취급됩니다.
새로운 테스트 케이스를 추가했는데, 기존 테스트는 고장나지 않은 것 같습니다.
감사합니다. odg (토크) 00:25, 2020년 8월 18일 (UTC)
현재 미완료:줄바꿈이 완전히 삭제된 것 같습니다.{{delink/sandbox [http://www.example.com HTML line breaks] between<br>two [http://www.example.com links]}}→- HTML 행 구분
2개의 링크 {{delink [http://www.example.com HTML line breaks] between<br>two [http://www.example.com links]}}→- HTML 행 구분
2개의 링크 - 다시 시도하십시오.– Jonesey95 (토크) 2:52, 2020년 8월 18일 (UTC)
물음표가 있는 링크는 삭제되지 않습니다.
물음표가 있는 링크는 삭제되지 않습니다.
- 간단한 예를 참조해 주세요.
{{Delink [[Name?]]}}-> 이름? - 실제 사용 사례:
{{Delink [[What If...? (TV series) What If...?]]}}-> 만약...Gonnym (talk) 2021년 9월 29일 10:10 (UTC)
퍼포먼스 향상
/sandbox 버전을 몇 가지 변경했습니다.
- delinkLinkClass는 한 번에 1글자가 아닌 다음 '['를 검색합니다.
- 체크인 _delink는 모듈로서 '['가 존재하는지 확인합니다.Delink는 delink에 대한 링크가 없는 경우가 많다(예: 2018-19_).UEFA_Europa_League_qualifying_phase_and_play-off_round_(Main_Path)
- getDelinkedLabel 함수에서는 'colon trick' 체크가 이루어집니다.이 체크는 3바이트가 되거나 전혀 되지 않습니다.
이것은 도움이 되는 개선이라고 생각합니다.Desb42 (토크) 07:01, 2022년 4월 30일 (UTC)