[Phase L20] Hex·Rand·Str·Perm 핸들러 4종 추가

HexHandler (prefix=hex, 235줄):
- 텍스트→hex 변환(공백·소문자·0x접두사·Base64)
- 순수 hex 문자열→UTF-8/ASCII 자동 디코딩·정수 해석(big-endian)
- hex dump: 오프셋+hex+ASCII 16바이트 단위 덤프
- 0xFF 단일 값→10진/8진/이진/ASCII/NOT 변환
- add/xor/and/or/not 비트 연산
- bytes <n> KB/KiB/MB/MiB/GB/GiB 크기 단위 변환
- CS1631 catch-yield 패턴(parseError 변수 분리) 적용

RandHandler (prefix=rand, 220줄):
- rand / rand <max> / rand <min> <max> 숫자 생성
- rand str [len] [charset]: alpha/num/alnum/hex/special 문자셋
- rand color: HEX+RGB+HSL 랜덤 색상 5개
- rand dice [NdS]: 다면체 주사위, 합계·상세·최솟값·최댓값
- rand coin: 동전 던지기 + 연속 5회
- rand pick/shuffle: 항목 선택·피셔-예이츠 셔플
- rand uuid: Guid.NewGuid() UUID v4
- rand token: RandomNumberGenerator 보안 토큰(hex+Base64)
- rand pin [len]: PIN 번호 생성

StrHandler (prefix=str, 295줄, partial class):
- escape/unescape: HTML·URL·JSON·Regex 이스케이프 변환
- repeat <n> [sep]: 텍스트 반복
- pad <w> [side] [char]: 좌/우/양쪽 패딩
- wrap <cols>: 단어 단위 줄바꿈
- sort [desc]: 줄 정렬
- unique: 중복 줄 제거
- join/split: 구분자 변환
- replace <from> <to>: 텍스트 치환
- extract email/url/number/ip: [GeneratedRegex] 패턴 추출
- lines: 줄·단어·문자·바이트 통계

PermHandler (prefix=perm, 265줄):
- 8진수(755)→기호(rwxr-xr-x)·상세 설명·용도·관련 권한
- 기호→8진수 역변환
- +x/-x/+w/-w/+r/-r 비트 수정 연산
- umask 022 → 파일/디렉토리 기본 권한 계산
- common: 14가지 자주 쓰는 권한 전체 목록
- CS8361 삼항연산자 보간 괄호 수정

- 빌드: 경고 0, 오류 0
This commit is contained in:
2026-04-04 16:34:06 +09:00
parent 498ae50785
commit 5c6a1b645d
6 changed files with 1396 additions and 0 deletions

View File

@@ -324,6 +324,14 @@ public partial class App : System.Windows.Application
commandResolver.RegisterHandler(new IpInfoHandler());
// L19-4: npm/yarn/pnpm 명령어 생성기 (prefix=npm)
commandResolver.RegisterHandler(new NpmHandler());
// L20-1: 16진수·바이트 변환기 (prefix=hex)
commandResolver.RegisterHandler(new HexHandler());
// L20-2: 랜덤 생성기 (prefix=rand)
commandResolver.RegisterHandler(new RandHandler());
// L20-3: 문자열 조작 도구 (prefix=str)
commandResolver.RegisterHandler(new StrHandler());
// L20-4: Unix 파일 권한 계산기 (prefix=perm)
commandResolver.RegisterHandler(new PermHandler());
// ─── 플러그인 로드 ────────────────────────────────────────────────────
var pluginHost = new PluginHost(settings, commandResolver);