모듈:탈출하다
Module| 이 모듈은 일반 사용 가능한 것으로 평가되었습니다.성숙한 형태에 이르렀고 비교적 버그가 없으며 적절한 장소에서 사용할 수 있는 것으로 생각됩니다.새로운 사용자가 학습할 수 있는 옵션으로 도움말 페이지 및 기타 위키피디아 리소스를 언급할 준비가 되어 있습니다.서버의 부하와 불량 출력을 줄이려면 시행착오를 반복하는 편집이 아니라 샌드박스 테스트를 통해 개선해야 합니다. |
사용.
이 모듈은 맞춤형으로 효율적으로 문자열을 이스케이프하는 방법으로 설계되었습니다.이스케이프 문자(또는 구) 앞에 오는 문자를 바꿈으로써 작동합니다.이 모듈을 호출하는 방법에는 다음 두 가지가 있습니다.
다른 모듈에서:
local esc = required('모듈:이스케이프') esc:char(또는 시퀀스) local to_scape = 에스케이프되지 않은 문자를 대체 또는 삭제하는 esc:text(string) 코드 = esc:sc:sc(to_scape) 템플릿에서:
{{개념:}이스케이프 메인 모드=함수 문자=문자열 텍스트} 템플릿에서 가장 유용한 기능은kill.
이 모듈은 주로 다른 모듈에서 사용하기 위한 것입니다.그러나 모든 함수는 템플릿 공간에서 호출할 수 있습니다. mode=the function you want to call그 뒤에 인수가 이어집니다.
모든 모듈 기능(즉, 모든 기능)main() 이외의 경우 콜론(:)을 사용하여 호출해야 합니다.esc:char('%')또는esc:kill{'{{example \\}}}', '}'} == '{{example }'
| 이스케이프: text() | 이 함수는 하나의 인수(문자열)만 사용합니다.excape:char()로 설정된 시퀀스 앞에 있는 이 문자열의 모든 문자는 excape:undo()로 다시 변환할 수 있는 자리 표시자로 대체됩니다. |
|---|---|
| 이스케이프: scape() | 다음 두 가지 인수를 사용합니다.
|
| 이스케이프: kill() | 이는 기본적으로 escape:text()에 의해 반환된 문자열로 string.gsub()을 호출하고 그 결과를 escape:undo()에 한 번에 공급하는 것과 동일합니다.다음 3가지 인수를 사용합니다.
|
| 이스케이프: char() | 이 함수의 주요 용도는 패턴을 초기화하여 문자열을 스캔하여 이스케이프/에스케이프 시퀀스를 검색하는 것입니다.첫 번째 인수는 이스케이프 문자이고 두 번째 인수는 인수 테이블(옵션)입니다.디폴트로는 이 모듈은 Escape를 실행합니다.\char. 탈출하기 위해{char 대신, 당신은 할 수 있습니다.require('Module:Escape'):char('{')(또는esc:char('{')(이 모듈에서 반환된 테이블을 로컬 변수에 저장했다고 가정합니다.esc).두 번째 인수를 지정하지 않고 호출하면 char()는 함수를 포함하는 테이블을 반환합니다.이를 통해 예를 들어, 대부분의 경우 설정할 이유가 거의 없습니다. 지름길{key = value} 쌍을 포함하는 테이블인 두 번째 인수가 제공된 경우 키는 다음과 같습니다.
|
주의사항
- 다중 문자 이스케이프 시퀀스를 사용하는 경우 이 모듈에서는 첫 번째 문자의 바이트 값만 사용하여 이스케이프 시퀀스를 마킹합니다.따라서 escape:undo()는 이스케이프를 해제합니다.예를 들어, 모든 문자가 e와 esc로 이스케이프됩니다(둘 다 사용됩니다.그러나 실제로는 여러 코드 언어 간에 전환하지 않는 한 여러 개의 이스케이프 시퀀스는 매우 드물기 때문에 문제가 되지 않습니다(같은 문자로 시작하는 여러 개의 이스케이프 시퀀스는 어쨌든 나쁜 관행입니다).
- 바이트 값은 숫자로 저장되므로 이스케이프 시퀀스로는 사용하지 않는 것이 좋습니다(단, 정상적으로 동작하는 경우도 있습니다).
- 반환('\r') 문자로 구분된 플레이스 홀더 바이트 값 - 거의 사용되지 않고 사실상 "\n"과 쌍을 이루지 않고 사용되지 않으므로 선택됩니다. 또한 이 값은 에 의해 생성된 마커와는 다릅니다.
<nowiki>...</nowiki>또는mw.text.nowiki()(delete char를 사용합니다).다른 구분 문자를 설정하려면 키-값 쌍을 포함합니다.{safeChr = alternate character}이스케이프를 위해 전달한 테이블: charget
스피드
다음은 벤치마크입니다.
다음 모듈 기능을 실행하는 경우:
기능. p.test_kill500(틀) 현지의 esc = 요구하다('모듈:탈출') 위해서 k = 1, 500 하다 현지의 v = esc:죽여라(p.test_string2(), '테스트') 끝. 돌아가다 os.clock(esc) 끝. 0.05262
템플릿에서 다음 행을 500회 반복하는 경우:
{{#invoke:Escape main mode=kill {{#invoke:Escape/testcases test_string2}} test}}
0.767
모든 시간은 몇 초 안에.모듈 시간 x500은 이 문서 페이지를 로드했을 때 계산되었습니다(통상은 0.02 ~0.07 ) 。템플릿 시간 x500은 2015년 1월 15일에 기록되었습니다.
예
템플릿
오리지널:
test { test } 、 \ test 、 \ { , test } 。
내부 방법을 사용하여 제거{:
{{#제외:이스케이프 메인 모드=킬 테스트 {테스트\{테스트,\{,테스트\}}test {test, test, {, test \{{replace}}를 사용하여 제거{:
{{#제외:이스케이프 메인 모드={replace {{##filename}:이스케이프 메인모드=텍스트 테스트{ test \ { test , \ { , test \ } } } }test {test, test, {, test \제거되지 않음{이스케이프/에스케이프 해제(복원되지 않음):
{{#제외:이스케이프 메인 모드={##syslog:이스케이프 메인모드=텍스트 테스트{ test \ { test , \ { , test \ } } }test {{ test, test, {, test {} 테스트이스케이프 후 원래대로 복원
{{#제외:이스케이프 메인 모드={##syslog:이스케이프 메인모드=텍스트 테스트{ test \ { test , \ { , test \ } } }test { test } 、 \ test 、 \ { , test } 。단어를 삭제합니다.test이스케이프되지 않은 경우 이전 이스케이프 문자 대신 다른 이스케이프 문자를 배치합니다(다른 용도로 사용).
참고: '%' 문자는 Lua의 특수 문자이므로 원하는 대체 문자일 경우 '%%'를 사용하십시오.그 이외의 경우는, 1 문자(또는 단어)만으로 괜찮습니다.
{{#제외:이스케이프 메인 모드=킬 테스트{ test { test } 、 \ { , test \ \ \ \ \ test % % } }{{%{, %test, %{, %% % % {}모듈
다음으로 모듈 에디터 아래의 디버깅콘솔 출력 예를 나타냅니다.
| 로컬 이스케이프 = required('모듈:탈출') test3 = excape: charsec\\': text(test2) test4 = escape: charsel{ , {scape = test3} test4 = escape: charfaces\\ , {test3} test5 = escape: charsel{ , {scape = test4} = 설치: 설치(테스트--char가 현재 세션에서 아직 '{'로 설정되어 있기 때문에 동작하지 않습니다. = 설치: 설치(테스트 = 파일: charget\\': 파일(테스트3) = 파일: charsu{}, {filename = excape: charsu\':filename(test3)} = test == escape:charsec{, {scape = escape:charsec\\':test(test3)} = test == escape:charcap{, {test = escape:charcape\\'):scape(test3, '\\')} local t = 로컬 e = 필수('모듈:이스케이프') 로컬 tk0 = 이스케이프: kill(t, '{')=tk0 == |
현지의 탈출하다 = { 차 = 기능.(자신, 크르, args) args = args 또는 {} 현지의 안전한 = args.세이프처 또는 string.char.(13) 크르 = 스트링(크르 또는 '\\') 자신[1] = ('%s0%s%s'):포맷( ('%x%s%s'):포맷(크르:바이트(), 안전한, 안전한), (%s%x'):포맷(안전한, 크르:바이트()) ) 한다면 것은 아니다. 자신[자신[1]] 그리고나서 자신[자신[1]] = { 차 = 크르, 본문 = ('%s(.)'):포맷(크르), 되돌리다 = 자신[1]:포맷'(%d+)' } 끝. 돌아가다 args.본문 그리고. 자신:본문(args.본문) 또는 args.되돌리다 그리고. 자신:되돌리다(args.되돌리다, 크르) 또는 args.죽여라 그리고. 자신:죽여라(args.죽여라) 또는 자신 끝., 이그제큐티브 = 기능.(자신, 본문, 모드, 새로운 이스케이프) 현지의 타깃 = 자신[자신[1] 또는 자신:차() 그리고. 자신[1]] 위해서 v 에 본문:발견하다(타깃[모드]) 하다 본문 = 본문:서브( 모드 == '텍스트' 그리고. (%s%s'):포맷(타깃.차, v:서브(%W', '%%%1')) 또는 자신[1]:포맷(v), 모드 == '텍스트' 그리고. 자신[1]:포맷(v:바이트()) 또는 (새로운 이스케이프 또는 '') .. v:차() ) 끝. 돌아가다 본문 끝., 본문 = 기능.(자신, 본문) 돌아가다 자신:이그제큐티브(유형(본문) == '테이블' 그리고. 본문[1] 또는 본문, '텍스트') 끝., 되돌리다 = 기능.(자신, 본문, 새로운 이스케이프) 한다면 유형(본문) == '테이블' 그리고나서 본문, 새로운 이스케이프 = 개봉하다(본문) 끝. 돌아가다 자신:이그제큐티브(본문, '실패', 새로운 이스케이프) 끝., 죽여라 = 기능.(자신, 본문, 문자, 새로운 이스케이프) 한다면 유형(본문) == '테이블' 그리고나서 본문, 문자, 새로운 이스케이프 = 개봉하다(본문) 끝. 돌아가다 자신:되돌리다(자신:본문(본문):서브(문자 또는 '', ''), 새로운 이스케이프) 끝. } 기능. 탈출하다.주된(틀) 현지의 args, 가족 = {}, {틀:부모 취득(), 틀} 위해서 f = 1, 2 하다 위해서 k, v 에 쌍들(가족[f] 그리고. 가족[f].args 또는 {}) 하다 args[k] = args[k] 또는 v:경기('^%s*(-)%s*