fetiu / chalk.c

🌈 C MACRO library for Colorful Console

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

chalk.c

🌈 Colorful Console C MACRO library

chalk.git

νŠΉμ§•

μ‰¬μš΄ μ„€μΉ˜

  • λ§€ν¬λ‘œν•¨μˆ˜λ§ŒμœΌλ‘œ κ΅¬μ„±λ˜μ–΄μ„œ chalk.h 파일 ν•˜λ‚˜λ§Œ λ³΅μ‚¬ν•΄μ„œ ν”„λ‘œμ νŠΈμ— λ„£μœΌλ©΄ λ°”λ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ°€λ³μŠ΅λ‹ˆλ‹€.

  • λŸ°νƒ€μž„μ— μ‹€ν–‰λ˜λŠ”κ²ƒμ΄ μ•„λ‹Œ, μ „μ²˜λ¦¬λ˜κΈ° λ•Œλ¬Έμ— 싀행이 λΉ λ¦…λ‹ˆλ‹€.

μœ μ—°ν•œ ν‘œν˜„λ ₯

  • Cμ–Έμ–΄μ˜ String Literal, 생각보닀 μœ μ—°ν•©λ‹ˆλ‹€.

Examples

#include "chalk.h"

printf(CHALK_RED("Hello World"));
       ^ ~ "Hello World" λ¬Έμžμ—΄μ˜ κΈ€μžλ₯Ό λΉ¨κ°„μƒ‰μœΌλ‘œ λ°”κΏ”μ€λ‹ˆλ‹€.

printf(CHALK_BG_BLUE("μ•ˆλ…• 세상아"));
       ^ ~ "μ•ˆλ…• 세상아" λ¬Έμžμ—΄μ˜ 배경을 νŒŒλž€μƒ‰μœΌλ‘œ λ°”κΏ”μ€λ‹ˆλ‹€.

printf(CHALK_BG_BLUE(CHALK_RED("ν˜Όν•© μ‚¬μš©")));
                     ^ ~~ κΈ€μžμƒ‰ λΉ¨κ°•
        ^ ~~ 배경은 νŒŒλž‘

printf(CHALK_BLINK("깜빑깜빑"));
       ^ ~~ 깜빑이 효과λ₯Ό μ”Œμ›λ‹ˆλ‹€.
#define CHALK_NO_PREFIX
        ^ ~~ μ•žμ˜ CHALK_ λ₯Ό 쓰지 μ•Šμ•„λ„ λ©λ‹ˆλ‹€.
        ^ ~~ 예λ₯Όλ“€λ©΄, CHALK_RED λŒ€μ‹ μ— RED만 써도 λ©λ‹ˆλ‹€!
#include "chalk.h"

printf(BG_BLACK(MAGENTA("λΈ”λž™")) " " BG_MAGENTA(BLACK("핑크")));

printf(BOLD("ꡡ은 글씨") " " DIM("μ—°ν•œ 글씨") "\n");

printf(ITALIC("ITALIC " BOLD("ITALIC AND BOLD")));
/* template λ§Œλ“€κΈ° */
const char *int_template = MAGENTA("%d") "\n";
printf(int_template, 15);
  ~~> 선홍색 15 좜λ ₯

const char *n_times_m = BLUE("%d X %d") " = " BG_CYAN("%d");
printf(n_times_m, 5, 6, 30);
  ~~> 5 X 6 νŒŒλž€μƒ‰ 
        ~~> = 
          ~~> 30 청둝 배경

MACRO Functions

MACRO Function κΈ€μž 색깔
CHALK_BLACK κ²€μ •
CHALK_RED λΉ¨κ°•
CHALK_GREEN 초둝
CHALK_YELLOW λ…Έλž‘
CHALK_BLUE νŒŒλž‘
CHALK_MAGENTA 심홍
CHALK_CYAN 청둝
CHALK_WHITE ν•˜μ–‘
MACRO Function κΈ€μž 색깔
CHALK_LIGHT_BLACK μ—°ν•œ κ²€μ •
CHALK_LIGHT_RED μ—°ν•œ λΉ¨κ°•
CHALK_LIGHT_GREEN μ—°ν•œ 초둝
CHALK_LIGHT_YELLOW μ—°ν•œ λ…Έλž‘
CHALK_LIGHT_BLUE μ—°ν•œ νŒŒλž‘
CHALK_LIGHT_MAGENTA μ—°ν•œ 심홍
CHALK_LIGHT_CYAN μ—°ν•œ 청둝
CHALK_LIGHT_WHITE μ—°ν•œ ν•˜μ–‘
MACRO Function λ°°κ²½ 색깔
CHALK_BG_BLACK κ²€μ •
CHALK_BG_RED λΉ¨κ°•
CHALK_BG_GREEN 초둝
CHALK_BG_YELLOW λ…Έλž‘
CHALK_BG_BLUE νŒŒλž‘
CHALK_BG_MAGENTA 심홍
CHALK_BG_CYAN 청둝
CHALK_BG_WHITE ν•˜μ–‘
MACRO Function λ°°κ²½ 색깔
CHALK_BG_LIGHT_BLACK μ—°ν•œ κ²€μ •
CHALK_BG_LIGHT_RED μ—°ν•œ λΉ¨κ°•
CHALK_BG_LIGHT_GREEN μ—°ν•œ 초둝
CHALK_BG_LIGHT_YELLOW μ—°ν•œ λ…Έλž‘
CHALK_BG_LIGHT_BLUE μ—°ν•œ νŒŒλž‘
CHALK_BG_LIGHT_MAGENTA μ—°ν•œ 심홍
CHALK_BG_LIGHT_CYAN μ—°ν•œ 청둝
CHALK_BG_LIGHT_WHITE μ—°ν•œ ν•˜μ–‘
MACRO Function 효과
CHALK_BOLD ꡡ게
CHALK_DIM μ—°ν•˜κ²Œ
CHALK_ITALIC κΈ°μšΈμž„
CHALK_UNDERLINE 밑쀄
CHALK_BLINK κΉœλΉ‘μž„
CHALK_STRIKE μ·¨μ†Œμ„ 
CHALK_INVERSE 배경색과 κΈ€μžμƒ‰ 뒀집기
CHALK_HIDE κΈ€μž 숨기기

λ™μž‘ 원리

CHALK_RED(), CHALK_BG_BLUE(), ... 등은 맀크둜 ν•¨μˆ˜μž…λ‹ˆλ‹€.

ν•¨μˆ˜κ°€ μ•„λ‹Œ 맀크둜 ν•¨μˆ˜μž„μ„ μΈμ§€ν•˜λŠ”κ²ƒμ€ ꡉμž₯히 μ€‘μš”ν•©λ‹ˆλ‹€.

κΈ€μžμƒ‰ μ„€μ •μ˜ 원리

CHALK_RED 둜 예λ₯Ό λ“€μ–΄μ„œ μ„€λͺ…을 ν•˜κ² μŠ΅λ‹ˆλ‹€.

CHALK_RED(λ¬Έμžμ—΄)λŠ” <RED> λ¬Έμžμ—΄ </RED> 으둜 λ³€κ²½λ©λ‹ˆλ‹€.

μ •ν™•νžˆλŠ” "\x1b[31m" λ¬Έμžμ—΄ "\x1b[39m" μž…λ‹ˆλ‹€. ANSI ESCAPE CODEλ₯Ό μ΄μš©ν–ˆμŠ΅λ‹ˆλ‹€.

μ—¬κΈ°μ„œ \x1b λ“±μ˜ ν‘œν˜„μ€ ꡉμž₯히 가독성이 쒋지 μ•ŠκΈ° λ•Œλ¬Έμ— JSX의 Elementλ₯Ό ν‘œν˜„ν•˜λŠ” λ°©μ‹μ²˜λŸΌ <RED> </RED> λ”°μœ„μ˜ ν‘œν˜„μ„ λΉŒλ €μ„œ μ•žμœΌλ‘œ λŒ€μ‹  μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

  • Cμ—μ„œ λ¬Έμžμ—΄μ„ μ—°μ†ν•΄μ„œ 열거해두면 ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ 합쳐지기 λ•Œλ¬Έμ— ("hello " "world" λŠ” "hello world"와 κ°™μŠ΅λ‹ˆλ‹€), "<RED>" λ¬Έμžμ—΄ "</RED>"λŠ” "<RED>λ¬Έμžμ—΄</RED>" 처럼 μžμ—°μŠ€λŸ½κ²Œ ν•˜λ‚˜μ˜ 슀트링으둜 ν•©μ³μ§€κ²Œ λ©λ‹ˆλ‹€.
  • 이 속성은 Cμ—μ„œ λ¬Έμžμ—΄μ„ λ‹€λ£¨λŠ”λ° μš”κΈ΄ν•˜κ²Œ μ‚¬μš©λ˜κΈ° λ•Œλ¬Έμ— 속성1이라고 μ§€μΉ­ν•˜κ³  이후에 λ‹€μ‹œ μ‚¬μš©ν•  κ²ƒμž…λ‹ˆλ‹€.

μ—¬λŸ¬κ°€μ§€ 속성을 ν•¨κ»˜ μ„€μ •ν•˜λŠ” 원리

CHALKλŠ” μ—¬λŸ¬κ°€μ§€ 속성을 ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Όλ“€μ–΄μ„œ κΈ€μžμƒ‰κ³Ό 배경색을 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ”κ²½μš°μ— λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

CHALK_BG_RED(CHALK_BLUE("λ¬Έμžμ—΄"))

μœ„ ν‘œν˜„μ‹μ—μ„œ λ¨Όμ € CHALK_BLUE("λ¬Έμžμ—΄")은 "<BLUE>λ¬Έμžμ—΄</BLUE>"둜 λ³€ν™˜λ©λ‹ˆλ‹€. 그리고 λ³€ν™˜λœ λ¬Έμžμ—΄μ€ CHALK_BG_RED에 인자둜 λ“€μ–΄κ°€μ„œ "<BG_RED><BLUE>λ¬Έμžμ—΄</BLUE></BG_RED>" 둜 λ³€ν™˜λ˜κ²Œ λ©λ‹ˆλ‹€.

λ§€ν¬λ‘œν•¨μˆ˜μ΄κΈ° λ•Œλ¬Έμ— μ‹€ν–‰μ‹œκ°„(Runtime)에 λ³€ν™˜λ˜λŠ”κ²ƒμ΄μ•„λ‹Œ, μ»΄νŒŒμΌμ‹œκ°„(Compile-time)에 μˆ˜ν–‰λ©λ‹ˆλ‹€. μ „μ²˜λ¦¬κΈ°μ—μ˜ν•΄μ„œ λ³€ν™˜λœ κ²°κ³ΌλŠ” λ‹Ήμ—°ν•˜κ²Œλ„ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄(String Literal)μ΄λΌλŠ” 사싀을 μΈμ§€ν•΄μ•Όν•©λ‹ˆλ‹€.

λ§Œμ•½ μ΄ˆλ‘μƒ‰ λ¬Έμžμ—΄κ³Ό νŒŒλž€μƒ‰ λ¬Έμžμ—΄μ„ ν•¨κ»˜ κΈ°μšΈμ—¬μ„œ μ“°κ³ μ‹Άλ‹€λ©΄ μ•„λž˜μ™€κ°™μ€ λ¬Έμžμ—΄μ„ λ§Œλ“€μ–΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€.

"<ITALIC><GREEN>μ΄ˆλ‘μƒ‰λ¬Έμžμ—΄</GREEN><BLUE>νŒŒλž€μƒ‰λ¬Έμžμ—΄</BLUE></ITALIC>"

μ•žμ„œ μ„€λͺ…ν•œ 속성1을 μ΄μš©ν•΄μ„œ CHALK_ITALIC(CHALK_GREEN("μ΄ˆλ‘μƒ‰λ¬Έμžμ—΄") CHALK_BLUE("νŒŒλž€μƒ‰λ¬Έμžμ—΄")) 둜 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

References

μžλ°”μŠ€ν¬λ¦½νŠΈ chalk 의 넀이밍을 λ”°μ™”μŠ΅λ‹ˆλ‹€.

About

🌈 C MACRO library for Colorful Console

License:MIT License


Languages

Language:C 99.5%Language:Makefile 0.5%