Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
libcifpp
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open
libcifpp
Commits
75a5f796
Unverified
Commit
75a5f796
authored
Jan 30, 2024
by
Maarten L. Hekkelman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
formatting
parent
3f93c27b
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
74 additions
and
75 deletions
+74
-75
src/text.cpp
+74
-75
No files found.
src/text.cpp
View file @
75a5f796
...
@@ -35,24 +35,24 @@ namespace cif
...
@@ -35,24 +35,24 @@ namespace cif
// --------------------------------------------------------------------
// --------------------------------------------------------------------
// This really makes a difference, having our own tolower routines
// This really makes a difference, having our own tolower routines
const
uint8_t
kCharToLowerMap
[
256
]
=
const
uint8_t
kCharToLowerMap
[
256
]
=
{
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0
f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1
f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x19
,
0x1a
,
0x1b
,
0x1c
,
0x1d
,
0x1e
,
0x1
f
,
0x20
,
0x21
,
0x22
,
0x23
,
0x24
,
0x25
,
0x26
,
0x27
,
0x28
,
0x29
,
0x2a
,
0x2b
,
0x2c
,
0x2d
,
0x2e
,
0x2
f
,
0x20
,
0x21
,
0x22
,
0x23
,
0x24
,
0x25
,
0x26
,
0x27
,
0x28
,
0x29
,
0x2a
,
0x2b
,
0x2c
,
0x2d
,
0x2e
,
0x2
f
,
0x30
,
0x31
,
0x32
,
0x33
,
0x34
,
0x35
,
0x36
,
0x37
,
0x38
,
0x39
,
0x3a
,
0x3b
,
0x3c
,
0x3d
,
0x3e
,
0x3
f
,
0x30
,
0x31
,
0x32
,
0x33
,
0x34
,
0x35
,
0x36
,
0x37
,
0x38
,
0x39
,
0x3a
,
0x3b
,
0x3c
,
0x3d
,
0x3e
,
0x3
f
,
0x40
,
0x61
,
0x62
,
0x63
,
0x64
,
0x65
,
0x66
,
0x67
,
0x68
,
0x69
,
0x6a
,
0x6b
,
0x6c
,
0x6d
,
0x6e
,
0x6
f
,
0x40
,
0x61
,
0x62
,
0x63
,
0x64
,
0x65
,
0x66
,
0x67
,
0x68
,
0x69
,
0x6a
,
0x6b
,
0x6c
,
0x6d
,
0x6e
,
0x6
f
,
0x70
,
0x71
,
0x72
,
0x73
,
0x74
,
0x75
,
0x76
,
0x77
,
0x78
,
0x79
,
0x7a
,
0x5b
,
0x5c
,
0x5d
,
0x5e
,
0x5
f
,
0x70
,
0x71
,
0x72
,
0x73
,
0x74
,
0x75
,
0x76
,
0x77
,
0x78
,
0x79
,
0x7a
,
0x5b
,
0x5c
,
0x5d
,
0x5e
,
0x5
f
,
0x60
,
0x61
,
0x62
,
0x63
,
0x64
,
0x65
,
0x66
,
0x67
,
0x68
,
0x69
,
0x6a
,
0x6b
,
0x6c
,
0x6d
,
0x6e
,
0x6
f
,
0x60
,
0x61
,
0x62
,
0x63
,
0x64
,
0x65
,
0x66
,
0x67
,
0x68
,
0x69
,
0x6a
,
0x6b
,
0x6c
,
0x6d
,
0x6e
,
0x6
f
,
0x70
,
0x71
,
0x72
,
0x73
,
0x74
,
0x75
,
0x76
,
0x77
,
0x78
,
0x79
,
0x7a
,
0x7b
,
0x7c
,
0x7d
,
0x7e
,
0x7
f
,
0x70
,
0x71
,
0x72
,
0x73
,
0x74
,
0x75
,
0x76
,
0x77
,
0x78
,
0x79
,
0x7a
,
0x7b
,
0x7c
,
0x7d
,
0x7e
,
0x7
f
,
0x80
,
0x81
,
0x82
,
0x83
,
0x84
,
0x85
,
0x86
,
0x87
,
0x88
,
0x89
,
0x8a
,
0x8b
,
0x8c
,
0x8d
,
0x8e
,
0x8
f
,
0x80
,
0x81
,
0x82
,
0x83
,
0x84
,
0x85
,
0x86
,
0x87
,
0x88
,
0x89
,
0x8a
,
0x8b
,
0x8c
,
0x8d
,
0x8e
,
0x8
f
,
0x90
,
0x91
,
0x92
,
0x93
,
0x94
,
0x95
,
0x96
,
0x97
,
0x98
,
0x99
,
0x9a
,
0x9b
,
0x9c
,
0x9d
,
0x9e
,
0x9
f
,
0x90
,
0x91
,
0x92
,
0x93
,
0x94
,
0x95
,
0x96
,
0x97
,
0x98
,
0x99
,
0x9a
,
0x9b
,
0x9c
,
0x9d
,
0x9e
,
0x9
f
,
0xa0
,
0xa1
,
0xa2
,
0xa3
,
0xa4
,
0xa5
,
0xa6
,
0xa7
,
0xa8
,
0xa9
,
0xaa
,
0xab
,
0xac
,
0xad
,
0xae
,
0xa
f
,
0xa0
,
0xa1
,
0xa2
,
0xa3
,
0xa4
,
0xa5
,
0xa6
,
0xa7
,
0xa8
,
0xa9
,
0xaa
,
0xab
,
0xac
,
0xad
,
0xae
,
0xa
f
,
0xb0
,
0xb1
,
0xb2
,
0xb3
,
0xb4
,
0xb5
,
0xb6
,
0xb7
,
0xb8
,
0xb9
,
0xba
,
0xbb
,
0xbc
,
0xbd
,
0xbe
,
0xb
f
,
0xb0
,
0xb1
,
0xb2
,
0xb3
,
0xb4
,
0xb5
,
0xb6
,
0xb7
,
0xb8
,
0xb9
,
0xba
,
0xbb
,
0xbc
,
0xbd
,
0xbe
,
0xb
f
,
0xc0
,
0xc1
,
0xc2
,
0xc3
,
0xc4
,
0xc5
,
0xc6
,
0xc7
,
0xc8
,
0xc9
,
0xca
,
0xcb
,
0xcc
,
0xcd
,
0xce
,
0xc
f
,
0xc0
,
0xc1
,
0xc2
,
0xc3
,
0xc4
,
0xc5
,
0xc6
,
0xc7
,
0xc8
,
0xc9
,
0xca
,
0xcb
,
0xcc
,
0xcd
,
0xce
,
0xc
f
,
0xd0
,
0xd1
,
0xd2
,
0xd3
,
0xd4
,
0xd5
,
0xd6
,
0xd7
,
0xd8
,
0xd9
,
0xda
,
0xdb
,
0xdc
,
0xdd
,
0xde
,
0xd
f
,
0xd0
,
0xd1
,
0xd2
,
0xd3
,
0xd4
,
0xd5
,
0xd6
,
0xd7
,
0xd8
,
0xd9
,
0xda
,
0xdb
,
0xdc
,
0xdd
,
0xde
,
0xd
f
,
0xe0
,
0xe1
,
0xe2
,
0xe3
,
0xe4
,
0xe5
,
0xe6
,
0xe7
,
0xe8
,
0xe9
,
0xea
,
0xeb
,
0xec
,
0xed
,
0xee
,
0xe
f
,
0xe0
,
0xe1
,
0xe2
,
0xe3
,
0xe4
,
0xe5
,
0xe6
,
0xe7
,
0xe8
,
0xe9
,
0xea
,
0xeb
,
0xec
,
0xed
,
0xee
,
0xef
,
0xf0
,
0xf1
,
0xf2
,
0xf3
,
0xf4
,
0xf5
,
0xf6
,
0xf7
,
0xf8
,
0xf9
,
0xfa
,
0xfb
,
0xfc
,
0xfd
,
0xfe
,
0xff
0xf0
,
0xf1
,
0xf2
,
0xf3
,
0xf4
,
0xf5
,
0xf6
,
0xf7
,
0xf8
,
0xf9
,
0xfa
,
0xfb
,
0xfc
,
0xfd
,
0xfe
,
0xff
};
};
// --------------------------------------------------------------------
// --------------------------------------------------------------------
...
@@ -171,7 +171,7 @@ std::string trim_right_copy(std::string_view s)
...
@@ -171,7 +171,7 @@ std::string trim_right_copy(std::string_view s)
e
=
pe
;
e
=
pe
;
}
}
return
{
s
.
begin
(),
e
};
return
{
s
.
begin
(),
e
};
}
}
std
::
string
trim_left_copy
(
std
::
string_view
s
)
std
::
string
trim_left_copy
(
std
::
string_view
s
)
...
@@ -185,7 +185,7 @@ std::string trim_left_copy(std::string_view s)
...
@@ -185,7 +185,7 @@ std::string trim_left_copy(std::string_view s)
b
=
std
::
next
(
b
);
b
=
std
::
next
(
b
);
}
}
return
{
b
,
s
.
end
()
};
return
{
b
,
s
.
end
()
};
}
}
void
trim_left
(
std
::
string
&
s
)
void
trim_left
(
std
::
string
&
s
)
...
@@ -220,14 +220,14 @@ std::tuple<std::string, std::string> split_item_name(std::string_view item_name)
...
@@ -220,14 +220,14 @@ std::tuple<std::string, std::string> split_item_name(std::string_view item_name)
if
(
item_name
.
empty
())
if
(
item_name
.
empty
())
throw
std
::
runtime_error
(
"empty item_name"
);
throw
std
::
runtime_error
(
"empty item_name"
);
if
(
item_name
[
0
]
!=
'_'
)
if
(
item_name
[
0
]
!=
'_'
)
throw
std
::
runtime_error
(
"item_name '"
+
std
::
string
{
item_name
}
+
"' does not start with underscore"
);
throw
std
::
runtime_error
(
"item_name '"
+
std
::
string
{
item_name
}
+
"' does not start with underscore"
);
auto
s
=
item_name
.
find
(
'.'
);
auto
s
=
item_name
.
find
(
'.'
);
if
(
s
==
std
::
string
::
npos
)
if
(
s
==
std
::
string
::
npos
)
// throw std::runtime_error("item_name does not contain dot (" + std::string{ item_name } + ')');
// throw std::runtime_error("item_name does not contain dot (" + std::string{ item_name } + ')');
return
std
::
tuple
<
std
::
string
,
std
::
string
>
{
""
,
item_name
.
substr
(
1
)
};
return
std
::
tuple
<
std
::
string
,
std
::
string
>
{
""
,
item_name
.
substr
(
1
)
};
else
else
return
std
::
tuple
<
std
::
string
,
std
::
string
>
{
item_name
.
substr
(
1
,
s
-
1
),
item_name
.
substr
(
s
+
1
)
};
return
std
::
tuple
<
std
::
string
,
std
::
string
>
{
item_name
.
substr
(
1
,
s
-
1
),
item_name
.
substr
(
s
+
1
)
};
}
}
// --------------------------------------------------------------------
// --------------------------------------------------------------------
...
@@ -242,8 +242,7 @@ std::string cif_id_for_number(int number)
...
@@ -242,8 +242,7 @@ std::string cif_id_for_number(int number)
result
+=
static_cast
<
char
>
(
'A'
+
r
);
result
+=
static_cast
<
char
>
(
'A'
+
r
);
number
=
(
number
-
r
)
/
26
-
1
;
number
=
(
number
-
r
)
/
26
-
1
;
}
}
while
(
number
>=
0
);
while
(
number
>=
0
);
std
::
reverse
(
result
.
begin
(),
result
.
end
());
std
::
reverse
(
result
.
begin
(),
result
.
end
());
...
@@ -298,29 +297,29 @@ enum LineBreakClass
...
@@ -298,29 +297,29 @@ enum LineBreakClass
kLBC_Unknown
kLBC_Unknown
};
};
const
LineBreakClass
kASCII_LBTable
[
128
]
=
const
LineBreakClass
kASCII_LBTable
[
128
]
=
{
{
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_BreakAfter
,
kLBC_LineFeed
,
kLBC_MandatoryBreak
,
kLBC_MandatoryBreak
,
kLBC_CarriageReturn
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_BreakAfter
,
kLBC_LineFeed
,
kLBC_MandatoryBreak
,
kLBC_MandatoryBreak
,
kLBC_CarriageReturn
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_CombiningMark
,
kLBC_Space
,
kLBC_Exlamation
,
kLBC_Quotation
,
kLBC_Alphabetic
,
kLBC_PrefixNumeric
,
kLBC_PostfixNumeric
,
kLBC_Alphabetic
,
kLBC_Quotation
,
kLBC_Space
,
kLBC_Exlamation
,
kLBC_Quotation
,
kLBC_Alphabetic
,
kLBC_PrefixNumeric
,
kLBC_PostfixNumeric
,
kLBC_Alphabetic
,
kLBC_Quotation
,
kLBC_OpenPunctuation
,
kLBC_CloseParenthesis
,
kLBC_Alphabetic
,
kLBC_PrefixNumeric
,
kLBC_OpenPunctuation
,
kLBC_CloseParenthesis
,
kLBC_Alphabetic
,
kLBC_PrefixNumeric
,
// comma treated differently here, it is not a numeric separator in PDB
// comma treated differently here, it is not a numeric separator in PDB
kLBC_SymbolAllowingBreakAfter
/* kLBC_InfixNumericSeparator */
,
kLBC_SymbolAllowingBreakAfter
/* kLBC_InfixNumericSeparator */
,
kLBC_Hyphen
,
kLBC_InfixNumericSeparator
,
kLBC_SymbolAllowingBreakAfter
,
kLBC_Hyphen
,
kLBC_InfixNumericSeparator
,
kLBC_SymbolAllowingBreakAfter
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_InfixNumericSeparator
,
kLBC_InfixNumericSeparator
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Exlamation
,
kLBC_Numeric
,
kLBC_Numeric
,
kLBC_InfixNumericSeparator
,
kLBC_InfixNumericSeparator
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Exlamation
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_OpenPunctuation
,
kLBC_PrefixNumeric
,
kLBC_CloseParenthesis
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_OpenPunctuation
,
kLBC_PrefixNumeric
,
kLBC_CloseParenthesis
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_OpenPunctuation
,
kLBC_BreakAfter
,
kLBC_ClosePunctuation
,
kLBC_Alphabetic
,
kLBC_CombiningMark
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_Alphabetic
,
kLBC_OpenPunctuation
,
kLBC_BreakAfter
,
kLBC_ClosePunctuation
,
kLBC_Alphabetic
,
kLBC_CombiningMark
};
};
std
::
string
::
const_iterator
nextLineBreak
(
std
::
string
::
const_iterator
text
,
std
::
string
::
const_iterator
end
)
std
::
string
::
const_iterator
nextLineBreak
(
std
::
string
::
const_iterator
text
,
std
::
string
::
const_iterator
end
)
{
{
...
@@ -338,33 +337,33 @@ std::string::const_iterator nextLineBreak(std::string::const_iterator text, std:
...
@@ -338,33 +337,33 @@ std::string::const_iterator nextLineBreak(std::string::const_iterator text, std:
const
breakAction
brkTable
[
27
][
27
]
=
{
const
breakAction
brkTable
[
27
][
27
]
=
{
// OP CL CP QU GL NS EX SY IS PR PO NU AL ID IN HY BA BB B2 ZW CM WJ H2 H3 JL JV JT
// OP CL CP QU GL NS EX SY IS PR PO NU AL ID IN HY BA BB B2 ZW CM WJ H2 H3 JL JV JT
/* OP */
{
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
CPB
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
},
/* OP */
{
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
CPB
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
,
PBK
},
/* CL */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* CL */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* CP */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* CP */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* QU */
{
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
},
/* QU */
{
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
},
/* GL */
{
IBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
},
/* GL */
{
IBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
},
/* NS */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* NS */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* EX */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* EX */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* SY */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* SY */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* IS */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* IS */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* PR */
{
IBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
},
/* PR */
{
IBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
},
/* PO */
{
IBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* PO */
{
IBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* NU */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* NU */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* AL */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* AL */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* ID */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* ID */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* IN */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* IN */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* HY */
{
DBK
,
PBK
,
PBK
,
IBK
,
DBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* HY */
{
DBK
,
PBK
,
PBK
,
IBK
,
DBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* BA */
{
DBK
,
PBK
,
PBK
,
IBK
,
DBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* BA */
{
DBK
,
PBK
,
PBK
,
IBK
,
DBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* BB */
{
IBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
},
/* BB */
{
IBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
},
/* B2 */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
PBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* B2 */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
PBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* ZW */
{
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* ZW */
{
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* CM */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* CM */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
DBK
,
IBK
,
IBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
DBK
},
/* WJ */
{
IBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
},
/* WJ */
{
IBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
IBK
},
/* H2 */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
},
/* H2 */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
},
/* H3 */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
},
/* H3 */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
},
/* JL */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
DBK
},
/* JL */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
IBK
,
IBK
,
IBK
,
IBK
,
DBK
},
/* JV */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
},
/* JV */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
},
/* JT */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
},
/* JT */
{
DBK
,
PBK
,
PBK
,
IBK
,
IBK
,
IBK
,
PBK
,
PBK
,
PBK
,
DBK
,
IBK
,
DBK
,
DBK
,
DBK
,
IBK
,
IBK
,
IBK
,
DBK
,
DBK
,
PBK
,
CIB
,
PBK
,
DBK
,
DBK
,
DBK
,
DBK
,
IBK
},
};
};
uint8_t
ch
=
static_cast
<
uint8_t
>
(
*
text
);
uint8_t
ch
=
static_cast
<
uint8_t
>
(
*
text
);
...
@@ -418,7 +417,7 @@ std::string::const_iterator nextLineBreak(std::string::const_iterator text, std:
...
@@ -418,7 +417,7 @@ std::string::const_iterator nextLineBreak(std::string::const_iterator text, std:
std
::
vector
<
std
::
string
>
wrapLine
(
const
std
::
string
&
text
,
size_t
width
)
std
::
vector
<
std
::
string
>
wrapLine
(
const
std
::
string
&
text
,
size_t
width
)
{
{
std
::
vector
<
std
::
string
>
result
;
std
::
vector
<
std
::
string
>
result
;
std
::
vector
<
size_t
>
offsets
=
{
0
};
std
::
vector
<
size_t
>
offsets
=
{
0
};
auto
b
=
text
.
begin
();
auto
b
=
text
.
begin
();
while
(
b
!=
text
.
end
())
while
(
b
!=
text
.
end
())
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment