From 3cfa80c8fdb34c050cbe63e273d5cf53dc5d7863 Mon Sep 17 00:00:00 2001 From: David D Lowe Date: Thu, 12 Jan 2017 09:59:50 +0100 Subject: [PATCH] Add explanation section in README.md --- README.md | 38 +++++++++++++++++++++++++++++++++++ docs/normal_peace.png | Bin 0 -> 3326 bytes docs/sublime_peace.png | Bin 0 -> 3930 bytes docs/sublime_peace_after.png | Bin 0 -> 3850 bytes 4 files changed, 38 insertions(+) create mode 100644 docs/normal_peace.png create mode 100644 docs/sublime_peace.png create mode 100644 docs/sublime_peace_after.png diff --git a/README.md b/README.md index b807160..c88862e 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,44 @@ Tools > Bidirectional text Ctrl + B Right click > Bidirectional text +How does this work? +------------------- + +This tool takes a similar approach as to tools like [python-bidi](https://github.com/MeirKriheli/python-bidi), [python-arabic-reshaper](https://github.com/mpcabd/python-arabic-reshaper), [Better-Arabic-Reshaper](https://github.com/agawish/Better-Arabic-Reshaper/) and others. +It does not make Sublime Text fully support bidirectional text. +Rather, it uses a clever hack to make the text in the Arabic family of languages look acceptable. + +Take the word سلام, for instance, made of the these Unicode code-points in the order that they are typed and stored on disk: + +- `U+0633 ARABIC LETTER SEEN` +- `U+0644 ARABIC LETTER LAM` +- `U+0627 ARABIC LETTER ALEF` +- `U+0645 ARABIC LETTER MEEM` + +These letters should be displayed right-to-left visually, and the letters should change shape depending on their position as expected in Arabic, like in this image: + +![](docs/normal_peace.png) + +Instead, Sublime Text 3 displays the letters left-to-right visually (which is the wrong order), and the letters are incorrectly disconnected: + +![](docs/sublime_peace.png) + +When you run this plugin with the selected text, it transforms the text into these Unicode code points in this order: + +- `U+FEE1 ARABIC LETTER MEEM ISOLATED FORM` +- `U+FEFC ARABIC LIGATURE LAM WITH ALEF FINAL FORM` +- `U+FEB3 ARABIC LETTER SEEN INITIAL FORM` + +These Unicode code-points are different from the original ones, because they specify exactly in which inflexible form each letter should be displayed (and the two letters *lam* and *alef* have been converted into one code point). +The order as well as changed, now the letter that is the right-most is first, rather then the letter that is read the first. + +The effect is that the Arabic text now looks pretty in editors with poor bidi support like Sublime Text, like in this image: + +![](docs/sublime_peace_after.png) + +However, you will still have issues if you try to edit the text. + + Bug tracker ---------- Post an issue here on Github. diff --git a/docs/normal_peace.png b/docs/normal_peace.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8e9bab8b1146b04eabaab4c4ec2efe0549e79f GIT binary patch literal 3326 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 G1NuMoA5r-L literal 0 HcmV?d00001 diff --git a/docs/sublime_peace.png b/docs/sublime_peace.png new file mode 100644 index 0000000000000000000000000000000000000000..ff4816e73648346cc994652f386844505cdc255b GIT binary patch literal 3930 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