Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CLDR-12026 kbd: add proper azerty-optimisé #3220

Merged
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<!--
See CLDR-12026 for the real new azerty keyboard
-->
<keyboard3 xmlns="https://schemas.unicode.org/cldr/45/keyboard3" locale="fr-t-k0-azerty" conformsTo="45">
<keyboard3 xmlns="https://schemas.unicode.org/cldr/45/keyboard3" locale="fr-t-k0-test" conformsTo="45">
<locales>
<locale id="br" /> <!-- example of including Breton -->
</locales>
Expand Down
259 changes: 259 additions & 0 deletions keyboards/3.0/fr.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,259 @@
<?xml version="1.0" encoding="UTF-8"?>
<keyboard3 xmlns="https://schemas.unicode.org/cldr/45/keyboard3" conformsTo="45"
locale="fr">
<version number="1.0.0" />

<info author="Team Keyboard" name="Français normalisé (AZERTY)" layout="AZERTY" indicator="FR" />

<displays>
<!-- display for diacritics -->
<display output="\u0300" display="${grave}" />
<display output="\m{acute}" display="´" />
<display output="\m{grave}" display="`" />
<display output="\m{umlaut}" display="¨" />
<display output="\m{caret}" display="^" />
<display output="\m{tilde}" display="~" />
<display output="\m{invbreve}" display="\u{20}\u{0311}" />

<!-- display for 'mode' keys -->
<display keyId="mark-currency" display="\u{00A4}" />
<display keyId="mark-greek" display="\u{B5}" />
<display keyId="mark-euro" display="Eu" />
</displays>

<keys>
<import base="cldr" path="45/keys-Zyyy-punctuation.xml" />
<import base="cldr" path="45/keys-Zyyy-currency.xml" />

<!-- deadkeys -->
<key id="mark-acute" output="\m{acute}" />
<key id="mark-breve" output="\m{breve}" />
<key id="mark-caret" output="\m{caret}" />
<key id="mark-caron" output="\m{caron}" />
<key id="mark-cedilla" output="\m{cedilla}" />
<key id="mark-invbreve" output="\m{invbreve}" />
<key id="mark-comma" output="\m{comma}" />
<key id="mark-currency" output="\m{currency}" />
<key id="mark-dotabove" output="\m{dotabove}" />
<key id="mark-dotbelow" output="\m{dotbelow}" />
<key id="mark-doubleacute" output="\m{doubleacute}" />
<key id="mark-doublegrave" output="\m{doublegrave}" />
<key id="mark-euro" output="\m{euro}" />
<key id="mark-grave" output="\m{grave}" />
<key id="mark-macron" output="\m{macron}" />
<key id="mark-ogonek" output="\m{ogonek}" />
<key id="mark-ring" output="\m{ring}" />
<key id="mark-greek" output="\m{greek}" />
<key id="mark-solidus" output="\m{solidus}" />
<key id="mark-stroke" output="\m{stroke}" />
<key id="mark-submacron" output="\m{submacron}" />
<key id="mark-tilde" output="\m{tilde}" />
<key id="mark-umlaut" output="\m{umlaut}" />

<!-- spaces -->
<key id="nbsp" output="\u{A0}" />
<key id="nnbsp" output="\u{202F}" />

<!-- extra keys -->
<key id="e-grave" output="è" />
<key id="e-acute" output="é" />
<key id="c-cedilla" output="ç" />
<key id="a-acute" output="á" />
<key id="a-grave" output="à" />
<key id="e-caret" output="ê" />

<!-- extra symbols -->
<key id="bullet" output="•" />
<key id="umlaut" output="¨" />
<key id="sub-2" output="₂" />
<key id="super-2" output="²" longPressKeyIds="sub-2" />
<key id="en-dash" output="–" />
<key id="plus-minus" output="±" />
<key id="vulgar-half" output="½" />
<key id="vulgar-quarter" output="¼" />
<key id="ellipsis" output="…" />
<key id="open-apos" output="‘" />
<key id="close-apos" output="’" />
<key id="open-g" output="«" />
<key id="close-g" output="»" />

<key id="theta" output="θ" /> <!-- "for Romani" -->
<key id="Theta" output="ϴ" /> <!-- "for Romani" -->
<key id="tm" output="™" />
<key id="open-double" output="“" />
<key id="close-double" output="”" />
<key id="oe" output="œ" />
<key id="Oe" output="Œ" />
<key id="registered" output="®" />
<key id="minus-sign" output="−" />
<key id="ss" output="ß" />
<key id="infinity" output="∞" />
<key id="division" output="÷" />
<key id="less-equal" output="⩽" />
<key id="greater-equal" output="⩾" />
<key id="copy" output="©" />
<key id="inverse-question" output="¿" />
<key id="inverse-bang" output="¡" />
<key id="middle-dot" output="•" />
<key id="A-grave" output="À" />
<key id="E-acute" output="É" />
<key id="E-caret" output="Ê" />
<key id="em-dash" output="—" />
<key id="open-single" output="’" />
<key id="close-single" output="’" />
<key id="u-grave" output="Ù" />
<key id="radix" output="√" />
<key id="C-cedilla" output="Ç" />
<key id="not-equal" output="≠" />
<key id="open-angle-quote" output="‹" />
<key id="close-angle-quote" output="›" />

<key id="E-grave" output="È" />
<key id="U-grave" output="Ù" />
<key id="nb-hyphen" output="‑" />
<key id="multiplication" output="×" />
<key id="ezh" output="ʒ" />
<key id="Ezh" output="Ʒ" />
<key id="ae" output="æ" />
<key id="Ae" output="Æ" />
<key id="permille" output="‰" />
<key id="dbl-dagger" output="‡" />
<key id="dagger" output="†" />
<key id="asym-equal" output="≃" />
<key id="Ss" output="ẞ" />
</keys>

<layers formId="iso">
<layer modifiers="none">
<row
keys="at a-grave e-acute e-grave e-caret open-paren close-paren open-apos close-apos open-g close-g apos mark-caret" />
<row keys="a z e r t y u i o p hyphen plus" />
<row keys="q s d f g h j k l m slash asterisk" />
<row keys="open-angle w x c v b n period comma colon semi-colon" />
<row keys="space" />
</layer>

<layer modifiers="shift">
<row keys="hash 1 2 3 4 5 6 7 8 9 0 double-quote mark-umlaut" />
<row keys="A Z E R T Y U I O P en-dash plus-minus" />
<row keys="Q S D F G H J K L M backslash vulgar-half" />
<row keys="close-angle W X C V B N question bang ellipsis equal" />
<row keys="space" />
</layer>
<!-- layer is for AltGr - for now we use ctrl alt -->
<layer modifiers="ctrl alt">
<row
keys="mark-breve section mark-acute mark-grave amp open-square close-square mark-macron underscore open-double close-double degree mark-caron" />
<row
keys="ae pound euro registered open-curly close-curly u-grave mark-dotabove oe percent minus-sign dagger" />
<row
keys="theta ss dollar mark-currency mark-greek mark-euro gap mark-solidus pipe infinity division multiplication" />
<row
keys="less-equal ezh copy c-cedilla mark-cedilla mark-stroke mark-tilde inverse-question inverse-bang middle-dot asym-equal" />
<row keys="nbsp" />
</layer>

<layer modifiers="ctrl alt shift">
<row
keys="mark-invbreve A-grave E-acute E-grave E-caret mark-doubleacute mark-doublegrave gap em-dash open-angle-quote close-angle-quote mark-ring gap" />
<row keys="Ae gap gap gap tm gap U-grave mark-dotbelow Oe permille nb-hyphen dbl-dagger" />
<row keys="Theta Ss gap gap gap mark-submacron gap gap gap gap radix vulgar-quarter" />
<row
keys="greater-equal Ezh gap C-cedilla mark-ogonek gap gap gap mark-comma gap not-equal" />
<row keys="nnbsp" />
</layer>
</layers>

<variables>
<!-- spacing accents as string variables -->
<string id="grave" value="`" />
<string id="caret" value="^" />
<string id="umlaut" value="¨" />
<string id="tilde" value="~" />

<!-- sets representing vowels and accented vowels. -->
<!-- There's an extra space between the lower and upper case for visual separation -->
<!-- but, there are only 10 vowels in the following four sets -->
<!-- plus space at end for the visible version -->
<set id="vowel" value="a e i o u A E I O U" />

<!-- everything that should take an accented combining char -->
<set id="upaccentable" value="A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Ʒ Æ Œ" />
<set id="lwaccentable" value="a b c d e f g h i j k l m n o p q r s t u v w x y z ʒ æ œ" />
<set id="accentable" value="$[upaccentable] $[lwaccentable]" />

<!-- currency key from/to -->
<set id="currfrom" value="e r t y p s d f g h k l m w c b n A R T P S D F L M C B" />
<set id="currto" value="₠ ₽ ₸ ¥ ₱ ₪ ₫ ƒ ₲ ₴ ₭ ₺ ₥ ₩ ¢ ₿ ₦ ₳ ₹ ₮ ₧ ₷ ₯ ₣ ₤ ℳ ₡ ﺀ" />

<!-- greek from/to: deviating from spec, uppercase final sigma (X) is encoded as another Σ -->
<set id="greekfrom"
value="a z e r u i o p s d g h j k l m x b n A Z E R U I O P S D G H J K L M X B N" />
<set id="greekto"
value="α ζ ε ρ θ ι ο π σ δ γ η ξ κ λ μ ς β ν Α Ζ Ε Ρ Θ Ι Ο Π Σ Δ Γ Η Ξ Κ Λ Μ Σ Β Ν" />

<!-- euro key from/to -->
<set id="eurofrom" value="a e t i o s d g j ‘ ’ « » ' E T I D G J 7 8 9 0" />
<set id="euroto" value="ª ə þ ı º ſ ð ŋ ij ‚ ‘ „ ‟ ’ Ə Þ İ Đ Ŋ IJ › ‹ » «" />

<!-- numbers -->
<set id="digits" value="0 1 2 3 4 5 6 7 8 9" />
<set id="superdigits" value="⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹" />
<set id="subdigits" value="₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉" />
</variables>

<transforms type="simple">
<transformGroup>
<!-- super/sub digits -->
<transform from="\m{breve}($[digits])" to="$[1:superdigits]" />
<transform from="\m{invbreve}($[digits])" to="$[1:subdigits]" />

<!-- special cases - any more of these? -->
<transform from="\m{dotabove}i" to="ı" />

<!-- match accentables with combining marks -->
<transform from="\m{breve}($[accentable])" to="$1\u{0306}" />
<transform from="\m{umlaut}($[accentable])" to="$1\u{0308}" />
<transform from="\m{invbreve}($[accentable])" to="$1\u{0311}" />
<transform from="\m{acute}($[accentable])" to="$1\u{0301}" />
<transform from="\m{caret}($[accentable])" to="$1\u{0302}" />
<transform from="\m{caron}($[accentable])" to="$1\u{030c}" />
<transform from="\m{cedilla}($[accentable])" to="$1\u{0327}" />
<transform from="\m{comma}($[accentable])" to="$1\u{0326}" />
<transform from="\m{dotabove}($[accentable])" to="$1\u{0307}" />
<transform from="\m{dotbelow}($[accentable])" to="$1\u{0323}" />
<transform from="\m{doubleacute}($[accentable])" to="$1\u{030b}" />
<transform from="\m{doublegrave}($[accentable])" to="$1\u{030f}" />
<transform from="\m{grave}($[accentable])" to="$1\u{0300}" />
<transform from="\m{macron}($[accentable])" to="$1\u{0304}" />
<transform from="\m{ogonek}($[accentable])" to="$1\u{0328}" />
<transform from="\m{ring}($[accentable])" to="$1\u{030a}" />
<transform from="\m{solidus}($[accentable])" to="$1\u{338}" />
<transform from="\m{stroke}($[accentable])" to="$1\u{0335}" />
<transform from="\m{submacron}($[accentable])" to="$1\u{0331}" />
<transform from="\m{tilde}($[accentable])" to="$1\u{0303}" />

<!-- curr/greek/euro layer for hardware -->
<transform from="\m{currency}($[currfrom])" to="$[1:currto]" />
<transform from="\m{greek}\m{greek}" to="\u{B5}" />
<transform from="\m{greek}($[greekfrom])" to="$[1:greekto]" />
<transform from="\m{euro}($[eurofrom])" to="$[1:euroto]" />

<!-- these are harder to see because they are from AltGr and AltGr+Shift layers -->
<transform from="\m{currency}®" to="₨" /> <!-- AltGr-R -->
<transform from="\m{currency}%" to="₰" /> <!-- AltGr-P -->
<transform from="\m{currency}\|" to="₾" /> <!-- AltGr-L - note pipe is escaped -->
<transform from="\m{currency}∞" to="₼" /> <!-- AltGr-M -->
<transform from="\m{currency}ç" to="₢" /> <!-- AltGr-C -->
<transform from="\m{currency}\m{currency}" to="¤" /> <!-- AltGr-Shift-E -->
<transform from="\m{currency}Ç" to="₵" /> <!-- AltGr-Shift-C (Cedi sign) -->
</transformGroup>
<!-- now, cleanup -->
<transformGroup>
<!-- catch-all: drop any marker that didn't otherwise match before a char -->
<transform from="\m{.}(.)" to="$1" />
<!-- not defined, so drop double euro -->
<transform from="\m{euro}\m{euro}" />
</transformGroup>
</transforms>
</keyboard3>
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE keyboardTest3 SYSTEM "../dtd/ldmlKeyboardTest3.dtd">
<keyboardTest3 conformsTo="techpreview">
<info keyboard="fr-t-k0-azerty.xml" author="Team Keyboard" name="fr-test" />
<info keyboard="fr-t-k0-test.xml" author="Team Keyboard" name="fr-test" />
<repertoire name="simple-repertoire" chars="[a b c d e \u{22}]" type="simple" /> <!-- verify that these outputs are all available from simple keys on any layer, for all form factors -->
<repertoire name="chars-repertoire" chars="[á é ó]" type="gesture" /> <!-- verify that these outputs are all available from simple or gesture keys on any layer, for touch -->
<tests name="key-tests">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,11 @@ private static Map<DtdType, ElementAttributeInfo> makeElementAttributeInfoMap(
addElementAttributeInfo(
result,
DtdType.keyboard3,
canonicalCommonDirectory + "/../keyboards/3.0/fr-t-k0-azerty.xml");
canonicalCommonDirectory + "/../keyboards/3.0/fr-t-k0-test.xml");
addElementAttributeInfo(
result,
DtdType.keyboardTest3,
canonicalCommonDirectory + "/../keyboards/test/fr-t-k0-azerty-test.xml");
canonicalCommonDirectory + "/../keyboards/test/fr-t-k0-test-test.xml");
return result;
}

Expand Down
Loading