utf8rewind  1.3.0
System library for processing UTF-8 encoded text
helpers-normalization.hpp
Go to the documentation of this file.
1 #pragma once
2 
10 #include "helpers-base.hpp"
11 
12 #define CHECK_IS_NORMALIZED(_codepoint, _nfd, _nfc, _nfkd, _nfkc, _name) { \
13  ::helpers::CheckEntry e; \
14  e.codepoint = _codepoint; \
15  e.name = _name; \
16  e.nfd = UTF8_NORMALIZATION_RESULT_ ## _nfd; \
17  e.nfc = UTF8_NORMALIZATION_RESULT_ ## _nfc; \
18  e.nfkd = UTF8_NORMALIZATION_RESULT_ ## _nfkd; \
19  e.nfkc = UTF8_NORMALIZATION_RESULT_ ## _nfkc; \
20  ::helpers::CheckEntry a; \
21  a.nfd = ::helpers::isNfd(_codepoint); \
22  a.nfc = ::helpers::isNfc(_codepoint); \
23  a.nfkd = ::helpers::isNfkd(_codepoint); \
24  a.nfkc = ::helpers::isNfkc(_codepoint); \
25  EXPECT_PRED_FORMAT2(::helpers::CompareNormalizationCheck, e, a); \
26 }
27 
28 #define CHECK_NORMALIZE_CODEPOINT(_codepoint, _decomposed, _composed, _decomposedCompatibility, _composedCompatibility, _name) { \
29  ::helpers::NormalizationEntry e; \
30  e.codepoint = _codepoint; \
31  e.name = _name; \
32  e.decomposed = _decomposed; \
33  e.composed = _composed; \
34  e.decomposedCompatibility = _decomposedCompatibility; \
35  e.composedCompatibility = _composedCompatibility; \
36  ::helpers::NormalizationEntry a; \
37  a.decomposed = helpers::nfd(_codepoint); \
38  a.composed = helpers::nfc(_codepoint); \
39  a.decomposedCompatibility = helpers::nfkd(_codepoint); \
40  a.composedCompatibility = helpers::nfkc(_codepoint); \
41  EXPECT_PRED_FORMAT2(::helpers::CompareNormalizationCodepoint, e, a); \
42 }
43 
44 #define CHECK_NORMALIZE_SEQUENCE(_sequence, _decomposed, _composed, _decomposedCompatibility, _composedCompatibility) { \
45  ::helpers::NormalizationEntry e; \
46  e.sequence = _sequence; \
47  e.decomposed = _decomposed; \
48  e.composed = _composed; \
49  e.decomposedCompatibility = _decomposedCompatibility; \
50  e.composedCompatibility = _composedCompatibility; \
51  ::helpers::NormalizationEntry a; \
52  a.decomposed = helpers::nfd(_sequence); \
53  a.composed = helpers::nfc(_sequence); \
54  a.decomposedCompatibility = helpers::nfkd(_sequence); \
55  a.composedCompatibility = helpers::nfkc(_sequence); \
56  EXPECT_PRED_FORMAT2(::helpers::CompareNormalizationSequence, e, a); \
57 }
58 
59 namespace helpers {
60 
61  std::string normalizationResult(uint8_t result);
62 
63  uint8_t isNfc(unicode_t codepoint);
64  uint8_t isNfc(const std::string& text);
65 
66  std::string nfc(unicode_t codepoint);
67  std::string nfc(const std::string& text);
68 
69  uint8_t isNfd(unicode_t codepoint);
70  uint8_t isNfd(const std::string& text);
71 
72  std::string nfd(unicode_t codepoint);
73  std::string nfd(const std::string& text);
74 
75  uint8_t isNfkc(unicode_t codepoint);
76  uint8_t isNfkc(const std::string& text);
77 
78  std::string nfkc(unicode_t codepoint);
79  std::string nfkc(const std::string& text);
80 
81  uint8_t isNfkd(unicode_t codepoint);
82  uint8_t isNfkd(const std::string& text);
83 
84  std::string nfkd(unicode_t codepoint);
85  std::string nfkd(const std::string& text);
86 
87  struct CheckEntry
88  {
89  unicode_t codepoint;
90  std::string name;
91  uint8_t nfd;
92  uint8_t nfc;
93  uint8_t nfkd;
94  uint8_t nfkc;
95  };
96 
97  ::testing::AssertionResult CompareNormalizationCheck(
98  const char* expressionExpected, const char* expressionActual,
99  const CheckEntry& entryExpected, const CheckEntry& entryActual);
100 
101  struct NormalizationEntry
102  {
103  NormalizationEntry()
104  : codepoint(0)
105  {
106  }
107 
108  unicode_t codepoint;
109  std::string sequence;
110  std::string name;
111  std::string decomposed;
112  std::string composed;
113  std::string decomposedCompatibility;
114  std::string composedCompatibility;
115  };
116 
117  ::testing::AssertionResult CompareNormalizationCodepoint(
118  const char* expressionExpected, const char* expressionActual,
119  const NormalizationEntry& entryExpected, const NormalizationEntry& entryActual);
120 
121  ::testing::AssertionResult CompareNormalizationSequence(
122  const char* expressionExpected, const char* expressionActual,
123  const NormalizationEntry& entryExpected, const NormalizationEntry& entryActual);
124 
125 };
126 
uint32_t unicode_t
UTF-32 encoded code point.
Definition: utf8rewind.h:235
Base includes for helper methods.