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
// --------------------------------------------------------------------
// This really makes a difference, having our own tolower routines
const
uint8_t
kCharToLowerMap
[
256
]
=
{
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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
};
const
uint8_t
kCharToLowerMap
[
256
]
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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)
e
=
pe
;
}
return
{
s
.
begin
(),
e
};
return
{
s
.
begin
(),
e
};
}
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
);
}
return
{
b
,
s
.
end
()
};
return
{
b
,
s
.
end
()
};
}
void
trim_left
(
std
::
string
&
s
)
...
...
@@ -220,14 +220,14 @@ std::tuple<std::string, std::string> split_item_name(std::string_view item_name)
if
(
item_name
.
empty
())
throw
std
::
runtime_error
(
"empty item_name"
);
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
(
'.'
);
if
(
s
==
std
::
string
::
npos
)
// 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
)
};
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)
result
+=
static_cast
<
char
>
(
'A'
+
r
);
number
=
(
number
-
r
)
/
26
-
1
;
}
while
(
number
>=
0
);
}
while
(
number
>=
0
);
std
::
reverse
(
result
.
begin
(),
result
.
end
());
...
...
@@ -298,29 +297,29 @@ enum LineBreakClass
kLBC_Unknown
};
const
LineBreakClass
kASCII_LBTable
[
128
]
=
{
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_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_OpenPunctuation
,
kLBC_CloseParenthesis
,
kLBC_Alphabetic
,
kLBC_PrefixNumeric
,
// comma treated differently here, it is not a numeric separator in PDB
kLBC_SymbolAllowingBreakAfter
/* kLBC_InfixNumericSeparator */
,
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_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_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_OpenPunctuation
,
kLBC_BreakAfter
,
kLBC_ClosePunctuation
,
kLBC_Alphabetic
,
kLBC_CombiningMark
};
const
LineBreakClass
kASCII_LBTable
[
128
]
=
{
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_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_OpenPunctuation
,
kLBC_CloseParenthesis
,
kLBC_Alphabetic
,
kLBC_PrefixNumeric
,
// comma treated differently here, it is not a numeric separator in PDB
kLBC_SymbolAllowingBreakAfter
/* kLBC_InfixNumericSeparator */
,
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_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_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_OpenPunctuation
,
kLBC_BreakAfter
,
kLBC_ClosePunctuation
,
kLBC_Alphabetic
,
kLBC_CombiningMark
};
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:
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 */
{
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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
},
/* 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
);
...
...
@@ -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
>
result
;
std
::
vector
<
size_t
>
offsets
=
{
0
};
std
::
vector
<
size_t
>
offsets
=
{
0
};
auto
b
=
text
.
begin
();
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