[Developer] Fixes #183 - workaround for Chrome ladder limitation

This commit is contained in:
Marc Durdin 2019-01-30 15:54:10 -06:00
parent 4402a2b558
commit 95cdd73fdc
30 changed files with 17443 additions and 42 deletions

View file

@ -227,8 +227,10 @@ type
function JavaScript_Key(fkp: PFILE_KEY; FMnemonic: Boolean): Integer;
function JavaScript_KeyAsString(fkp: PFILE_KEY; FMnemonic: Boolean): string;
function JavaScript_ContextLength(Context: PWideChar): Integer;
function JavaScript_OutputString(fkp: PFILE_KEY; pwszOutput: PWideChar; fgp: PFILE_GROUP): string;
function JavaScript_OutputString(FTabstops: string; fkp: PFILE_KEY; pwszOutput: PWideChar; fgp: PFILE_GROUP): string;
function JavaScript_ContextMatch(fkp: PFILE_KEY; context: PWideChar): string;
function JavaScript_Rule(FTabStops, FElse: string; fgp: PFILE_GROUP; fkp: PFILE_KEY): string;
function JavaScript_Rules(fgp: PFILE_GROUP): string;
function JavaScript_CompositeContextValue(fkp: PFILE_KEY; pwsz: PWideChar): string;
function JavaScript_FullContextValue(fkp: PFILE_KEY; pwsz: PWideChar): string;
function RuleIsExcludedByPlatform(fkp: PFILE_KEY): Boolean;
@ -637,6 +639,148 @@ begin
else Result := JavaScript_CompositeContextValue(fkp, context);
end;
function TCompileKeymanWeb.JavaScript_Rule(FTabStops, FElse: string; fgp: PFILE_GROUP; fkp: PFILE_KEY): string;
var
linecomment: string;
FIndent: string;
begin
Result := '';
if (fkp.Line > 0) and FDebug // I4384
then linecomment := Format(' // Line %d', [fkp.Line]) // I4373
else linecomment := '';
if xstrlen(fkp.dpContext) > 0 then
begin
FIndent := FTabStops+FTabStop;
Result := Result + Format('%s%sif(%s){%s', [
FTabStops,
FElse,
JavaScript_ContextMatch(fkp, fkp.dpContext),
nl
]);
end
else if FElse <> '' then
begin
FIndent := FTabStops+FTabStop;
Result := Result + Format('%s%s{%s', [
FTabStops,
FElse,
nl
]);
end
else
begin
FIndent := FTabStops;
end;
if(fgp.fUsingKeys) // I1959
then Result := Result + Format('%sr=m=1;%s%s', [FIndent,linecomment,JavaScript_OutputString(FIndent, fkp, fkp.dpOutput, fgp)]) // I1959 // I3681
else Result := Result + Format('%sm=1;%s%s', [FIndent,linecomment,JavaScript_OutputString(FIndent, fkp, fkp.dpOutput, fgp)]); // I1959 // I3681
if FIndent = FTabStops then
Result := Result + nl
else
Result := Result + Format('%s%s}%s', [nl, FTabStops, nl]); // I3681
end;
function TCompileKeymanWeb.JavaScript_Rules(fgp: PFILE_GROUP): string;
var
j: Integer;
HasRules: Boolean;
linecomment: string;
fkp2, fkp: PFILE_KEY;
processed_rule: array of Boolean;
i: Integer;
LocalHasRules: Boolean;
LocalCounter: Integer;
Counter: Integer;
begin
Result := '';
fkp := fgp.dpKeyArray;
HasRules := False;
SetLength(processed_rule, fgp.cxKeyArray);
for j := 0 to Integer(fgp.cxKeyArray) - 1 do
processed_rule[j] := False;
j := 0;
Counter := 0;
while j < Integer(fgp.cxKeyArray) do // I1964
begin
if not processed_rule[j] and not RuleIsExcludedByPlatform(fkp) then
begin
// Break down by key code
// We know the rules are sorted by key code.
// First pass, break the grouping down by key code.
// Result := Result + FTabstop+FTabstop; // I3681
// if HasRules then Result := Result + 'else ';
// HasRules := True;
if fgp.fUsingKeys then
begin
Result := Result + Format('%s%sif(k.KKM(e,%s,%s)) {%s',
[
FTabStop+FTabStop,
IfThen(HasRules, 'else ', ''),
JavaScript_ShiftAsString(fkp, fMnemonic),
JavaScript_KeyAsString(fkp, fMnemonic),
nl
]);
HasRules := True;
Inc(Counter);
LocalHasRules := False;
fkp2 := fkp;
LocalCounter := 0;
while (j < Integer(fgp.cxKeyArray)) and (fkp2.Key = fkp.Key) and (fkp2.ShiftFlags = fkp.ShiftFlags) do
begin
//writeln(Format('%d of %d [%d]', [j, fgp.cxKeyArray, fkp.Line]));
if not RuleIsExcludedByPlatform(fkp) then
begin
processed_rule[j] := True;
Result := Result + JavaScript_Rule(FTabStop + FTabStop + FTabStop, IfThen(LocalHasRules, 'else ', ''), fgp, fkp);
Inc(LocalCounter);
if (LocalCounter mod 100) = 0 then
begin
// Break if/else ladders
Result := Result + Format('%sif(m) {}%s', [FTabStop + FTabStop + FTabStop, nl]);
end;
LocalHasRules := True;
end;
Inc(fkp);
Inc(j);
end;
Result := Result + FTabStop + FTabStop + '}' + nl;
end
else
begin
//TODO
Result := Result + JavaScript_Rule(FTabStop + FTabStop + FTabStop, IfThen(HasRules, 'else ', ''), fgp, fkp);
HasRules := True;
Inc(Counter);
Inc(fkp);
Inc(j);
end;
if (Counter mod 100) = 0 then
begin
// Break if/else ladders
// We need to only match if no previous line is matched (i.e. m is false)
Result := Result + Format('%sif(m) {}%s', [FTabStop + FTabStop + FTabStop, nl]);
end;
end
else
begin
Inc(fkp);
Inc(j);
end;
end;
end;
const // I1585 - add space to conversion
USEnglishUnshift: WideString = ' `' + '1234567890' + '-' + '=' + 'qwertyuiop' + '[' + ']' + '\' + 'asdfghjkl' + ';' + '''' + 'zxcvbnm' + ',' + '.' + '/';
USEnglishShift: WideString = #$FF'~' + '!@#$%^&*()' + '_' + '+' + 'QWERTYUIOP' + '{' + '}' + '|' + 'ASDFGHJKL' + ':' + '"' + 'ZXCVBNM' + '<' + '>' + '?';
@ -738,7 +882,7 @@ begin
end;
end;
function TCompileKeymanWeb.JavaScript_OutputString(fkp: PFILE_KEY; pwszOutput: PWideChar; fgp: PFILE_GROUP): string;
function TCompileKeymanWeb.JavaScript_OutputString(FTabstops: string; fkp: PFILE_KEY; pwszOutput: PWideChar; fgp: PFILE_GROUP): string;
var
i, n, len: Integer;
InQuotes: Boolean;
@ -816,7 +960,7 @@ var
end;
begin
nlt := nl + FTabstop+FTabstop+FTabstop; // I3681
nlt := nl + FTabStops; // I3681
Result := '';
InQuotes := False;
@ -1869,47 +2013,55 @@ begin
fkp := fgp.dpKeyArray;
HasRules := False;
for j := 0 to Integer(fgp.cxKeyArray) - 1 do // I1964
if IsKeyboardVersion10OrLater then
begin
if not RuleIsExcludedByPlatform(fkp) then
Result := Result + JavaScript_Rules(fgp);
end
else
begin
for j := 0 to Integer(fgp.cxKeyArray) - 1 do // I1964
begin
Result := Result + FTabstop+FTabstop; // I3681
if HasRules then Result := Result + 'else ';
HasRules := TRue;
if fgp.fUsingKeys then
if not RuleIsExcludedByPlatform(fkp) then
begin
Result := Result + Format('if(k.KKM(e,%s,%s)',
[JavaScript_ShiftAsString(fkp, fMnemonic),
JavaScript_KeyAsString(fkp, fMnemonic)]);
Result := Result + FTabstop+FTabstop; // I3681
if HasRules then Result := Result + 'else ';
HasRules := TRue;
if fgp.fUsingKeys then
begin
Result := Result + Format('if(k.KKM(e,%s,%s)',
[JavaScript_ShiftAsString(fkp, fMnemonic),
JavaScript_KeyAsString(fkp, fMnemonic)]);
end;
if xstrlen(fkp.dpContext) > 0 then
begin
if not fgp.fUsingKeys
then Result := Result + 'if('
else Result := Result + '&&';
Result := Result + JavaScript_ContextMatch(fkp, fkp.dpContext);
end
else if not fgp.fUsingKeys then
Result := Result + 'if(1';
if (fkp.Line > 0) and FDebug // I4384
then linecomment := Format(' // Line %d', [fkp.Line]) // I4373
else linecomment := '';
Result := Result + Format(
') {%s%s'+
'%s',
[linecomment, nl,
FTabstop+FTabstop+FTabstop]); // I3681
if(fgp.fUsingKeys) // I1959
then Result := Result + Format('r=m=1;%s', [JavaScript_OutputString(FTabStop + FTabStop + FTabStop, fkp, fkp.dpOutput, fgp)]) // I1959 // I3681
else Result := Result + Format('m=1;%s', [JavaScript_OutputString(FTabStop + FTabStop + FTabStop, fkp, fkp.dpOutput, fgp)]); // I1959 // I3681
Result := Result + Format('%s%s}%s', [nl, FTabstop+FTabstop, nl]); // I3681
end;
if xstrlen(fkp.dpContext) > 0 then
begin
if not fgp.fUsingKeys
then Result := Result + 'if('
else Result := Result + '&&';
Result := Result + JavaScript_ContextMatch(fkp, fkp.dpContext);
end
else if not fgp.fUsingKeys then
Result := Result + 'if(1';
if (fkp.Line > 0) and FDebug // I4384
then linecomment := Format(' // Line %d', [fkp.Line]) // I4373
else linecomment := '';
Result := Result + Format(
') {%s%s'+
'%s',
[linecomment, nl,
FTabstop+FTabstop+FTabstop]); // I3681
if(fgp.fUsingKeys) // I1959
then Result := Result + Format('r=m=1;%s', [JavaScript_OutputString(fkp, fkp.dpOutput, fgp)]) // I1959 // I3681
else Result := Result + Format('m=1;%s', [JavaScript_OutputString(fkp, fkp.dpOutput, fgp)]); // I1959 // I3681
Result := Result + Format('%s%s}%s', [nl, FTabstop+FTabstop, nl]); // I3681
Inc(fkp);
end;
Inc(fkp);
end;
end;
if Assigned(fgp.dpMatch) then
Result := Result + Format(
@ -1917,7 +2069,7 @@ begin
'%s%s%s'+
'%s}%s',
[FTabstop+FTabstop, nl,
FTabstop+Ftabstop, JavaScript_OutputString(nil, fgp.dpMatch, fgp), nl,
FTabstop+Ftabstop, JavaScript_OutputString(FTabStop + FTabStop + FTabStop, nil, fgp.dpMatch, fgp), nl,
FTabstop+FTabstop, nl]); // I3681
if Assigned(fgp.dpNoMatch) then
if fgp.fUsingKeys then // I1382 - fixup m=1 to m=g()
@ -1926,7 +2078,7 @@ begin
'%sr=1;%s%s'+
'%s}%s',
[FTabstop+FTabstop, nl,
FTabstop+FTabstop+FTabstop, JavaScript_OutputString(nil, fgp.dpNoMatch, fgp), nl,
FTabstop+FTabstop+FTabstop, JavaScript_OutputString(FTabStop + FTabStop + FTabStop, nil, fgp.dpNoMatch, fgp), nl,
FTabstop+FTabstop, nl]) // I1959. part 2, I2224 // I3681
else
Result := Result + Format(
@ -1934,7 +2086,7 @@ begin
'%s%s%s'+
'%s}%s',
[FTabstop+FTabstop, nl,
FTabstop+FTabstop, JavaScript_OutputString(nil, fgp.dpNoMatch, fgp), nl,
FTabstop+FTabstop, JavaScript_OutputString(FTabStop + FTabStop + FTabStop, nil, fgp.dpNoMatch, fgp), nl,
FTabstop+FTabstop, nl]); // I1959 // I3681
Result := Result + Format('%sreturn r;%s'+

View file

@ -0,0 +1,2 @@
@..\..\..\developer\kmcomp\kmcomp.exe -d simple_keyboard\simple_keyboard.kpj
@..\..\..\developer\kmcomp\kmcomp.exe -d hieroglyphic\hieroglyphic.kpj

View file

@ -0,0 +1,10 @@
Hieroglyphic Keyboard Change History
=======================
1.3 (1 Jun 2018)
-----------------
* Migrated to GitHub
1.0 (2010)
-----------------
* Initial version

View file

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2010-2018 Christian Casey
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,15 @@
Hieroglyphic Keyboard
=====================
Copyright (C) 2010-2018 Christian Casey
Version 1.3
__DESCRIPTION__
This keyboard provides a quick and easy way to enter Ancient Egyptian hieroglyphs and transliteration as Unicode text.
Supported Platforms
-------------------
* Windows
* macOS
* Web

View file

@ -0,0 +1,5 @@
{
"license": "mit",
"languages": ["egy-Egyp"],
"description": "This keyboard provides a quick and easy way to enter Ancient Egyptian hieroglyphs and transliteration as Unicode text."
}

View file

@ -0,0 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<KeymanDeveloperProject>
<Options>
<BuildPath>$PROJECTPATH\build</BuildPath>
<CompilerWarningsAsErrors>True</CompilerWarningsAsErrors>
<WarnDeprecatedCode>True</WarnDeprecatedCode>
<CheckFilenameConventions>False</CheckFilenameConventions>
</Options>
<Files>
<File>
<ID>id_f4a66deaf296f96fe61883341eba5771</ID>
<Filename>hieroglyphic.kmn</Filename>
<Filepath>source\hieroglyphic.kmn</Filepath>
<FileVersion>1.3</FileVersion>
<FileType>.kmn</FileType>
<Details>
<Name>Hieroglyphic</Name>
<Copyright>© 2010-2018 Christian Casey</Copyright>
</Details>
</File>
<File>
<ID>id_cb0f005e3972f310925be5af53259799</ID>
<Filename>hieroglyphic.kps</Filename>
<Filepath>source\hieroglyphic.kps</Filepath>
<FileVersion></FileVersion>
<FileType>.kps</FileType>
<Details>
<Name>Hieroglyphic</Name>
<Copyright>© 2010-2018 Christian Casey</Copyright>
</Details>
</File>
<File>
<ID>id_cf79a8dde59c3d16a79971e6dcb49e60</ID>
<Filename>hieroglyphic.ico</Filename>
<Filepath>source\hieroglyphic.ico</Filepath>
<FileVersion></FileVersion>
<FileType>.ico</FileType>
<ParentFileID>id_f4a66deaf296f96fe61883341eba5771</ParentFileID>
</File>
<File>
<ID>id_de482877ada47b349fa0c32469b3c4cc</ID>
<Filename>hieroglyphic.js</Filename>
<Filepath>source\..\build\hieroglyphic.js</Filepath>
<FileVersion></FileVersion>
<FileType>.js</FileType>
<ParentFileID>id_cb0f005e3972f310925be5af53259799</ParentFileID>
</File>
<File>
<ID>id_b83020f2de7faa33d814d1f7aafb4768</ID>
<Filename>hieroglyphic.kvk</Filename>
<Filepath>source\..\build\hieroglyphic.kvk</Filepath>
<FileVersion></FileVersion>
<FileType>.kvk</FileType>
<ParentFileID>id_cb0f005e3972f310925be5af53259799</ParentFileID>
</File>
<File>
<ID>id_ea98ffd0241ff60b16faba096e47fb40</ID>
<Filename>hieroglyphic.kmx</Filename>
<Filepath>source\..\build\hieroglyphic.kmx</Filepath>
<FileVersion></FileVersion>
<FileType>.kmx</FileType>
<ParentFileID>id_cb0f005e3972f310925be5af53259799</ParentFileID>
</File>
<File>
<ID>id_07e79ced47c1b315948792ebcd87f9e7</ID>
<Filename>Aegyptus.pdf</Filename>
<Filepath>source\..\assets\Aegyptus.pdf</Filepath>
<FileVersion></FileVersion>
<FileType>.pdf</FileType>
<ParentFileID>id_cb0f005e3972f310925be5af53259799</ParentFileID>
</File>
<File>
<ID>id_07a7ec86e29e2c5546b8715a294f9d87</ID>
<Filename>Aegyptus.ttf</Filename>
<Filepath>source\..\assets\Aegyptus.ttf</Filepath>
<FileVersion></FileVersion>
<FileType>.ttf</FileType>
<ParentFileID>id_cb0f005e3972f310925be5af53259799</ParentFileID>
</File>
<File>
<ID>id_c2ded6274721cc8d6088d095caf29152</ID>
<Filename>Gardiner.ttf</Filename>
<Filepath>source\..\assets\Gardiner.ttf</Filepath>
<FileVersion></FileVersion>
<FileType>.ttf</FileType>
<ParentFileID>id_cb0f005e3972f310925be5af53259799</ParentFileID>
</File>
<File>
<ID>id_89263597fffe0ce35e6635cc2f4897aa</ID>
<Filename>SignList.pdf</Filename>
<Filepath>source\..\assets\SignList.pdf</Filepath>
<FileVersion></FileVersion>
<FileType>.pdf</FileType>
<ParentFileID>id_cb0f005e3972f310925be5af53259799</ParentFileID>
</File>
<File>
<ID>id_6f245111bde1d607d76895b40e978071</ID>
<Filename>style.css</Filename>
<Filepath>source\welcome\style.css</Filepath>
<FileVersion></FileVersion>
<FileType>.css</FileType>
<ParentFileID>id_cb0f005e3972f310925be5af53259799</ParentFileID>
</File>
<File>
<ID>id_724e5b4c63f10bc0abf7077f7c3172fc</ID>
<Filename>welcome.htm</Filename>
<Filepath>source\welcome\welcome.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_cb0f005e3972f310925be5af53259799</ParentFileID>
</File>
<File>
<ID>id_8da344c4cea6f467013357fe099006f5</ID>
<Filename>readme.htm</Filename>
<Filepath>source\readme.htm</Filepath>
<FileVersion></FileVersion>
<FileType>.htm</FileType>
<ParentFileID>id_cb0f005e3972f310925be5af53259799</ParentFileID>
</File>
</Files>
</KeymanDeveloperProject>

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<Package>
<System>
<KeymanDeveloperVersion>10.0.1093.0</KeymanDeveloperVersion>
<FileVersion>7.0</FileVersion>
</System>
<Options>
<ExecuteProgram></ExecuteProgram>
<ReadMeFile>readme.htm</ReadMeFile>
<MSIFileName></MSIFileName>
<MSIOptions></MSIOptions>
<FollowKeyboardVersion/>
</Options>
<StartMenu>
<Folder></Folder>
<Items/>
</StartMenu>
<Info>
<Version URL=""></Version>
<Name URL="">Hieroglyphic</Name>
<Copyright URL="">© 2010-2018 Christian Casey</Copyright>
</Info>
<Files>
<File>
<Name>..\build\hieroglyphic.js</Name>
<Description>File hieroglyphic.js</Description>
<CopyLocation>0</CopyLocation>
<FileType>.js</FileType>
</File>
<File>
<Name>welcome\style.css</Name>
<Description>File style.css</Description>
<CopyLocation>0</CopyLocation>
<FileType>.css</FileType>
</File>
<File>
<Name>welcome\welcome.htm</Name>
<Description>File welcome.htm</Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
<File>
<Name>readme.htm</Name>
<Description>File readme.htm</Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
</Files>
<Keyboards>
<Keyboard>
<Name>Hieroglyphic</Name>
<ID>hieroglyphic</ID>
<Version></Version>
<Languages>
<Language ID="egy-Egyp">Egyptian (Ancient) (Egyptian hieroglyphs)</Language>
</Languages>
</Keyboard>
</Keyboards>
<Strings/>
</Package>

View file

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<visualkeyboard>
<header>
<version>10.0</version>
<kbdname></kbdname>
<flags>
<displayunderlying/>
</flags>
</header>
<encoding name="unicode" fontname="Aegyptus" fontsize="12">
<layer shift="">
<key vkey="K_BKQUOTE">&lt;LTN&gt;</key>
<key vkey="K_Q">ḳ</key>
<key vkey="K_W">w</key>
<key vkey="K_E">e</key>
<key vkey="K_R">r</key>
<key vkey="K_T">t</key>
<key vkey="K_Y">y</key>
<key vkey="K_U">u</key>
<key vkey="K_I">i</key>
<key vkey="K_O">o</key>
<key vkey="K_P">p</key>
<key vkey="K_LBRKT">[</key>
<key vkey="K_RBRKT">]</key>
<key vkey="K_BKSLASH">\</key>
<key vkey="K_S">s</key>
<key vkey="K_D">d</key>
<key vkey="K_F">f</key>
<key vkey="K_G">g</key>
<key vkey="K_H">h</key>
<key vkey="K_J">j</key>
<key vkey="K_K">k</key>
<key vkey="K_L">l</key>
<key vkey="K_COLON">;</key>
<key vkey="K_QUOTE">'</key>
<key vkey="K_Z">z</key>
<key vkey="K_C">c</key>
<key vkey="K_B">b</key>
<key vkey="K_V">v</key>
<key vkey="K_N">n</key>
<key vkey="K_M">m</key>
<key vkey="K_COMMA">,</key>
<key vkey="K_PERIOD">.</key>
<key vkey="K_SLASH">/</key>
<key vkey="K_1">1</key>
<key vkey="K_2">2</key>
<key vkey="K_3">3</key>
<key vkey="K_4">4</key>
<key vkey="K_5">5</key>
<key vkey="K_6">6</key>
<key vkey="K_7">7</key>
<key vkey="K_8">8</key>
<key vkey="K_9">9</key>
<key vkey="K_0">0</key>
<key vkey="K_HYPHEN">-</key>
<key vkey="K_EQUAL">=</key>
<key vkey="K_A">ꜥ</key>
<key vkey="K_X">ḫ</key>
</layer>
<layer shift="S">
<key vkey="K_BKQUOTE">~</key>
<key vkey="K_1">!</key>
<key vkey="K_2">@</key>
<key vkey="K_3">#</key>
<key vkey="K_4">$</key>
<key vkey="K_5">%</key>
<key vkey="K_6">^</key>
<key vkey="K_7">&amp;</key>
<key vkey="K_8">*</key>
<key vkey="K_9">(</key>
<key vkey="K_0">)</key>
<key vkey="K_HYPHEN">_</key>
<key vkey="K_EQUAL">+</key>
<key vkey="K_Q">Q</key>
<key vkey="K_W">W</key>
<key vkey="K_E">E</key>
<key vkey="K_R">R</key>
<key vkey="K_T">T</key>
<key vkey="K_Y">Y</key>
<key vkey="K_U">U</key>
<key vkey="K_I">I</key>
<key vkey="K_O">O</key>
<key vkey="K_P">P</key>
<key vkey="K_LBRKT">{</key>
<key vkey="K_RBRKT">}</key>
<key vkey="K_BKSLASH">|</key>
<key vkey="K_F">F</key>
<key vkey="K_G">G</key>
<key vkey="K_J">J</key>
<key vkey="K_K">K</key>
<key vkey="K_L">L</key>
<key vkey="K_COLON">:</key>
<key vkey="K_QUOTE">"</key>
<key vkey="K_Z">Z</key>
<key vkey="K_C">C</key>
<key vkey="K_V">V</key>
<key vkey="K_B">B</key>
<key vkey="K_N">N</key>
<key vkey="K_M">M</key>
<key vkey="K_COMMA">&lt;</key>
<key vkey="K_PERIOD">&gt;</key>
<key vkey="K_SLASH">?</key>
<key vkey="K_S">š</key>
<key vkey="K_D">ḏ</key>
<key vkey="K_A">ꜣ</key>
<key vkey="K_X">ẖ</key>
</layer>
</encoding>
</visualkeyboard>

View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>Hieroglyphic Keyboard</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<h1>Hieroglyphic Keyboard</h1>
<p style='margin:0px'>Created by Christian Casey</p>
<p>This keyboard is designed as a quick and easy way to enter Ancient Egyptian
hieroglyphs as Unicode text. Signs are entered using Manuel de Codage
phonetic values or Gardiner Sign List codes, but they cannot be stacked
or grouped. The portability of Unicode text produced with this keyboard
makes it especially suitable for contexts in which rendered
hieroglyphic text cannot be displayed.</p>
</body>
</html>

View file

@ -0,0 +1,199 @@
/*
===========
==General==
===========
*/
body {
margin: 30px;
font-family: 'Arial Unicode MS', Helvetica, sans-serif;
font-size: 11pt;color: #2D2C2C;}
img {border: none; }
p {font-size: 11pt; margin:5px 0px 0px;}
.example {margin-left:40px}
section {clear:both;}
article{clear:left; margin-bottom:60px;}
/* Headers */
h1, h2, h3{color: #AD4A28; font-weight: bold;clear:both;}
h1 {font-size: 22pt; margin: 22px 0px 11px; padding:0px;}
h2 {font-size: 16pt; margin: 14px 0px 7px; padding:0px;}
h3 {font-size: 12pt; margin: 12px 0px 6px; padding:0px;}
h4 {font-size: 11pt; margin: 10px 0px 5px; padding:0px;}
/* Links */
a:link {color: #AD4A28; text-decoration: none;}
a:visited {color: #AD4A28;text-decoration: none;}
a:hover {color: #AD4A28;text-decoration: underline;}
/* Language + Keyboard */
samp{font-family: Gardiner, Aegyptus; color:blue;}
kbd {color:black;}
/* Printing */
.break {clear:both !important; page-break-before:always !important;}
/*
===========
==Welcome==
===========
*/
/* Notes (Asides) */
aside {background-color:#eee;border:2px solid #ddd;-webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;margin:10px 0px; padding:0px 10px 5px;font-size:10pt;}
aside h4 {color:#AD4A28; text-align:left;padding:0px 0px 5px;margin-top:5px;font-size:11pt;}
aside p {font-size:10pt;}
aside kbd {color:black; font:9pt Arial; border:solid 1px grey; background:#ccc; margin:0px 1px; padding:2px 4px; vertical-align:middle; line-height:2em; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;}
/* Tables */
table {border-collapse:collapse !important; margin:10px 0px 20px 40px;}
.grid col {text-align:center; background-color:#ffffff;}
.grid th {text-align:center; font-weight:bold}
.grid td, .grid th {padding:2px 5px;border-bottom:1px solid #ddd;}
.grid tr {text-align:center; font-weight:normal; height:80px;}
.grid thead tr,.grid .headrow{height:30px;}
.grid .headrow {font-weight:bold; color:#AD4A28; background-color:#eee;}
.gardiner {font-family:Gardiner, Aegyptus; font-size:24pt;line-height:20px;vertical-align:-2px;}
col.trans {width:60px;}
col.keys {width:50px;}
col.signs {width:85px;}
#guidemdc col.keys {width:120px;}
#guidemdc col.signs{width:465px;}
#guidegardiner col.signs{width:125px;}
#guidegardiner col.keys {width:115px;}
tr.halfrow {border-bottom:2px solid white !important;}
td samp {font-size:24pt}
td samp.hiero {vertical-align:middle;font-size:49pt;}
table kbd {color:black; font:12pt Arial; border:solid 1px grey; background:#ccc; margin:0px 1px; padding:2px 4px; vertical-align:middle; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;}
/* Columns + Psuedo-Columns (Floats)*/
.columns {width:375px; -webkit-column-count: 2; -webkit-column-gap: 10px; -moz-column-count: 2; -moz-column-gap: 10px; column-count: 2; column-gap: 10px;}
.colleft, .colright {position:relative; float:left;}
.colright {padding-left:40px;}
/* Language Examples */
p samp {font-size:22pt; line-height:.8em;}
p kbd {color:black; font:9pt Arial; border:solid 1px grey; background:#ccc; margin:0px 1px; padding:0px 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;}
samp.hiero {font-size:44pt; line-height:43px; font-family:Gardiner, Aegyptus;}
samp .cyc {font-size:30pt; color:#2D2C2C;}
/* OSK Keys */
.key {
float: left;
display: block;
position: relative;
overflow: hidden;
height: 35px;
margin: 2px 0px 0px 2px;
border: solid 1px grey;
-webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;
}
.plain {
background-repeat: no-repeat;
width: 34px;
}
.empty {
background:#eee;
}
.K_BKQUOTE {
width:34px;
}
.K_BKSP {
width: 60px;
}
.K_TAB {
width: 52px;
}
.K_BKSLASH {
width: 42px;
}
.K_CAPS {
width: 62px;
}
.K_ENTER {
width: 70px;
}
.K_ENTER-EU1 {
width: 42px;
-webkit-border-radius: 3px 3px 0px; -moz-border-radius: 3px 3px 0px; border-radius: 3px 3px 0px;
}
.K_ENTER-EU1 .key kbd {
left:3px !important;
}
.K_ENTER-EU2 {
width: 32px;
margin-top:-1px !important;
border-top:none !important;
height:39px !important;
-webkit-border-radius: 0px 0px 3px 3px; -moz-border-radius: 0px 0px 3px 3px; border-radius: 0px 0px 3px 3px;
}
.K_SHIFTL {
width: 85px;
}
.K_SHIFTL-EU {
width: 47px;
}
.K_oE2 {
display:none;
}
.K_SHIFTR {
width: 85px;
}
.K_CTRLL {
width:60px;
margin-right: 40px;
}
.K_ALTL {
width: 40px;
}
.K_SPACE , .K_SPACE samp{
width: 224px;
}
.K_ALTR {
width: 40px;
}
.K_CTRLR {
width: 60px;
margin-left: 76px;
}
.special {
background-repeat: no-repeat;
background: #c0c0c0;
}
.key kbd {
font: bold 7pt Arial;
position: absolute;
left: 3px;
top: 3px;
}
.key kbd {
display: block;
}
.special kbd {
display: block;
}
.key samp {
font-size: 19pt;
position: absolute;
display: block;
right: 5px;
bottom: 0px;
color: blue;
}
.LTN {
font-family:Arial !important;
font-size:12px !important;
color: #AD4A28 !important;
right:2px !important;
bottom:2px !important;
font-variant:small-caps;
}

View file

@ -0,0 +1,6 @@
Simple Keyboard Change History
====================
1.0 (2019-01-22)
----------------
* Created by Marc DUrdin

View file

@ -0,0 +1,21 @@
The MIT License (MIT)
© 2019 SIL International
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,29 @@
Simple Keyboard keyboard
==============
© 2019 SIL International
Version 1.0
Description
-----------
Simple Keyboard generated from template
Links
-----
Supported Platforms
-------------------
* Windows
* macOS
* Linux
* Web
* iPhone
* iPad
* Android phone
* Android tablet
* Mobile devices
* Desktop devices
* Tablet devices

View file

@ -0,0 +1,7 @@
{
"license": "mit",
"languages": [
],
"description": "Simple Keyboard generated from template"
}

View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<KeymanDeveloperProject>
<Options>
<BuildPath>$PROJECTPATH\build</BuildPath>
<CompilerWarningsAsErrors>True</CompilerWarningsAsErrors>
<WarnDeprecatedCode>True</WarnDeprecatedCode>
</Options>
<Files>
<File>
<ID>id_8dc3c3ab6a1e89cc11cc0c9818e41def</ID>
<Filename>simple_keyboard.kmn</Filename>
<Filepath>source\simple_keyboard.kmn</Filepath>
<FileVersion>1.0</FileVersion>
<FileType>.kmn</FileType>
<Details>
<Name>Simple Keyboard</Name>
<Copyright>© 2019 SIL International</Copyright>
</Details>
</File>
<File>
<ID>id_3c55bc5a555faaa642be014322ccdbf4</ID>
<Filename>multi_group.kmn</Filename>
<Filepath>source\multi_group.kmn</Filepath>
<FileVersion>1.0</FileVersion>
<FileType>.kmn</FileType>
<Details>
<Name>Multiple Groups</Name>
<Copyright>© 2019 SIL International</Copyright>
</Details>
</File>
<File>
<ID>id_8c4274fb61bed09fc289b2a23e5e4f07</ID>
<Filename>manykeys.kmn</Filename>
<Filepath>source\manykeys.kmn</Filepath>
<FileVersion>1.0</FileVersion>
<FileType>.kmn</FileType>
<Details/>
</File>
<File>
<ID>id_f63461ab22ad2345f9c85c13e3877aed</ID>
<Filename>manynonkeyrules.kmn</Filename>
<Filepath>source\manynonkeyrules.kmn</Filepath>
<FileVersion>1.0</FileVersion>
<FileType>.kmn</FileType>
<Details/>
</File>
</Files>
</KeymanDeveloperProject>

View file

@ -0,0 +1,11 @@
store(&version) '10.0'
store(&targets) 'web'
store(keys) 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^*()-_=+[]{}\|;:,./<>?"' "'" \
[CTRL K_A] [CTRL K_B] [CTRL K_C] [CTRL K_D] [CTRL K_E] [CTRL K_F] [CTRL K_G] [CTRL K_H]
begin Unicode > use(main)
group(main) using keys
+ any(keys) > 'foo' index(keys, 1)

View file

@ -0,0 +1,117 @@
store(&version) '10.0'
store(&targets) 'web'
begin Unicode > use(main)
group(main) using keys
U+0100 + 'a' > 'a' U+0100 c match first rule ;-)
+ 'a' > U+0100
match > use(g2)
group(g2)
'a' U+0100 > 'foo' U+1200
'b' U+0100 > 'foo' U+1201
'c' U+0100 > 'foo' U+1202
'd' U+0100 > 'foo' U+1203
'e' U+0100 > 'foo' U+1204
'f' U+0100 > 'foo' U+1205
'g' U+0100 > 'foo' U+1206
'h' U+0100 > 'foo' U+1207
'i' U+0100 > 'foo' U+1208
'j' U+0100 > 'foo' U+1209
'k' U+0100 > 'foo' U+120A
'l' U+0100 > 'foo' U+120B
'm' U+0100 > 'foo' U+120C
'n' U+0100 > 'foo' U+120D
'o' U+0100 > 'foo' U+120E
'p' U+0100 > 'foo' U+120F
'q' U+0100 > 'foo' U+1210
'r' U+0100 > 'foo' U+1211
's' U+0100 > 'foo' U+1212
't' U+0100 > 'foo' U+1213
'u' U+0100 > 'foo' U+1214
'v' U+0100 > 'foo' U+1215
'w' U+0100 > 'foo' U+1216
'x' U+0100 > 'foo' U+1217
'y' U+0100 > 'foo' U+1218
'z' U+0100 > 'foo' U+1219
'A' U+0100 > 'foo' U+121A
'B' U+0100 > 'foo' U+121B
'C' U+0100 > 'foo' U+121C
'D' U+0100 > 'foo' U+121D
'E' U+0100 > 'foo' U+121E
'F' U+0100 > 'foo' U+121F
'G' U+0100 > 'foo' U+1220
'H' U+0100 > 'foo' U+1221
'I' U+0100 > 'foo' U+1222
'J' U+0100 > 'foo' U+1223
'K' U+0100 > 'foo' U+1224
'L' U+0100 > 'foo' U+1225
'M' U+0100 > 'foo' U+1226
'N' U+0100 > 'foo' U+1227
'O' U+0100 > 'foo' U+1228
'P' U+0100 > 'foo' U+1229
'Q' U+0100 > 'foo' U+122A
'R' U+0100 > 'foo' U+122B
'S' U+0100 > 'foo' U+122C
'T' U+0100 > 'foo' U+122D
'U' U+0100 > 'foo' U+122E
'V' U+0100 > 'foo' U+122F
'W' U+0100 > 'foo' U+1230
'X' U+0100 > 'foo' U+1231
'Y' U+0100 > 'foo' U+1232
'Z' U+0100 > 'foo' U+1233
'1' U+0100 > 'foo' U+1234
'2' U+0100 > 'foo' U+1235
'3' U+0100 > 'foo' U+1236
'4' U+0100 > 'foo' U+1237
'5' U+0100 > 'foo' U+1238
'6' U+0100 > 'foo' U+1239
'7' U+0100 > 'foo' U+123A
'8' U+0100 > 'foo' U+123B
'9' U+0100 > 'foo' U+123C
'0' U+0100 > 'foo' U+123D
'!' U+0100 > 'foo' U+123E
'@' U+0100 > 'foo' U+123F
'#' U+0100 > 'foo' U+1240
'$' U+0100 > 'foo' U+1241
'%' U+0100 > 'foo' U+1242
'^' U+0100 > 'foo' U+1243
'&' U+0100 > 'foo' U+1244
'*' U+0100 > 'foo' U+1245
'(' U+0100 > 'foo' U+1246
')' U+0100 > 'foo' U+1247
'-' U+0100 > 'foo' U+1248
'=' U+0100 > 'foo' U+1249
'_' U+0100 > 'foo' U+124A
'+' U+0100 > 'foo' U+124B
'[' U+0100 > 'foo' U+124C
']' U+0100 > 'foo' U+124D
'{' U+0100 > 'foo' U+124E
'}' U+0100 > 'foo' U+124F
'\' U+0100 > 'foo' U+1250
'|' U+0100 > 'foo' U+1251
';' U+0100 > 'foo' U+1252
':' U+0100 > 'foo' U+1253
',' U+0100 > 'foo' U+1254
'.' U+0100 > 'foo' U+1255
'/' U+0100 > 'foo' U+1256
'<' U+0100 > 'foo' U+1257
'>' U+0100 > 'foo' U+1258
'?' U+0100 > 'foo' U+1259
'"' U+0100 > 'foo' U+125A
"'" U+0100 > 'foo' U+125B
U+1200 U+0100 > 'foo' U+125C
U+1201 U+0100 > 'foo' U+125D
U+1202 U+0100 > 'foo' U+125E
U+1203 U+0100 > 'foo' U+125F
U+1204 U+0100 > 'foo' U+1260
U+1205 U+0100 > 'foo' U+1261
U+1206 U+0100 > 'foo' U+1262
U+1207 U+0100 > 'foo' U+1263
U+1208 U+0100 > 'foo' U+1264
U+1209 U+0100 > 'foo' U+1265
U+120A U+0100 > 'foo' U+1266

View file

@ -0,0 +1,23 @@
store(&VERSION) '10.0'
store(&NAME) 'Multiple Groups'
store(&TARGETS) 'web'
store(&COPYRIGHT) '© 2019 SIL International'
store(&KEYBOARDVERSION) '1.0'
begin Unicode > use(main)
group(main) using keys
+ 'a' > 'rule 1'
'b' + 'a' > 'rule 2'
+ 'c' > 'rule 3'
match > use(group2)
group(group2)
'rule 3' > use(group3)
nomatch > use(group4)
group(group3)
group(group4) using keys

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Simple Keyboard</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #4444cc; }
</style>
</head>
<body>
<h1>Simple Keyboard</h1>
<p>
Simple Keyboard 1.0 generated from template.
</p>
<p>© 2019 SIL International</p>
</body>
</html>

View file

@ -0,0 +1,13 @@
store(&VERSION) '10.0'
store(&NAME) 'Simple Keyboard'
store(&TARGETS) 'web'
store(&COPYRIGHT) '© 2019 SIL International'
store(&KEYBOARDVERSION) '1.0'
begin Unicode > use(main)
group(main) using keys
+ 'a' > 'rule 1'
'b' + 'a' > 'rule 2'
+ 'c' > 'rule 3'

View file

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<Package>
<System>
<KeymanDeveloperVersion>11.0.1500.0</KeymanDeveloperVersion>
<FileVersion>7.0</FileVersion>
</System>
<Options>
<ExecuteProgram></ExecuteProgram>
<ReadMeFile>readme.htm</ReadMeFile>
<MSIFileName></MSIFileName>
<MSIOptions></MSIOptions>
<FollowKeyboardVersion/>
</Options>
<StartMenu>
<Folder></Folder>
<Items/>
</StartMenu>
<Info>
<Name URL="">Simple Keyboard</Name>
<Copyright URL="">© 2019 SIL International</Copyright>
<Author URL="">Marc DUrdin</Author>
</Info>
<Files>
<File>
<Name>..\build\simple_keyboard.js</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.js</FileType>
</File>
<File>
<Name>..\build\simple_keyboard.kvk</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.kvk</FileType>
</File>
<File>
<Name>welcome.htm</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
<File>
<Name>readme.htm</Name>
<Description></Description>
<CopyLocation>0</CopyLocation>
<FileType>.htm</FileType>
</File>
</Files>
<Keyboards>
<Keyboard>
<Name>Simple Keyboard</Name>
<ID>simple_keyboard</ID>
<Version>1.0</Version>
<Languages/>
</Keyboard>
</Keyboards>
<Strings/>
</Package>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<visualkeyboard>
<header>
<version>10.0</version>
<kbdname></kbdname>
<flags/>
</header>
</visualkeyboard>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Start Using Simple Keyboard</title>
<style type="text/css">
p { font: 10pt Tahoma; }
h1 { font: bold 16pt Tahoma; color: #4444cc; margin-bottom: 2px }
h2 { font: bold 12pt Tahoma; color: #4444cc; }
</style>
</head>
<body>
<h1>Start Using Simple Keyboard</h1>
<p>
Simple Keyboard 1.0 generated from template.
</p>
<h1>Keyboard Layout</h1>
<!-- Insert Keyboard Layout Images or HTML here -->
<p>© 2019 SIL International</p>
</body>
</html>