1Input Scope Support in Mozc
2===========================
3
4Objective
5---------
6
7Make Windows Mozc client aware of InputScope feature on Windows.
8
9Starting with Windows 8, InputScope is the recommended way to set the conversion mode of Japanese IME and ImmSetConversionStatus API is virtually deprecated in per user input mode.
10
11> Thus, Japanese Microsoft IME ignores the change of conversion modes made by calling
12> ImmSetConversionStatus when used in per user mode. This API is used in the IME mode
13> property of .NET framework. InputScope is recommended in order to set the IME mode
14> under per user mode in Windows 8. - "[Switch text input changed from per-thread to per-user](http://msdn.microsoft.com/en-us/library/windows/desktop/hh994466.aspx)"
15
16Microsoft IME shipped with Windows Vista and later actually behaves like this. As for Mozc, Mozc client’s should behave like Microsoft IME 2012 in terms of open/close mode and conversion mode for each InputScope.
17This is the first step to support such context-awareness. As future work, Mozc should be able to behave more appropriately and adoptively based on each input context.
18
19Design Highlights
20-----------------
21
22When an input field is focused and it has InputScope, Mozc should change its on/off mode and conversion mode as follows.
23
24| InputScope | Expected Input Mode |
25|:-----------|:--------------------|
26| `IS_URL`, `IS_EMAIL_USERNAME`, `IS_EMAIL_SMTPEMAILADDRESS`, `IS_DIGITS`, `IS_NUMBER`, `IS_PASSWORD`, `IS_TELEPHONE_FULLTELEPHONENUMBER`, `IS_TELEPHONE_COUNTRYCODE`, `IS_TELEPHONE_AREACODE`, `IS_TELEPHONE_LOCALNUMBER`, `IS_TIME_FULLTIME`, `IS_TIME_HOUR`, `IS_TIME_MINORSEC` | Direct Mode (IME Off) |
27| `IS_HIRAGANA` | Hiragana Mode (IME On) |
28| `IS_ALPHANUMERIC_HALFWIDTH` | Halfwidth Alphanumeric Mode (IME On) |
29| `IS_NUMBER_FULLWIDTH`, `IS_ALPHANUMERIC_FULLWIDTH` | Fullwidth Alphanumeric Mode (IME On) |
30| `IS_KATAKANA_HALFWIDTH` | Halfwidth Katakana Mode (IME On) |
31| `IS_KATAKANA_FULLWIDTH` | Fullwidth Katakana Mode (IME On) |
32
33From usability perspectives, user experience offered by InputScope should be consistent with that in password field. It means that the change caused by InputScope should be temporal and volatile. This requires two different mode sets 1) mode visible from Mozc client and 2) mode visible from TSF should be managed.
34
35Here is an example of mode transitions.
36
37| Action | Mozc On/Off | Mozc Mode | TSF On/Off | TSF Mode |
38|:-----------|:----------------|:--------------|:---------------|:-------------|
39| Turn IME on | On              | Hiragana      | On             | Hiragana     |
40| ↓        |                 |               |                |              |
41| Enter email field | Off             | Hiragana      | On             | Hiragana     |
42| ↓        |                 |               |                |              |
43| Enter search field | On              | Hiragana      | On             | Hiragana     |
44| ↓        |                 |               |                |              |
45| Turn IME off | Off             | Hiragana      | Off            | Hiragana     |
46| ↓        |                 |               |                |              |
47| Enter Halfwidth Katakan field | On              | Halfwidth Katakana | Off            | Hiragana     |
48
49When on/off mode and/or conversion mode that are visible from Mozc is changed by InputScope, Mode Indicator will be popped up near the caret location so that a user can immediately get to know the new input mode.
50
51Scope
52-----
53
54InputScope has been supported in the following frameworks and environment:
55
56  * Windows Presentation Foundation (WPF)
57  * Microsoft Internet Explorer 10 on Windows 8+
58  * Chromium 26+ on Windows Vista and later
59  * Firefox 23+ on Windows Vista and later
60
61Here is the mapping table from HTML5 input types to InputScope on Windows.
62
63| HTML5 Forms Input Type | Internet Explorer 10 | Chromium 26 | Firefox 23 |
64|:-----------------------|:---------------------|:------------|:-----------|
65| text                   | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DEFAULT` |
66| number                 | `IS_NUMBER`          | `IS_NUMBER` | `IS_NUMBER` |
67| email                  | `IS_EMAIL_SMTPEMAILADDRESS` | `IS_EMAIL_SMTPEMAILADDRESS` | `IS_EMAIL_SMTPEMAILADDRESS` |
68| password               | `IS_PASSWORD`        | `IS_PASSWORD` | `IS_PASSWORD` |
69| color                  | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DEFAULT` |
70| date                   | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DATE_FULLDATE` |
71| datetime               | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DATE_FULLDATE` |
72| datetime-local         | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DATE_FULLDATE` |
73| month                  | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DATE_FULLDATE` |
74| search                 | `IS_SEARCH`          | `IS_SEARCH`  | `IS_SEARCH` |
75| tel                    | `IS_TELEPHONE_FULLTELEPHONENUMBER` | `IS_TELEPHONE_FULLTELEPHONENUMBER` | `IS_TELEPHONE_FULLTELEPHONENUMBER`,  `IS_TELEPHONE_LOCALNUMBER` |
76| time                   | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_TIME_FULLTIME` |
77| url                    | `IS_URL`             | `IS_URL`    | `IS_URL`    |
78| week                   | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DATE_FULLDATE` |
79| range                  | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DEFAULT` |
80| range                  | `IS_DEFAULT`         | `IS_DEFAULT` | `IS_DEFAULT` |
81
82Chromium OS might want to follow this mapping in future if the feedback to this project is positive. To achieve this, we need to add Chromium version of InputScope into [chrome.input.ime](http://developer.chrome.com/extensions/input.ime.html) API.
83
84Risk
85----
86
87Some user may dislike this kind of automatic mode changing and want a configuration option to disable it, while it is not configurable yet.
88
89Production Impact
90-----------------
91
92Available only for users who are using Mozc in TSF Mode. This means that only Windows 8+ user will be able to use this feature with Mozc. No impact to all other platforms.
93
94Release History
95---------------
96
97  * Initial release: 1.11.1490.10x dev on Windows
98
99Reference
100---------
101
102  * [Input Scopes - TSF Aware](http://blogs.msdn.com/tsfaware/archive/2007/07/10/input-scopes.aspx)
103  * [Improving Recognition Results - Improving Recognition Results](http://msdn.microsoft.com/en-us/library/ms698133.aspx)
104  * [Input modalities - 4.10.19 Attributes common to form controls - HTML Standard - WhatWG](http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#input-modalities:-the-inputmode-attribute)
105
106Full list of InputScope (as of Windows 8)
107
108```
109IS_DEFAULT = 0
110IS_URL = 1
111IS_FILE_FULLFILEPATH = 2
112IS_FILE_FILENAME = 3
113IS_EMAIL_USERNAME = 4
114IS_EMAIL_SMTPEMAILADDRESS = 5
115IS_LOGINNAME = 6
116IS_PERSONALNAME_FULLNAME = 7
117IS_PERSONALNAME_PREFIX = 8
118IS_PERSONALNAME_GIVENNAME = 9
119IS_PERSONALNAME_MIDDLENAME = 10
120IS_PERSONALNAME_SURNAME = 11
121IS_PERSONALNAME_SUFFIX = 12
122IS_ADDRESS_FULLPOSTALADDRESS = 13
123IS_ADDRESS_POSTALCODE = 14
124IS_ADDRESS_STREET = 15
125IS_ADDRESS_STATEORPROVINCE = 16
126IS_ADDRESS_CITY = 17
127IS_ADDRESS_COUNTRYNAME = 18
128IS_ADDRESS_COUNTRYSHORTNAME = 19
129IS_CURRENCY_AMOUNTANDSYMBOL = 20
130IS_CURRENCY_AMOUNT = 21
131IS_DATE_FULLDATE = 22
132IS_DATE_MONTH = 23
133IS_DATE_DAY = 24
134IS_DATE_YEAR = 25
135IS_DATE_MONTHNAME = 26
136IS_DATE_DAYNAME = 27
137IS_DIGITS = 28
138IS_NUMBER = 29
139IS_ONECHAR = 30
140IS_PASSWORD = 31
141IS_TELEPHONE_FULLTELEPHONENUMBER = 32
142IS_TELEPHONE_COUNTRYCODE = 33
143IS_TELEPHONE_AREACODE = 34
144IS_TELEPHONE_LOCALNUMBER = 35
145IS_TIME_FULLTIME = 36
146IS_TIME_HOUR = 37
147IS_TIME_MINORSEC = 38
148IS_NUMBER_FULLWIDTH = 39
149IS_ALPHANUMERIC_HALFWIDTH = 40
150IS_ALPHANUMERIC_FULLWIDTH = 41
151IS_CURRENCY_CHINESE = 42
152IS_BOPOMOFO = 43
153IS_HIRAGANA = 44
154IS_KATAKANA_HALFWIDTH = 45
155IS_KATAKANA_FULLWIDTH = 46
156IS_HANJA = 47
157IS_HANGUL_HALFWIDTH = 48
158IS_HANGUL_FULLWIDTH = 49
159IS_SEARCH = 50
160IS_FORMULA = 51
161IS_SEARCH_INCREMENTAL = 52
162IS_CHINESE_HALFWIDTH = 53
163IS_CHINESE_FULLWIDTH = 54
164IS_NATIVE_SCRIPT = 55
165```
166
167See [InputScope enumeration](http://msdn.microsoft.com/en-us/library/windows/desktop/ms538181.aspx) for details.
168