Rune Caster 1.0.0
Modern C++ Text Processing Framework
Loading...
Searching...
No Matches
Rune Caster

C++20 CMake [License](LICENSE) Platform Documentation Build Status

Modern C++ Text Processing Framework

STL์—์„œ ์˜๊ฐ์„ ๋ฐ›์€ ์ง๊ด€์ ์ด๊ณ  ๊ณ ์„ฑ๋Šฅ์˜ ๋‹ค๊ตญ์–ด ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ ๋ฐ ์–ธ์–ด ๊ฐ„ ๋ณ€ํ™˜ ํ”„๋ ˆ์ž„์›Œํฌ

๐ŸŒŸ ์ฃผ์š” ํŠน์ง•

  • ๐Ÿ”ค Rune ์‹œ์Šคํ…œ: ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž์™€ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š” STL ์Šคํƒ€์ผ ์ปจํ…Œ์ด๋„ˆ
  • โšก Zero-cost Abstractions: ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ ์—†๋Š” ๊ณ ์„ฑ๋Šฅ ์ฒ˜๋ฆฌ
  • ๐ŸŒ ๋‹ค๊ตญ์–ด ์ง€์›: ํ•œ๊ตญ์–ด, ์˜์–ด, ์ผ๋ณธ์–ด ๋“ฑ Unicode ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ
  • ๐ŸŽฏ STL ํ˜ธํ™˜: ์ต์ˆ™ํ•œ ์ปจํ…Œ์ด๋„ˆ-์•Œ๊ณ ๋ฆฌ์ฆ˜-์ดํ„ฐ๋ ˆ์ดํ„ฐ ํŒจํ„ด
  • ๐Ÿ”ง C++20: Modern C++ ๊ธฐ๋Šฅ์„ ์ ๊ทน ํ™œ์šฉํ•œ ํƒ€์ž… ์•ˆ์ „ํ•œ API

๐Ÿ“‹ ํ˜„์žฌ ๊ตฌํ˜„ ์ƒํƒœ

๐Ÿšง ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„ (์ง„ํ–‰ ์ค‘)

  • ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ: CMake ๋นŒ๋“œ ์‹œ์Šคํ…œ, ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์™„์„ฑ
  • ๋ฌธ์„œํ™”: ์™„์ „ํ•œ ์„ค๊ณ„ ๋ฌธ์„œ (PRD, ๊ธฐ์ˆ  ์•„ํ‚คํ…์ฒ˜, API ์„ค๊ณ„)
  • ํ—ค๋” ํŒŒ์ผ: ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ (์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ์ˆ˜์ • ํ•„์š”)

โš ๏ธ ์•Œ๋ ค์ง„ ์ด์Šˆ

  • ์ปดํŒŒ์ผ ์˜ค๋ฅ˜: ํ˜„์žฌ ๋นŒ๋“œ ์‹œ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ๋ฐœ์ƒ
  • ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ: Windows ํ•œ๊ตญ์–ด ํ™˜๊ฒฝ์—์„œ UTF-8 ์ฒ˜๋ฆฌ ์ด์Šˆ
  • ์˜์กด์„ฑ ์˜ค๋ฅ˜: ํด๋ž˜์Šค ๊ฐ„ ์ฐธ์กฐ ๋ฌธ์ œ

๐ŸŽฏ ์ฆ‰์‹œ ํ•„์š”ํ•œ ์ž‘์—…

  1. ๊ธฐ๋ณธ ์ปดํŒŒ์ผ ๋ฌธ์ œ ํ•ด๊ฒฐ
  2. Rune ํด๋ž˜์Šค ๊ธฐ๋ณธ ๊ตฌํ˜„
  3. Unicode ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ ๊ตฌํ˜„
  4. RuneSequence ์ปจํ…Œ์ด๋„ˆ ๊ตฌํ˜„

๐Ÿ”ฎ ํ–ฅํ›„ ๊ณ„ํš

  • Spell ์‹œ์Šคํ…œ: ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์ •๊ทœํ™”, ์ •์ œ, ํ•„ํ„ฐ๋ง)
  • Caster ํŒŒ์ดํ”„๋ผ์ธ: ํ•จ์ˆ˜ํ˜• ์ฒด์ด๋‹๊ณผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ
  • Posterior Phonetic Gram: ์–ธ์–ด ๊ฐ„ ์Œ์„ฑํ•™์  ๋ณ€ํ™˜
  • ๋‹ค๊ตญ์–ด ๋ชจ๋“ˆ: ์–ธ์–ด๋ณ„ ํŠนํ™” ์ฒ˜๋ฆฌ ๊ทœ์น™

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

์ „์ œ ์กฐ๊ฑด

  • C++ ์ปดํŒŒ์ผ๋Ÿฌ: C++20 ์ง€์› (GCC 9+, Clang 10+, MSVC 19.20+)
  • CMake: 3.20 ์ด์ƒ
  • Git: ์†Œ์Šค ์ฝ”๋“œ ํด๋ก ์šฉ

์˜์กด์„ฑ (์„ ํƒ์‚ฌํ•ญ)

# Ubuntu/Debian
sudo apt update
sudo apt install libicu-dev libfmt-dev libspdlog-dev
# macOS (Homebrew)
brew install icu4c fmt spdlog
# Windows (vcpkg)
vcpkg install icu fmt spdlog

์ฐธ๊ณ : ์˜์กด์„ฑ์ด ์—†์–ด๋„ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ ์ž‘๋™ํ•˜์ง€๋งŒ, ICU ์„ค์น˜๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”จ ๋นŒ๋“œ ๋ฐฉ๋ฒ•

1. ์†Œ์Šค ์ฝ”๋“œ ํด๋ก 

git clone https://github.com/yourusername/rune-caster.git
cd rune-caster

2. ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

mkdir build
cd build

3. CMake ์„ค์ •

# ๊ธฐ๋ณธ ๋นŒ๋“œ
cmake ..
# Release ๋ชจ๋“œ
cmake -DCMAKE_BUILD_TYPE=Release ..
# ์˜ต์…˜ ์„ค์ •
cmake -DRUNE_CASTER_ENABLE_TESTS=ON \
-DRUNE_CASTER_ENABLE_EXAMPLES=ON \
-DCMAKE_BUILD_TYPE=Debug ..

4. ์ปดํŒŒ์ผ

# Windows (Visual Studio)
cmake --build . --config Release
# Linux/macOS
make -j$(nproc)
# ๋˜๋Š” ninja ์‚ฌ์šฉ ์‹œ
ninja

5. ์„ค์น˜ (์„ ํƒ์‚ฌํ•ญ)

sudo cmake --install .

๐Ÿ“š ๋ฌธ์„œ

๐ŸŒ ์˜จ๋ผ์ธ ๋ฌธ์„œ

  • API Documentation: Doxygen์œผ๋กœ ์ƒ์„ฑ๋œ ์ƒ์„ธํ•œ API ๋ฌธ์„œ
  • ๋น ๋ฅธ ์‹œ์ž‘ ๊ฐ€์ด๋“œ: ํ”„๋กœ์ ํŠธ ์‹œ์ž‘์„ ์œ„ํ•œ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ
  • ๋ณด์•ˆ ์„ค์ • ๊ฐ€์ด๋“œ: GitHub Code Scanning ๋ฐ ๋ณด์•ˆ ์Šค์บ” ์„ค์ •

๐Ÿ“– ๋กœ์ปฌ ๋ฌธ์„œ ์ƒ์„ฑ

# ๋ฌธ์„œ ์ƒ์„ฑ (Doxygen ํ•„์š”)
cmake -DRUNE_CASTER_ENABLE_DOCS=ON ..
cmake --build . --target docs
# ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด๊ธฐ
open docs/html/index.html # macOS
xdg-open docs/html/index.html # Linux
start docs/html/index.html # Windows

๐Ÿค– ์ž๋™ ๋ฐฐํฌ

  • GitHub Actions: ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ์ž๋™์œผ๋กœ ๋ฌธ์„œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค
  • GitHub Pages: https://yourusername.github.io/rune-caster์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

๐Ÿ“– ์‚ฌ์šฉ ์˜ˆ์ œ

๊ธฐ๋ณธ Rune ์‚ฌ์šฉ๋ฒ•

#include <iostream>
using namespace rune_caster;
int main() {
// ๋‹ค์–‘ํ•œ ์–ธ์–ด์˜ ๋ฌธ์ž ์ƒ์„ฑ
Rune korean(U'๊ฐ€');
Rune english(U'A');
Rune japanese(U'ใ‚');
// ์–ธ์–ด ์ž๋™ ๊ฐ์ง€
std::cout << "Korean detected: "
<< static_cast<int>(korean.language()) << std::endl;
// UTF-8 ๋ณ€ํ™˜
std::cout << "UTF-8: " << korean.to_utf8() << std::endl;
// ๋ฌธ์ž ๋ถ„๋ฅ˜
std::cout << "Is vowel: " << english.is_vowel() << std::endl;
std::cout << "Is consonant: " << english.is_consonant() << std::endl;
return 0;
}
Represents a single textual unit with Unicode and linguistic properties.
Definition rune.hpp:23

RuneSequence ์‚ฌ์šฉ๋ฒ•

#include <iostream>
using namespace rune_caster;
int main() {
// UTF-8 ๋ฌธ์ž์—ด์—์„œ ์ƒ์„ฑ
auto sequence = RuneSequence::from_utf8("์•ˆ๋…•ํ•˜์„ธ์š” Hello ใ“ใ‚“ใซใกใฏ");
// STL ์Šคํƒ€์ผ ์ดํ„ฐ๋ ˆ์ด์…˜
for (const auto& rune : sequence) {
std::cout << "Char: " << rune.to_utf8()
<< ", Language: " << static_cast<int>(rune.language())
<< std::endl;
}
// ๋ถ€๋ถ„ ๋ฌธ์ž์—ด
auto substr = sequence.substr(0, 5);
std::cout << "Substring: " << substr.to_utf8() << std::endl;
return 0;
}
static RuneString from_utf8(std::string_view utf8_text)
Create a RuneString from UTF-8 text.

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

rune-caster/
โ”œโ”€โ”€ ๐Ÿ“„ CMakeLists.txt # ๋ฉ”์ธ ๋นŒ๋“œ ์„ค์ •
โ”œโ”€โ”€ ๐Ÿ“ include/ # ๊ณต๊ฐœ ํ—ค๋” ํŒŒ์ผ
โ”‚ โ””โ”€โ”€ rune_caster/
โ”‚ โ”œโ”€โ”€ rune.hpp # Rune ํด๋ž˜์Šค
โ”‚ โ”œโ”€โ”€ rune_sequence.hpp # RuneSequence ์ปจํ…Œ์ด๋„ˆ
โ”‚ โ”œโ”€โ”€ language.hpp # ์–ธ์–ด ์ฝ”๋“œ ์ •์˜
โ”‚ โ”œโ”€โ”€ unicode.hpp # Unicode ์œ ํ‹ธ๋ฆฌํ‹ฐ
โ”‚ โ”œโ”€โ”€ concepts.hpp # C++20 Concepts
โ”‚ โ””โ”€โ”€ version.hpp # ๋ฒ„์ „ ์ •๋ณด
โ”œโ”€โ”€ ๐Ÿ“ src/ # ๊ตฌํ˜„ ํŒŒ์ผ
โ”‚ โ”œโ”€โ”€ rune/ # โœ… Rune ์‹œ์Šคํ…œ (๊ตฌํ˜„๋จ)
โ”‚ โ”œโ”€โ”€ spell/ # ๐Ÿšง Spell ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์˜ˆ์ •)
โ”‚ โ”œโ”€โ”€ caster/ # ๐Ÿšง Caster ํŒŒ์ดํ”„๋ผ์ธ (์˜ˆ์ •)
โ”‚ โ”œโ”€โ”€ language/ # ๐Ÿšง ์–ธ์–ด ๋ชจ๋“ˆ (์˜ˆ์ •)
โ”‚ โ””โ”€โ”€ phonetic/ # ๐Ÿšง ์Œ์„ฑํ•™์  ๋ณ€ํ™˜ (์˜ˆ์ •)
โ”œโ”€โ”€ ๐Ÿ“ examples/ # ์‚ฌ์šฉ ์˜ˆ์ œ
โ”‚ โ”œโ”€โ”€ basic_usage.cpp # ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•
โ”‚ โ””โ”€โ”€ sequence_usage.cpp # ์‹œํ€€์Šค ์‚ฌ์šฉ๋ฒ•
โ”œโ”€โ”€ ๐Ÿ“ tests/ # ํ…Œ์ŠคํŠธ ํŒŒ์ผ
โ”‚ โ”œโ”€โ”€ unit/ # ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
โ”‚ โ”œโ”€โ”€ integration/ # ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
โ”‚ โ””โ”€โ”€ benchmark/ # ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ
โ””โ”€โ”€ ๐Ÿ“ docs/ # ๋ฌธ์„œ
โ”œโ”€โ”€ PRD.md # ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ
โ”œโ”€โ”€ api-design.md # API ์„ค๊ณ„
โ”œโ”€โ”€ technical-architecture.md # ๊ธฐ์ˆ  ์•„ํ‚คํ…์ฒ˜
โ””โ”€โ”€ development-guide.md # ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ

๐Ÿ”ง CMake ๋นŒ๋“œ ์˜ต์…˜

์˜ต์…˜ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
RUNE_CASTER_ENABLE_TESTS ON ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋นŒ๋“œ
RUNE_CASTER_ENABLE_BENCHMARKS OFF ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ ๋นŒ๋“œ
RUNE_CASTER_ENABLE_EXAMPLES ON ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ ๋นŒ๋“œ
RUNE_CASTER_ENABLE_STATIC_ANALYSIS OFF ์ •์  ๋ถ„์„ ๋„๊ตฌ

์‚ฌ์šฉ ์˜ˆ์‹œ

# ๋ชจ๋“  ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”
cmake -DRUNE_CASTER_ENABLE_TESTS=ON \
-DRUNE_CASTER_ENABLE_BENCHMARKS=ON \
-DRUNE_CASTER_ENABLE_EXAMPLES=ON \
-DCMAKE_BUILD_TYPE=Release ..
# ์ตœ์†Œ ๋นŒ๋“œ (๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ)
cmake -DRUNE_CASTER_ENABLE_TESTS=OFF \
-DRUNE_CASTER_ENABLE_EXAMPLES=OFF ..

๐Ÿ› ๋ฌธ์ œ ํ•ด๊ฒฐ

์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ

1. ICU ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ

# ํ•ด๊ฒฐ: ICU ์„ค์น˜ ๊ฒฝ๋กœ ๋ช…์‹œ
cmake -DICU_ROOT=/usr/local ..

2. C++20 ์ปดํŒŒ์ผ๋Ÿฌ ์ง€์› ๋ถ€์กฑ

# ํ•ด๊ฒฐ: ์ตœ์‹  ์ปดํŒŒ์ผ๋Ÿฌ ์‚ฌ์šฉ
sudo apt install gcc-10 g++-10
export CXX=g++-10

3. Windows์—์„œ UTF-8 ์ถœ๋ ฅ ๋ฌธ์ œ

// ํ•ด๊ฒฐ: ์ฝ˜์†” ์ธ์ฝ”๋”ฉ ์„ค์ •
#ifdef _WIN32
#include <io.h>
#include <fcntl.h>
_setmode(_fileno(stdout), _O_U8TEXT);
#endif

๐Ÿ“š ๋ฌธ์„œ

  • API ์„ค๊ณ„: ์ƒ์„ธํ•œ API ๋ฌธ์„œ
  • ๊ธฐ์ˆ  ์•„ํ‚คํ…์ฒ˜: ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฌธ์„œ
  • ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ: ๊ธฐ์—ฌ์ž๋ฅผ ์œ„ํ•œ ๊ฐ€์ด๋“œ
  • ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ: ์ „์ฒด ํ”„๋กœ์ ํŠธ ๋กœ๋“œ๋งต

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. Fork ์ด ์ €์žฅ์†Œ
  2. Feature ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ (git checkout -b feature/amazing-feature)
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ปค๋ฐ‹ (‘git commit -m 'Add amazing feature’)
  4. **๋ธŒ๋žœ์น˜์— Push** (git push origin feature/amazing-feature`)
  5. Pull Request ์ƒ์„ฑ

์ž์„ธํ•œ ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ๋Š” CONTRIBUTING.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” [MIT ๋ผ์ด์„ ์Šค](LICENSE) ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

  • STL: ์„ค๊ณ„ ์ฒ ํ•™๊ณผ API ํŒจํ„ด์— ์˜๊ฐ
  • ICU: ๊ฐ•๋ ฅํ•œ ์œ ๋‹ˆ์ฝ”๋“œ ์ง€์›
  • C++20: ํ˜„๋Œ€์ ์ธ ์–ธ์–ด ๊ธฐ๋Šฅ๋“ค

โญ ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์œ ์šฉํ•˜๋‹ค๋ฉด Star๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”!