다음을 통해 공유


확장 인수 구문 분석

EngExtCpp 확장 프레임워크는 확장에 전달된 명령줄 인수를 구문 분석하는 데 도움이 되는 메서드를 제공합니다. 이러한 메서드를 활용하려면 확장에서 먼저 EXT_COMMAND 매크로에서 명령줄 인수의 형식을 선언해야 합니다.

프레임워크에서 수행한 명령줄 인수 구문 분석을 무시하고 확장 자체에서 인수를 구문 분석하도록 하려면 명령줄 설명을 "{{custom}}" 설정하고 GetRawArgStr 메서드를 사용하여 구문 분석용 명령줄 인수를 가져옵니다.

명령줄 설명 문자열은 인쇄 시 자동으로 래핑되어 디스플레이의 열 너비에 맞습니다. 그러나 줄 바꿈 문자는 '\n'를 사용하여 설명 문자열에 포함하여 새 줄을 시작할 수 있습니다.

명령줄 설명은 NULL 또는 빈 문자열일 수 있습니다. 둘 중 하나가 발생하면 확장 명령이 인수를 사용하지 않음을 나타냅니다.

명령줄 설명

명령줄 인수에 대한 설명은 두 가지 유형의 구성 요소인 지시문과 인수를 포함하는 시퀀스입니다. 설명은 필요에 따라 각 지시문 중 하나를 포함할 수 있으며 최대 64개의 인수를 포함할 수 있습니다.

지시문

지시문은 인수를 구문 분석하는 방법을 지정합니다. 이중 중괄호('{{''}}')로 묶입니다. 각 지시문은 필요에 따라 인수를 설명하는 문자열에 0번 또는 한 번 표시할 수 있습니다.

다음 지시문을 사용할 수 있습니다.

custom
확장 프레임워크에서 수행하는 구문 분석을 해제하고 확장에서 자체 구문 분석을 수행할 수 있도록 합니다.

l:str
명령줄 인수에 대한 기본 긴 설명을 재정의합니다. 확장 프레임워크는 모든 인수에 대한 전체 설명에 str를 사용합니다.

opt:str
명명된 명령에 대한 기본 접두사 문자를 재정의합니다. 기본값은 "/-"'' 또는 '/-'를 명명된 인수를 식별하는 접두사로 사용할 수 있도록 하는 것입니다.

s:str
명령줄 인수에 대한 기본 간단한 설명을 재정의합니다. 확장 프레임워크는 모든 인수에 대한 간단한 설명에 str를 사용합니다.

다음은 지시문의 몇 가지 예입니다. 다음 문자열은 자체 인수를 구문 분석하는 확장 명령에서 사용됩니다. 또한 자동 !help 확장 명령과 함께 사용하기 위한 짧고 긴 설명을 제공합니다.

{{custom}}{{s:<arg1> <arg2>}}{{l:arg1 - Argument 1\narg2 - Argument 2}}

다음 문자열은 인수 옵션 접두사 문자를 '' 또는 '/'-로 변경합니다. 이 지시문을 사용하면 인수가 '' 및 '' 대신 '+arg:arg' 및 '/arg-arg'를 사용하여 지정됩니다.

{{opt:+:}}

Arguments

인수는 명명된 형식과 명명되지 않은 두 가지 형식일 수 있습니다. 명명되지 않은 인수는 위치적으로 읽습니다. 두 형식의 인수에는 도움말 명령에서 사용하는 표시 이름도 있습니다.

인수 설명은 단일 중괄호('{''}')로 묶습니다.

각 인수 설명에는 다음 구문이 있습니다.

{[optname];[type[,flags]];[argname];[argdesc]}

여기서

optname
인수의 이름입니다. 이름별로 인수를 가져오는 명령 및 메서드에 사용되는 이름입니다. 이 이름은 선택 사항입니다. 이 인수가 있으면 인수는 "명명된 인수"가 됩니다. 명령줄의 아무 곳에나 표시될 수 있으며 이름으로 참조됩니다. 이 인수가 없으면 인수는 "명명되지 않은 인수"가 됩니다. 명령줄의 위치는 중요하며 명명되지 않은 다른 인수를 기준으로 해당 위치에서 참조됩니다.

type
인수 형식입니다. 이는 인수를 구문 분석하는 방법 및 검색 방법에 영향을 줍니다. 형식 매개 변수는 다음 값 중 하나를 가질 수 있습니다.

b
부울 형식입니다. 인수가 있거나 존재하지 않습니다. 명명된 부울 인수는 HasArg를 사용하여 검색할 수 있습니다.

e[d][s][bits]
식 형식입니다. 인수에 숫자 값이 있습니다. 명명된 식 인수는 GetArgU64를 사용하여 검색할 수 있으며, 명명되지 않은 식 인수는 GetUnnamedArgU64를 사용하여 검색할 수 있습니다.

d
식은 인수 문자열의 다음 공백 문자로 제한됩니다. 이 값이 없으면 식 계산기는 명령줄의 문자가 식의 끝에 도달했음을 확인할 때까지 해당 문자를 사용합니다.

s
식의 값이 서명되었습니다. 그렇지 않으면 식의 값이 서명되지 않습니다.

비트
인수 값의 비트 수입니다. 비트최대값은 64입니다.

s
문자열 형식입니다. 문자열은 다음 공백 문자로 제한됩니다. GetArgStr을 사용하여 명명된 문자열 인수를 검색할 수 있으며 GetUnnamedArgStr을 사용하여 명명되지 않은 문자열 인수를 검색할 수 있습니다.

x
문자열 형식입니다. 인수는 명령줄의 나머지 부분입니다. 인수는 문자열 형식과 마찬가지로 GetArgStr 또는 GetUnnamedArgStr을 사용하여 검색됩니다.

flags
인수 플래그입니다. 파서에서 인수를 처리하는 방법을 결정합니다. flags 매개 변수는 다음 값 중 하나를 가질 수 있습니다.

d=expr
인수의 기본값입니다. 명령줄에 인수가 없으면 인수가 expr설정됩니다. 기본값은 인수의 형식에 따라 구문 분석되는 문자열입니다.

ds
기본값은 도움말에서 제공하는 인수 설명에 표시되지 않습니다.

o
인수는 선택적 요소입니다. 명명된 인수의 기본값입니다.

r
인수가 필요합니다. 명명되지 않은 인수의 기본값입니다.

argname
인수의 표시 이름입니다. 자동 !help 확장 명령과 자동 /? 또는 -? 명령줄 인수에서 사용하는 이름입니다. 명령줄 옵션의 요약을 인쇄할 때 사용됩니다.

argdesc
인수에 대한 설명입니다. 자동 !help 확장 및 자동 "/?" 또는 "-?" 명령줄 인수에 의해 출력되는 설명입니다.

다음은 인수 설명의 몇 가지 예입니다. 다음 식은 단일 선택적 식 인수를 사용하는 명령을 정의합니다. 인수는 32비트여야 합니다. 명령줄에 인수가 없으면 0x100 기본값이 사용됩니다.

{;e32,o,d=0x100;flags;Flags to control command}

다음 식은 선택적 부울 "/v" 인수와 명명되지 않은 필수 문자열 인수를 사용하여 명령을 정의합니다.

{v;b;;Verbose mode}{;s;name;Name of object}

다음 식은 선택적 명명된 식 인수 /oname expr 및 선택적 명명된 문자열 인수 /eol str이 있는 명령을 정의합니다. /eol이 있으면 해당 값은 명령줄의 나머지 값으로 설정되고 더 이상 인수가 구문 분석되지 않습니다.

{oname;e;expr;Address of object}{eol;x;str;Commands to use}

명령줄

다음은 명령줄에서 인수를 구문 분석하는 몇 가지 방법의 목록입니다.

  • 명명된 식 및 문자열 인수의 값은 명령줄의 이름을 따릅니다. 예를 들어 /name expr 또는 /name str입니다.

  • 명명된 부울 인수의 경우 명령줄에 이름이 나타나면 값이 true입니다. false이면 false입니다.

  • 명령줄에서 여러 단일 문자 이름의 부울 옵션을 함께 그룹화할 수 있습니다. 예를 들어 "/a /b /c"는 "/abc"라는 인수가 이미 없는 경우 약식 표기법 "/abc"를 사용하여 작성할 수 있습니다.

  • 명령줄에 명명된 인수 "?"(예: "/?" 및 "-?")가 포함되어 있으면 인수 구문 분석이 종료되고 확장에 대한 도움말 텍스트가 표시됩니다.

내부 구문 분석

인수 파서에서 인수를 설정하는 데 여러 메서드가 사용됩니다.

SetUnnamedArg 메서드는 명명되지 않은 인수의 값을 변경합니다. 또한 편의를 위해 SetUnnamedArgStr SetUnnamedArgU64 메서드는 각각 명명되지 않은 문자열과 식 인수를 설정합니다.

명명된 인수에 대해 비슷한 메서드가 있습니다. SetArg는 명명된 인수의 값을 변경하는 데 사용되며 SetArgStrSetArgU64는 각각 명명된 문자열 및 식 인수에 사용됩니다.