모듈:이스케이프/닥

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()

이스케이프: text()
이 함수는 하나의 인수(문자열)만 사용합니다.excape:char()로 설정된 시퀀스 앞에 있는 이 문자열의 모든 문자는 excape:undo()로 다시 변환할 수 있는 자리 표시자로 대체됩니다.

이스케이프: scape()

이스케이프: scape()
다음 두 가지 인수를 사용합니다.
  1. 이스케이프:text()로 설정된 플레이스 홀더를 포함할 수 있는 문자열
  2. 선택적으로 이스케이프 해제된 문자 앞에 배치되는 문자입니다.(즉, 문자열을 다른 문자로 재연결해야 하는 경우)

이스케이프: kill()

이스케이프: kill()
이는 기본적으로 escape:text()에 의해 반환된 문자열로 string.gsub()을 호출하고 그 결과를 escape:undo()에 한 번에 공급하는 것과 동일합니다.다음 3가지 인수를 사용합니다.
  1. 스트링
  2. 해당 문자열에서 삭제되는 일련의 문자.(string.gsub 패턴을 사용할 수 있습니다)
  3. 선택적으로 이스케이프 해제된 문자 앞에 배치되는 문자입니다.

이스케이프: char()

이스케이프: char()
이 함수의 주요 용도는 패턴을 초기화하여 문자열을 스캔하여 이스케이프/에스케이프 시퀀스를 검색하는 것입니다.첫 번째 인수는 이스케이프 문자이고 두 번째 인수는 인수 테이블(옵션)입니다.디폴트로는 이 모듈은 Escape를 실행합니다.\char. 탈출하기 위해{char 대신, 당신은 할 수 있습니다.require('Module:Escape'):char('{')(또는esc:char('{')(이 모듈에서 반환된 테이블을 로컬 변수에 저장했다고 가정합니다.esc).

두 번째 인수를 지정하지 않고 호출하면 char()는 함수를 포함하는 테이블을 반환합니다.이를 통해 예를 들어,escape:char('*'):kill('1*23', '%d')'2'가 반환됩니다.

대부분의 경우 설정할 이유가 거의 없습니다. mode=템플릿 공간에 저장되는 패턴은 이 모듈의 다른 호출과 공유되지 않으므로 템플릿 공간에 저장됩니다.대신 템플릿은 char=새로운 이스케이프 시퀀스가 필요한 경우.

바로 가기(완전 구현되지 않음)

{key = value} 쌍을 포함하는 테이블인 두 번째 인수가 제공된 경우 키는 다음과 같습니다.text,undo, 또는kill값은 이러한 함수에 전달되었을 인수를 포함하는 테이블입니다.예를들면,escape:char('\\', {text = 'string'})와 동등하다escape:char('\\'):text('string').

현재 여러 키와 값의 페어가 지정되어 있는 경우 실행할 수 있는 것은 1개뿐입니다.그것은 계획되어 있었다escape:char('\\', {text = 'string', undo = '='})의 줄임말일 수 있습니다.

temp=cars:charswring\':textswring') 이스케이프:scape(scape, '=')

계획된 구현에서는 텍스트 함수가 먼저 호출되고 다음으로 실행 취소 또는 실행 중지됩니다(테이블에 실행 취소와 실행이 모두 포함된 경우 실행 중지는 무시됩니다).

주의사항

  • 다중 문자 이스케이프 시퀀스를 사용하는 경우 이 모듈에서는 첫 번째 문자의 바이트 값만 사용하여 이스케이프 시퀀스를 마킹합니다.따라서 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.02178


템플릿에서 다음 행을 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('모듈:탈출')
test = '테스트, \\test, \{,test\\\\\\\\\\\\'

test2 = excape: charsel{'): 텍스트(테스트)
=테스트2

test, \test, \7b 044 7btest\\\\\

test3 = excape: charsec\\': text(test2)
=테스트3

테스트, 5c 0116 5cest, 5c 055 5cb 044 7btest 5c 092 5c 5c 092 5c 5c 092 5c 5c 092 5c 092 5c 5c

test4 = escape: charsel{ , {scape = test3}
=테스트4

테스트, 5c 0116 5cest, 5c 055 5cb 044 7btest 5c 092 5c 5c 092 5c 5c 092 5c 5c 092 5c 092 5c 5c

test4 = escape: charfaces\\ , {test3}
=테스트4

테스트, 테스트, 7b 044 7btest\ \ \ \

test5 = escape: charsel{ , {scape = test4}
= test5 == 테스트

진실의

= 설치: 설치(테스트--char가 현재 세션에서 아직 '{'로 설정되어 있기 때문에 동작하지 않습니다.
테스트, 5c 0116 5cest, 5c 055 5cb 044 7btest 5c 092 5c 5c 092 5c 5c 092 5c 5c 092 5c 092 5c 5c

= 설치: 설치(테스트
test, \test, \,test\\\\\

= 파일: charget\\': 파일(테스트3)
테스트, 테스트, 7b 044 7btest\ \ \ \

= 파일: charsu{}, {filename = excape: charsu\':filename(test3)}
테스트, 테스트, {,test\\\\

= test == escape:charsec{, {scape = escape:charsec\\':test(test3)}
거짓의

= test == escape:charcap{, {test = escape:charcape\\'):scape(test3, '\\')}
진실의

local t =
' test { test { test , \ \ \ \ \ { , test \ \ \ \ \ \ \ \ \ \ \ \ \ \ test
{ test , \ { \ \ \ \ \ \ \ 」= test { test , \ { \ , test \ \ \ \ \

로컬 e = 필수('모듈:이스케이프')
로컬 t2
= 이스케이프:text(t)
local t3 = string.gsub
(t2, '{',)'
로컬 t4 =
이스케이프:scape(t3
)=t4
테스트 {test, test \

로컬 tk0 = 이스케이프: kill(t, '{')=tk0 ==
t4

true