-char_type Paragraph::transformChar(char_type c, pos_type pos) const
-{
- if (!Encodings::isArabicChar(c))
- return c;
-
- char_type prev_char = ' ';
- char_type next_char = ' ';
-
- for (pos_type i = pos - 1; i >= 0; --i) {
- char_type const par_char = d->text_[i];
- if (!Encodings::isArabicComposeChar(par_char)) {
- prev_char = par_char;
- break;
- }
- }
-
- for (pos_type i = pos + 1, end = size(); i < end; ++i) {
- char_type const par_char = d->text_[i];
- if (!Encodings::isArabicComposeChar(par_char)) {
- next_char = par_char;
- break;
- }
- }
-
- if (Encodings::isArabicChar(next_char)) {
- if (Encodings::isArabicChar(prev_char) &&
- !Encodings::isArabicSpecialChar(prev_char))
- return Encodings::transformChar(c, Encodings::FORM_MEDIAL);
- else
- return Encodings::transformChar(c, Encodings::FORM_INITIAL);
- } else {
- if (Encodings::isArabicChar(prev_char) &&
- !Encodings::isArabicSpecialChar(prev_char))
- return Encodings::transformChar(c, Encodings::FORM_FINAL);
- else
- return Encodings::transformChar(c, Encodings::FORM_ISOLATED);
- }
-}
-
-