/* ============================================================================= * spreadsheet_func_help.ts (2단계 · 주인 sub_laptop_1 · 2단계 묶음은 B 가 대신 고침 2026-09-27) * 함수 자동 완성 목록 · 인자 도움말 — 1단계 함수 48 개(`spreadsheet_types.ts` 머리 「1단계 함수」) + * B 의 2단계 묶음(`spreadsheet_functions.ts` 의 `FUNC_HELP_BATCH2` · `FUNC_HELP_BATCH3`)을 이어 붙임. * 이름 · 인자 모양 · 한 줄 뜻. B `spreadsheet_functions.ts`(실제 풀이)와는 따로 — 이 표는 화면 도움말 전용 * 정적 자료라 B 가 아직 없어도 씀. B 가 완성돼도 이름 목록이 갈리지 않게 이 표를 그대로 둠. * * 잇는 법(D · sub7 · 편집기) — 식 입력 중 `=` 뒤 낱말을 `suggestFunctions` 로 목록을 보여주고 * `(` 를 친 뒤엔 `funcHelp(name)` 로 인자 도움말 풍선을 씀(지금 몇 번째 인자인지는 D 가 콤마를 세어 넘김). * ========================================================================== */ import { FUNC_HELP_BATCH2, FUNC_HELP_BATCH3 } from "./spreadsheet_functions"; export interface FuncHelp { 이름: string; /** 인자 모양 — 대괄호는 생략 가능 */ 꼴: string; 뜻: string; } const TABLE: FuncHelp[] = [ { 이름: "SUM", 꼴: "SUM(수1, [수2], …)", 뜻: "수를 더함" }, { 이름: "PRODUCT", 꼴: "PRODUCT(수1, [수2], …)", 뜻: "수를 곱함" }, { 이름: "SUMPRODUCT", 꼴: "SUMPRODUCT(범위1, [범위2], …)", 뜻: "같은 자리끼리 곱한 뒤 더함" }, { 이름: "ROUND", 꼴: "ROUND(수, 자릿수)", 뜻: "반올림" }, { 이름: "ROUNDUP", 꼴: "ROUNDUP(수, 자릿수)", 뜻: "올림" }, { 이름: "ROUNDDOWN", 꼴: "ROUNDDOWN(수, 자릿수)", 뜻: "내림" }, { 이름: "INT", 꼴: "INT(수)", 뜻: "정수로 내림(음수는 작은 쪽)" }, { 이름: "TRUNC", 꼴: "TRUNC(수, [자릿수])", 뜻: "소수점을 버림(0 쪽으로)" }, { 이름: "CEILING", 꼴: "CEILING(수, 배수)", 뜻: "배수 단위로 올림" }, { 이름: "FLOOR", 꼴: "FLOOR(수, 배수)", 뜻: "배수 단위로 내림" }, { 이름: "ABS", 꼴: "ABS(수)", 뜻: "절댓값" }, { 이름: "MOD", 꼴: "MOD(수, 나눌수)", 뜻: "나눈 나머지" }, { 이름: "POWER", 꼴: "POWER(수, 지수)", 뜻: "거듭제곱" }, { 이름: "SQRT", 꼴: "SQRT(수)", 뜻: "제곱근" }, { 이름: "PI", 꼴: "PI()", 뜻: "원주율" }, { 이름: "SIN", 꼴: "SIN(각도값)", 뜻: "사인(라디안)" }, { 이름: "COS", 꼴: "COS(각도값)", 뜻: "코사인(라디안)" }, { 이름: "TAN", 꼴: "TAN(각도값)", 뜻: "탄젠트(라디안)" }, { 이름: "ASIN", 꼴: "ASIN(수)", 뜻: "아크사인(라디안)" }, { 이름: "ACOS", 꼴: "ACOS(수)", 뜻: "아크코사인(라디안)" }, { 이름: "ATAN", 꼴: "ATAN(수)", 뜻: "아크탄젠트(라디안)" }, { 이름: "RADIANS", 꼴: "RADIANS(각도)", 뜻: "도 → 라디안" }, { 이름: "DEGREES", 꼴: "DEGREES(라디안)", 뜻: "라디안 → 도" }, { 이름: "MIN", 꼴: "MIN(수1, [수2], …)", 뜻: "가장 작은 수" }, { 이름: "MAX", 꼴: "MAX(수1, [수2], …)", 뜻: "가장 큰 수" }, { 이름: "AVERAGE", 꼴: "AVERAGE(수1, [수2], …)", 뜻: "평균" }, { 이름: "IF", 꼴: "IF(조건, 참일때, [거짓일때])", 뜻: "조건에 따라 값을 고름" }, { 이름: "AND", 꼴: "AND(조건1, [조건2], …)", 뜻: "모두 참이면 참" }, { 이름: "OR", 꼴: "OR(조건1, [조건2], …)", 뜻: "하나라도 참이면 참" }, { 이름: "NOT", 꼴: "NOT(조건)", 뜻: "참 · 거짓을 뒤집음" }, { 이름: "IFERROR", 꼴: "IFERROR(식, 오류일때)", 뜻: "오류면 대신 값을 씀" }, { 이름: "CONCATENATE", 꼴: "CONCATENATE(글1, [글2], …)", 뜻: "글을 이어 붙임" }, { 이름: "FIXED", 꼴: "FIXED(수, [소수자리], [쉼표뺌])", 뜻: "소수 자리를 정해 글로 바꿈" }, { 이름: "TEXT", 꼴: "TEXT(값, 형식)", 뜻: "형식 코드로 값을 글로 바꿈" }, { 이름: "LEN", 꼴: "LEN(글)", 뜻: "글자 수" }, { 이름: "LEFT", 꼴: "LEFT(글, [글자수])", 뜻: "왼쪽부터 글자를 뗌" }, { 이름: "RIGHT", 꼴: "RIGHT(글, [글자수])", 뜻: "오른쪽부터 글자를 뗌" }, { 이름: "MID", 꼴: "MID(글, 시작, 글자수)", 뜻: "가운데 글자를 뗌" }, { 이름: "VALUE", 꼴: "VALUE(글)", 뜻: "숫자 모양 글을 수로 바꿈" }, { 이름: "VLOOKUP", 꼴: "VLOOKUP(찾을값, 표범위, 열번호, [정확히])", 뜻: "표 왼쪽에서 찾아 그 행의 값", }, { 이름: "HLOOKUP", 꼴: "HLOOKUP(찾을값, 표범위, 행번호, [정확히])", 뜻: "표 위쪽에서 찾아 그 열의 값", }, { 이름: "INDEX", 꼴: "INDEX(범위, 행번호, [열번호])", 뜻: "범위 안 자리 값" }, { 이름: "MATCH", 꼴: "MATCH(찾을값, 범위, [맞춤꼴])", 뜻: "범위 안 자리 번호" }, { 이름: "CHOOSE", 꼴: "CHOOSE(순번, 값1, [값2], …)", 뜻: "순번에 맞는 값을 고름" }, { 이름: "COUNT", 꼴: "COUNT(값1, [값2], …)", 뜻: "수가 든 칸 개수" }, { 이름: "COUNTA", 꼴: "COUNTA(값1, [값2], …)", 뜻: "비어 있지 않은 칸 개수" }, { 이름: "COUNTIF", 꼴: "COUNTIF(범위, 조건)", 뜻: "조건에 맞는 칸 개수" }, { 이름: "SUMIF", 꼴: "SUMIF(범위, 조건, [더할범위])", 뜻: "조건에 맞는 칸(또는 짝 칸)의 합" }, ...FUNC_HELP_BATCH2, ...FUNC_HELP_BATCH3, ]; const BY_NAME = new Map(TABLE.map((f) => [f.이름, f])); /** `=` 뒤 지금 치는 낱말(대소문자 안 가림)로 시작하는 함수 이름 — 가나다(알파벳)순. */ export function suggestFunctions(prefix: string): FuncHelp[] { const p = prefix.toUpperCase(); if (!p) return []; return TABLE.filter((f) => f.이름.startsWith(p)); } /** 함수 하나의 도움말(없으면 null) — 이름은 대소문자 안 가림. */ export function funcHelp(name: string): FuncHelp | null { return BY_NAME.get(name.toUpperCase()) ?? null; } /** 아는 함수 전부 개수(1단계 48 + 2단계 묶음 · 시험용) */ export function knownFunctionCount(): number { return TABLE.length; }