# hallelujahim | dongyuwei | Knowledge Base | Instagit

hallelujahIM(哈利路亚 英文输入法) is  an intelligent English input method with auto-suggestions and spell check features.

GitHub Stars: 2.5k

Repository: https://github.com/dongyuwei/hallelujahim

---

## Articles

### [How the CI Build Script (`ci-build-and-tests.sh`) Automates iOS Building and Testing in HallelujahIM](/dongyuwei/hallelujahim/how-does-the-ci-build-script-ci-build-and-tests_sh-automate-building-and-testing)

Discover how the ci-build-and-tests.sh script in HallelujahIM automates iOS CI by cleaning dependencies, running xcodebuild tests, and building the app. Learn more now

- Tags: how-to-guide
- Published: 2026-02-28

### [How Hallelujah IM Handles Non-ASCII Characters and Special Symbols: A Code-Level Analysis](/dongyuwei/hallelujahim/how-does-the-input-method-handle-non-ascii-characters-and-special-symbols)

Discover how Hallelujah IM handles non-ASCII characters and special symbols. Learn its direct passing approach for non-ASCII and immediate commitment for symbols.

- Tags: deep-dive
- Published: 2026-02-28

### [How Hallelujah IM Compares Word Frequency Between Multiple Candidate Matches](/dongyuwei/hallelujahim/how-does-the-input-method-compare-word-frequency-between-multiple-candidate-matches)

Discover how Hallelujah IM compares word frequency between candidate matches. This input method ranks words using a JSON dictionary and custom comparator for precise sorting.

- Tags: internals
- Published: 2026-02-28

### [How the Hallelujah Input Method Manages Memory and Loads Large Dictionary Files Efficiently](/dongyuwei/hallelujahim/how-does-the-input-method-manage-memory-and-load-large-dictionary-files-efficiently)

Discover how the Hallelujah Input Method efficiently loads large dictionaries, minimizes memory usage, and keeps your UI responsive using lazy loading, streaming, and memory-mapped Marisa-Tries.

- Tags: internals
- Published: 2026-02-28

### [How Unit Tests in Tests/TestConversionEngine.mm Verify the Conversion Engine Logic](/dongyuwei/hallelujahim/how-do-the-unit-tests-in-tests-testconversionengine_mm-verify-conversion-logic)

Understand how unit tests in Tests/TestConversionEngine.mm verify conversion logic. Learn how assertions validate data loading, ranking, encoding, and spell-checking.

- Tags: how-to-guide
- Published: 2026-02-28

### [How the Hallelujah Input Method Is Packaged as a .pkg Installer Using build-package.bash](/dongyuwei/hallelujahim/how-is-the-input-method-packaged-as-a-pkg-installer-using-build-package_bash)

Learn how build-package.bash creates a macOS .pkg installer for the Hallelujah Input Method. Automate compilation, payload prep, pkgbuild, and postinstall scripts for seamless registration.

- Tags: how-to-guide
- Published: 2026-02-28

### [How Hallelujah IM Handles Candidate Window Pagination and Scrolling](/dongyuwei/hallelujahim/how-does-the-input-method-handle-candidate-window-pagination-and-scrolling)

Learn how Hallelujah IM handles candidate window pagination and scrolling by managing the candidate list and leveraging IMKCandidates methods for efficient navigation.

- Tags: internals
- Published: 2026-02-28

### [How InputController Handles Key Events and Modifiers in the Hallelujah IME](/dongyuwei/hallelujahim/how-does-the-inputcontroller-handle-key-events-and-modifiers)

Learn how the InputController in hallelujahim handles key events and modifiers by filtering shortcuts, toggling input modes, managing modifier history, and processing characters.

- Tags: internals
- Published: 2026-02-28

### [How the Phonex Encoding Process Works in phonex.js for Fuzzy Search](/dongyuwei/hallelujahim/how-does-the-phonex-encoding-process-work-in-phonex_js-for-fuzzy-search)

Discover how the phonex encoding process in phonex.js transforms names into phonetic codes for fuzzy search. Learn about normalization substitutions and character-set encoding.

- Tags: deep-dive
- Published: 2026-02-28

### [How New Words Are Added to the Dictionary Files in HalleluJAH-Im](/dongyuwei/hallelujahim/how-are-new-words-added-to-the-dictionary-files-words_with_frequency_and_translation_json)

Learn how to add new words to HalleluJAH-Im's dictionary files. Discover the manual update process and the add_new_words.js utility for efficient regeneration.

- Tags: how-to-guide
- Published: 2026-02-28

### [How to Debug the Hallelujah Input Method Using NSLog and Crash Reports in ~/Library/Logs/DiagnosticReports/](/dongyuwei/hallelujahim/how-to-debug-the-input-method-using-nslog-and-crash-reports-in-library-logs-diagnosticreports)

Debug the Hallelujah input method effectively. Use NSLog statements and analyze crash reports in ~/Library/Logs/DiagnosticReports/ to pinpoint and resolve issues for smoother performance.

- Tags: how-to-guide
- Published: 2026-02-28

### [How to Build the Hallelujah Input Method from Xcode and Install It to /Library/Input Methods/](/dongyuwei/hallelujahim/how-to-build-the-input-method-from-xcode-and-install-to-library-input-methods)

Learn to build and install Hallelujah Input Method from Xcode to /Library/Input Methods/. Follow these steps to easily integrate custom input methods into your macOS system.

- Tags: how-to-guide
- Published: 2026-02-28

### [How the WebServer Serves the Preferences UI at localhost:62718 in HallelujahIM](/dongyuwei/hallelujahim/how-does-the-webserver-serve-the-preferences-ui-at-localhost-62718)

Discover how the WebServer serves the preferences UI at localhost:62718 by binding GCDWebServer, serving Vue.js files, and exposing a JSON API for NSUserDefaults. Learn the technical details.

- Tags: internals
- Published: 2026-02-28

### [How HALLELUJAH IM Handles the Composition Buffer and Original Buffer States](/dongyuwei/hallelujahim/how-does-the-input-method-handle-composition-buffer-and-original-buffer-states)

Understand how HALLELUJAH IM manages composition and original buffer states. Learn how InputController synchronizes keystrokes and finalized candidates.

- Tags: internals
- Published: 2026-02-28

### [How ConversionEngine Sorts Candidates by Word Frequency in hallelujahim](/dongyuwei/hallelujahim/how-does-the-conversionengine-sort-candidates-by-word-frequency)

Learn how ConversionEngine sorts candidates by word frequency in hallelujahim using a JSON dictionary and subtractive frequency values for prioritized results.

- Tags: deep-dive
- Published: 2026-02-28

### [How to Select Candidates Using Number Keys 1‑9, Enter, and Space in Hallelujah IM](/dongyuwei/hallelujahim/how-are-candidates-selected-using-number-keys-1-9-enter-and-space)

Learn how Hallelujah IM selects candidates using number keys 1-9, Enter, and Space. Discover the commitComposition and commitCompositionWithoutSpace methods for efficient input.

- Tags: how-to-guide
- Published: 2026-02-28

### [How the Shift Key Toggles Smart and Traditional English Mode in Hallelujah IM](/dongyuwei/hallelujahim/how-does-the-shift-key-toggle-between-smart-english-mode-and-traditional-english-mode)

Learn how the Shift key toggles Hallelujah IM between smart and traditional English modes. Understand how keystrokes pass directly to macOS or buffer for conversion.

- Tags: internals
- Published: 2026-02-28

### [Pinyin-to-English Input Conversion: How HallelujahIM Maps "suanfa" to "algorithm"](/dongyuwei/hallelujahim/how-does-pinyin-to-english-input-conversion-work-suanfa-algorithm)

Learn how HallelujahIM converts pinyin to English input like suanfa to algorithm using a cedict dictionary lookup. Discover the efficient mapping process.

- Tags: deep-dive
- Published: 2026-02-28

### [How AnnotationWinController Displays Chinese Translations and IPA Phonetic Symbols in hallelujahim](/dongyuwei/hallelujahim/how-does-the-annotationwincontroller-display-chinese-translations-and-ipa-phonetic-symbols)

Learn how AnnotationWinController displays Chinese translations and IPA symbols in hallelujahim by receiving formatted strings and rendering text in an NSTextField panel.

- Tags: how-to-guide
- Published: 2026-02-28

### [How the Text Expander Reads Custom Expansions from `~/.you_expand_me.json` in hallelujahIM](/dongyuwei/hallelujahim/how-does-the-text-expander-feature-read-and-apply-custom-expansions-from-you_expand_me_json)

Discover how hallelujahIM's Text Expander loads custom abbreviations from ~/.you_expand_me.json at startup. Learn to store and apply personalized expansions efficiently.

- Tags: internals
- Published: 2026-02-28

### [How the Phonex Algorithm Enables Phonetic Fuzzy Input in hallelujahim](/dongyuwei/hallelujahim/how-does-the-phonex-algorithm-enable-phonetic-fuzzy-input-cerrage-courage)

Explore how the Phonex algorithm transforms words into sound codes, enabling phonetic fuzzy input in hallelujahim for accurate matching of similar sounding words like cerrage and courage.

- Tags: internals
- Published: 2026-02-28

### [How Hallelujah IM Uses Damerau-Levenshtein Distance for Fuzzy Spell Checking](/dongyuwei/hallelujahim/how-does-the-spell-checker-use-damerau-levenshtein-distance-for-fuzzy-matching)

Discover how Hallelujah IM leverages Damerau-Levenshtein distance for fuzzy spell checking by ranking candidate words within an edit distance of three.

- Tags: deep-dive
- Published: 2026-02-28

### [How HallelujahIM Integrates with the macOS InputMethodKit Framework](/dongyuwei/hallelujahim/how-does-the-input-method-integrate-with-macos-inputmethodkit-framework)

Learn how HallelujahIM integrates with the macOS InputMethodKit framework. Discover its use of IMKInputController IMKCandidates setMarkedText and insertText for efficient Chinese input.

- Tags: how-to-guide
- Published: 2026-02-28

### [How ConversionEngine Implements Offline Dictionary Lookup Using marisa-trie](/dongyuwei/hallelujahim/how-does-conversionengine-implement-offline-dictionary-lookup-using-marisa-trie)

Discover how ConversionEngine uses marisa-trie for fast offline Chinese word lookups. Load the static marisa-trie binary at startup and query with predictive_search for instant results without network dependencies.

- Tags: how-to-guide
- Published: 2026-02-28

