-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUnicodeMacOSLib.c
More file actions
104 lines (86 loc) · 2.31 KB
/
UnicodeMacOSLib.c
File metadata and controls
104 lines (86 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//
// UnicodeMacOSLib.c
// courseWork
//
// Created by Денис Кулиев on 12.10.16.
// Copyright © 2016 Денис Кулиев. All rights reserved.
//
#include "UnicodeMacOSLib.h"
int getBlockSize()
{
// Получение размера блока на диске
struct stat fileSystem;
stat("/", &fileSystem);
return fileSystem.st_blksize;
}
int getUtf8Index(char* utfString, int charIndex)
{
int utfIndex, i;
for (utfIndex = 0, i = 0; i < charIndex; utfString++, i++)
{
if ( isUTF8charBeginning(*utfString) )
{
utfIndex++;
}
}
return utfIndex;
}
bool isDigitOnly(char *string)
{
while('\0' != *string)
{
if ( !isdigit(*string++) )
{
return false;
}
}
return true;
}
bool isUnicodeMultibyteString(const char *string)
{
return utf8len(string) != strlen(string);
}
bool isUTF8charBeginning(char c)
{
//проверка не равны ли первые два бита кода 0b10 т.к все многобайтовые utf-8 коды которые начинаются с 0b10 являются продолжениями символов
if ( (c & 0xC0) != 0x80 )
{
return true;
}
else
{
return false;
}
}
size_t utf8len(const char *s)
{
size_t length = 0;
for (; *s != '\0'; s++)
{
if ( isUTF8charBeginning(*s) )
{
length++;
}
}
return length;
}
// добавляет пробелы впереди слова для имитации форматирования
char *formatUtf8String(char *utf8string, const size_t formatLength)
{
char *formatedString;
size_t utf8StringLength = utf8len(utf8string);
long spacesNumber = labs( (long)formatLength - (long)utf8StringLength );
size_t charLength = strlen(utf8string);
size_t formatStringSize = charLength * 4 + spacesNumber + 1;
formatedString =(char*) malloc(sizeof(char) * formatStringSize);
for (size_t i = 0; i < spacesNumber; i++)
{
formatedString[i] = ' ';
}
for (size_t i = spacesNumber, j = 0; j < charLength; j++, i++)
{
formatedString[i] = utf8string[j];
}
formatedString[spacesNumber + charLength] = '\0';
return formatedString;
}