Spintax 구문 참조

spintax 템플릿 마크업에 대한 완전한 참조.

열거 { }

목록에서 무작위로 하나의 옵션을 선택합니다.

{option1|option2|option3}

예제

{blue|grey|clear}
{|free|paid} plan                 ← empty option = sometimes nothing
{Acme {Pro|Lite}}                ← nested enumerations
{order {|#42-A} confirmed}       ← nesting with empty option

규칙

  • 구분자: {}
  • 구분자: |
  • 임의의 깊이까지 중첩 지원
  • 빈 옵션은 유효 (빈 문자열 생성)
  • 가장 안쪽 표현식에서 바깥쪽으로 해석

순열 [ ]

N개의 요소를 선택, 셔플, 구분자로 결합합니다.

단순 순열

모든 요소 포함, 공백으로 구분:

[1|2|3|4]

출력 예: 1 4 3 2, 2 3 4 1, 3 2 4 1

구분자 포함

시작 부분의 < >에 통일 구분자 지정:

[<, > 1|2|3|4]

출력 예: 2, 1, 4, 3, 4, 3, 2, 1

중요: [<구분자> 사이에 공백 없음.

요소별 구분자

각 옵션은 이전 | 앞에 <sep>로 고유한 구분자를 정의할 수 있습니다. 구분자는 셔플 시 해당 요소와 함께 이동합니다.

[<, > 1|2|3 < and >|4]

출력 예: 1, 3, 2 and 4, 3, 1, 2 and 4

자동 띄어쓰기: <and> 또는 <or>와 같은 단어 구분자는 자동으로 공백이 추가되어 <and> and 가 됩니다. 문장부호 구분자(<,>)는 추가되지 않습니다.

조합이 있는 순열

구성 가능한 최소/최대 요소 수와 구분자:

[<minsize=1;maxsize=3;sep=", ";lastsep=" and "> apple|plum|orange|apricot]

출력 예: apple, plum and orange, apple and apricot, orange

구성 매개변수

매개변수기본값설명
minsize전체 수선택할 최소 요소 수
maxsize전체 수선택할 최대 요소 수
sep" " (공백)마지막이 아닌 항목 간 구분자
lastsepsep과 동일마지막 요소 앞 구분자

순열 규칙

  • 구분자: []
  • 구성 블록 <...>[ 바로 뒤에 와야 합니다
  • 구성 매개변수는 세미콜론으로 구분
  • 구성의 문자열 값은 따옴표로 감쌈: sep=", "
  • 열거와 순열은 옵션 내에서 중첩 가능
  • HTML 요소도 옵션이 될 수 있음

변수 %var%

나타나는 곳에서 치환되는 재사용 가능한 변수를 정의합니다.

#set %VARIABLE_NAME% = value or spintax structure
#def %VARIABLE_NAME% = value or spintax structure

예제

#set %name% = John
#set %greeting% = {Hello|Hi|Hey}
#set %items% = [<minsize=2;maxsize=3;sep=", ";lastsep=" and "> apples|oranges|bananas]
Some text with %name% and %greeting%, also %items%.

/# %greeting% above may differ between the two references — #set re-rolls.
   #def picks once and keeps it: #/
#def %tone% = {friendly|warm|upbeat}
A %tone% intro, and a %tone% outro — always the same word.

변수 규칙

  • #set#def는 줄의 시작에 와야 합니다
  • 변수 이름은 %로 감쌈: %name%
  • 변수 이름은 영숫자 + 밑줄
  • 값에는 모든 spintax 구문 포함 가능 (열거, 순열, 다른 변수)
  • #set 변수는 정의 시가 아닌 참조 시에 확장 (지연 평가)
  • #set은 매크로입니다. 참조할 때마다 값이 다시 치환되고 그 안의 spintax도 다시 뽑힙니다. #def는 렌더링당 한 번만 값을 확정하고 모든 참조에서 그 결과를 유지합니다
  • #set#def 줄은 출력에서 제거

WordPress 플러그인의 변수 스코프

플러그인은 세 가지 변수 스코프를 지원합니다. 같은 이름이 여러 스코프에 존재할 때, 가장 강한 스코프가 우선합니다:

  1. 런타임 변수 (가장 강함) — 쇼트코드로 전달: [spintax slug="greeting" name="Alice"]
  2. 로컬 변수 — 템플릿 내에서 #set 또는 #def로 정의
  3. 글로벌 변수 (가장 약함) — 설정 페이지에서 정의

조건문 {?VAR?then|else}

조건문은 GTW 계열에 대한 spintax.net 의 차별화된 확장입니다. {a|b} 는 변수를 보지 않는 균등 랜덤 선택이지만, {?VAR?then|else}%VAR% 에 값이 있는지에 따라 선택합니다.

값 기반 선택에 사용하세요: 무료 등급이 있을 때만 무료 등급 라인을 표시, 사용자가 유료 플랜일 때만 프로 기능 블록을 렌더링, 적용되지 않는 CTA 를 숨기기.

프리패스는 %var% 확장과 랜덤 분기 선택기 이전에 실행되므로 falsy 분기는 완전히 폐기됩니다 — 내부의 어떤 것도 평가되지 않습니다.

형식

{?VAR?then}                ← truthy ⇒ then; falsy ⇒ empty
{?VAR?then|else}           ← truthy ⇒ then; falsy ⇒ else
{?!VAR?then|else}          ← inverted
{?HasFreeTier? — free tier available since %founded%|, trusted since %founded%}

Truthy 와 falsy

규칙은 JavaScript 보다 의도적으로 단순합니다 — truthy = 최소 하나의 비공백 문자:

%VAR% 의 값Truthy?
선언되지 않음falsy
빈 문자열falsy
공백만falsy
"0", "false"truthy (비어있지 않음)
기타 텍스트 또는 HTMLtruthy

조건문 규칙

  • 변수 이름은 %var% 와 같은 regex 를 따름 (대소문자 구분 없음)
  • ! 접두사가 검사를 반전: {?!VAR?없음}
  • 깊이 0 의 첫 번째 |thenelse 를 구분; 이후는 else 안에서 리터럴
  • 중첩 조건문은 바깥부터 평가 — falsy 분기는 short-circuit
  • 복합 논리(&&, ||, 비교)는 미지원 — 어셈블러에서 가드 변수를 미리 계산
  • 잘못된 형식({??yes}, {?VAR})은 절대 throw 하지 않음 — 플레이그라운드가 경고로 표시
  • 심화: 조건문 spintax 가이드 에 예제와 안티패턴

복수형 {plural %n%: language|languages}

숫자에 맞는 문법적으로 올바른 어형을 고릅니다. 카운트는 콜론 앞에, 어형은 콜론 뒤에 |로 구분해 씁니다.

어형을 결정하는 것은 템플릿이 아니라 렌더 로케일입니다. 따라서 몇 개의 어형을 제공해야 하는지는 그 로케일에 달려 있습니다. 영어는 두 개, 러시아어는 세 개가 필요합니다.

{plural %n%: form1|form2}          ← 2-form locale (en, de, es…)
{plural %n%: form1|form2|form3}    ← 3-form locale (ru, uk, sr…)
#def %LangCount% = 5
supports %LangCount% {plural %LangCount%: language|languages}
← supports 5 languages

로케일별 어형 수

로케일은 언어 서브태그로 매칭되므로 ru-RUru는 동일하게 동작합니다:

로케일어형 수선택 기준
ru, uk, be, sr, hr, bs31 · 2–4 · 5 이상
en을 포함한 그 밖의 모든 로케일2정확히 1 · 나머지 전부

어형 개수가 맞지 않으면 엔진이 plural.arity를 보고하고 전각 중괄호로 블록을 그대로 보이게 남깁니다. 잘못된 복수형이 조용히 배포되는 일은 없습니다.

복수형 규칙

  • 여는 부분은 공백까지 포함해 리터럴입니다: {plural . {plural: x}{pluralN: x}는 복수형 블록이 아닙니다
  • 콜론은 필수이며 카운트와 어형을 구분합니다
  • 카운트는 %Var% 참조 또는 정수 리터럴입니다. 카운트 안의 변수는 어형 선택 전에 치환됩니다
  • 음수는 절댓값으로 처리하고 0은 "나머지 전부" 어형을 받습니다
  • 카운트 변수는 #set이 아니라 #def여야 합니다#set은 매크로라서 {1|4|9} 같은 값은 복수형을 결정하는 시점에 아직 해석되지 않은 spintax이고, 블록 전체가 비어서 렌더링됩니다. 플레이그라운드는 이를 plural.count-macro로 표시합니다
  • 숫자가 아니거나 정의되지 않은 카운트는 추측하지 않고 블록을 지웁니다
  • 심화: 복수형 spintax 가이드에 러시아어 3어형 규칙과 실전 예제

인클루드 #include

디렉티브 위치에 다른 템플릿을 삽입합니다.

#include "hero-text"

인클루드 규칙

  • 템플릿 참조는 큰따옴표로 감쌈
  • 템플릿 슬러그 또는 숫자 ID로 해석
  • 포함된 템플릿은 자체 변수와 spintax를 포함할 수 있음
  • 재귀적 인클루드 지원
  • 순환 참조 감지 및 차단
  • 자식 템플릿은 글로벌 및 런타임 변수를 상속하지만 부모의 #set / #def 로컬 변수는 상속하지 않음

주석 /#...#/

주석 마커 사이의 텍스트는 다른 처리 전에 출력에서 제거됩니다.

/#
  This is a comment section.
  It can span multiple lines.
  It won't appear in output.
#/

주석 규칙

  • 시작 구분자: /#
  • 종료 구분자: #/
  • 여러 줄에 걸칠 수 있음
  • 중첩 불가
  • 다른 처리 전에 제거

중첩

모든 구문 요소는 임의의 깊이로 서로 중첩할 수 있습니다:

{option1|[<, > sub1|sub2|sub3]|option3}

[<minsize=2;maxsize=3;sep=", ";lastsep=" and "> {red|blue} apples|{big|small} oranges|bananas]

#set %var% = {a|[b|c]}

후처리

엔진은 생성 후 자동 텍스트 교정을 적용합니다:

  1. URL, 이메일, 도메인, 소수, 약어를 대문자화로부터 보호
  2. 중복 공백 및 탭 제거
  3. 구두점 앞의 공백 제거 (, . ! ?)
  4. 구두점 뒤에 누락된 공백 추가
  5. 출력의 첫 글자를 대문자로 (HTML 태그 건너뜀)
  6. 문장 끝 구두점 뒤 대문자화
  7. 블록 수준 HTML 태그 뒤 대문자화
  8. 줄바꿈 뒤 대문자화
  9. 보호된 플레이스홀더 복원

구문 요약

기능구문동작
열거{a|b|c}무작위 옵션 선택
순열[a|b|c]N개 선택, 셔플, 결합
구분자[<sep> a|b|c]통일 구분자 순열
요소별 구분자[<,> a|b <x>|c]사용자 정의 구분자 순열
조합[<config> a|b|c]최소/최대 수 순열
변수#set %var% = val재사용 가능한 치환
변수 (한 번만)#def %var% = val렌더링당 한 번만 확정
조건문{?VAR?then|else}truthy면 then, falsy면 else
복수형{plural %n%: language|languages}로케일에 따라 어형을 숫자에 일치시킴
인클루드#include "slug"다른 템플릿 삽입
주석/#...#/출력에서 제거

구문은 Generating The Web (GTW) 표준과 호환됩니다.