• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3  Note: conformsTo= references a previous release here,
4  because this keyboard does not depend on schema or data from later CLDR versions.
5-->
6<keyboard3 xmlns="https://schemas.unicode.org/cldr/45/keyboard3" conformsTo="45"
7	locale="fr">
8	<version number="1.0.0" />
9
10	<info author="Team Keyboard" name="Français normalisé (AZERTY)" layout="AZERTY" indicator="FR" />
11
12	<displays>
13		<!-- display for diacritics -->
14		<display output="\u0300" display="${grave}" />
15		<display output="\m{acute}" display="´" />
16		<display output="\m{grave}" display="`" />
17		<display output="\m{umlaut}" display="¨" />
18		<display output="\m{caret}" display="^" />
19		<display output="\m{tilde}" display="~" />
20		<display output="\m{invbreve}" display="\u{20}\u{0311}" />
21
22		<!-- display for 'mode' keys -->
23		<display keyId="mark-currency" display="\u{00A4}" />
24		<display keyId="mark-greek" display="\u{B5}" />
25		<display keyId="mark-euro" display="Eu" />
26	</displays>
27
28	<keys>
29		<import base="cldr" path="45/keys-Zyyy-punctuation.xml" />
30		<import base="cldr" path="45/keys-Zyyy-currency.xml" />
31
32		<!-- deadkeys -->
33		<key id="mark-acute" output="\m{acute}" />
34		<key id="mark-breve" output="\m{breve}" />
35		<key id="mark-caret" output="\m{caret}" />
36		<key id="mark-caron" output="\m{caron}" />
37		<key id="mark-cedilla" output="\m{cedilla}" />
38		<key id="mark-invbreve" output="\m{invbreve}" />
39		<key id="mark-comma" output="\m{comma}" />
40		<key id="mark-currency" output="\m{currency}" />
41		<key id="mark-dotabove" output="\m{dotabove}" />
42		<key id="mark-dotbelow" output="\m{dotbelow}" />
43		<key id="mark-doubleacute" output="\m{doubleacute}" />
44		<key id="mark-doublegrave" output="\m{doublegrave}" />
45		<key id="mark-euro" output="\m{euro}" />
46		<key id="mark-grave" output="\m{grave}" />
47		<key id="mark-macron" output="\m{macron}" />
48		<key id="mark-ogonek" output="\m{ogonek}" />
49		<key id="mark-ring" output="\m{ring}" />
50		<key id="mark-greek" output="\m{greek}" />
51		<key id="mark-solidus" output="\m{solidus}" />
52		<key id="mark-stroke" output="\m{stroke}" />
53		<key id="mark-submacron" output="\m{submacron}" />
54		<key id="mark-tilde" output="\m{tilde}" />
55		<key id="mark-umlaut" output="\m{umlaut}" />
56
57		<!-- spaces -->
58		<key id="nbsp" output="\u{A0}" />
59		<key id="nnbsp" output="\u{202F}" />
60
61		<!-- extra keys -->
62		<key id="e-grave" output="è" />
63		<key id="e-acute" output="é" />
64		<key id="c-cedilla" output="ç" />
65		<key id="a-acute" output="á" />
66		<key id="a-grave" output="à" />
67		<key id="e-caret" output="ê" />
68
69		<!-- extra symbols -->
70		<key id="bullet" output="•" />
71		<key id="umlaut" output="¨" />
72		<key id="sub-2" output="₂" />
73		<key id="super-2" output="²" longPressKeyIds="sub-2" />
74		<key id="en-dash" output="–" />
75		<key id="plus-minus" output="±" />
76		<key id="vulgar-half" output="½" />
77		<key id="vulgar-quarter" output="¼" />
78		<key id="ellipsis" output="…" />
79		<key id="open-apos" output="‘" />
80		<key id="close-apos" output="’" />
81		<key id="open-g" output="«" />
82		<key id="close-g" output="»" />
83
84		<key id="theta" output="θ" /> <!-- "for Romani" -->
85		<key id="Theta" output="ϴ" /> <!-- "for Romani" -->
86		<key id="tm" output="™" />
87		<key id="open-double" output="“" />
88		<key id="close-double" output="”" />
89		<key id="oe" output="œ" />
90		<key id="Oe" output="Œ" />
91		<key id="registered" output="®" />
92		<key id="minus-sign" output="−" />
93		<key id="ss" output="ß" />
94		<key id="infinity" output="∞" />
95		<key id="division" output="÷" />
96		<key id="less-equal" output="⩽" />
97		<key id="greater-equal" output="⩾" />
98		<key id="copy" output="©" />
99		<key id="inverse-question" output="¿" />
100		<key id="inverse-bang" output="¡" />
101		<key id="middle-dot" output="•" />
102		<key id="A-grave" output="À" />
103		<key id="E-acute" output="É" />
104		<key id="E-caret" output="Ê" />
105		<key id="em-dash" output="—" />
106		<key id="open-single" output="’" />
107		<key id="close-single" output="’" />
108		<key id="u-grave" output="Ù" />
109		<key id="radix" output="√" />
110		<key id="C-cedilla" output="Ç" />
111		<key id="not-equal" output="≠" />
112		<key id="open-angle-quote" output="‹" />
113		<key id="close-angle-quote" output="›" />
114
115		<key id="E-grave" output="È" />
116		<key id="U-grave" output="Ù" />
117		<key id="nb-hyphen" output="‑" />
118		<key id="multiplication" output="×" />
119		<key id="ezh" output="ʒ" />
120		<key id="Ezh" output="Ʒ" />
121		<key id="ae" output="æ" />
122		<key id="Ae" output="Æ" />
123		<key id="permille" output="‰" />
124		<key id="dbl-dagger" output="‡" />
125		<key id="dagger" output="†" />
126		<key id="asym-equal" output="≃" />
127		<key id="Ss" output="ẞ" />
128	</keys>
129
130	<layers formId="iso">
131		<layer modifiers="none">
132			<row
133				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" />
134			<row keys="a z e r t y u i o p hyphen plus" />
135			<row keys="q s d f g h j k l m slash asterisk" />
136			<row keys="open-angle w x c v b n period comma colon semi-colon" />
137			<row keys="space" />
138		</layer>
139
140		<layer modifiers="shift">
141			<row keys="hash 1 2 3 4 5 6 7 8 9 0 double-quote mark-umlaut" />
142			<row keys="A Z E R T Y U I O P en-dash plus-minus" />
143			<row keys="Q S D F G H J K L M backslash vulgar-half" />
144			<row keys="close-angle W X C V B N question bang ellipsis equal" />
145			<row keys="space" />
146		</layer>
147		<!-- layer is for AltGr - for now we use ctrl alt -->
148		<layer modifiers="ctrl alt">
149			<row
150				keys="mark-breve section mark-acute mark-grave amp open-square close-square mark-macron underscore open-double close-double degree mark-caron" />
151			<row
152				keys="ae pound euro registered open-curly close-curly u-grave mark-dotabove oe percent minus-sign dagger" />
153			<row
154				keys="theta ss dollar mark-currency mark-greek mark-euro gap mark-solidus pipe infinity division multiplication" />
155			<row
156				keys="less-equal ezh copy c-cedilla mark-cedilla mark-stroke mark-tilde inverse-question inverse-bang middle-dot asym-equal" />
157			<row keys="nbsp" />
158		</layer>
159
160		<layer modifiers="ctrl alt shift">
161			<row
162				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" />
163			<row keys="Ae gap gap gap tm gap U-grave mark-dotbelow Oe permille nb-hyphen dbl-dagger" />
164			<row keys="Theta Ss gap gap gap mark-submacron gap gap gap gap radix vulgar-quarter" />
165			<row
166				keys="greater-equal Ezh gap C-cedilla mark-ogonek gap gap gap mark-comma gap not-equal" />
167			<row keys="nnbsp" />
168		</layer>
169	</layers>
170
171	<variables>
172		<!-- spacing accents as string variables -->
173		<string id="grave" value="`" />
174		<string id="caret" value="^" />
175		<string id="umlaut" value="¨" />
176		<string id="tilde" value="~" />
177
178		<!-- sets representing vowels and accented vowels.  -->
179		<!-- There's an extra space between the lower and upper case for visual separation -->
180		<!-- but, there are only 10 vowels in the following four sets -->
181		<!-- plus space at end for the visible version -->
182		<set id="vowel" value="a e i o u  A E I O U" />
183
184		<!-- everything that should take an accented combining char -->
185		<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    Ʒ Æ Œ" />
186		<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    ʒ æ œ" />
187		<set id="accentable" value="$[upaccentable] $[lwaccentable]" />
188
189		<!-- currency key from/to -->
190		<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" />
191		<set id="currto" value="₠ ₽ ₸ ¥ ₱ ₪ ₫ ƒ ₲ ₴ ₭ ₺ ₥ ₩ ¢ ₿ ₦ ₳ ₹ ₮ ₧ ₷ ₯ ₣ ₤ ℳ ₡ ﺀ" />
192
193		<!-- greek from/to: deviating from spec, uppercase final sigma (X) is encoded as another Σ  -->
194		<set id="greekfrom"
195			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" />
196		<set id="greekto"
197			value="α ζ ε ρ θ ι ο π σ δ γ η ξ κ λ μ ς β ν Α Ζ Ε Ρ Θ Ι Ο Π Σ Δ Γ Η Ξ Κ Λ Μ Σ Β Ν" />
198
199		<!-- euro key from/to -->
200		<set id="eurofrom" value="a e t i o s d g j  ‘ ’ «  » '   E T I D G J  7 8 9 0" />
201		<set id="euroto" value="ª ə þ ı º ſ ð ŋ ij ‚ ‘ „ ‟ ’    Ə Þ İ Đ Ŋ IJ › ‹ » «" />
202
203		<!-- numbers -->
204		<set id="digits" value="0 1 2 3 4 5 6 7 8 9" />
205		<set id="superdigits" value="⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹" />
206		<set id="subdigits" value="₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉" />
207	</variables>
208
209	<transforms type="simple">
210		<transformGroup>
211			<!-- super/sub digits -->
212			<transform from="\m{breve}($[digits])" to="$[1:superdigits]" />
213			<transform from="\m{invbreve}($[digits])" to="$[1:subdigits]" />
214
215			<!-- special cases - any more of these? -->
216			<transform from="\m{dotabove}i" to="ı" />
217
218			<!-- match accentables with combining marks -->
219			<transform from="\m{breve}($[accentable])" to="$1\u{0306}" />
220			<transform from="\m{umlaut}($[accentable])" to="$1\u{0308}" />
221			<transform from="\m{invbreve}($[accentable])" to="$1\u{0311}" />
222			<transform from="\m{acute}($[accentable])" to="$1\u{0301}" />
223			<transform from="\m{caret}($[accentable])" to="$1\u{0302}" />
224			<transform from="\m{caron}($[accentable])" to="$1\u{030c}" />
225			<transform from="\m{cedilla}($[accentable])" to="$1\u{0327}" />
226			<transform from="\m{comma}($[accentable])" to="$1\u{0326}" />
227			<transform from="\m{dotabove}($[accentable])" to="$1\u{0307}" />
228			<transform from="\m{dotbelow}($[accentable])" to="$1\u{0323}" />
229			<transform from="\m{doubleacute}($[accentable])" to="$1\u{030b}" />
230			<transform from="\m{doublegrave}($[accentable])" to="$1\u{030f}" />
231			<transform from="\m{grave}($[accentable])" to="$1\u{0300}" />
232			<transform from="\m{macron}($[accentable])" to="$1\u{0304}" />
233			<transform from="\m{ogonek}($[accentable])" to="$1\u{0328}" />
234			<transform from="\m{ring}($[accentable])" to="$1\u{030a}" />
235			<transform from="\m{solidus}($[accentable])" to="$1\u{338}" />
236			<transform from="\m{stroke}($[accentable])" to="$1\u{0335}" />
237			<transform from="\m{submacron}($[accentable])" to="$1\u{0331}" />
238			<transform from="\m{tilde}($[accentable])" to="$1\u{0303}" />
239
240			<!-- curr/greek/euro layer for hardware -->
241			<transform from="\m{currency}($[currfrom])" to="$[1:currto]" />
242			<transform from="\m{greek}\m{greek}" to="\u{B5}" />
243			<transform from="\m{greek}($[greekfrom])" to="$[1:greekto]" />
244			<transform from="\m{euro}($[eurofrom])" to="$[1:euroto]" />
245
246			<!-- these are harder to see because they are from AltGr and AltGr+Shift layers -->
247			<transform from="\m{currency}®" to="₨" /> <!-- AltGr-R -->
248			<transform from="\m{currency}%" to="₰" /> <!-- AltGr-P -->
249			<transform from="\m{currency}\|" to="₾" /> <!-- AltGr-L  - note pipe is escaped -->
250			<transform from="\m{currency}∞" to="₼" /> <!-- AltGr-M -->
251			<transform from="\m{currency}ç" to="₢" /> <!-- AltGr-C -->
252			<transform from="\m{currency}\m{currency}" to="¤" /> <!-- AltGr-Shift-E -->
253			<transform from="\m{currency}Ç" to="₵" /> <!-- AltGr-Shift-C (Cedi sign) -->
254		</transformGroup>
255		<!-- now, cleanup -->
256		<transformGroup>
257			<!-- catch-all: drop any marker that didn't otherwise match before a char -->
258			<transform from="\m{.}(.)" to="$1" />
259			<!-- not defined, so drop double euro -->
260			<transform from="\m{euro}\m{euro}" />
261		</transformGroup>
262	</transforms>
263</keyboard3>
264