# There is a group of contractions that are represented by one letter
# only. If they come as single words, they should be abbriviated
# normally. But if they come as a part of bigger word, dots 36 must be
# placed before the character that represents the abbreviated word.

# This is the most problematic rule for me so far. I should define
# every contraction twice, one with the "word" opcode, and another
# with the "partword" upcode.

# When I used the "word" upcode, a big problem happens with
# back-translation: if the contraction is part of a word, NVDA
# automatically assumes that the character before the dots 36 is a
# contraction as well and automatically expand it. An example if the
# "word" upcode is used:

table: |
  include tables/unicode.dis
  include tables/ar-ar-g1.utb
  word ربما 1235
  partword ربما 36-1235
  word ليس 123
  partword ليس 36-123
  word ولما 2456
  partword ولما 36-2456

tests:

# As separate words it works just fine:
- - ربما ليس هو
  - ⠗ ⠇ ⠓⠺
# As part of a word, it fails:
- - وليس
  - ⠺⠤⠇
  - xfail: true
# What happens is that it assumes both characters as contractions,
# but it should only consider the one after dots 36:
- - وليس
  - ⠤⠺⠤⠇
# The first character in the word is not an abbreviation, yet NVDA
# assumes that it is a seperate word as soon as I put dots 36 after
# it, because it thinks it is a dash symbol, not a contraction
# indicator. In grade1, the word "وليس" will be "ولماليس"

# Another example:
- - لربما
  - ⠇⠤⠗
  - xfail: true
# Incorrect back-translation:
- - لربما
  - ⠤⠇⠤⠗

# To temporarily work around this issue, I used the "lowword"
# upcode. This resulted in good back-translation, but disabled the use
# of all these abbreviations if they come connected with punctuation
# marks, which is not desirable.

table: |
  include tables/unicode.dis
  include tables/ar-ar-g1.utb
  lowword ربما 1235
  partword ربما 36-1235
  lowword ليس 123
  partword ليس 36-123
  lowword ولما 2456
  partword ولما 36-2456

tests:

# As a seperate word it works fine:
- - ليس
  - ⠇
# Due to the use of "lowword", they will not be translated next to punctuations:
- - ليس ربما.
  - ⠇ ⠗⠲
  - xfail: true
# What happens:
- - ليس ربما.
  - ⠇ ⠗⠃⠍⠁⠲
# It solves the issue of the character that comes before dots 36.
- - لربما
  - ⠇⠤⠗
