"stringprep" --- 인터넷 문자열 준비
***********************************

**소스 코드:** Lib/stringprep.py

======================================================================

인터넷에서 무언가(가령 호스트 이름)를 식별할 때, 종종 그러한 식별에 대
해 "동등" 비교할 필요가 있습니다. 이 비교가 실행되는 정확한 방법은 응
용 프로그램 도메인에 따라 달라질 수 있습니다, 예를 들어 대/소문자를 구
분하는지 그렇지 않은지. 또한 "인쇄 가능" 문자로만 구성된 식별만 허용하
기 위해, 가능한 식별을 제한해야 할 수도 있습니다.

**RFC 3454**는 인터넷 프로토콜에서 유니코드 문자열을 "준비" 하는 절차
를 정의합니다. 문자열을 전선에 전달하기 전에, 준비 절차를 통해 문자열
을 처리해서 어떤 정규화된 형식을 갖도록 만듭니다. RFC는 프로파일로 결
합할 수 있는 테이블 집합을 정의합니다. 각 프로파일은 사용하는 테이블과
"stringprep" 절차의 어떤 선택적 부분이 프로파일 일부인지 정의해야 합니
다. "stringprep" 프로파일의 한 가지 예는 국제화된 도메인 이름에 사용되
는 "nameprep"입니다.

"stringprep" 모듈은 **RFC 3454**의 테이블만 노출합니다. 이러한 테이블
은 딕셔너리나 리스트로 표현하기에 매우 크기 때문에, 모듈은 내부적으로
유니코드 문자 데이터베이스를 사용합니다. 모듈 소스 코드 자체는
"mkstringprep.py" 유틸리티를 사용하여 생성되었습니다.

결과적으로, 이러한 테이블은 데이터 구조가 아닌 함수로 노출됩니다. RFC
에는 두 종류의 테이블이 있습니다: 집합과 매핑. 집합의 경우,
"stringprep"는 "특성 함수", 즉 매개 변수가 집합 일부면 "True"를 반환하
는 함수를 제공합니다. 매핑의 경우, 매핑 함수를 제공합니다: 주어진 키에
대해, 연관된 값을 반환합니다. 다음은 모듈에서 사용할 수 있는 모든 함수
의 목록입니다.

stringprep.in_table_a1(code)

   *code*가 tableA.1(유니코드 3.2에서 지정되지 않은 코드 포인트)에 있
   는지 판별합니다.

stringprep.in_table_b1(code)

   *code*가 tableB.1(일반적으로 아무것도 매핑되지 않습니다)에 있는지
   판별합니다.

stringprep.map_table_b2(code)

   tableB.2(NFKC와 함께 사용되는 케이스 폴딩용 매핑)에 따라 *code*의
   매핑 된 값을 반환합니다.

stringprep.map_table_b3(code)

   tableB.3(정규화가 없는 케이스 폴딩용 매핑)에 따라 *code*의 매핑 된
   값을 반환합니다.

stringprep.in_table_c11(code)

   *code*가 tableC.1.1(ASCII 스페이스 문자)에 있는지 판별합니다.

stringprep.in_table_c12(code)

   *code*가 tableC.1.2(비 ASCII 스페이스 문자)에 있는지 판별합니다.

stringprep.in_table_c11_c12(code)

   *code*가 tableC.1(스페이스 문자, C.1.1과 C.1.2의 합집합)에 있는지
   판별합니다.

stringprep.in_table_c21(code)

   *code*가 tableC.2.1(ASCII 제어 문자)에 있는지 판별합니다.

stringprep.in_table_c22(code)

   *code*가 tableC.2.2(비 ASCII 제어 문자)에 있는지 판별합니다.

stringprep.in_table_c21_c22(code)

   *code*가 tableC.2(제어 문자, C.2.1과 C.2.2의 합집합)에 있는지 판별
   합니다.

stringprep.in_table_c3(code)

   *code*가 tableC.3(개인 사용)에 있는지 판별합니다.

stringprep.in_table_c4(code)

   *code*가 tableC.4(비문자 코드 포인트)에 있는지 판별합니다.

stringprep.in_table_c5(code)

   *code*가 tableC.5(대리 코드)에 있는지 판별합니다.

stringprep.in_table_c6(code)

   *code*가 tableC.6(일반 텍스트에는 부적절)에 있는지 판별합니다.

stringprep.in_table_c7(code)

   *code*가 tableC.7(규범적 표현에는 부적절)에 있는지 판별합니다.

stringprep.in_table_c8(code)

   *code*가 tableC.8(표시 특성 변경 또는 폐지)에 있는지 판별합니다.

stringprep.in_table_c9(code)

   *code*가 tableC.9(문자 태깅)에 있는지 판별합니다.

stringprep.in_table_d1(code)

   *code*가 tableD.1(양방향 특성이 "R"이나 "AL"인 문자)에 있는지 판별
   합니다.

stringprep.in_table_d2(code)

   *code*가 tableD.2(양방향 특성이 "L"인 문자)에 있는지 판별합니다.
