-
Notifications
You must be signed in to change notification settings - Fork 1
/
main-win.cpp
45 lines (39 loc) · 1.54 KB
/
main-win.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
Copyright (C) 2014 StarBrilliant <[email protected]>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 3.0 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this program. If not,
see <http://www.gnu.org/licenses/>.
*/
#ifndef _WIN32
#error main-win.cpp is patched for Microsoft Windows with buggy Unicode I/O support, use main.cpp for other OSes.
#endif
#include <cstdio>
#include <iostream>
#include <string>
#include <windows.h>
#include <libwintf8.h> /* https://github.com/m13253/libWinTF8 */
#include "rocapinyin.h"
int main() {
WTF8::SetConsoleFont set_console_font;
DWORD dummy;
bool stdin_isatty = !!GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &dummy);
while(WTF8::cin) {
if(stdin_isatty)
WTF8::cerr << "> " << std::flush;
WTF8::u8string line;
if(std::getline(WTF8::cin, line)) {
if(stdin_isatty && (line == WTF8::u8string("\x04\r") || line == WTF8::u8string("\x1a\r")))
break;
WTF8::cout << rocapinyin::getpinyin(line) << std::endl;
}
}
return 0;
}