LLVM  9.0.0svn
Unicode.h
Go to the documentation of this file.
1 //===- llvm/Support/Unicode.h - Unicode character properties -*- C++ -*-=====//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines functions that allow querying certain properties of Unicode
10 // characters.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_SUPPORT_UNICODE_H
15 #define LLVM_SUPPORT_UNICODE_H
16 
17 namespace llvm {
18 class StringRef;
19 
20 namespace sys {
21 namespace unicode {
22 
26 };
27 
28 /// Determines if a character is likely to be displayed correctly on the
29 /// terminal. Exact implementation would have to depend on the specific
30 /// terminal, so we define the semantic that should be suitable for generic case
31 /// of a terminal capable to output Unicode characters.
32 ///
33 /// All characters from the Unicode code point range are considered printable
34 /// except for:
35 /// * C0 and C1 control character ranges;
36 /// * default ignorable code points as per 5.21 of
37 /// http://www.unicode.org/versions/Unicode6.2.0/UnicodeStandard-6.2.pdf
38 /// except for U+00AD SOFT HYPHEN, as it's actually displayed on most
39 /// terminals;
40 /// * format characters (category = Cf);
41 /// * surrogates (category = Cs);
42 /// * unassigned characters (category = Cn).
43 /// \return true if the character is considered printable.
44 bool isPrintable(int UCS);
45 
46 /// Gets the number of positions the UTF8-encoded \p Text is likely to occupy
47 /// when output on a terminal ("character width"). This depends on the
48 /// implementation of the terminal, and there's no standard definition of
49 /// character width.
50 ///
51 /// The implementation defines it in a way that is expected to be compatible
52 /// with a generic Unicode-capable terminal.
53 ///
54 /// \return Character width:
55 /// * ErrorNonPrintableCharacter (-1) if \p Text contains non-printable
56 /// characters (as identified by isPrintable);
57 /// * 0 for each non-spacing and enclosing combining mark;
58 /// * 2 for each CJK character excluding halfwidth forms;
59 /// * 1 for each of the remaining characters.
60 int columnWidthUTF8(StringRef Text);
61 
62 /// Fold input unicode character according the Simple unicode case folding
63 /// rules.
64 int foldCharSimple(int C);
65 
66 } // namespace unicode
67 } // namespace sys
68 } // namespace llvm
69 
70 #endif
uint64_t CallInst * C
This class represents lattice values for constants.
Definition: AllocatorList.h:23
int foldCharSimple(int C)
Fold input unicode character according the Simple unicode case folding rules.
bool isPrintable(int UCS)
Determines if a character is likely to be displayed correctly on the terminal.
Definition: Unicode.cpp:22
int columnWidthUTF8(StringRef Text)
Gets the number of positions the UTF8-encoded Text is likely to occupy when output on a terminal ("ch...
Definition: Unicode.cpp:342
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48