Git Product home page Git Product logo

mlym_mozhi_keyman's Introduction

Malayalam Mozhi Keyman Keyboard

mlym-mozhi-Keyman

Mozhi is one of most popular phonetic keyboarding scheme for Malayalam script. It was originally designed by Cibu for the Varamozhi project and he still maintains the Mozhi specification.

Keyman

This project implements the Mozhi layout in Keyman 9, the popular keyboarding application. Starting from release Keyman 9.0.528.0, the program is again made available as a free program by SIL International after they acquired the rights to Keyman software from Tavultesoft, the company that owned Keyman. This keyboard will support all the Malayalam Characters available in Unicode 10.

How to collaborate on this project

You are welcomed to collaborate in this project. The Keyman keybaord development is not a big task. So even if you are not a developer, you can still contribute to this project. To participate in this project you'll need the Keyman Developer application, which can be downloaded from here. Once you download and install Keyman desktop on your computer, visit the Developer Support page and Keyman Keyboard Languge page to learn more about how to write Keyman Keybaords.

Setting up your system for collaboration

This project is an open source project. That means you are invited to participate in the development of this project. You don't have to be a programmer to participate in this project. If you are excited about this project, you can contribute to this project by [reporting issues], [improving the documentation] or [share about this project].

In this project we will use Git as our Version Control Software. Since you are reading this, you might already know that this project is hosted on GitHub. You should also install a Git client software on your local machine. We will use the Git Forking Workflow for this project. Take a moment to read through this link and learn the workflow and philosophy. If you are new you git and version controlling system, you may want to take the interactive training offered on the Atlasian Website.

Here is an overview of the workflow

  • Fork this repository.
  • Clone your copy into a convenient location on your computer. (If you haven't already installed a git client download and install one. Once you have a git client installed, open a Command Window (Right click on your folder while holding down the Shift key, and select the option, Open Command Window Here.

Open Command Window

C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git clone https://github.com/<your github account name>/mlym-mozhi-Keyman.git

Note: You can alternatively use Git for Windows, "mingw" if you are more familiar with a linux like terminal.

  • The Forking workflow requires two remotes (links to the public server repo). One to your own repo, which is already created when you cloned your personal public repo to your local system in the previous step. This remote is normally called the origin. Make a new remote upstream which will allow you to stay updated with the official repo.
C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git remote add upstream https://github.com/beniza/mlym-mozhi-Keyman.git

Now, go ahead and list the remotes to see if everything looks good!

C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git remote -v

origin  https://github.com/<your github account name>/mlym-mozhi.git (fetch)
origin  https://github.com/<your github account name>/mlym-mozhi.git (push)
upstream  https://github.com/beniza/mlym-mozhi.git (fetch)
upstream  https://github.com/beniza/mlym-mozhi.git (push)
  • Decide on an issue you wanted to contribute.
    • Please see the Issues page of this repo to see the pending issues. Please make an issue on the repo, if you haven't find the issue you are planning to contribute.
  • Create a new branch
C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git branch issue-#
C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git checkout issue-#

Alternatively, you can combine these two steps in one command

C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git checkout -b issue-#

In issue-# replace # with the issue number you are trying to fix.

Now you are ready to make changes to the project. Open the Keyboard file using Keyman Developer. Add necessary changes to the code or documentation. The next step is to check in the changes you have made. Git will keep the track of the changes you are making to the project. By using the following commands, you can let git know that you have finished working on something, and also why you made that change.

  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git status # This will list all the files you have made changes.
  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git add <filename> # <filename> specifies the name of the file you have edited.
  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git commit -m "A brief message answering the question, why you made this change" # <filename> specifies the name of the file you have edited.

If you have changed the code, make sure that you test it thoroughly. Refer to the section explaining the testing a Keyman Keyboard to learn how to test your Keyboard.

  • Once you are satisfied with the changes made, check in your changes. This is done in several steps.

    • Save your work
    • Open or switch to your terminal window
    • List the files got changed in during the editing process
  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git status

This step can help you remind about the changes you've made during your editing process.

  • commit your changes
  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git commit -a

This will open up a new window, where you can give a commit message describing the changes you have made. Depending on the type of change you are making, this commit message can be a single line summary of the change or a very detailed explanation. For any major updates, we recommend that you include a good commit message that answer three questions about your patch:

Why is it necessary? It may fix a bug, it may add a feature, it may improve performance, reliabilty, stability, or just be a change for the sake of correctness.

How does it address the issue? For short obvious patches this part can be omitted, but it should be a high level description of what the approach was.

What effects does the patch have? (In addition to the obvious ones, this may include benchmarks, side effects, etc.) Read more on Commit messages

  • Update your branch with the changes from the official repo. There are several ways you can get your local repo synced with the official repo. Before you send the changes made by you to the server, you should always update your repo with the latest changes on the brach you are working on. In this workflow we will use the rebasing strategy for updating our local repo.

Make sure that you are on your issue branch first

  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git checkout issue-#
  • rebase the branch you're on onto whatever is on the upstream's master branch (the changes other team members have made since the last time you did this):
  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git pull --rebase upstream master

Occassionally you will get a merge conflict at this point. You will have to manually fix any conflicts, before you'll be able to submit a change to the server.

  • Resolve any conflicts When you follow the rebasing strategy to maintain the project, Git will update your local branch one commit from the server at a time. As soon as it finds a conflict, it pauses the operation and allow you to fix it. Open the file and resolve the conflicts (Git will highlight the places where the conflict occur by adding >>>. Review the code on your side and the code coming from the server carefully and decide how you want to resolve it by accepting the changes from the server or overwriting it with your code.

Remember that the code coming from the server is reviewed by the project maintainers and if you choose to replace it with your changes, you may have to prove to the reviewing team, why should they accept your code. In any case, expect to have a discussion around this change with the project maintainers/reviewers.

Once you finish editing the file, you can continue the rebase operation by

  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git add <filename>
  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git rebase --continue

Continue this operation until all the conflicts have been resolved.

  • push your commit to the remote origin
  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git push origin issue-#

One of the side effect of rebasing is it actually recreates new versions of each commit you've made on top of your team member's commits. So during a push operation, Git will not recognize your changes as the same as what is already on the origin repo. Therefore it will think your origin is ahead of local, and ask you to pull before pushing. If this happens, you can force Git to overwrite your origin repo with you have locally

  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git push -f origin issue-#
  • Create a pull request to the upstream

At this point you can visit your repository on github using a browser, and you are ready to make a pull request to the original repository. Click on the New pull request button on the page. Choose your issue-# branch and submit a pull request. Once we receive a pull request, one of us will review the changes and all the relevant changes will be integrated into the project.

  • Final step, delete the local branch and update master

Once the project maintainer accept your pull request, you can safely delete your local branch and update the master branch with from the upstream. Before you do this, make sure that you switched to your master branch.

C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git checkout master

To delete the issue-# branch,

C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git branch -d issue-#

And finally update your master branch

  C:\Users\<your windows user name>\Documents\Work\mlym-mozhi-Keyman> git pull --rebase upstream master

That's it. You've made a contribution to the project.

Please visit the wiki page for more info.

mlym_mozhi_keyman's People

Contributors

beniza avatar binilasanki avatar

Watchers

 avatar  avatar

Forkers

binilasanki

mlym_mozhi_keyman's Issues

' behavior

What is the expected behavior

  • ' should produce smart quotes everywhere except the following cases
    • if the previous character is an open quote, send a closing quote
    • if the previous character is a closing quote, send a straight quote

What is the actual behavior?

  • Not yet implemented

Do you have a suggestion to make?

InKey Rule?

'	> map 【‘ ’ '】
	| 【‘】

" behavior

What is the expected behavior

  • " should produce smart quotes everywhere except the following cases
    • if the previous character is an open double quote, send a closing double quote
    • if the previous character is a closing double quote, send a straight quote

What is the actual behavior?

  • Not yet implemented

Do you have a suggestion to make?

InKey Rule?

"	> map 【“ ” "
	| 【“】

_ behavior

What is the expected behavior

  • After a Malayalam alphabet, send ZWNJ
  • After a ZWNJ, send nothing (to prevent repeated typing of ZWNJ)

What is the actual behavior?

  • Not yet implemented

InKey Rule

_	> after 【〔ZWNJ〕】 send 【】 // To prevent repeated typing of ZWNJs. 
	| 【〔ZWNJ〕】 

* behavior

What is the expected behavior

  • After \ send multiplication sign (×) # 0xD7
  • Everywhere else, send an asterisk (*)

What is the actual behavior?

Do you have a suggestion to make?

InKey Rule?

*	> map 【\ ×】
	| 【*】

- behavior

What is the expected behavior

  • After \ send minus # mathematical minus sign (0x2212)
  • Everywhere else send a hyphen (0x2D)

What is the actual behavior?

Do you have a suggestion to make?

InKey Rule?

-	> map 【\ −】
	| 【-】

Finish README.md

Write a README.md file which will help any who is willing to collaborate on the project. So this should explain our philosophy, point to relevant resource and clearly describe the workflow and processes.

# behavior

What is the expected behavior

  • Send ൎ (Malayalam Dot Reph) after ർ
  • Send # everywhere else

What is the actual behavior?

InKey Rule

#	> map 【ർ ൎ】
	| 【#】

/ behavior

What is the expected behavior

  • After / send malayalam sign avagraha (ഽ) # 0x0D3D
  • After ഽ send //
  • After \ send division sign (÷) # 0xF7
  • Everywhere else, send /

What is the actual behavior?

Do you have a suggestion to make?

InKey Rule?

/	> map 【\ ÷】【/ ഽ //】 
	| 【/】

h behavior

What is the expected behavior

  1. h is used for aspiration in Mozhi. example, 'ക്' + 'h' > 'ഖ' --done

Exceptions

  1. h followed by ൿ should give ച്
  2. h followed by ച് should give ഛ്
  3. h followed by ൻൿ should give ഞ്ച്
  4. h followed by ന്റ് should give ന്ത്
  5. h followed by ട്ട് should give ത്ത്
  6. h followed by റ്റ് should give ത്
  7. h followed by ത് should give ഥ്
  8. h followed by സ് should give ഷ്

What is the actual behavior?

  • Aspiration is not supported currently

Do you have a suggestion to make?

InKey Rule?

$h::InCase(Map("ൻൿ ഞ്ച്", "ന്റ് ന്ത്", "ൿ ച്", "ക്ക് ച്ച്", "ക് ഖ്", "ഗ് ഘ്", "ച് ഛ്", "ജ് ഝ്", "ട്ട് ത്ത്", "ട് ഠ്", "ഡ് ഢ്", "റ്റ് ത് ഥ്", "ദ് ധ്", "പ് ഫ്", "ബ് ഭ്", "സ് ഷ്", "ശ് ഴ്"))
  ||InCase(After(Chillu) Replace(ZWNJ) with("ഹ്"))
  ||Send("ഹ്")

~ behavior

What is the expected behavior

  • After a chillu, send chillu base + virama
  • After all other Malayalam Alphabets and Vowel Matras, send a virama
  • After a virama send nothing

What is the actual behavior?

Do you have a suggestion to make?

InKey Rule?

~	> map 【ൻ ന്】【ൺ ണ്】【ർ ര്】【ൽ ല്】【ൾ ള്】【ൿ ക്】【ഋ റ്】
	| after 【〔AnyRegularLetterOrVowelSign〕】 send 【്】
	| DoChilluFixAndSend 【്】【്】 

Change README to include devel branch

What is the expected behavior
No direct submission to the master as it is updated only through a PR by maintainers.

What is the actual behavior?
The README file suggest sending a PR to the master branch from user's issue-# branch.

No need for a ZWNJ between Chillu and Full letters

What is the expected behavior

When a user press _ after a chillu, the ZWNJ send by the _ shouldn't be stored. In other words, the _ should prevent the conjunct formation, but the ZWNJ is not needed in this case as chillu and the following character can exists without a ZWNJ.

What is the actual behavior?

Yet to be implemented

InKey Rule

function DoChilluFixAndSend 【form1】【form2】
 after 【[ൺ-ൿ]】 replace 【〔ZWNJ〕】 with 【〔form1〕】 //  No need for a ZWNJ between Chillu and Full letters. Keymagic Rule: $chills[*] + U200C + $cDirectSmallKeys[*] => $1 + $cDirectSmallValues[$3] + '്'
	| 【〔form2〕】

Create a Keyboard Layout file

Either update the existing Keyboard Layout file or create a new one. If a new one is created, it should not only show the key mapping, but also should explain the behavior of each key stroke.

Handle digits

Expected behavior

  • When a user types a number after \ change it to a Malayalam digit
  • Similarly, if the previous digit is a Malayalam digit, and the user try to type another digit, send a Malayalam digit

Actual behaviour

  • Feature is not yet implemented

InKey Rule

function DoDigit 【western】【mal】
 map 【\ 〔mal〕】
	| after 【[൦-൯]】 send 【〔mal〕】
	| 【〔western〕】

\ behavior

What is the expected behavior

The reverse solidus (commonly known as backlash) \

The \ key plays a major role in this layout. It is used as a modifier character. It means that when a user presses this key, it will modify the character before or the the character after. Below are the rules.

  • Atomic chillu (Unicode 5.1 or later) to sequence chillu (Unicode 5.0 or older versions)
    • After send ന്‍ # ന + virama + Zero Width Joiner
    • After send ണ്‍ # ണ + virama + Zero Width Joiner
    • After send ര്‍ # ര + virama + Zero Width Joiner
    • After send ല്‍ # ല + virama + Zero Width Joiner
    • After send ള്‍ # ള + virama + Zero Width Joiner
    • After ൿsend ക്‍ # ക + virama + Zero Width Joiner
  • And vice versa too
    • After ന്‍send
    • After ണ്‍send
    • After ര്‍send
    • After ല്‍send
    • After ള്‍send
    • After ക്‍send ൿ
  • After റ്റ് send and after send റ്റ്
  • Archaic forms
    • After send
    • After send
  • Letters to signs
    • After മ്send
    • After send
    • After send ി
    • After send
    • After send
    • After send
    • After send
    • After send
    • After send
    • After send
    • After send
    • After send
    • After send
    • After send
    • After send
    • After send
  • Date sign
    • After send
    • After ന്‍send
  • Fractions
    • After 10send
    • After 100send
    • After 1000send
    • After 1/4send
    • After 1/2send
    • After 3/4send
    • After 3/4send
    • After 1/16send
    • After 1/8send
    • After 3/16send
    • After 1/160send
    • After 1/40send
    • After 3/80send
    • After 1/20send
    • After 1/10send
    • After 3/20send
    • After 1/5send
  • Dashes
    • After ---send # m-dash
    • After --send # n-dash
    • After -send # minus sign
  • Nasalization (Anusvara variants)
    • After send
    • After send
  • Full stops (Devanagari Danda)
    • After . send
    • After send
  • In every other places send \

What is the actual behavior?

Do you have a suggestion to make?

  • We should change the atomic chillu <> sequence chillu switching to \. Since there is no visual difference between the two, if a user accidentally press a \ to switch from one form to another, he might not notice the change.
  • Since this key has so many functions, it must be tested thoroughly before merging to the master.
  • After each loop through the characters, should we send the '' character at the end? This will enable the user to type \ wherever he wishes.

InKey Rule?

\	> map 【ൻ ന്‍】【ൺ ണ്‍】【ർ ര്‍】【ൽ ല്‍】【ൾ ള്‍】【ൿ ക്‍】【റ്റ് ഺ】 //  switch between Atomic and Sequence Chillu Characters
	| map 【ീ ൟ】【ൗ ൌ】 // Malayalam Archaic Characters
	| map 【ന്‍ ൻ】【ണ്‍ ൺ】【ര്‍ ർ】【ല്‍ ൽ】【ള്‍ ൾ】【ക്‍ ൿ】【ഺ റ്റ്】
	| map 【മ് ം】【ആ ാ】【ഇ ി】【ഈ ീ】【ഉ ു】【ഊ ൂ】【ഋ ൃ】【ൠ ൄ】【ഌ ൢ】【ൡ ൣ】【എ െ】【ഏ േ】【ഐ ൈ】【ഒ ൊ】【ഓ ോ】【ഔ ൗ】 // directly key vowel signs 
	| map 【ൻ ൹】【10 ൰】【100 ൱】【1000 ൲】【1/4 ൳】【1/2 ൴】【3/4 ൵】【3/4 ൵】【1/16 ൶】【1/8 ൷】【3/16 ൸】【1/160 ൘】【1/40 ൙】【3/80 ൚】【1/20 ൛】【1/10 ൜】【3/20 ൝】【1/5 ൞】
 	| map 【--- —】【-- –】【- −】  // Dashes 
	| map 【ം ഀ】【ഀ ഁ】 // Combining anusvara and candrabindu
	| map 【് ഻】【഻ ഼】 // Variant shape viramas
	| map 【. ।】【। ॥】 // Devanagari Danda
	| 【\】

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.