Bug 255990 Characters below U+0100 are not subject to line-breaking rules at all r+sr=roc

This commit is contained in:
masayuki@d-toybox.com 2007-07-12 08:52:51 -07:00
Родитель 0c6aad4d14
Коммит a13479d954
8 изменённых файлов: 221 добавлений и 151 удалений

Просмотреть файл

@ -86,9 +86,18 @@ public:
return u == 0x0020 || u == 0x200b/*ZWSP*/ || u == '\n' || u == '\t';
}
static inline PRBool IsComplexASCIIChar(PRUnichar u)
{
return !((0x0030 <= u && u <= 0x0039) ||
(0x0041 <= u && u <= 0x005A) ||
(0x0061 <= u && u <= 0x007A));
}
static inline PRBool IsComplexChar(PRUnichar u)
{
return (0x1100 <= u && u <= 0x11ff) ||
return IsComplexASCIIChar(u) ||
(0x1100 <= u && u <= 0x11ff) ||
(0x2000 <= u && u <= 0x21ff) ||
(0x2e80 <= u && u <= 0xd7ff) ||
(0xf900 <= u && u <= 0xfaff) ||
(0xff00 <= u && u <= 0xffef);

Просмотреть файл

@ -214,6 +214,10 @@ nsLineBreaker::AppendText(nsIAtom* aLangGroup, const PRUint8* aText, PRUint32 aL
while (offset < aLength && !IsSpace(aText[offset])) {
mCurrentWord.AppendElement(aText[offset]);
if (!mCurrentWordContainsComplexChar &&
IsComplexASCIIChar(aText[offset])) {
mCurrentWordContainsComplexChar = PR_TRUE;
}
++offset;
}
@ -249,6 +253,7 @@ nsLineBreaker::AppendText(nsIAtom* aLangGroup, const PRUint8* aText, PRUint32 aL
}
}
PRUint32 wordStart = offset;
PRBool wordHasComplexChar = PR_FALSE;
for (;;) {
PRUint8 ch = aText[offset];
@ -261,17 +266,31 @@ nsLineBreaker::AppendText(nsIAtom* aLangGroup, const PRUint8* aText, PRUint32 aL
mAfterSpace = isSpace;
if (isSpace) {
// The current word can't have any complex characters inside it
// because this is 8-bit text, so just ignore it
if (offset > wordStart && wordHasComplexChar) {
if (aFlags & BREAK_ALLOW_INSIDE) {
// Save current start-of-word state because GetJISx4051Breaks will
// set it to false
PRPackedBool currentStart = breakState[wordStart];
nsContentUtils::LineBreaker()->
GetJISx4051Breaks(aText + wordStart, offset - wordStart,
breakState.Elements() + wordStart);
breakState[wordStart] = currentStart;
}
wordHasComplexChar = PR_FALSE;
}
++offset;
if (offset >= aLength)
break;
wordStart = offset;
} else {
if (!wordHasComplexChar && IsComplexASCIIChar(ch)) {
wordHasComplexChar = PR_TRUE;
}
++offset;
if (offset >= aLength) {
// Save this word
mCurrentWordContainsComplexChar = PR_FALSE;
mCurrentWordContainsComplexChar = wordHasComplexChar;
PRUint32 len = offset - wordStart;
PRUnichar* elems = mCurrentWord.AppendElements(len);
if (!elems)
@ -285,8 +304,6 @@ nsLineBreaker::AppendText(nsIAtom* aLangGroup, const PRUint8* aText, PRUint32 aL
offset = wordStart + 1;
break;
}
// We can't break inside words in 8-bit text (no complex characters), so
// there is no need to do anything else to handle words
}
}

Просмотреть файл

@ -43,10 +43,10 @@
#define NS_LINEBREAKER_NEED_MORE_TEXT -1
// {c3d9f25f-7cea-4a76-a08f-05c431353448}
// {C9C5938E-70EF-4db2-ADEE-E7B2CCFBBEE6}
#define NS_ILINEBREAKER_IID \
{ 0xc3d9f25f, 0x7cea, 0x4a76, \
{ 0xa0, 0x8f, 0x05, 0xc4, 0x31, 0x35, 0x34, 0x48 } }
{ 0xc9c5938e, 0x70ef, 0x4db2, \
{ 0xad, 0xee, 0xe7, 0xb2, 0xcc, 0xfb, 0xbe, 0xe6 } }
class nsILineBreaker : public nsISupports
{
@ -70,6 +70,8 @@ public:
// output array.
virtual void GetJISx4051Breaks(const PRUnichar* aText, PRUint32 aLength,
PRPackedBool* aBreakBefore) = 0;
virtual void GetJISx4051Breaks(const PRUint8* aText, PRUint32 aLength,
PRPackedBool* aBreakBefore) = 0;
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsILineBreaker, NS_ILINEBREAKER_IID)

Просмотреть файл

@ -22,8 +22,8 @@
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
@ -43,14 +43,14 @@ static const PRUint32 gLBClass00[32] = {
0x55555555, // U+0008 - U+000F
0x55555555, // U+0010 - U+0017
0x55555555, // U+0018 - U+001F
0x88438815, // U+0020 - U+0027
0x81515810, // U+0028 - U+002F
0x88108815, // U+0020 - U+0027
0x11118810, // U+0028 - U+002F
0x66666666, // U+0030 - U+0037
0x11501166, // U+0038 - U+003F
0x11101866, // U+0038 - U+003F
0x88888888, // U+0040 - U+0047
0x88888888, // U+0048 - U+004F
0x88888888, // U+0050 - U+0057
0x88130888, // U+0058 - U+005F
0x88100888, // U+0058 - U+005F
0x88888888, // U+0060 - U+0067
0x88888888, // U+0068 - U+006F
0x88888888, // U+0070 - U+0077
@ -59,17 +59,17 @@ static const PRUint32 gLBClass00[32] = {
0x88888888, // U+0088 - U+008F
0x88888888, // U+0090 - U+0097
0x88888888, // U+0098 - U+009F
0x58383488, // U+00A0 - U+00A7
0x85888858, // U+00A8 - U+00AF
0x85888854, // U+00B0 - U+00B7
0x88383488, // U+00A0 - U+00A7
0x88888888, // U+00A8 - U+00AF
0x88888881, // U+00B0 - U+00B7
0x88888888, // U+00B8 - U+00BF
0x88888888, // U+00C0 - U+00C7
0x88888888, // U+00C8 - U+00CF
0x58888888, // U+00D0 - U+00D7
0x88888888, // U+00D0 - U+00D7
0x88888888, // U+00D8 - U+00DF
0x88888888, // U+00E0 - U+00E7
0x88888888, // U+00E8 - U+00EF
0x58888888, // U+00F0 - U+00F7
0x88888888, // U+00F0 - U+00F7
0x88888888, // U+00F8 - U+00FF
};
@ -77,7 +77,7 @@ static const PRUint32 gLBClass20[32] = {
0x55555555, // U+2000 - U+2007
0x88885555, // U+2008 - U+200F
0x88828888, // U+2010 - U+2017
0x01100110, // U+2018 - U+201F
0x88888888, // U+2018 - U+201F
0x81118888, // U+2020 - U+2027
0x88888888, // U+2028 - U+202F
0x88884444, // U+2030 - U+2037

Просмотреть файл

@ -349,12 +349,21 @@ nsJISx4051LineBreaker::~nsJISx4051LineBreaker()
NS_IMPL_ISUPPORTS1(nsJISx4051LineBreaker, nsILineBreaker)
#define U_PERIOD ((PRUnichar) '.')
#define U_COMMA ((PRUnichar) ',')
#define U_SPACE ((PRUnichar) ' ')
#define U_RIGHT_SINGLE_QUOTATION_MARK ((PRUnichar) 0x2019)
#define U_PERIOD PRUnichar('.')
#define U_COMMA PRUnichar(',')
#define U_SEMICOLON PRUnichar(';')
#define U_SLASH PRUnichar('/')
#define U_SPACE PRUnichar(' ')
#define U_HYPHEN PRUnichar('-')
#define U_EQUAL PRUnichar('=')
#define U_NULL PRUnichar(0x0000)
#define U_RIGHT_SINGLE_QUOTATION_MARK PRUnichar(0x2019)
#define NEED_CONTEXTUAL_ANALYSIS(c) ((c) == U_PERIOD || \
(c) == U_COMMA || \
(c) == U_SEMICOLON || \
(c) == U_SLASH || \
(c) == U_HYPHEN || \
(c) == U_EQUAL || \
(c) == U_RIGHT_SINGLE_QUOTATION_MARK)
#define NUMERIC_CLASS 6 // JIS x4051 class 15 is now map to simplified class 6
#define CHARACTER_CLASS 8 // JIS x4051 class 18 is now map to simplified class 8
@ -363,17 +372,17 @@ NS_IMPL_ISUPPORTS1(nsJISx4051LineBreaker, nsILineBreaker)
static PRInt8 ContextualAnalysis(
PRUnichar prev, PRUnichar cur, PRUnichar next)
{
if(U_COMMA == cur)
if(U_COMMA == cur || U_SEMICOLON == cur)
{
if(IS_ASCII_DIGIT (prev) && IS_ASCII_DIGIT (next))
if((IS_ASCII_DIGIT(prev) || prev == U_NULL) && IS_ASCII_DIGIT(next))
return NUMERIC_CLASS;
}
else if(U_PERIOD == cur)
{
if((IS_ASCII_DIGIT (prev) || (0x0020 == prev)) &&
IS_ASCII_DIGIT (next))
if((IS_ASCII_DIGIT(prev) || prev == U_SPACE || prev == U_NULL) &&
IS_ASCII_DIGIT(next))
return NUMERIC_CLASS;
// By assigning a full stop character class only when it's followed by
// class 6 (numeric), 7, and 8 (character). Note that class 9 (Thai)
// doesn't matter, either way, we prevent lines from breaking around
@ -381,10 +390,18 @@ static PRInt8 ContextualAnalysis(
// followed by CJK characters. With an additional condition of it being
// preceded by class 0 or class > 5, we make sure that it does not
// start a line (see bug 164759).
PRUint8 pc = GetClass(prev);
PRUint8 pc = prev != U_NULL ? GetClass(prev) : CHARACTER_CLASS;
if((pc > 5 || pc == 0) && GetClass(next) > 5)
return CHARACTER_CLASS;
}
else if(U_SLASH == cur || U_HYPHEN == cur || U_EQUAL == cur)
{
// if slash is a first character, don't break at this point (e.g., "/root")
if (U_SLASH == cur && prev == U_NULL)
return CHARACTER_CLASS;
if (IS_ASCII_DIGIT(next))
return NUMERIC_CLASS;
}
else if(U_RIGHT_SINGLE_QUOTATION_MARK == cur)
{
// somehow people use this as ' in "it's" sometimes...
@ -433,7 +450,7 @@ ROUTE_CJK_BETWEEN:
PRInt8 c1, c2;
if(NEED_CONTEXTUAL_ANALYSIS(aText1[aTextLen1-1]))
c1 = ContextualAnalysis((aTextLen1>1)?aText1[aTextLen1-2]:0,
c1 = ContextualAnalysis((aTextLen1>1)?aText1[aTextLen1-2]:U_NULL,
aText1[aTextLen1-1],
aText2[0]);
else
@ -442,7 +459,7 @@ ROUTE_CJK_BETWEEN:
if(NEED_CONTEXTUAL_ANALYSIS(aText2[0]))
c2 = ContextualAnalysis(aText1[aTextLen1-1],
aText2[0],
(aTextLen2>1)?aText2[1]:0);
(aTextLen2>1)?aText2[1]:U_NULL);
else
c2 = GetClass(aText2[0]);
@ -481,9 +498,9 @@ ROUTE_CJK_NEXT:
cur = aPos;
if(NEED_CONTEXTUAL_ANALYSIS(aText[cur]))
{
c1 = ContextualAnalysis((cur>0)?aText[cur-1]:0,
c1 = ContextualAnalysis((cur>0)?aText[cur-1]:U_NULL,
aText[cur],
(cur<(aLen-1)) ?aText[cur+1]:0);
(cur<(aLen-1)) ?aText[cur+1]:U_NULL);
} else {
c1 = GetClass(aText[cur]);
}
@ -495,9 +512,9 @@ ROUTE_CJK_NEXT:
{
if(NEED_CONTEXTUAL_ANALYSIS(aText[cur]))
{
c2 = ContextualAnalysis((cur>0)?aText[cur-1]:0,
c2 = ContextualAnalysis((cur>0)?aText[cur-1]:U_NULL,
aText[cur],
(cur<(aLen-1)) ?aText[cur+1]:0);
(cur<(aLen-1)) ?aText[cur+1]:U_NULL);
} else {
c2 = GetClass(aText[cur]);
}
@ -537,9 +554,9 @@ ROUTE_CJK_PREV:
PRInt8 c1, c2;
if(NEED_CONTEXTUAL_ANALYSIS(aText[cur-1]))
{
c2 = ContextualAnalysis(((cur-1)>0)?aText[cur-2]:0,
c2 = ContextualAnalysis(((cur-1)>0)?aText[cur-2]:U_NULL,
aText[cur-1],
(cur<aLen) ?aText[cur]:0);
(cur<aLen) ?aText[cur]:U_NULL);
} else {
c2 = GetClass(aText[cur-1]);
}
@ -551,9 +568,9 @@ ROUTE_CJK_PREV:
{
if(NEED_CONTEXTUAL_ANALYSIS(aText[cur-1]))
{
c1 = ContextualAnalysis(((cur-1)>0)?aText[cur-2]:0,
c1 = ContextualAnalysis(((cur-1)>0)?aText[cur-2]:U_NULL,
aText[cur-1],
(cur<aLen) ?aText[cur]:0);
(cur<aLen) ?aText[cur]:U_NULL);
} else {
c1 = GetClass(aText[cur-1]);
}
@ -578,9 +595,9 @@ nsJISx4051LineBreaker::GetJISx4051Breaks(const PRUnichar* aChars, PRUint32 aLeng
PRInt8 cl;
if (NEED_CONTEXTUAL_ANALYSIS(ch)) {
cl = ContextualAnalysis(cur > 0 ? aChars[cur - 1] : 0,
cl = ContextualAnalysis(cur > 0 ? aChars[cur - 1] : U_NULL,
ch,
cur + 1 < aLength ? aChars[cur + 1] : 0);
cur + 1 < aLength ? aChars[cur + 1] : U_NULL);
} else {
cl = GetClass(ch);
}
@ -599,3 +616,33 @@ nsJISx4051LineBreaker::GetJISx4051Breaks(const PRUnichar* aChars, PRUint32 aLeng
lastClass = cl;
}
}
void
nsJISx4051LineBreaker::GetJISx4051Breaks(const PRUint8* aChars, PRUint32 aLength,
PRPackedBool* aBreakBefore)
{
PRUint32 cur;
PRInt8 lastClass = -1;
for (cur = 0; cur < aLength; ++cur) {
PRUnichar ch = aChars[cur];
PRInt8 cl;
if (NEED_CONTEXTUAL_ANALYSIS(ch)) {
cl = ContextualAnalysis(cur > 0 ? aChars[cur - 1] : U_NULL,
ch,
cur + 1 < aLength ? aChars[cur + 1] : U_NULL);
} else {
cl = GetClass(ch);
}
PRBool allowBreak;
if (cur > 0) {
allowBreak = GetPair(lastClass, cl);
} else {
allowBreak = PR_FALSE;
}
aBreakBefore[cur] = allowBreak;
lastClass = cl;
}
}

Просмотреть файл

@ -57,6 +57,8 @@ public:
virtual void GetJISx4051Breaks(const PRUnichar* aText, PRUint32 aLength,
PRPackedBool* aBreakBefore);
virtual void GetJISx4051Breaks(const PRUint8* aText, PRUint32 aLength,
PRPackedBool* aBreakBefore);
};
#endif /* nsJISx4501LineBreaker_h__ */

Просмотреть файл

@ -53,10 +53,10 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD></TD>
<TD></TD>
<TD></TD>
<TD>17</TD>
<TD>14</TD>
<TD>2</TD>
<TD></TD>
<TD></TD>
<TD BGCOLOR=white>17</TD>
<TD BGCOLOR=white>16</TD>
<TD></TD>
<TD></TD>
<TD></TD>
@ -76,12 +76,12 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD></TD>
<TD></TD>
<TD></TD>
<TD>4</TD>
<TD></TD>
<TD>1</TD>
<TD>13</TD>
<TD>1</TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD>1</TD>
<TD></TD>
<TD></TD>
<TD></TD>
@ -92,10 +92,10 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD>27</TD>
<TD>2</TD>
<TD></TD>
<TD>29</TD>
<TD>3</TD>
<TD>30</TD>
<TD>6</TD>
<TD></TD>
<TD BGCOLOR=white>61</TD>
<TD BGCOLOR=white>65</TD>
<TD></TD>
<TD></TD>
<TD></TD>
@ -111,30 +111,30 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD></TD>
<TD></TD>
<TD></TD>
<TD>1</TD>
<TD>1</TD>
<TD></TD>
<TD>2</TD>
<TD>14</TD>
<TD></TD>
<TD></TD>
<TD>14</TD>
<TD>2</TD>
<TD></TD>
<TD>9</TD>
<TD>2</TD>
<TD></TD>
<TD>2</TD>
<TD>3</TD>
<TD>1</TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
</TR>
<TR><TH>02_7<TH>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD>4</TD>
<TD>1</TD>
<TD></TD>
<TD></TD>
<TD BGCOLOR=white>4</TD>
<TD BGCOLOR=white>1</TD>
<TD></TD>
<TD></TD>
<TD></TD>
@ -155,7 +155,7 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD></TD>
<TD></TD>
<TD></TD>
<TD>3</TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
@ -171,33 +171,33 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD></TD>
<TD></TD>
<TD></TD>
<TD>4</TD>
<TD></TD>
<TD BGCOLOR=white>4</TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD>3</TD>
<TD></TD>
<TD BGCOLOR=white>3</TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD>2</TD>
<TD></TD>
<TD></TD>
<TD>1</TD>
<TD></TD>
@ -209,10 +209,10 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD></TD>
<TD></TD>
<TD></TD>
<TD>5</TD>
<TD>2</TD>
<TD>4</TD>
<TD>1</TD>
<TD></TD>
<TD BGCOLOR=white>7</TD>
<TD BGCOLOR=white>5</TD>
<TD></TD>
<TD></TD>
<TD></TD>
@ -233,27 +233,27 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD></TD>
<TD></TD>
<TD></TD>
<TD>5</TD>
<TD>4</TD>
<TD></TD>
<TD>1</TD>
<TD></TD>
<TD></TD>
<TD>1</TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
</TR>
<TR><TH>05_[b]<TH>
<TD>32</TD>
<TD>33</TD>
<TD>154</TD>
<TD></TD>
<TD>53</TD>
<TD>3</TD>
<TD>316</TD>
<TD>2</TD>
<TD>305</TD>
<TD>13</TD>
<TD BGCOLOR=white>560</TD>
<TD>32</TD>
<TD></TD>
<TD>1</TD>
<TD></TD>
<TD></TD>
<TD></TD>
@ -268,7 +268,7 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD>33</TD>
<TD>20</TD>
<TD></TD>
<TD>1</TD>
<TD></TD>
<TD></TD>
<TD></TD>
<TD></TD>
@ -276,11 +276,11 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD></TD>
<TD></TD>
<TD></TD>
<TD>7</TD>
<TD>309</TD>
<TD></TD>
<TD>305</TD>
<TD></TD>
<TD></TD>
<TD>2</TD>
<TD>13</TD>
</TR>
<TR><TH>06_15<TH>
<TD></TD>
@ -361,23 +361,23 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD></TD>
</TR>
<TR><TH>08_18<TH>
<TD>9</TD>
<TD>661</TD>
<TD>10</TD>
<TD>660</TD>
<TD>4</TD>
<TD>130</TD>
<TD>51</TD>
<TD>929</TD>
<TD>14</TD>
<TD BGCOLOR=white>1798</TD>
<TD>55</TD>
<TD>940</TD>
<TD>2</TD>
<TD BGCOLOR=white>1801</TD>
<TD></TD>
<TD>9</TD>
<TD>10</TD>
<TD></TD>
<TD></TD>
<TD>370</TD>
<TD>367</TD>
<TD>1</TD>
<TD>5</TD>
<TD></TD>
<TD>285</TD>
<TD>287</TD>
<TD></TD>
<TD></TD>
<TD>4</TD>
@ -385,19 +385,19 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD>3</TD>
<TD>127</TD>
<TD>3</TD>
<TD>5</TD>
<TD>3</TD>
<TD>4</TD>
<TD>6</TD>
<TD>3</TD>
<TD>2</TD>
<TD>2</TD>
<TD>32</TD>
<TD>3</TD>
<TD>29</TD>
<TD>5</TD>
<TD>12</TD>
<TD>8</TD>
<TD>258</TD>
<TD>651</TD>
<TD>10</TD>
<TD>273</TD>
<TD>645</TD>
<TD>1</TD>
<TD>1</TD>
<TD>12</TD>
<TD></TD>
</TR>
<TR><TH>09_nbsp<TH>
<TD></TD>
@ -493,15 +493,15 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD BGCOLOR=red>X</TD>
</TR>
<TR><TH>00<TH>
<TD>3</TD>
<TD>9</TD>
<TD>6</TD>
<TD>14</TD>
<TD></TD>
<TD>3</TD>
<TD>3</TD>
<TD>45</TD>
<TD>2</TD>
<TD>1</TD>
<TD>33</TD>
<TD>10</TD>
<TD></TD>
<TD>149</TD>
<TD>156</TD>
<TD></TD>
<TD></TD>
</TR>
@ -558,15 +558,15 @@ Analysis of JIS X 4051 to Unicode General Category Mapping
<TD></TD>
</TR>
<TR><TH>20<TH>
<TD>4</TD>
<TD>6</TD>
<TD>4</TD>
<TD></TD>
<TD>4</TD>
<TD>5</TD>
<TD>1</TD>
<TD></TD>
<TD>4</TD>
<TD>13</TD>
<TD></TD>
<TD>90</TD>
<TD></TD>
<TD>86</TD>
<TD></TD>
<TD></TD>
</TR>

Просмотреть файл

@ -1,10 +1,7 @@
0028;;1
002F;;2
005B;;1
007B;;1
2018;;1
201B;;1
201C;;1
201F;;1
3008;;1
300A;;1
300C;;1
@ -19,10 +16,6 @@
002C;;2
005D;;2
007D;;2
2019;;2
201A;;2
201D;;2
201E;;2
3001;;2
3009;;2
300B;;2
@ -67,7 +60,7 @@
30FE;;3
0021;;4
003F;;4
003A;;5
003A;;18
003B;;5
30FB;;5
002E;;6
@ -76,14 +69,14 @@
2024;;2
2025;;2
2026;;2
0024;;8
005C;;8
0024;;1
005C;;1
00A3;;8
00A5;;8
2116;;8
0025;;9
0025;;2
00A2;;9
00B0;;9
00B0;;2
2030;;9
2031;;9
2032;;9
@ -91,18 +84,18 @@
3000;;10
3042;3094;11
3099;309E;3
002B;;12
002D;;12
002B;;18
002D;;2
003C;;1
003D;;12
003D;;2
003E;;2
00A7;;12
00A9;;12
00AE;;12
00B1;;12
00B6;;12
00D7;;12
00F7;;12
00A7;;18
00A9;;18
00AE;;18
00B1;;18
00B6;;18
00D7;;18
00F7;;18
203B;;12
2160;217F;12
2190;21EA;a12