devdraw: accept 5- and 6-byte Unicode hex values
Alt X 1234 for U+1234 Alt X X 12345 for U+12345 Alt X X X 103456 for U+103456.
This commit is contained in:
parent
2c70acc3ab
commit
3850e6e177
2 changed files with 45 additions and 15 deletions
|
|
@ -58,7 +58,7 @@ The up arrow scrolls backward.
|
||||||
.PP
|
.PP
|
||||||
Characters in Plan 9 are runes (see
|
Characters in Plan 9 are runes (see
|
||||||
.IR utf (7)).
|
.IR utf (7)).
|
||||||
Any 16-bit rune can be typed using a compose key followed by several
|
Any rune can be typed using a compose key followed by several
|
||||||
other keys.
|
other keys.
|
||||||
The compose key is also generally near the lower right of the main key area:
|
The compose key is also generally near the lower right of the main key area:
|
||||||
the
|
the
|
||||||
|
|
@ -72,14 +72,21 @@ key on the SLC, the
|
||||||
key on the Magnum, and either
|
key on the Magnum, and either
|
||||||
.B Alt
|
.B Alt
|
||||||
key on the PC.
|
key on the PC.
|
||||||
After typing the compose key, type a capital
|
To type a single rune with the value specified by
|
||||||
.L X
|
a given four-digit hexadecimal number,
|
||||||
and exactly four hexadecimal characters (digits and
|
type the compose key,
|
||||||
|
then a capital
|
||||||
|
.LR X ,
|
||||||
|
and then the four hexadecimal digits (decimal digits and
|
||||||
.L a
|
.L a
|
||||||
to
|
to
|
||||||
.LR f )
|
.LR f ).
|
||||||
to type a single rune with the value represented by
|
For a longer rune, type
|
||||||
the typed number.
|
.L X
|
||||||
|
twice followed by five digits,
|
||||||
|
or type
|
||||||
|
.L X
|
||||||
|
three times followed by six digits.
|
||||||
There are shorthands for many characters, comprising
|
There are shorthands for many characters, comprising
|
||||||
the compose key followed by a two- or three-character sequence.
|
the compose key followed by a two- or three-character sequence.
|
||||||
The full list is too long to repeat here, but is contained in the file
|
The full list is too long to repeat here, but is contained in the file
|
||||||
|
|
|
||||||
|
|
@ -17,16 +17,15 @@ static struct cvlist
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Given 5 characters k[0]..k[4], find the rune or return -1 for failure.
|
* Given 5 characters k[0]..k[n], find the rune or return -1 for failure.
|
||||||
*/
|
*/
|
||||||
static long
|
static long
|
||||||
unicode(Rune *k)
|
unicode(Rune *k, int n)
|
||||||
{
|
{
|
||||||
long i, c;
|
long i, c;
|
||||||
|
|
||||||
k++; /* skip 'X' */
|
|
||||||
c = 0;
|
c = 0;
|
||||||
for(i=0; i<4; i++,k++){
|
for(i=0; i<n; i++,k++){
|
||||||
c <<= 4;
|
c <<= 4;
|
||||||
if('0'<=*k && *k<='9')
|
if('0'<=*k && *k<='9')
|
||||||
c += *k-'0';
|
c += *k-'0';
|
||||||
|
|
@ -36,6 +35,8 @@ unicode(Rune *k)
|
||||||
c += 10 + *k-'A';
|
c += 10 + *k-'A';
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
|
if(c > Runemax)
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
@ -53,10 +54,32 @@ latin1(Rune *k, int n)
|
||||||
char* p;
|
char* p;
|
||||||
|
|
||||||
if(k[0] == 'X'){
|
if(k[0] == 'X'){
|
||||||
if(n>=5)
|
if(n < 2)
|
||||||
return unicode(k);
|
return -2;
|
||||||
else
|
if(k[1] == 'X') {
|
||||||
return -5;
|
if(n < 3)
|
||||||
|
return -3;
|
||||||
|
if(k[2] == 'X') {
|
||||||
|
if(n < 9) {
|
||||||
|
if(unicode(k+3, n-3) < 0)
|
||||||
|
return -1;
|
||||||
|
return -(n+1);
|
||||||
|
}
|
||||||
|
return unicode(k+3, 6);
|
||||||
|
}
|
||||||
|
if(n < 7) {
|
||||||
|
if(unicode(k+2, n-2) < 0)
|
||||||
|
return -1;
|
||||||
|
return -(n+1);
|
||||||
|
}
|
||||||
|
return unicode(k+2, 5);
|
||||||
|
}
|
||||||
|
if(n < 5) {
|
||||||
|
if(unicode(k+1, n-1) < 0)
|
||||||
|
return -1;
|
||||||
|
return -(n+1);
|
||||||
|
}
|
||||||
|
return unicode(k+1, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(l=latintab; l->ld!=0; l++)
|
for(l=latintab; l->ld!=0; l++)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue