Varnam Input Method Engine for macOS. Easily type Indian languages on macOS

Overview

VarnamIME for macOS

Easily type Indian languages on macOS using Varnam transliteration engine.

Built at FOSSUnited's FOSSHack21.

This project is a hard-fork of lipika-ime. Changes made:

Lipika & Varnam is very different in their handling of transliteration. Both are incompatible with each other. Lipika is a good project to hack on to make your IME, it has a settings window, IME and installer. But it's difficult to get started. This IME removes many complicated code from it and tries to make it easier with improved documentation as well.

There aren't many documentation on how to make IMEs for macOS, especially in English. Getting started with XCode is also tricky for beginners. Setting up Lipika was also difficult.

Resources that helped in making IME on macOS (ordered by most important to the least):

Installation

Download VarnamIME.pkg installer from Releases. Double click to open the installer. You might need to explicitly allow installer to run from security settings.

After installation, you need to codesign manually to run it:

sudo codesign --force --deep --sign - /Library/Input\ Methods/VarnamIME.app
sudo codesign --force --deep --sign - /Applications/VarnamApp.app
/Library/Input\ Methods/VarnamIME.app/Contents/MacOS/VarnamIME -import # Import words
open /Library/Input\ Methods/VarnamIME.app # Run IME

This will get fixed once an Apple Developer account is purchased and the apps are signed with an official certificate.

After this, VarnamIME will be running in the background and you can switch to it from the system tray: https://apple.stackexchange.com/questions/135370/how-can-i-set-up-a-keyboard-shortcut-for-switching-input-source

If the installation didn't enable IME by default, try this: https://github.com/ratreya/lipika-ime/wiki#installation

See a demo of how Varnam works: https://www.youtube.com/watch?v=7bvahY0sdWo

Building

  • Make sure XCode is installed
  • Clone and do git submodule update --init
  • cd Installation && ./build
  • Run the newly built VarnamIME.pkg installer

License

Copyright (C) 2018 Ranganath Atreya

Copyright (C) 2021 Subin Siby

This program is free software: you can redistribute it and/or modify it under the terms of the GNU 
General Public License as published by the Free Software Foundation; either version 3 of the License, 
or (at your option) any later version.

This program comes with ABSOLUTELY NO WARRANTY; see LICENSE file.
Comments
  • IME crashing sometimes

    IME crashing sometimes

    Found that the IME is crashing sometimes. Stacktrace:

    Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
    0   com.varnamproject.mac.inputmethod.Varnam	0x0000000102681f80 Swift runtime failure: Index out of range + 0 [inlined]
    1   com.varnamproject.mac.inputmethod.Varnam	0x0000000102681f80 specialized Array._getElement(_:wasNativeTypeChecked:matchingSubscriptCheck:) + 0 [inlined]
    2   com.varnamproject.mac.inputmethod.Varnam	0x0000000102681f80 specialized Array.subscript.getter + 0 [inlined]
    3   com.varnamproject.mac.inputmethod.Varnam	0x0000000102681f80 ClientManager.getCandidateAt(_:) + 0 (ClientManager.swift:89) [inlined]
    4   com.varnamproject.mac.inputmethod.Varnam	0x0000000102681f80 VarnamController.commitCandidateAt(_:) + 0 (VarnamController.swift:105) [inlined]
    5   com.varnamproject.mac.inputmethod.Varnam	0x0000000102681f80 VarnamController.handle(_:client:) + 2968 (VarnamController.swift:240)
    6   com.varnamproject.mac.inputmethod.Varnam	0x000000010268190c specialized FixedWidthInteger.init(_:) + 24 [inlined]
    7   com.varnamproject.mac.inputmethod.Varnam	0x000000010268190c VarnamController.handle(_:client:) + 1316 (VarnamController.swift:236)
    8   com.varnamproject.mac.inputmethod.Varnam	0x000000010268201c @objc VarnamController.handle(_:client:) + 148
    9   com.apple.InputMethodKit      	0x00000001a6ef7064 -[IMKServer handleEvent_Common:characterIndex:edge:clientWrapper:controller:] + 2028
    10  com.apple.InputMethodKit      	0x00000001a6eebca0 __63-[IMKServer 
    

    EDIT: This crash happens when 1 is pressed, but won't crash for other numbers. Also, numbers can't be inputted anymore

    bug 
    opened by subins2000 0
  • Learn words

    Learn words

    • Select word by number key press
    • Ability to learn words
    • See recently learned words in settings
    • Use CMD/CTRL +DEL on a highlighted word to unlearn it

    Malayalam changelog:

    • അക്കങ്ങൾ ഉപയോഗിച്ച് വാകുകൾ തിരഞ്ഞെടുക്കാൻ കഴിയും
    • വാകുക്കൾ പഠിക്കാൻ വർണ്ണത്തിന് കഴിയും
    • വാക്ക് ഹൈലൈറ്റ് ചെയ്തിരിക്കുമ്പോൾ CTRL+DEL അല്ലെങ്കിൽ CMD+DEL അമർത്തിയാൽ ആ വാക്ക് വർണ്ണത്തിന്റെ ഓർമ്മയിൽ നിന്നും കളയാൻ കഴിയും
    • ഈയടുത്ത് പഠിച്ച വാക്കുകൾ സെറ്റിങ്ങ്സിൽ കാണാൻ കഴിയും, അവിടെ നിന്ന് തന്നെ ഏതെങ്കിലും unlearn ചെയ്യാനുള്ള അവസരവുമുണ്ട്.
    opened by subins2000 0
  • Bundle language support within .app as resources

    Bundle language support within .app as resources

    • Language files are included in .app itself instead of loading from /usr/local
    • Bundles .vst and .vlf files
    • Stronger integration with GoVarnam
    • Add Kannada support
    opened by subins2000 0
  • Implement varnam_cancel

    Implement varnam_cancel

    One user reported lag while loading suggestions, couldn't exactly figured out why but implementing varnam_cancel is a start.

    Varnam IBus engine use varnam_cancel for better performance.

    bug 
    opened by subins2000 0
  • Get an Apple dev account

    Get an Apple dev account

    The current installation process in Mac can be simplified by signing the executable with an official dev certificate. This costs 99$/year (for apple dev account).

    opened by subins2000 0
Releases(v0.3)
  • v0.3(Feb 28, 2022)

  • v0.2(Dec 27, 2021)

    Varnam for mac is now stable to use as a daily input method.

    What's Changed

    • Miscellaneous small changes by @subins2000 in https://github.com/varnamproject/varnam-macOS/pull/6
    • Learn words on selection & other features by @subins2000 in https://github.com/varnamproject/varnam-macOS/pull/7
    • Fix #8, varnam shouldn't crash when numbers are pressed by @subins2000 in https://github.com/varnamproject/varnam-macOS/pull/9

    Full Changelog: https://github.com/varnamproject/varnam-macOS/compare/alpha-0.1...v0.2

    Source code(tar.gz)
    Source code(zip)
    VarnamIME.pkg(13.10 MB)
  • alpha-0.1(Nov 14, 2021)

    Alpha version. Expected to work on all Macs, both Intel & M1. To set it up & running, special things need to be done. Read: https://github.com/varnamproject/varnam-macOS#installation

    Features:

    • [x] Ability to Type
    • [x] IME Settings App
    • [x] Installer
    • [x] Language included for now: Malayalam, Kannada, Hindi
    • [x] Words dictionary (2 lakh words) preloaded for Malayalam only
    • [ ] Select suggestions by number key
    • [ ] Ability to Learn words
    • [ ] Strictly follow transliteration scheme option
    • [ ] Suggestions limit settings
    • [ ] Recently Learned Words & option to unlearn them
    • [ ] Import words from file graphically
    • [ ] Train words graphically
    Source code(tar.gz)
    Source code(zip)
    VarnamIME.pkg(13.04 MB)
Owner
Varnamproject
“Varnam” is an open source, cross platform transliterator for Indian languages
Varnamproject
Calendar component with RTL languages written in swift

GDCalendar Calendar component with both RTL/LTR languages support with Swipe Gesture enabled navigation. Easy to use with Storyboard and Attributes In

Saeid 26 Jul 17, 2022
Awesome-gitignore-templates - A curated collection of useful gitignore templates for different programming languages while pushing your code to git. 😊 📝

Awesome Gitignore Templates A curated collection of useful gitignore templates for different programming languages while pushing your code to git. ??

Aashish Tamsya 19 Jun 11, 2022
iOS game for people to learn new languages who respond well to repetition.

iOS game to learn new languages for people who respond well to repetition. Including Italian, French, Chinese, German, Polish, Portuguese, Russian & S

Clinton D'Annolfo 22 Nov 1, 2022
Type-safe networking abstraction layer that associates request type with response type.

APIKit APIKit is a type-safe networking abstraction layer that associates request type with response type. // SearchRepositoriesRequest conforms to Re

Yosuke Ishikawa 1.9k Dec 30, 2022
A phantom type is a custom type that has one or more unused type parameters.

PhantomTypes A phantom type is a custom type that has one or more unused type parameters. Phantom types allow you to enforce type-safety without sacri

null 3 Nov 4, 2022
Imagine Engine - a fast, high performance Swift 2D game engine for Apple's platforms

Welcome to Imagine Engine, an ongoing project that aims to create a fast, high performance Swift 2D game engine for Apple's platforms that is also a j

John Sundell 1.8k Jan 3, 2023
Palico Engine: Metal-Based Game Engine in Swift 🐑

Palico Engine: Metal-Based Game Engine in Swift ?? Implement a game engine on macOS using Metal API. Still in development. Currently I am working on a

Junhao Wang 24 Dec 1, 2022
Input Mask is an Android & iOS native library allowing to format user input on the fly.

Migration Guide: v.6 This update brings breaking changes. Namely, the autocomplete flag is now a part of the CaretGravity enum, thus the Mask::apply c

red_mad_robot 548 Dec 20, 2022
Input Validation Done Right. A Swift DSL for Validating User Input using Allow/Deny Rules

Valid Input Validation Done Right. Have you ever struggled with a website with strange password requirements. Especially those crazy weird ones where

Mathias Quintero 37 Nov 3, 2022
Steven Troughton-Smith 57 Dec 6, 2022
Type-based input validation.

Ensure Type-based input validation try Ensure<PackageIsCool>(wrappedValue: packages.ensure) Validators A Validator is a type that validates an input.

Build Passed 5 Jan 22, 2022
Creates WordCloud type graph from a string or array of strings input.

CPTWordCloud Example To run the example project, clone the repo, and run pod install from the Example directory first. Requirements Installation CPTWo

Chronic Stim 1 Jan 7, 2022
Glide is a SpriteKit and GameplayKit based engine for building 2d games easily

Glide is a SpriteKit and GameplayKit based engine for building 2d games easily, with a focus on side scrollers. Glide is developed with Swift and works on iOS, macOS and tvOS.

null 433 Jan 6, 2023
Poi - You can use tinder UI like tableview method

Poi You can use tinder UI like tableview method Installation Manual Installation Use this command git clone [email protected]:HideakiTouhara/Poi.git Imp

null 65 Nov 7, 2022
Elegant Apply Style by Swift Method Chain.🌙

ApplyStyleKit ApplyStyleKit is a library that applies styles to UIKit using Swifty Method Chain. Normally, when applying styles to UIView etc.,it is n

shindyu 203 Nov 22, 2022
IMBeeHive is a kind of modular programming method

概述 IMBeeHive是用于iOS的App模块化编程的框架实现方案,本项目主要借鉴了阿里巴巴BeeHive,在此基础上通过逆向了一些大厂的APP使得功能更加强大完善。同时现在也在寻找一起开发这个框架的开发者,如果您对此感兴趣,请联系我的微信:alvinkk01. 背景 随着公司业务的不断发展,项目

null 6 Dec 14, 2021
A handy collection of Swift method and Tools to build project faster and more efficient.

SwifterKnife is a collection of Swift extension method and some tools that often use in develop project, with them you might build project faster and

李阳 4 Dec 29, 2022
Trace Swift and Objective-C method invocations

SwiftTrace Trace Swift and Objective-C method invocations of non-final classes in an app bundle or framework. Think Xtrace but for Swift and Objective

John Holdsworth 605 Dec 27, 2022
Elegant Apply Style by Swift Method Chain.🌙

ApplyStyleKit ApplyStyleKit is a library that applies styles to UIKit using Swifty Method Chain. Normally, when applying styles to UIView etc.,it is n

shindyu 203 Nov 22, 2022
Collapse and expand UICollectionView sections with one method call.

This library provides a custom UICollectionView that allows to expand and collapse sections. Provides a simple API to manage collection view appearanc

Touchlane 172 Dec 26, 2022