Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/intl/unicharutil/util/nsBidiUtils.cpp
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2
 *
3
 * This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
#include "nsBidiUtils.h"
7
8
namespace mozilla {
9
static const uint32_t kMinRTLChar = 0x0590;
10
} // namespace mozilla;
11
12
0
#define ARABIC_TO_HINDI_DIGIT_INCREMENT (START_HINDI_DIGITS - START_ARABIC_DIGITS)
13
0
#define PERSIAN_TO_HINDI_DIGIT_INCREMENT (START_HINDI_DIGITS - START_FARSI_DIGITS)
14
0
#define ARABIC_TO_PERSIAN_DIGIT_INCREMENT (START_FARSI_DIGITS - START_ARABIC_DIGITS)
15
#define NUM_TO_ARABIC(c) \
16
0
  ((((c)>=START_HINDI_DIGITS) && ((c)<=END_HINDI_DIGITS)) ? \
17
0
   ((c) - (uint16_t)ARABIC_TO_HINDI_DIGIT_INCREMENT) : \
18
0
   ((((c)>=START_FARSI_DIGITS) && ((c)<=END_FARSI_DIGITS)) ? \
19
0
    ((c) - (uint16_t)ARABIC_TO_PERSIAN_DIGIT_INCREMENT) : \
20
0
     (c)))
21
#define NUM_TO_HINDI(c) \
22
0
  ((((c)>=START_ARABIC_DIGITS) && ((c)<=END_ARABIC_DIGITS)) ? \
23
0
   ((c) + (uint16_t)ARABIC_TO_HINDI_DIGIT_INCREMENT): \
24
0
   ((((c)>=START_FARSI_DIGITS) && ((c)<=END_FARSI_DIGITS)) ? \
25
0
    ((c) + (uint16_t)PERSIAN_TO_HINDI_DIGIT_INCREMENT) : \
26
0
     (c)))
27
#define NUM_TO_PERSIAN(c) \
28
0
  ((((c)>=START_HINDI_DIGITS) && ((c)<=END_HINDI_DIGITS)) ? \
29
0
   ((c) - (uint16_t)PERSIAN_TO_HINDI_DIGIT_INCREMENT) : \
30
0
   ((((c)>=START_ARABIC_DIGITS) && ((c)<=END_ARABIC_DIGITS)) ? \
31
0
    ((c) + (uint16_t)ARABIC_TO_PERSIAN_DIGIT_INCREMENT) : \
32
0
     (c)))
33
34
char16_t HandleNumberInChar(char16_t aChar, bool aPrevCharArabic, uint32_t aNumFlag)
35
0
{
36
0
  // IBMBIDI_NUMERAL_NOMINAL *
37
0
  // IBMBIDI_NUMERAL_REGULAR
38
0
  // IBMBIDI_NUMERAL_HINDICONTEXT
39
0
  // IBMBIDI_NUMERAL_ARABIC
40
0
  // IBMBIDI_NUMERAL_HINDI
41
0
42
0
  switch (aNumFlag) {
43
0
    case IBMBIDI_NUMERAL_HINDI:
44
0
      return NUM_TO_HINDI(aChar);
45
0
    case IBMBIDI_NUMERAL_ARABIC:
46
0
      return NUM_TO_ARABIC(aChar);
47
0
    case IBMBIDI_NUMERAL_PERSIAN:
48
0
      return NUM_TO_PERSIAN(aChar);
49
0
    case IBMBIDI_NUMERAL_REGULAR:
50
0
    case IBMBIDI_NUMERAL_HINDICONTEXT:
51
0
    case IBMBIDI_NUMERAL_PERSIANCONTEXT:
52
0
      // for clipboard handling
53
0
      //XXX do we really want to convert numerals when copying text?
54
0
      if (aPrevCharArabic) {
55
0
        if (aNumFlag == IBMBIDI_NUMERAL_PERSIANCONTEXT)
56
0
          return NUM_TO_PERSIAN(aChar);
57
0
        else
58
0
          return NUM_TO_HINDI(aChar);
59
0
      }
60
0
      else
61
0
        return NUM_TO_ARABIC(aChar);
62
0
    case IBMBIDI_NUMERAL_NOMINAL:
63
0
    default:
64
0
      return aChar;
65
0
  }
66
0
}
67
68
nsresult HandleNumbers(char16_t* aBuffer, uint32_t aSize, uint32_t aNumFlag)
69
0
{
70
0
  uint32_t i;
71
0
72
0
  switch (aNumFlag) {
73
0
    case IBMBIDI_NUMERAL_HINDI:
74
0
    case IBMBIDI_NUMERAL_ARABIC:
75
0
    case IBMBIDI_NUMERAL_PERSIAN:
76
0
    case IBMBIDI_NUMERAL_REGULAR:
77
0
    case IBMBIDI_NUMERAL_HINDICONTEXT:
78
0
    case IBMBIDI_NUMERAL_PERSIANCONTEXT:
79
0
      for (i=0;i<aSize;i++)
80
0
        aBuffer[i] = HandleNumberInChar(aBuffer[i], !!(i>0 ? aBuffer[i-1] : 0), aNumFlag);
81
0
      break;
82
0
    case IBMBIDI_NUMERAL_NOMINAL:
83
0
    default:
84
0
      break;
85
0
  }
86
0
  return NS_OK;
87
0
}