diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/GridText.c | 58 | ||||
-rw-r--r-- | src/HTML.c | 63 | ||||
-rw-r--r-- | src/LYCharSets.c | 1 | ||||
-rw-r--r-- | src/LYCharSets.h | 4 | ||||
-rw-r--r-- | src/LYCharUtils.c | 3 | ||||
-rw-r--r-- | src/LYCurses.c | 66 | ||||
-rw-r--r-- | src/LYCurses.h | 16 | ||||
-rw-r--r-- | src/LYExtern.c | 178 | ||||
-rw-r--r-- | src/LYGlobalDefs.h | 2 | ||||
-rw-r--r-- | src/LYList.c | 161 | ||||
-rw-r--r-- | src/LYMain.c | 4 | ||||
-rw-r--r-- | src/LYMainLoop.c | 65 | ||||
-rw-r--r-- | src/LYMap.c | 46 | ||||
-rw-r--r-- | src/LYMap.h | 1 | ||||
-rw-r--r-- | src/LYUtils.c | 21 | ||||
-rw-r--r-- | src/UCAuto.c | 265 | ||||
-rw-r--r-- | src/UCAux.c | 55 | ||||
-rw-r--r-- | src/UCdomap.c | 43 | ||||
-rw-r--r-- | src/chrtrans/build-chrtrans.com | 3 | ||||
-rw-r--r-- | src/chrtrans/cp857_uni.tbl | 157 | ||||
-rw-r--r-- | src/chrtrans/iso10_uni.tbl | 226 | ||||
-rw-r--r-- | src/chrtrans/iso13_uni.tbl | 114 | ||||
-rw-r--r-- | src/chrtrans/iso14_uni.tbl | 114 | ||||
-rw-r--r-- | src/chrtrans/make-msc.bat | 3 | ||||
-rw-r--r-- | src/chrtrans/makefile.dos | 6 | ||||
-rw-r--r-- | src/chrtrans/makefile.in | 6 | ||||
-rw-r--r-- | src/chrtrans/makefile.msc | 6 | ||||
-rw-r--r-- | src/chrtrans/makew32.bat | 3 | ||||
-rw-r--r-- | src/chrtrans/pt154_uni.tbl | 296 |
29 files changed, 1388 insertions, 598 deletions
diff --git a/src/GridText.c b/src/GridText.c index c2175b02..8baf4cb6 100644 --- a/src/GridText.c +++ b/src/GridText.c @@ -1642,33 +1642,25 @@ static void display_title(HText *text) */ limit = LYscreenWidth(); if (limit < 10) { - percent[0] = '\0'; /* Null string */ + percent[0] = '\0'; } else if ((display_lines) <= 0 && LYlines > 0 && text->top_of_screen <= 99999 && text->Lines <= 999999) { sprintf(percent, " (l%d of %d)", text->top_of_screen, text->Lines); - } else if ((text->Lines + 1) > (display_lines) && - (display_lines) > 0) { - /* - * In a small attempt to correct the number of pages counted.... - * GAB 07-14-94 - * - * In a bigger attempt (hope it holds up 8-).... - * FM 02-08-95 - */ - int total_pages = - (((text->Lines + 1) + (display_lines - 1)) / (display_lines)); - int start_of_last_page = - ((text->Lines + 1) < display_lines) ? 0 : - ((text->Lines + 1) - display_lines); + } else if ((text->Lines >= display_lines) && (display_lines > 0)) { + int total_pages = ((text->Lines + display_lines - 1) + / display_lines); + int start_of_last_page = ((text->Lines <= display_lines) + ? 0 + : (text->Lines - display_lines)); sprintf(percent, " (p%d of %d)", - ((text->top_of_screen >= start_of_last_page) ? - total_pages : - ((text->top_of_screen + display_lines) / (display_lines))), + ((text->top_of_screen >= start_of_last_page) + ? total_pages + : ((text->top_of_screen + display_lines) / (display_lines))), total_pages); } else { - percent[0] = '\0'; /* Null string */ + percent[0] = '\0'; } /* @@ -1678,7 +1670,7 @@ static void display_title(HText *text) */ if (HTCJK != NOCJK) { if (*title && - (tmp = typecallocn(unsigned char, (strlen(title) + 256)))) { + (tmp = typecallocn(unsigned char, (strlen(title) * 2 + 256)))) { if (kanji_code == EUC) { TO_EUC((unsigned char *) title, tmp); } else if (kanji_code == SJIS) { @@ -1796,12 +1788,12 @@ static void display_scrollbar(HText *text) LYsb_begin = LYsb_end = -1; if (!LYShowScrollbar || !text || h <= 2 - || (text->Lines + 1) <= display_lines) + || text->Lines <= display_lines) return; - if (text->top_of_screen >= text->Lines + 1 - display_lines) { + if (text->top_of_screen >= text->Lines - display_lines) { /* Only part of the screen shows actual text */ - shown = text->Lines + 1 - text->top_of_screen; + shown = text->Lines - text->top_of_screen; if (shown <= 0) shown = 1; @@ -1809,7 +1801,7 @@ static void display_scrollbar(HText *text) shown = display_lines; /* Each cell of scrollbar represents text->Lines/h lines of text. */ /* Always smaller than h */ - sh = (shown * h + text->Lines / 2) / (text->Lines + 1); + sh = (shown * h + text->Lines / 2) / text->Lines; if (sh <= 0) sh = 1; if (sh >= h - 1) @@ -1996,9 +1988,6 @@ static void display_page(HText *text, */ LYCursesON) { #ifdef EXP_CHARTRANS_AUTOSWITCH - /* - * Currently implemented only for LINUX - */ UCChangeTerminalCodepage(current_char_set, &LYCharSet_UC[current_char_set]); #endif /* EXP_CHARTRANS_AUTOSWITCH */ @@ -7207,12 +7196,15 @@ BOOL HText_canScrollUp(HText *text) return (BOOL) (text->top_of_screen != 0); } +/* + * Check if there is more info below this page. + */ BOOL HText_canScrollDown(void) { HText *text = HTMainText; return (BOOL) ((text != 0) - && ((text->top_of_screen + display_lines) < text->Lines + 1)); + && ((text->top_of_screen + display_lines) < text->Lines)); } /* Scroll actions @@ -9495,7 +9487,7 @@ char *HText_setLastOptionValue(HText *text, char *value, cp[j] = '\0'; if (HTCJK != NOCJK) { if (cp && - (tmp = typecallocn(unsigned char, strlen(cp) + 1)) != 0) { + (tmp = typecallocn(unsigned char, strlen(cp) * 2 + 1)) != 0) { if (tmp == NULL) outofmem(__FILE__, "HText_setLastOptionValue"); if (kanji_code == EUC) { @@ -9558,7 +9550,9 @@ char *HText_setLastOptionValue(HText *text, char *value, if (checked) { int curlen = strlen(new_ptr->name); - int newlen = strlen(HTCurSelectedOptionValue); + int newlen = (HTCurSelectedOptionValue + ? strlen(HTCurSelectedOptionValue) + : 0); FormInfo *last_input = text->last_anchor->input_field; /* @@ -9713,7 +9707,7 @@ int HText_beginInput(HText *text, BOOL underline, if (I->value) StrAllocCopy(IValue, I->value); if (IValue && HTCJK != NOCJK) { - if ((tmp = typecallocn(unsigned char, strlen(IValue) + 1)) != 0) { + if ((tmp = typecallocn(unsigned char, strlen(IValue) * 2 + 1)) != 0) { if (kanji_code == EUC) { TO_EUC((unsigned char *) IValue, tmp); I->value_cs = current_char_set; @@ -12535,7 +12529,7 @@ static void update_subsequent_anchors(int newlines, HTMainText->Lines += newlines; HTMainText->last_anchor_number += newlines; - more = HText_canScrollDown(); + more_text = HText_canScrollDown(); CTRACE((tfp, "GridText: TextAnchor and HTLine struct's adjusted\n")); diff --git a/src/HTML.c b/src/HTML.c index 03efce72..f70bc147 100644 --- a/src/HTML.c +++ b/src/HTML.c @@ -1259,7 +1259,7 @@ static int HTML_start_element(HTStructured * me, int element_number, /* * Prepare to do housekeeping on the reference. - FM */ - if (!value[HTML_LINK_HREF]) { + if (isEmpty(value[HTML_LINK_HREF])) { Base = (me->inBASE) ? me->base_href : me->node_anchor->address; @@ -2083,7 +2083,8 @@ static int HTML_start_element(HTStructured * me, int element_number, int enval = 2; column = HText_getCurrentColumn(me->text); - if (present[HTML_TAB_TO]) { + if (present[HTML_TAB_TO] && + non_empty(value[HTML_TAB_TO])) { /* * TO has priority over INDENT if both are present. - FM */ @@ -2848,9 +2849,10 @@ static int HTML_start_element(HTStructured * me, int element_number, */ me->inBoldA = TRUE; - StrAllocCopy(href, value[HTML_A_HREF]); - if (isEmpty(href)) + if (isEmpty(value[HTML_A_HREF])) StrAllocCopy(href, "#"); + else + StrAllocCopy(href, value[HTML_A_HREF]); CHECK_FOR_INTERN(intern_flag, href); /* '#' */ if (intern_flag) { /*** FAST WAY: ***/ @@ -3600,7 +3602,7 @@ static int HTML_start_element(HTStructured * me, int element_number, if (!me->object_started) { /* * This is an outer OBJECT start tag, i.e., not a nested OBJECT, so - * save it's relevant attributes. - FM + * save its relevant attributes. - FM */ if (present) { if (present[HTML_OBJECT_DECLARE]) @@ -3654,8 +3656,7 @@ static int HTML_start_element(HTStructured * me, int element_number, } } if (present[HTML_OBJECT_CLASSID] && - value[HTML_OBJECT_CLASSID] && - *value[HTML_OBJECT_CLASSID]) { + non_empty(value[HTML_OBJECT_CLASSID])) { StrAllocCopy(me->object_classid, value[HTML_OBJECT_CLASSID]); TRANSLATE_AND_UNESCAPE_ENTITIES(&me->object_classid, TRUE, FALSE); @@ -3666,8 +3667,7 @@ static int HTML_start_element(HTStructured * me, int element_number, } } if (present[HTML_OBJECT_CODEBASE] && - value[HTML_OBJECT_CODEBASE] && - *value[HTML_OBJECT_CODEBASE]) { + non_empty(value[HTML_OBJECT_CODEBASE])) { StrAllocCopy(me->object_codebase, value[HTML_OBJECT_CODEBASE]); TRANSLATE_AND_UNESCAPE_TO_STD(&me->object_codebase); @@ -3676,8 +3676,7 @@ static int HTML_start_element(HTStructured * me, int element_number, } } if (present[HTML_OBJECT_CODETYPE] && - value[HTML_OBJECT_CODETYPE] && - *value[HTML_OBJECT_CODETYPE]) { + non_empty(value[HTML_OBJECT_CODETYPE])) { StrAllocCopy(me->object_codetype, value[HTML_OBJECT_CODETYPE]); TRANSLATE_AND_UNESCAPE_ENTITIES(&me->object_codetype, @@ -3725,8 +3724,9 @@ static int HTML_start_element(HTStructured * me, int element_number, FREE(me->object_data); if (me->object_data) { HTStartAnchor5(me, - me->object_id ? value[HTML_OBJECT_ID] - : NULL, + (me->object_id + ? value[HTML_OBJECT_ID] + : NULL), value[HTML_OBJECT_DATA], value[HTML_OBJECT_TYPE], tag_charset); @@ -4173,8 +4173,9 @@ static int HTML_start_element(HTStructured * me, int element_number, EMIT_IFDEF_EXP_JUSTIFY_ELTS(form_in_htext = TRUE); if (present && present[HTML_FORM_ACCEPT_CHARSET]) { - accept_cs = value[HTML_FORM_ACCEPT_CHARSET] ? - value[HTML_FORM_ACCEPT_CHARSET] : "UNKNOWN"; + accept_cs = (value[HTML_FORM_ACCEPT_CHARSET] + ? value[HTML_FORM_ACCEPT_CHARSET] + : "UNKNOWN"); } Base = (me->inBASE) @@ -4217,8 +4218,9 @@ static int HTML_start_element(HTStructured * me, int element_number, } if (present && present[HTML_FORM_METHOD]) - StrAllocCopy(method, value[HTML_FORM_METHOD] ? - value[HTML_FORM_METHOD] : "GET"); + StrAllocCopy(method, (value[HTML_FORM_METHOD] + ? value[HTML_FORM_METHOD] + : "GET")); if (present && present[HTML_FORM_ENCTYPE] && non_empty(value[HTML_FORM_ENCTYPE])) { @@ -4232,12 +4234,10 @@ static int HTML_start_element(HTStructured * me, int element_number, * for a SUBJECT attribute as a synonym. - FM */ if (present[HTML_FORM_TITLE] && - value[HTML_FORM_TITLE] && - *value[HTML_FORM_TITLE] != '\0') { + non_empty(value[HTML_FORM_TITLE])) { StrAllocCopy(title, value[HTML_FORM_TITLE]); } else if (present[HTML_FORM_SUBJECT] && - value[HTML_FORM_SUBJECT] && - *value[HTML_FORM_SUBJECT] != '\0') { + non_empty(value[HTML_FORM_SUBJECT])) { StrAllocCopy(title, value[HTML_FORM_SUBJECT]); } if (non_empty(title)) { @@ -4528,9 +4528,11 @@ static int HTML_start_element(HTStructured * me, int element_number, I.type = value[HTML_INPUT_TYPE]; if (!strcasecomp(I.type, "range")) { - if (present[HTML_INPUT_MIN]) + if (present[HTML_INPUT_MIN] && + non_empty(value[HTML_INPUT_MIN])) I.min = value[HTML_INPUT_MIN]; - if (present[HTML_INPUT_MAX]) + if (present[HTML_INPUT_MAX] && + non_empty(value[HTML_INPUT_MAX])) I.max = value[HTML_INPUT_MAX]; /* * Not yet implemented. @@ -4544,7 +4546,8 @@ static int HTML_start_element(HTStructured * me, int element_number, break; } else if (!strcasecomp(I.type, "file")) { - if (present[HTML_INPUT_ACCEPT]) + if (present[HTML_INPUT_ACCEPT] && + non_empty(value[HTML_INPUT_ACCEPT])) I.accept = value[HTML_INPUT_ACCEPT]; #ifndef USE_FILE_UPLOAD not_impl = "[FILE Input]"; @@ -4622,7 +4625,7 @@ static int HTML_start_element(HTStructured * me, int element_number, * Handle the INPUT as for a FORM. - FM */ if (!(present && present[HTML_INPUT_NAME] && - value[HTML_INPUT_NAME])) { + non_empty(value[HTML_INPUT_NAME]))) { I.name = ""; } else if (strchr(value[HTML_INPUT_NAME], '&') == NULL) { I.name = value[HTML_INPUT_NAME]; @@ -4727,9 +4730,9 @@ static int HTML_start_element(HTStructured * me, int element_number, } StrAllocCopy(I_value, - ((UseALTasVALUE == TRUE) ? - value[HTML_INPUT_ALT] : - value[HTML_INPUT_VALUE])); + ((UseALTasVALUE == TRUE) + ? value[HTML_INPUT_ALT] + : value[HTML_INPUT_VALUE])); if (me->UsePlainSpace && !me->HiddenValue) { I.value_cs = current_char_set; } @@ -8292,7 +8295,9 @@ static char *MakeNewImageValue(const char **value) char *newtitle = NULL; StrAllocCopy(newtitle, "["); - ptr = strrchr(value[HTML_INPUT_SRC], '/'); + ptr = (value[HTML_INPUT_SRC] + ? strrchr(value[HTML_INPUT_SRC], '/') + : 0); if (!ptr) { StrAllocCat(newtitle, value[HTML_INPUT_SRC]); } else { diff --git a/src/LYCharSets.c b/src/LYCharSets.c index ee0ebe36..935763dc 100644 --- a/src/LYCharSets.c +++ b/src/LYCharSets.c @@ -20,6 +20,7 @@ BOOL force_old_UCLYhndl_on_reload = FALSE; int forced_UCLYhdnl; int LYNumCharsets = 0; /* Will be initialized later by UC_Register. */ int current_char_set = -1; /* will be intitialized later in LYMain.c */ +int linedrawing_char_set = -1; const char **p_entity_values = NULL; /* Pointer, for HTML_put_entity() */ /* obsolete and probably not used(???) */ diff --git a/src/LYCharSets.h b/src/LYCharSets.h index a0f0c26a..4c85ea6d 100644 --- a/src/LYCharSets.h +++ b/src/LYCharSets.h @@ -29,6 +29,10 @@ extern "C" { * currently active character set (internal handler) */ extern int current_char_set; +/* + * character set where it is safe to draw lines on boxes. + */ + extern int linedrawing_char_set; /* * Initializer, calls initialization function for the diff --git a/src/LYCharUtils.c b/src/LYCharUtils.c index defd13e3..2a94aada 100644 --- a/src/LYCharUtils.c +++ b/src/LYCharUtils.c @@ -2334,8 +2334,7 @@ void LYHandleMETA(HTStructured * me, const BOOL *present, if (Switch_Display_Charset(chndl, SWITCH_DISPLAY_CHARSET_MAYBE)) { /* UCT_STAGE_STRUCTURED and UCT_STAGE_HTEXT should have the same setting for UCInfoStage. */ - int structured = HTAnchor_getUCInfoStage(me->node_anchor, - UCT_STAGE_STRUCTURED); + HTAnchor_getUCInfoStage(me->node_anchor, UCT_STAGE_STRUCTURED); me->outUCLYhndl = current_char_set; HTAnchor_setUCInfoStage(me->node_anchor, diff --git a/src/LYCurses.c b/src/LYCurses.c index 7b68dbda..439d8d40 100644 --- a/src/LYCurses.c +++ b/src/LYCurses.c @@ -56,7 +56,7 @@ char *XCursesProgramName = "Lynx"; #if defined(USE_COLOR_STYLE) && !defined(USE_COLOR_TABLE) #define COLOR_BKGD ((s_normal != NOSTYLE) ? hashStyles[s_normal].color : A_NORMAL) #else -#define COLOR_BKGD ((COLOR_PAIRS >= 9) ? get_color_pair(9) : A_NORMAL) +#define COLOR_BKGD ((COLOR_PAIRS >= 9) ? (chtype) get_color_pair(9) : A_NORMAL) #endif #ifdef USE_CURSES_PADS @@ -320,14 +320,6 @@ void LYbox(WINDOW * win, BOOLEAN formfield GCC_UNUSED) waddch(win, 'q'); waddstr(win, "j\017"); #else /* !VMS */ - /* - * If the terminal is in UTF-8 mode, it probably cannot understand box - * drawing characters as (n)curses handles them. (This may also be true - * for other display character sets, but isn't currently checked.) In that - * case, substitute ASCII characters for BOXVERT and BOXHORI if they were - * defined to 0 for automatic use of box drawing characters. They'll stay - * as they are otherwise. - KW & FM - */ int boxvert, boxhori; UCSetBoxChars(current_char_set, &boxvert, &boxhori, BOXVERT, BOXHORI); @@ -564,16 +556,18 @@ int lynx_default_colors(void) { int code = 0; - if (lynx_called_initscr) { - code = -1; - if (!default_color_reset && use_default_colors() == OK) { - default_fg = DEFAULT_COLOR; - default_bg = DEFAULT_COLOR; - code = 1; - } else { - default_fg = COLOR_WHITE; - default_bg = COLOR_BLACK; - default_color_reset = TRUE; + if (!default_color_reset) { + if (lynx_called_initscr) { + code = -1; + if (use_default_colors() == OK) { + default_fg = DEFAULT_COLOR; + default_bg = DEFAULT_COLOR; + code = 1; + } else { + default_fg = COLOR_WHITE; + default_bg = COLOR_BLACK; + default_color_reset = TRUE; + } } } return code; @@ -746,7 +740,7 @@ void lynx_set_color(int a) if (lynx_has_color && LYShowColor >= SHOW_COLOR_ON) { wattrset(LYwin, lynx_color_cfg_attr(a) | (((a + 1) < COLOR_PAIRS) - ? get_color_pair(a + 1) + ? (chtype) get_color_pair(a + 1) : A_NORMAL)); } } @@ -2749,7 +2743,7 @@ static void make_blink_boldbg(void) */ long LYgetattrs(WINDOW * win) { -#if ( defined(HAVE_GETATTRS) && ( !defined(NCURSES_MAJOR_VERSION) || NCURSES_VERSION_MAJOR < 5 ) ) +#if ( defined(HAVE_GETATTRS) && ( !defined(NCURSES_VERSION_MAJOR) || NCURSES_VERSION_MAJOR < 5 ) ) long result = 0; result = getattrs(win); @@ -2766,3 +2760,33 @@ long LYgetattrs(WINDOW * win) return result; } #endif /* HAVE_WATTR_GET */ + +#if defined(NCURSES_VERSION_PATCH) && NCURSES_VERSION_PATCH > 20021012 +#ifndef HAVE_USE_LEGACY_CODING +/* + * Between ncurses 5.3 and 5.4 as part of fixes for wide-character mode, the + * locale support no longer allows characters in the range 128-159 to be + * treated as printable characters. Here is a workaround to fool + * waddch_nosync() into treating "all" 8-bit characters as printable. + */ +NCURSES_CONST char *unctrl(chtype ch) +{ + static char result[3]; + unsigned data = (unsigned char)ch; + + if (data < 32) { + result[0] = '^'; + result[1] = ch | '@'; + result[2] = 0; + } else if (data == 127) { + result[0] = '^'; + result[1] = '?'; + result[2] = 0; + } else { + result[0] = data; + result[1] = 0; + } + return result; +} +#endif /* HAVE_USE_LEGACY_CODING */ +#endif diff --git a/src/LYCurses.h b/src/LYCurses.h index a632bac0..547a9117 100644 --- a/src/LYCurses.h +++ b/src/LYCurses.h @@ -387,7 +387,11 @@ extern "C" { * Usable limits for display: */ #if defined(FANCY_CURSES) || defined(USE_SLANG) +#if defined(PDCURSES) +#define LYcolLimit (LYcols - LYbarWidth - 1) /* PDCurses wrapping is buggy */ +#else #define LYcolLimit (LYcols - LYbarWidth) +#endif #else #define LYcolLimit (LYcols - 1) #endif @@ -519,11 +523,23 @@ extern "C" { #endif #define LYaddch(ch) SLsmg_write_char(ch) + +#if SLANG_VERSION >= 20000 +#define addch_raw(ch) do { \ + SLsmg_Char_Type buf; \ + buf.nchars = 1; \ + buf.wchars[0] = ch; \ + buf.color = Current_Attr; \ + SLsmg_write_raw (&buf, 1); \ + } while (0) +#else #define addch_raw(ch) do { \ SLsmg_Char_Type buf; \ buf = (ch) | (Current_Attr << 4); \ SLsmg_write_raw (&buf, 1); \ } while (0) +#endif /* SLANG_VERSION >= 20000 */ + #define echo() #define printw SLsmg_printf diff --git a/src/LYExtern.c b/src/LYExtern.c index e042820c..9f5471db 100644 --- a/src/LYExtern.c +++ b/src/LYExtern.c @@ -66,16 +66,88 @@ static char *decode_string(char *s) #ifdef WIN_EX /* * Quote the path to make it safe for shell command processing. + * We always quote it not only includes spaces in it. + * At least we should quote paths which include "&". */ char *quote_pathname(char *pathname) { char *result = NULL; - if (strchr(pathname, ' ') != NULL) { - HTSprintf0(&result, "\"%s\"", pathname); - } else { - StrAllocCopy(result, pathname); + HTSprintf0(&result, "\"%s\"", pathname); + return result; +} + +/* + * Delete dangerous characters as local path. + * We delete '<>|' and also '%"'. + * '%' should be deleted because it's difficut to escape for all cases. + * So we can't treat paths which include '%'. + * '"' should be deleted because it's a obstacle to quote whole path. + */ +static void delete_danger_characters(char *src) +{ + char *dst; + + for (dst = src; *src != '\0'; src++) { + if (strchr("<>|%\"", *src) == NULL) { + *dst = *src; + dst++; + } } + *dst = '\0'; +} + +static char *escapeParameter(CONST char *parameter) +{ + size_t i; + size_t last = strlen(parameter); + size_t n = 0; + size_t encoded = 0; + size_t escaped = 0; + char *result; + char *needs_encoded = "<>|"; + char *needs_escaped = "%"; + char *needs_escaped_NT = "%&^"; + + for (i = 0; i < last; ++i) { + if (strchr(needs_encoded, parameter[i]) != NULL) { + ++encoded; + } + if (system_is_NT) { + if (strchr(needs_escaped_NT, parameter[i]) != NULL) { + ++escaped; + } + } else if (strchr(needs_escaped, parameter[i]) != NULL) { + ++escaped; + } + } + + result = (char *) malloc(last + encoded * 2 + escaped + 1); + if (result == NULL) + outofmem(__FILE__, "escapeParameter"); + + n = 0; + for (i = 0; i < last; i++) { + if (strchr(needs_encoded, parameter[i]) != NULL) { + sprintf(result + n, "%%%02X", (unsigned char) parameter[i]); + n += 3; + continue; + } + if (system_is_NT) { + if (strchr(needs_escaped_NT, parameter[i]) != NULL) { + result[n++] = '^'; + result[n++] = parameter[i]; + continue; + } + } else if (strchr(needs_escaped, parameter[i]) != NULL) { + result[n++] = '%'; /* parameter[i] is '%' */ + result[n++] = parameter[i]; + continue; + } + result[n++] = parameter[i]; + } + result[n] = '\0'; + return result; } #endif /* WIN_EX */ @@ -103,62 +175,66 @@ static char *format_command(char *command, char *cmdbuf = NULL; #if defined(WIN_EX) - if (*param != '"' && strchr(param, ' ') != NULL) { - char *cp = quote_pathname(param); - - format(&cmdbuf, command, cp); - FREE(cp); - } else { - char pram_string[LY_MAXPATH]; + char pram_string[LY_MAXPATH]; + char *escaped = NULL; + if (strnicmp("file://localhost/", param, 17) == 0) { + /* decode local path parameter for programs to be + able to interpret - TH */ LYstrncpy(pram_string, param, sizeof(pram_string) - 1); decode_string(pram_string); param = pram_string; + } else { + /* encode or escape URL parameter - TH */ + escaped = escapeParameter(param); + param = escaped; + } - if (isMAILTO_URL(param)) { - format(&cmdbuf, command, param + 7); - } else if (strnicmp("telnet://", param, 9) == 0) { - char host[sizeof(pram_string)]; - int last_pos; - - strcpy(host, param + 9); - last_pos = strlen(host) - 1; - if (last_pos > 1 && host[last_pos] == '/') - host[last_pos] = '\0'; - - format(&cmdbuf, command, host); - } else if (strnicmp("file://localhost/", param, 17) == 0) { - char e_buff[LY_MAXPATH], *p; - - p = param + 17; - *e_buff = 0; - if (strchr(p, ':') == NULL) { - sprintf(e_buff, "%.3s/", windows_drive); - } - strncat(e_buff, p, sizeof(e_buff) - strlen(e_buff) - 1); - p = strrchr(e_buff, '.'); - if (p) { - trimPoundSelector(p); - } + if (isMAILTO_URL(param)) { + format(&cmdbuf, command, param + 7); + } else if (strnicmp("telnet://", param, 9) == 0) { + char host[sizeof(pram_string)]; + int last_pos; + + LYstrncpy(host, param + 9, sizeof(host)); + last_pos = strlen(host) - 1; + if (last_pos > 1 && host[last_pos] == '/') + host[last_pos] = '\0'; + + format(&cmdbuf, command, host); + } else if (strnicmp("file://localhost/", param, 17) == 0) { + char e_buff[LY_MAXPATH], *p; + + p = param + 17; + delete_danger_characters(p); + *e_buff = 0; + if (strchr(p, ':') == NULL) { + sprintf(e_buff, "%.3s/", windows_drive); + } + strncat(e_buff, p, sizeof(e_buff) - strlen(e_buff) - 1); + p = strrchr(e_buff, '.'); + if (p) { + trimPoundSelector(p); + } - /* Less ==> short filename with backslashes, - * less ==> long filename with forward slashes, may be quoted - */ - if (ISUPPER(command[0])) { - format(&cmdbuf, - command, HTDOS_short_name(e_buff)); - } else { - if (*e_buff != '"' && strchr(e_buff, ' ') != NULL) { - p = quote_pathname(e_buff); - LYstrncpy(e_buff, p, sizeof(e_buff) - 1); - FREE(p); - } - format(&cmdbuf, command, e_buff); - } + /* Less ==> short filename with backslashes, + * less ==> long filename with forward slashes, may be quoted + */ + if (ISUPPER(command[0])) { + char *short_name = HTDOS_short_name(e_buff); + + p = quote_pathname(short_name); + format(&cmdbuf, command, p); + FREE(p); } else { - format(&cmdbuf, command, param); + p = quote_pathname(e_buff); + format(&cmdbuf, command, p); + FREE(p); } + } else { + format(&cmdbuf, command, param); } + FREE(escaped); #else format(&cmdbuf, command, param); #endif diff --git a/src/LYGlobalDefs.h b/src/LYGlobalDefs.h index 3f8f32e5..82a828ff 100644 --- a/src/LYGlobalDefs.h +++ b/src/LYGlobalDefs.h @@ -221,7 +221,7 @@ extern "C" { extern BOOLEAN jump_buffer; /* TRUE if offering default shortcut */ extern BOOLEAN long_url_ok; extern BOOLEAN lynx_mode; - extern BOOLEAN more; /* is there more document to display? */ + extern BOOLEAN more_text; /* is there more document to display? */ extern BOOLEAN news_ok; extern BOOLEAN number_fields_on_left; extern BOOLEAN number_links_on_left; diff --git a/src/LYList.c b/src/LYList.c index 25efb9f9..8ab0df40 100644 --- a/src/LYList.c +++ b/src/LYList.c @@ -10,6 +10,7 @@ #include <LYUtils.h> #include <GridText.h> #include <LYList.h> +#include <LYMap.h> #include <LYClean.h> #include <LYGlobalDefs.h> #include <LYCharUtils.h> @@ -231,6 +232,80 @@ int showlist(DocInfo *newdoc, BOOLEAN titles) return (0); } +static void print_refs(FILE *fp, BOOLEAN titles, int refs) +{ + int cnt; + char *address = NULL; + const char *desc = gettext("unknown field or link"); + void *helper = NULL; /* init */ + + for (cnt = 1; cnt <= refs; cnt++) { + HTChildAnchor *child = HText_childNextNumber(cnt, &helper); + HTAnchor *dest; + HTParentAnchor *parent; + const char *title; + + if (child == 0) { + /* + * child should not be 0 unless form field numbering is on and + * cnt is the number of a form input field. + * HText_FormDescNumber() will set desc to a description of + * what type of input field this is. We'll create a + * within-document link to ensure that the link numbers on the + * list page match the numbering in the original document, but + * won't create a forward link to the form. - FM && LE + */ + if (fields_are_numbered()) { + HText_FormDescNumber(cnt, &desc); + fprintf(fp, "%4d. form field = %s\n", cnt, desc); + } + continue; + } + dest = HTAnchor_followLink(child); + /* + * Ignore if child anchor points to itself, i.e., we had something + * like <A NAME=xyz HREF="#xyz"> and it is not treated as a hidden + * link. Useful if someone 'P'rints the List Page (which isn't a + * very useful action to do, but anyway...) - kw + */ + if (dest == (HTAnchor *) child) + continue; + parent = HTAnchor_parent(dest); + title = titles ? HTAnchor_title(parent) : NULL; + address = HTAnchor_address(dest); + fprintf(fp, "%4d. %s%s\n", cnt, + ((HTAnchor *) parent != dest) && title ? "in " : "", + (title ? title : address)); + FREE(address); +#ifdef VMS + if (HadVMSInterrupt) + break; +#endif /* VMS */ + } +} + +static void print_hidden_refs(FILE *fp, int refs, int hidden_links) +{ + int cnt; + char *address = NULL; + + fprintf(fp, "%s %s\n", ((refs > 0) ? "\n" : ""), + gettext("Hidden links:")); + for (cnt = 0; cnt < hidden_links; cnt++) { + StrAllocCopy(address, HText_HiddenLinkAt(HTMainText, cnt)); + if (isEmpty(address)) { + FREE(address); + continue; + } + fprintf(fp, "%4d. %s\n", ((cnt + 1) + refs), address); + FREE(address); +#ifdef VMS + if (HadVMSInterrupt) + break; +#endif /* VMS */ + } +} + /* printlist - F.Macrides (macrides@sci.wfeb.edu) * --------- * Print a text/plain list of HyperText References @@ -242,87 +317,25 @@ int showlist(DocInfo *newdoc, BOOLEAN titles) */ void printlist(FILE *fp, BOOLEAN titles) { - int cnt; int refs, hidden_links; - char *address = NULL; - const char *desc = gettext("unknown field or link"); - void *helper; refs = HText_sourceAnchors(HTMainText); - if (refs <= 0 && LYHiddenLinks != HIDDENLINKS_SEPARATE) - return; - hidden_links = HText_HiddenLinkCount(HTMainText); - if (refs <= 0 && hidden_links <= 0) { - return; - } else { - fprintf(fp, "\n%s\n\n", gettext("References")); - if (LYHiddenLinks == HIDDENLINKS_IGNORE) - hidden_links = 0; - if (hidden_links > 0) { - fprintf(fp, " %s\n", gettext("Visible links")); - } - helper = NULL; /* init */ - for (cnt = 1; cnt <= refs; cnt++) { - HTChildAnchor *child = HText_childNextNumber(cnt, &helper); - HTAnchor *dest; - HTParentAnchor *parent; - const char *title; - - if (child == 0) { - /* - * child should not be 0 unless form field numbering is on and - * cnt is the number of a form input field. - * HText_FormDescNumber() will set desc to a description of - * what type of input field this is. We'll create a - * within-document link to ensure that the link numbers on the - * list page match the numbering in the original document, but - * won't create a forward link to the form. - FM && LE - */ - if (fields_are_numbered()) { - HText_FormDescNumber(cnt, &desc); - fprintf(fp, "%4d. form field = %s\n", cnt, desc); - } - continue; + if (refs > 0 || LYHiddenLinks == HIDDENLINKS_SEPARATE) { + hidden_links = HText_HiddenLinkCount(HTMainText); + if (refs > 0 || hidden_links > 0) { + fprintf(fp, "\n%s\n\n", gettext("References")); + if (LYHiddenLinks == HIDDENLINKS_IGNORE) + hidden_links = 0; + if (hidden_links > 0) { + fprintf(fp, " %s\n", gettext("Visible links")); } - dest = HTAnchor_followLink(child); - /* - * Ignore if child anchor points to itself, i.e., we had something - * like <A NAME=xyz HREF="#xyz"> and it is not treated as a hidden - * link. Useful if someone 'P'rints the List Page (which isn't a - * very useful action to do, but anyway...) - kw - */ - if (dest == (HTAnchor *) child) - continue; - parent = HTAnchor_parent(dest); - title = titles ? HTAnchor_title(parent) : NULL; - address = HTAnchor_address(dest); - fprintf(fp, "%4d. %s%s\n", cnt, - ((HTAnchor *) parent != dest) && title ? "in " : "", - (title ? title : address)); - FREE(address); -#ifdef VMS - if (HadVMSInterrupt) - break; -#endif /* VMS */ - } + print_refs(fp, titles, refs); - if (hidden_links > 0) { - fprintf(fp, "%s %s\n", ((refs > 0) ? "\n" : ""), - gettext("Hidden links:")); - for (cnt = 0; cnt < hidden_links; cnt++) { - StrAllocCopy(address, HText_HiddenLinkAt(HTMainText, cnt)); - if (isEmpty(address)) { - FREE(address); - continue; - } - fprintf(fp, "%4d. %s\n", ((cnt + 1) + refs), address); - FREE(address); -#ifdef VMS - if (HadVMSInterrupt) - break; -#endif /* VMS */ + if (hidden_links > 0) { + print_hidden_refs(fp, refs, hidden_links); } } } + LYPrintImgMaps(fp); return; } diff --git a/src/LYMain.c b/src/LYMain.c index 0aa29e71..b9cc453f 100644 --- a/src/LYMain.c +++ b/src/LYMain.c @@ -377,7 +377,7 @@ BOOLEAN check_realm = FALSE; /* Restrict to the starting realm? */ BOOLEAN clickable_images = MAKE_LINKS_FOR_ALL_IMAGES; BOOLEAN crawl = FALSE; /* Do crawl? */ BOOLEAN keep_mime_headers = FALSE; /* Include mime headers with source dump */ -BOOLEAN more = FALSE; /* is there more text to display? */ +BOOLEAN more_text = FALSE; /* is there more text to display? */ BOOLEAN more_links = FALSE; /* Links beyond a displayed page with no links? */ BOOLEAN no_list = FALSE; BOOLEAN no_margins = FALSE; @@ -534,7 +534,7 @@ int ssl_noprompt = FORCE_PROMPT_DFT; int connect_timeout = 18000; /*=180000*0.1 - used in HTDoConnect.*/ #ifdef EXP_JUSTIFY_ELTS -BOOL ok_justify = TRUE; +BOOL ok_justify = FALSE; int justify_max_void_percent = 35; #endif diff --git a/src/LYMainLoop.c b/src/LYMainLoop.c index 1de98d5b..27ec6c65 100644 --- a/src/LYMainLoop.c +++ b/src/LYMainLoop.c @@ -2202,7 +2202,7 @@ static void handle_LYK_DOWN_HALF(int *old_c, { int i; - if (more) { + if (more_text) { Newline += (display_lines / 2); if (nlinks > 0 && curdoc.link > -1 && links[curdoc.link].ly > display_lines / 2) { @@ -2235,14 +2235,14 @@ static void handle_LYK_DOWN_LINK(int *follow_col, newlink = find_link_near_col(*follow_col, 1); if (newlink > -1) { set_curdoc_link(newlink); - } else if (more) { /* next page */ + } else if (more_text) { /* next page */ Newline += display_lines; } else if (*old_c != real_c) { *old_c = real_c; HTUserMsg(NO_LINKS_BELOW); return; } - } else if (more) { /* next page */ + } else if (more_text) { /* next page */ Newline += display_lines; } else if (*old_c != real_c) { @@ -2256,7 +2256,7 @@ static void handle_LYK_DOWN_TWO(int *old_c, { int i; - if (more) { + if (more_text) { Newline += 2; if (nlinks > 0 && curdoc.link > -1 && links[curdoc.link].ly > 2) { @@ -2679,7 +2679,7 @@ static BOOLEAN handle_LYK_FASTBACKW_LINK(int *cmd, sametext(links[nextlink].l_form->name, thisname)); samepage = 1; - } else if (!more && LYGetNewline() == 1 && + } else if (!more_text && LYGetNewline() == 1 && (links[0].type == WWW_FORM_LINK_TYPE && links[0].l_form->type == F_TEXTAREA_TYPE && links[0].l_form->number == thisgroup && @@ -2691,14 +2691,14 @@ static BOOLEAN handle_LYK_FASTBACKW_LINK(int *cmd, nextlink = nlinks - 1; samepage = 1; - } else if (!more && LYGetNewline() == 1 && curdoc.link > 0) { + } else if (!more_text && LYGetNewline() == 1 && curdoc.link > 0) { nextlink = 0; samepage = 1; } } else if (curdoc.link > 0) { nextlink--; samepage = 1; - } else if (!more && LYGetNewline() == 1) { + } else if (!more_text && LYGetNewline() == 1) { nextlink = nlinks - 1; samepage = 1; } @@ -2785,14 +2785,14 @@ static void handle_LYK_FASTFORW_LINK(int *old_c, links[nextlink].l_form->number == thisgroup && sametext(links[nextlink].l_form->name, thisname)); samepage = 1; - } else if (!more && LYGetNewline() == 1 && curdoc.link > 0) { + } else if (!more_text && LYGetNewline() == 1 && curdoc.link > 0) { nextlink = 0; samepage = 1; } } else if (curdoc.link < nlinks - 1) { nextlink++; samepage = 1; - } else if (!more && LYGetNewline() == 1 && curdoc.link > 0) { + } else if (!more_text && LYGetNewline() == 1 && curdoc.link > 0) { nextlink = 0; samepage = 1; } @@ -2800,14 +2800,14 @@ static void handle_LYK_FASTFORW_LINK(int *old_c, if (samepage) { set_curdoc_link(nextlink); - } else if (!more && LYGetNewline() == 1 && curdoc.link == nlinks - 1) { + } else if (!more_text && LYGetNewline() == 1 && curdoc.link == nlinks - 1) { /* * At the bottom of list and there is only one page. Move to the top * link on the page. */ set_curdoc_link(0); - } else if (more && /* need a later page */ + } else if (more_text && /* need a later page */ HTGetLinkOrFieldStart(curdoc.link, &Newline, &newdoc.link, 1, TRUE) != NO) { @@ -3827,10 +3827,10 @@ static void handle_LYK_NEXT_LINK(int c, * At the bottom of list and there is only one page. Move to the top * link on the page. */ - } else if (!more && LYGetNewline() == 1 && curdoc.link == nlinks - 1) { + } else if (!more_text && LYGetNewline() == 1 && curdoc.link == nlinks - 1) { set_curdoc_link(0); - } else if (more) { /* next page */ + } else if (more_text) { /* next page */ Newline += display_lines; } else if (*old_c != real_c) { @@ -3842,7 +3842,7 @@ static void handle_LYK_NEXT_LINK(int c, static void handle_LYK_NEXT_PAGE(int *old_c, int real_c) { - if (more) { + if (more_text) { Newline += display_lines; } else if (curdoc.link < nlinks - 1) { set_curdoc_link(nlinks - 1); @@ -3880,7 +3880,7 @@ static void handle_LYK_PREV_LINK(int *arrowup, if (curdoc.link > 0) { /* previous link */ set_curdoc_link(curdoc.link - 1); - } else if (!more && + } else if (!more_text && curdoc.link == 0 && LYGetNewline() == 1) { /* at the top of list */ /* * If there is only one page of data and the user goes off the top, @@ -4472,9 +4472,10 @@ static void handle_LYK_TAG_LINK(void) } if (curdoc.link < nlinks - 1) { set_curdoc_link(curdoc.link + 1); - } else if (!more && LYGetNewline() == 1 && curdoc.link == nlinks - 1) { + } else if (!more_text && LYGetNewline() == 1 && curdoc.link == nlinks + - 1) { set_curdoc_link(0); - } else if (more) { /* next page */ + } else if (more_text) { /* next page */ Newline += (display_lines); } } @@ -4485,7 +4486,7 @@ static void handle_LYK_TOGGLE_HELP(void) { if (user_mode == NOVICE_MODE) { toggle_novice_line(); - noviceline(more); + noviceline(more_text); } } @@ -4991,7 +4992,7 @@ static void handle_LYK_digit(int c, */ if (LYGetNewline() <= 1) { HTInfoMsg(ALREADY_AT_BEGIN); - } else if (!more) { + } else if (!more_text) { HTInfoMsg(ALREADY_AT_END); } else { StrAllocCopy(temp, user_input_buffer); @@ -6260,9 +6261,10 @@ int mainloop(void) #endif /* DIRED_SUPPORT */ /* - * If more equals TRUE, then there is more info below this page. + * Check if there is more info below this page. */ - more = HText_canScrollDown(); + more_text = HText_canScrollDown(); + if (newdoc.link < 0) goto_line(LYGetNewline()); LYSetNewline(HText_getTopOfScreen() + 1); @@ -6343,9 +6345,9 @@ int mainloop(void) #endif /* DIRED_SUPPORT */ /* - * If more equals TRUE, then there is more info below this page. + * Check if there is more info below this page. */ - more = HText_canScrollDown(); + more_text = HText_canScrollDown(); /* * Adjust curdoc.link as above; nlinks may have changed, if the @@ -6360,7 +6362,7 @@ int mainloop(void) } if (user_mode == NOVICE_MODE) - noviceline(more); /* print help message */ + noviceline(more_text); /* print help message */ refresh_screen = FALSE; } @@ -6574,7 +6576,7 @@ int mainloop(void) && strcmp(links[curdoc.link].l_form->name, links[curdoc.link + 1].l_form->name) == 0) || - (curdoc.link == nlinks - 1 && more && + (curdoc.link == nlinks - 1 && more_text && HText_TAHasMoreLines(curdoc.link, 1)))) || ((LKC_TO_LAC(keymap, real_c) == LYK_PREV_LINK || LKC_TO_LAC(keymap, real_c) == LYK_LPOS_PREV_LINK || @@ -6618,7 +6620,8 @@ int mainloop(void) if ((links[curdoc.link].type == WWW_FORM_LINK_TYPE && links[curdoc.link].l_form->type == F_TEXTAREA_TYPE) && ((curdoc.link == nlinks - 1 && - !(more && HText_TAHasMoreLines(curdoc.link, 1))) + !(more_text && + HText_TAHasMoreLines(curdoc.link, 1))) || ((curdoc.link < nlinks - 1) && !(links[curdoc.link + 1].type == WWW_FORM_LINK_TYPE @@ -6802,7 +6805,7 @@ int mainloop(void) } else #endif show_main_statusline(links[curdoc.link], FOR_INPUT); - } else if (more) { + } else if (more_text) { HTInfoMsg(MOREHELP); } else { HTInfoMsg(HELP); @@ -7592,7 +7595,7 @@ static void show_main_statusline(const LinkInfo curlink, * Make sure form novice lines are replaced. */ if (user_mode == NOVICE_MODE && for_what != FOR_INPUT) { - noviceline(more); + noviceline(more_text); } if (HTisDocumentSource()) { @@ -7647,8 +7650,8 @@ static void show_main_statusline(const LinkInfo curlink, } if (!cp) cp = curlink.lname; - status_link(cp, more, is_www_index); - } else if (is_www_index && more) { + status_link(cp, more_text, is_www_index); + } else if (is_www_index && more_text) { char buf[128]; sprintf(buf, WWW_INDEX_MORE_MESSAGE, key_for_func(LYK_INDEX_SEARCH)); @@ -7658,7 +7661,7 @@ static void show_main_statusline(const LinkInfo curlink, sprintf(buf, WWW_INDEX_MESSAGE, key_for_func(LYK_INDEX_SEARCH)); _statusline(buf); - } else if (more) { + } else if (more_text) { if (user_mode == NOVICE_MODE) _statusline(MORE); else diff --git a/src/LYMap.c b/src/LYMap.c index 5b563b85..9fd0e073 100644 --- a/src/LYMap.c +++ b/src/LYMap.c @@ -29,6 +29,8 @@ #include <LYexit.h> #include <LYLeaks.h> +#define NO_MAP_TITLE "[USEMAP]" + typedef struct _LYMapElement { char *address; char *title; @@ -204,7 +206,7 @@ BOOL LYAddImageMap(char *address, } /* - * Utility for adding LYMapElements to LYImageMaps + * Utility for adding LYMapElement's to LYImageMap's * in the appropriate list. - FM */ BOOL LYAddMapElement(char *map, @@ -238,8 +240,9 @@ BOOL LYAddMapElement(char *map, * therefore represent a POST response, so use the specific list. - kw */ theList = node_anchor->imaps; - if (!theList) + if (!theList) { return FALSE; + } } else #endif { @@ -283,6 +286,11 @@ BOOL LYAddMapElement(char *map, tmp->intern_flag = intern_flag; #endif HTList_appendObject(theMap->elements, tmp); + + CTRACE((tfp, + "LYAddMapElement\n\tmap %s\n\taddress %s\n\ttitle %s)\n", + NonNull(map), NonNull(address), NonNull(title))); + return TRUE; } @@ -530,13 +538,13 @@ static int LYLoadIMGmap(const char *arg, } else if (non_empty(anAnchor->title)) { StrAllocCopy(MapTitle, anAnchor->title); } else if (non_empty(LYRequestTitle) && - strcasecomp(LYRequestTitle, "[USEMAP]")) { + strcasecomp(LYRequestTitle, NO_MAP_TITLE)) { StrAllocCopy(MapTitle, LYRequestTitle); } else if ((cp = strchr(address, '#')) != NULL) { StrAllocCopy(MapTitle, (cp + 1)); } if (isEmpty(MapTitle)) { - StrAllocCopy(MapTitle, "[USEMAP]"); + StrAllocCopy(MapTitle, NO_MAP_TITLE); } else { LYEntify(&MapTitle, TRUE); } @@ -551,8 +559,8 @@ static int LYLoadIMGmap(const char *arg, PUTS(buf); /* * This page is a list of titles and anchors for them. Since titles - * already passed SGML/HTML stage they converted to current_char_set. That - * is why we insist on META charset for this page. + * already passed SGML/HTML stage they are converted to current_char_set. + * That is why we insist on META charset for this page. */ HTSprintf0(&buf, "<title>%s</title>\n", MapTitle); PUTS(buf); @@ -600,6 +608,32 @@ static int LYLoadIMGmap(const char *arg, return (HT_LOADED); } +void LYPrintImgMaps(FILE *fp) +{ + HTList *outer = LynxMaps; + HTList *inner; + LYImageMap *map; + LYMapElement *elt; + int count; + + if (HTList_count(outer) > 0) { + while (NULL != (map = (LYImageMap *) HTList_nextObject(outer))) { + fprintf(fp, "\n%s\n", isEmpty(map->title) ? NO_MAP_TITLE : map->title); + fprintf(fp, "%s\n", map->address); + inner = map->elements; + count = 0; + while (NULL != (elt = (LYMapElement *) HTList_nextObject(inner))) { + fprintf(fp, "%4d. %s", ++count, elt->address); +#ifndef DONT_TRACK_INTERNAL_LINKS + if (map->intern_flag) + fprintf(fp, " TYPE=\"internal link\""); +#endif + fprintf(fp, "\n"); + } + } + } +} + #ifdef GLOBALDEF_IS_MACRO #define _LYIMGMAP_C_GLOBALDEF_1_INIT { "LYNXIMGMAP", LYLoadIMGmap, 0} GLOBALDEF(HTProtocol, LYLynxIMGmap, _LYIMGMAP_C_GLOBALDEF_1_INIT); diff --git a/src/LYMap.h b/src/LYMap.h index bd16ad8b..28a60178 100644 --- a/src/LYMap.h +++ b/src/LYMap.h @@ -14,6 +14,7 @@ extern "C" { extern BOOL LYMapsOnly; extern void ImageMapList_free(HTList *list); + extern void LYPrintImgMaps(FILE *fp); extern BOOL LYAddImageMap(char *address, char *title, HTParentAnchor *node_anchor); extern BOOL LYAddMapElement(char *map, char *address, char *title, diff --git a/src/LYUtils.c b/src/LYUtils.c index ca4a3741..5bb16f50 100644 --- a/src/LYUtils.c +++ b/src/LYUtils.c @@ -1247,6 +1247,19 @@ char *strip_trailing_slash(char *dirname) } /* + * Remove most blanks, but restore one trailing blank to make prompts nicer. + */ +static void remove_most_blanks(char *buffer) +{ + int length = strlen(buffer); + BOOL trailing = (length != 0) && (buffer[length - 1] == ' '); + + LYReduceBlanks(buffer); + if (trailing) + strcat(buffer, " "); +} + +/* * Display (or hide) the status line. */ BOOLEAN mustshow = FALSE; @@ -1324,7 +1337,7 @@ void statusline(const char *text) /* * Deal with any newlines or tabs in the string. - FM */ - LYReduceBlanks((char *) temp); + remove_most_blanks((char *) temp); /* * Handle the Kanji, making sure the text is not longer than the @@ -1350,7 +1363,7 @@ void statusline(const char *text) /* * Deal with any newlines or tabs in the string. - FM */ - LYReduceBlanks(text_buff); + remove_most_blanks(text_buff); #ifdef WIDEC_CURSES len = strlen(text_buff); if (len >= (int) (sizeof(buffer) - 1)) @@ -1528,7 +1541,9 @@ int LYReopenInput(void) isatty(fileno(stderr)) && (term_name = ttyname(fileno(stderr))) != NULL) new_fd = open(term_name, O_RDONLY); +#endif +#ifdef HAVE_CTERMID if (new_fd == -1 && (term_name = ctermid(NULL)) != NULL) new_fd = open(term_name, O_RDONLY); @@ -7268,6 +7283,8 @@ const char *LYSysShell(void) if (shell) { if (access(shell, 0) != 0) shell = LYGetEnv("COMSPEC"); + } else { + shell = LYGetEnv("COMSPEC"); } if (shell == NULL) { if (system_is_NT) diff --git a/src/UCAuto.c b/src/UCAuto.c index 0f71a000..12f82b69 100644 --- a/src/UCAuto.c +++ b/src/UCAuto.c @@ -21,12 +21,19 @@ #include <UCDefs.h> #include <UCAuto.h> #include <LYGlobalDefs.h> +#include <LYStrings.h> #include <LYClean.h> #include <LYLeaks.h> #include <LYCharSets.h> #ifdef EXP_CHARTRANS_AUTOSWITCH +#include <HTFile.h> + +#ifdef LINUX +#include <sysexits.h> /* EX_DATAERR, etc. */ +#endif + # ifdef CAN_SWITCH_DISPLAY_CHARSET char *charset_switch_rules; char *charsets_directory; @@ -38,6 +45,10 @@ int switch_display_charsets; # endif +#ifdef HAVE_USE_LEGACY_CODING +static int original_coding = 0; +#endif + # ifdef __EMX__ /* If we "just include" <os2.h>, BOOLEAN conflicts. */ # define BOOLEAN OS2_BOOLEAN /* This file doesn't use it, conflicts */ @@ -50,22 +61,58 @@ int switch_display_charsets; #ifdef LINUX typedef enum { - Is_Unset, Is_Set, Dunno, Dont_Care + Is_Unset, + Is_Set, + Dunno, + Dont_Care } TGen_state_t; + +/* + * List the states the console has been set to via SCS (select character-set). + */ typedef enum { - G0, G1 -} TGNstate_t; -typedef enum { - GN_Blat1, GN_0decgraf, GN_Ucp437, GN_Kuser, GN_dunno, GN_dontCare + GN_Blat1, /* Latin-1 */ + GN_0decgraf, /* VT100 graphics */ + GN_Ucp437, /* PC -> PC */ + GN_Kuser, /* user-defined */ + GN_dunno, + GN_dontCare } TTransT_t; -static char *T_font_fn = NULL; -static char *T_umap_fn = NULL; +static char *T_font_fn = NULL; /* font filename */ +static char *T_umap_fn = NULL; /* unicode-map filename */ -#define SETFONT "setfont" #define NOOUTPUT "2>/dev/null >/dev/null" /* + * Return the configured path of the setfont/consolechars program. + */ +static const char *GetSetfontPath(void) +{ + return HTGetProgramPath(ppSETFONT); +} + +/* + * setfont and consolechars have different options and available data. + */ +static BOOL isSetFont(void) +{ + const char *program = GetSetfontPath(); + const char *slash = strrchr(program, '/'); + const char *leaf = (slash ? slash + 1 : program); + + return !strcmp(leaf, "setfont"); +} + +/* + * Here are the differences in options which affect lynx: + */ +#define setfont_u() (isSetFont() ? "-u " : "--sfm ") +#define setfont_o() (isSetFont() ? "-o " : "--old-font-raw ") +#define setfont_ou() (isSetFont() ? "-ou " : "--old-sfm ") +#define console_font() (isSetFont() ? "" : "--font ") + +/* * call_setfont - execute "setfont" command via system() * returns: 0 ok (as far as we know) * -1 error (assume font and umap are not loaded) @@ -75,9 +122,16 @@ static int call_setfont(const char *font, const char *fnsuffix, const char *umap) { + const char *program = GetSetfontPath(); char *T_setfont_cmd = NULL; int rv; + /* + * console-data package has only a few unicode maps. + */ + if (!isSetFont()) + umap = 0; + if ((font && T_font_fn && !strcmp(font, T_font_fn)) && (umap && T_umap_fn && !strcmp(umap, T_umap_fn))) { /* @@ -93,33 +147,42 @@ static int call_setfont(const char *font, if (!*fnsuffix) fnsuffix = ""; - if (umap && *umap && font && *font) { - HTSprintf0(&T_setfont_cmd, "%s %s%s -u %s %s", - SETFONT, font, fnsuffix, umap, NOOUTPUT); - } else if (font && *font) { + if (non_empty(umap) && non_empty(font)) { + HTSprintf0(&T_setfont_cmd, "%s %s%s%s %s%s %s", + program, + console_font(), font, fnsuffix, + setfont_u(), umap, + NOOUTPUT); + } else if (non_empty(font)) { + HTSprintf0(&T_setfont_cmd, "%s %s%s%s %s", + program, + console_font(), font, fnsuffix, + NOOUTPUT); + } else if (non_empty(umap)) { HTSprintf0(&T_setfont_cmd, "%s %s%s %s", - SETFONT, font, fnsuffix, NOOUTPUT); - } else if (umap && *umap) { - HTSprintf0(&T_setfont_cmd, "%s -u %s %s", - SETFONT, umap, NOOUTPUT); + program, + setfont_u(), umap, + NOOUTPUT); } if (T_setfont_cmd) { - CTRACE((tfp, "Executing setfont: '%s'\n", T_setfont_cmd)); + CTRACE((tfp, "Changing font: '%s'\n", T_setfont_cmd)); rv = LYSystem(T_setfont_cmd); FREE(T_setfont_cmd); if (rv) { CTRACE((tfp, "call_setfont: system returned %d (0x%x)!\n", rv, rv)); - if ((rv == 0x4200 || rv == 0x4100) && umap && *umap) + if ((rv == (EX_DATAERR << 8) || + rv == (EX_NOINPUT << 8)) && + non_empty(umap)) { /* - * It seems setfont returns 65 or 66 to the shell if - * the font was loaded ok but something was wrong with - * the umap file. - kw + * Check if the font was loaded ok but something was wrong with + * the umap file. */ return 1; - else + } else { return -1; + } } } return 0; @@ -144,12 +207,25 @@ static int nonempty_file(const char *p) (sb.st_size != 0)); } +static BOOL on_console(void) +{ + if ((x_display != NULL) || + LYgetXDisplay() != NULL) { + /* + * We won't do anything in an xterm. Better that way... + */ + return FALSE; + } + return TRUE; +} + /* * This is the thing that actually gets called from display_page(). */ void UCChangeTerminalCodepage(int newcs, LYUCcharset *p) { + const char *program = GetSetfontPath(); static int lastcs = -1; static const char *lastname = NULL; static TTransT_t lastTransT = GN_dunno; @@ -168,25 +244,41 @@ void UCChangeTerminalCodepage(int newcs, char *tmpbuf2 = NULL; int status = 0; + if (!on_console()) return; + +#ifdef HAVE_USE_LEGACY_CODING + if (newcs < 0) { + use_legacy_coding(original_coding); + } else { + original_coding = use_legacy_coding(2); + } +#endif + /* * Restore the original character set. */ if (newcs < 0 || p == 0) { - if (old_font && *old_font && - old_umap && *old_umap) { - int have_font = nonempty_file(old_font); - int have_umap = nonempty_file(old_umap); - - if (have_font) { - if (have_umap) { - HTSprintf0(&tmpbuf1, "%s %s -u %s %s", - SETFONT, old_font, old_umap, NOOUTPUT); + if (non_empty(old_font) && + non_empty(old_umap)) { + + if (nonempty_file(old_font)) { + if (nonempty_file(old_umap)) { + HTSprintf0(&tmpbuf1, "%s %s%s %s%s %s", + program, + console_font(), old_font, + setfont_u(), old_umap, + NOOUTPUT); } else { - HTSprintf0(&tmpbuf1, "%s %s %s", - SETFONT, old_font, NOOUTPUT); + HTSprintf0(&tmpbuf1, "%s %s%s %s", + program, + console_font(), old_font, + NOOUTPUT); } - CTRACE((tfp, "Executing setfont to restore: '%s'\n", tmpbuf1)); + CTRACE((tfp, "Restoring font: '%s'\n", tmpbuf1)); status = LYSystem(tmpbuf1); + if (status != 0) { + CTRACE((tfp, "...system returned %d (0x%x)\n", status, status)); + } FREE(tmpbuf1); } } @@ -208,29 +300,38 @@ void UCChangeTerminalCodepage(int newcs, } else if (lastcs < 0 && old_umap == 0 && old_font == 0) { FILE *fp1; FILE *fp2 = NULL; - if ((old_font = typecallocn(char, LY_MAXPATH))) + + if ((old_font = typecallocn(char, LY_MAXPATH)) != 0) old_umap = typecallocn(char, LY_MAXPATH); - if ((fp1 = LYOpenTemp(old_font, ".fnt", BIN_W))) + if ((fp1 = LYOpenTemp(old_font, ".fnt", BIN_W)) != 0) fp2 = LYOpenTemp(old_umap, ".uni", BIN_W); + if (fp1 && fp2) { size_t nlen; - char *rp; - - HTSprintf0(&tmpbuf1, "%s -o %s -ou %s %s", - SETFONT, old_font, old_umap, NOOUTPUT); - CTRACE((tfp, "Executing setfont to save: '%s'\n", tmpbuf1)); - LYSystem(tmpbuf1); + int rv; + + HTSprintf0(&tmpbuf1, "%s %s%s %s%s %s", + program, + setfont_o(), old_font, + setfont_ou(), old_umap, + NOOUTPUT); + + CTRACE((tfp, "Saving font: '%s'\n", tmpbuf1)); + rv = LYSystem(tmpbuf1); + if (rv != 0) { + CTRACE((tfp, "...system returned %d (0x%x)\n", rv, rv)); + } FREE(tmpbuf1); LYCloseTempFP(fp1); LYCloseTempFP(fp2); - if ((nlen = strlen(old_font)) + 1 < LY_MAXPATH && - (rp = typeRealloc(char, old_font, nlen + 1))) - old_font = rp; - if ((nlen = strlen(old_umap)) + 1 < LY_MAXPATH && - (rp = typeRealloc(char, old_umap, nlen + 1))) - old_umap = rp; + /* free up a few bytes */ + if ((nlen = strlen(old_font) + 1) < LY_MAXPATH) + old_font = typeRealloc(char, old_font, nlen); + + if ((nlen = strlen(old_umap) + 1) < LY_MAXPATH) + old_umap = typeRealloc(char, old_umap, nlen); } else { if (fp1) LYRemoveTemp(old_font); @@ -251,27 +352,16 @@ void UCChangeTerminalCodepage(int newcs, #define SUFF3 "-8x16" #define SUFF4 "8x16" #define SUFF5 ".cp -16" - - /* - * Use this for output of escape sequences. - */ - if ((x_display != NULL) || - LYgetXDisplay() != NULL) { - /* - * We won't do anything in an xterm. Better that way... - */ - return; - } +#define SUFF6 "_8x16" /* NOTE: `!!umap not in kbd!!' comments below means that the *.uni file - is not found in kbd package. Reference Debian Package: kbd-data, - Version: 0.96a-14. They should be located elsewhere or generated. - Also some cpNNN fonts used below are not in the kbd-data. - kw + * is not found in kbd package. Reference Debian Package: kbd-data, + * Version: 0.96a-14. They should be located elsewhere or generated. + * Also some cpNNN fonts used below are not in the kbd-data. - kw */ if (!strncmp(name, "iso-8859-1", 10) && - (!name[10] || !isdigit(UCH(name[10]))) - ) { + (!name[10] || !isdigit(UCH(name[10])))) { if ((lastHasUmap == Is_Set) && !strcmp(lastname, "cp850")) { /* * cp850 already contains all latin1 characters. @@ -324,8 +414,18 @@ void UCChangeTerminalCodepage(int newcs, } else if (!strcmp(name, "koi8-r")) { /* * "setfont koi8-8x16" + * !!umap not in kbd!! */ - status = call_setfont("koi8", SUFF3, "koi8r.uni"); /* !!umap not in kbd!! */ + status = call_setfont("koi8", SUFF3, "koi8r.uni"); + TransT = GN_Kuser; + HasUmap = Is_Set; + Utf = Is_Unset; + } else if (!strcmp(name, "koi8-u")) { + /* + * "setfont koi8u_8x16" + * !!umap not in kbd!! + */ + status = call_setfont("koi8u", SUFF6, "koi8u.uni"); TransT = GN_Kuser; HasUmap = Is_Set; Utf = Is_Unset; @@ -343,8 +443,9 @@ void UCChangeTerminalCodepage(int newcs, } else if (!strcmp(name, "cp850")) { /* * "setfont cp850-8x16 -u cp850.uni" + * !!umap not in kbd!! */ - status = call_setfont("cp850", SUFF3, "cp850.uni"); /* !!umap not in kbd!! */ + status = call_setfont("cp850", SUFF3, "cp850.uni"); TransT = GN_Kuser; HasUmap = Is_Set; Utf = Is_Unset; @@ -354,8 +455,9 @@ void UCChangeTerminalCodepage(int newcs, HTSprintf0(&tmpbuf2, "%s.uni", name); /* * "setfont cpNNN.f16" + * !!umap not in kbd!! */ - status = call_setfont(name, SUFF1, tmpbuf2); /* !!umap not in kbd!! */ + status = call_setfont(name, SUFF1, tmpbuf2); FREE(tmpbuf2); TransT = GN_Kuser; HasUmap = Is_Set; @@ -363,8 +465,18 @@ void UCChangeTerminalCodepage(int newcs, } else if (!strcmp(name, "cp737")) { /* * "setfont cp737.cp" + * !!umap not in kbd!! */ - status = call_setfont("737", SUFF5, "cp737.uni"); /* !!umap not in kbd!! */ + if (isSetFont()) { + status = call_setfont("737", SUFF5, "cp737.uni"); + } else { + status = call_setfont("greek", "", "cp737.uni"); + } + TransT = GN_Kuser; + HasUmap = Is_Set; + Utf = Is_Unset; + } else if (!strcmp(name, "cp857")) { + status = call_setfont("cp857", SUFF3, "cp857.uni"); TransT = GN_Kuser; HasUmap = Is_Set; Utf = Is_Unset; @@ -449,6 +561,14 @@ void UCChangeTerminalCodepage(int newcs, #ifdef __EMX__ int res = 0; +#ifdef HAVE_USE_LEGACY_CODING + if (newcs < 0) { + use_legacy_coding(original_coding); + } else { + original_coding = use_legacy_coding(2); + } +#endif + if (newcs < 0) newcs = auto_display_charset; res = Switch_Display_Charset(newcs, SWITCH_DISPLAY_CHARSET_REALLY); @@ -667,14 +787,7 @@ int Switch_Display_Charset(const int ord, const enum switch_display_charset_t re int res; static int repeated; - if (!switch_display_charsets - && (really == SWITCH_DISPLAY_CHARSET_MAYBE -#ifdef SWITCH_DISPLAY_CHARSET_NOT_NEEDED_ANY_MORE - /* The first switch is not due to an interactive action */ - || (really == SWITCH_DISPLAY_CHARSET_REALLY - && !(repeated++)) -#endif - )) + if (!switch_display_charsets) return 0; res = _Switch_Display_Charset(ord, really); if (res < 0 || prev == res) /* No change */ diff --git a/src/UCAux.c b/src/UCAux.c index e5d01147..d0817260 100644 --- a/src/UCAux.c +++ b/src/UCAux.c @@ -308,29 +308,56 @@ void UCTransParams_clear(UCTransParams * pT) } /* - * If terminal is in UTF-8 mode, it probably cannot understand - * box drawing chars as (n)curses handles them. (This may also - * be true for other display character sets, but isn't currently - * checked.) In that case set the chars for hori and vert drawing - * chars to displayable ASCII chars if '0' was requested. They'll - * stay as they are otherwise. - kw + * If terminal is in UTF-8 mode, it probably cannot understand box drawing + * chars as the 8-bit (n)curses handles them. (This may also be true for other + * display character sets, but isn't currently checked.) In that case set the + * chars for horizontal and vertical drawing chars to displayable ASCII chars + * if '0' was requested. They'll stay as they are otherwise. -KW, TD + * + * If we're able to obtain a character set based on the locale settings, + * assume that the user has setup $TERM and the fonts already so line-drawing + * works. */ -void UCSetBoxChars(int cset GCC_UNUSED, +void UCSetBoxChars(int cset, int *pvert_out, int *phori_out, int vert_in, int hori_in) { + BOOL fix_lines = FALSE; + + if (cset >= 0) { #ifndef WIDEC_CURSES - if (cset >= -1 && LYCharSet_UC[cset].enc == UCT_ENC_UTF8) { - *pvert_out = (vert_in ? vert_in : '|'); - *phori_out = (hori_in ? hori_in : '-'); - } else + if (LYCharSet_UC[cset].enc == UCT_ENC_UTF8) { + fix_lines = TRUE; + } #endif - { - *pvert_out = vert_in; - *phori_out = hori_in; + /* + * If we've identified a charset that works, require it. + * This is important if we have loaded a font, which would + * confuse curses. + */ +#ifdef EXP_CHARTRANS_AUTOSWITCH + if (linedrawing_char_set >= 0) { + /* US-ASCII vs Latin-1 is safe (usually) */ + if (cset == US_ASCII && linedrawing_char_set == LATIN1) { + ; + } else if (cset == LATIN1 && linedrawing_char_set == US_ASCII) { + ; + } else if (cset != linedrawing_char_set) { + fix_lines = TRUE; + } + } +#endif + } + if (fix_lines) { + if (!vert_in) + vert_in = '|'; + if (!hori_in) + hori_in = '-'; } + *pvert_out = vert_in; + *phori_out = hori_in; } /* diff --git a/src/UCdomap.c b/src/UCdomap.c index a03a4b92..febd348e 100644 --- a/src/UCdomap.c +++ b/src/UCdomap.c @@ -50,6 +50,7 @@ #include <cp775_uni.h> /* DosBaltRim (cp775) */ #include <cp850_uni.h> /* DosLatin1 (cp850) */ #include <cp852_uni.h> /* DosLatin2 (cp852) */ +#include <cp857_uni.h> /* DosTurkish (cp857) */ #include <cp862_uni.h> /* DosHebrew (cp862) */ #include <cp864_uni.h> /* DosArabic (cp864) */ #include <cp866_uni.h> /* DosCyrillic (cp866) */ @@ -67,6 +68,8 @@ #include <iso08_uni.h> /* ISO 8859-8 Hebrew */ #include <iso09_uni.h> /* ISO 8859-9 (Latin 5) */ #include <iso10_uni.h> /* ISO 8859-10 */ +#include <iso13_uni.h> /* ISO 8859-13 (Latin 7) */ +#include <iso14_uni.h> /* ISO 8859-14 (Latin 8) */ #include <iso15_uni.h> /* ISO 8859-15 (Latin 9) */ #include <koi8r_uni.h> /* KOI8-R Cyrillic */ #include <mac_uni.h> /* Macintosh (8 bit) */ @@ -1574,6 +1577,9 @@ int UCGetLYhndl_byMIME(const char *value) return UCGetLYhndl_byMIME("koi8-r"); } #endif + if (!strcasecomp(value, "ANSI_X3.4-1968")) { + return US_ASCII; + } /* no more synonyms if come here... */ CTRACE((tfp, "UCGetLYhndl_byMIME: unrecognized MIME name \"%s\"\n", value)); @@ -2040,6 +2046,7 @@ static void UCcleanup_mem(void) } #endif /* LY_FIND_LEAKS */ +#ifdef EXP_CHARTRANS_AUTOSWITCH #ifdef CAN_AUTODETECT_DISPLAY_CHARSET # ifdef __EMX__ static int CpOrdinal(const unsigned long cp, const int other) @@ -2080,6 +2087,7 @@ static int CpOrdinal(const unsigned long cp, const int other) } # endif /* __EMX__ */ #endif /* CAN_AUTODETECT_DISPLAY_CHARSET */ +#endif /* EXP_CHARTRANS_AUTOSWITCH */ void UCInit(void) { @@ -2123,8 +2131,10 @@ void UCInit(void) UC_CHARSET_SETUP_iso_8859_2; /* ISO Latin 2 */ UC_CHARSET_SETUP_cp852; /* DosLatin2 (cp852) */ UC_CHARSET_SETUP_windows_1250; /* WinLatin2 (cp1250) */ + UC_CHARSET_SETUP_iso_8859_3; /* ISO Latin 3 */ UC_CHARSET_SETUP_iso_8859_4; /* ISO Latin 4 */ + UC_CHARSET_SETUP_iso_8859_13; /* ISO 8859-13 Baltic Rim */ UC_CHARSET_SETUP_cp775; /* DosBaltRim (cp775) */ UC_CHARSET_SETUP_windows_1257; /* WinBaltRim (cp1257) */ UC_CHARSET_SETUP_iso_8859_5; /* ISO 8859-5 Cyrillic */ @@ -2134,6 +2144,7 @@ void UCInit(void) UC_CHARSET_SETUP_iso_8859_6; /* ISO 8869-6 Arabic */ UC_CHARSET_SETUP_cp864; /* DosArabic (cp864) */ UC_CHARSET_SETUP_windows_1256; /* WinArabic (cp1256) */ + UC_CHARSET_SETUP_iso_8859_14; /* ISO 8859-14 Celtic */ UC_CHARSET_SETUP_iso_8859_7; /* ISO 8859-7 Greek */ UC_CHARSET_SETUP_cp737; /* DosGreek (cp737) */ UC_CHARSET_SETUP_cp869; /* DosGreek2 (cp869) */ @@ -2142,7 +2153,8 @@ void UCInit(void) UC_CHARSET_SETUP_cp862; /* DosHebrew (cp862) */ UC_CHARSET_SETUP_windows_1255; /* WinHebrew (cp1255) */ UC_CHARSET_SETUP_iso_8859_9; /* ISO 8859-9 (Latin 5) */ - UC_CHARSET_SETUP_iso_8859_10; /* ISO 8859-10 */ + UC_CHARSET_SETUP_cp857; /* DosTurkish (cp857) */ + UC_CHARSET_SETUP_iso_8859_10; /* ISO 8859-10 North European */ UC_CHARSET_SETUP_utf_8; /*** UNICODE UTF-8 */ UC_CHARSET_SETUP_mnemonic_ascii_0; /* RFC 1345 w/o Intro */ @@ -2151,6 +2163,7 @@ void UCInit(void) UC_CHARSET_SETUP_koi8_u; /* Ukrainian Cyrillic (koi8-u) */ UC_CHARSET_SETUP_ptcp154; /* Cyrillic-Asian (PT154) */ +#ifdef EXP_CHARTRANS_AUTOSWITCH #ifdef CAN_AUTODETECT_DISPLAY_CHARSET # ifdef __EMX__ { @@ -2174,6 +2187,7 @@ void UCInit(void) } # endif #endif +#endif /* * To add synonyms for any charset name check function UCGetLYhndl_byMIME in @@ -2364,21 +2378,28 @@ static char *nl_langinfo(nl_item item) */ void LYFindLocaleCharset(void) { + BOOL found = FALSE; + char *name; + CTRACE((tfp, "LYFindLocaleCharset(%d)\n", LYLocaleCharset)); - if (LYLocaleCharset) { - char *name = nl_langinfo(CODESET); + name = nl_langinfo(CODESET); - if (name != 0) { - int value = UCGetLYhndl_byMIME(name); + if (name != 0) { + int value = UCGetLYhndl_byMIME(name); - if (value >= 0) { - current_char_set = value; - } else { - CTRACE((tfp, "Cannot find a handle for MIME name \"%s\"\n", name)); - } + if (value >= 0) { + found = TRUE; + linedrawing_char_set = value; + CTRACE((tfp, "Found name \"%s\" -> %d\n", name, value)); } else { - CTRACE((tfp, "Cannot find a MIME name for locale\n")); + CTRACE((tfp, "Cannot find a handle for MIME name \"%s\"\n", name)); } + } else { + CTRACE((tfp, "Cannot find a MIME name for locale\n")); + } + + if (found && LYLocaleCharset) { + current_char_set = linedrawing_char_set; } } #endif /* EXP_LOCALE_CHARSET */ diff --git a/src/chrtrans/build-chrtrans.com b/src/chrtrans/build-chrtrans.com index 11e44c02..c4f88f59 100644 --- a/src/chrtrans/build-chrtrans.com +++ b/src/chrtrans/build-chrtrans.com @@ -97,6 +97,7 @@ $ makeuctb cp737_uni.tbl $ makeuctb cp775_uni.tbl $ makeuctb cp850_uni.tbl $ makeuctb cp852_uni.tbl +$ makeuctb cp857_uni.tbl $ makeuctb cp862_uni.tbl $ makeuctb cp864_uni.tbl $ makeuctb cp866_uni.tbl @@ -115,6 +116,8 @@ $ makeuctb iso07_uni.tbl $ makeuctb iso08_uni.tbl $ makeuctb iso09_uni.tbl $ makeuctb iso10_uni.tbl +$ makeuctb iso13_uni.tbl +$ makeuctb iso14_uni.tbl $ makeuctb iso15_uni.tbl $ makeuctb koi8r_uni.tbl $ makeuctb koi8u_uni.tbl diff --git a/src/chrtrans/cp857_uni.tbl b/src/chrtrans/cp857_uni.tbl new file mode 100644 index 00000000..bf6a6be4 --- /dev/null +++ b/src/chrtrans/cp857_uni.tbl @@ -0,0 +1,157 @@ +#The MIME name of this charset. +Mcp857 + +#Name as a Display Charset (used on Options screen). +OTurkish (cp857) + +#Codepage number +C857 + +# Name: cp857_DOSTurkish to Unicode table +# Unicode version: 2.0 +# Table version: 2.00 +# Table format: Format A +# Date: 04/24/96 +# Authors: Lori Brownell <loribr@microsoft.com> +# K.D. Chang <a-kchang@microsoft.com> +# General notes: none +# +# Format: Three tab-separated columns +# Column #1 is the cp857_DOSTurkish code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 is the Unicode name (follows a comment sign, '#') +# +# The entries are in cp857_DOSTurkish order +# +################## + +0x20-0x7f idem + +0x80 U+00c7 #LATIN CAPITAL LETTER C WITH CEDILLA +0x81 U+00fc #LATIN SMALL LETTER U WITH DIAERESIS +0x82 U+00e9 #LATIN SMALL LETTER E WITH ACUTE +0x83 U+00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX +0x84 U+00e4 #LATIN SMALL LETTER A WITH DIAERESIS +0x85 U+00e0 #LATIN SMALL LETTER A WITH GRAVE +0x86 U+00e5 #LATIN SMALL LETTER A WITH RING ABOVE +0x87 U+00e7 #LATIN SMALL LETTER C WITH CEDILLA +0x88 U+00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX +0x89 U+00eb #LATIN SMALL LETTER E WITH DIAERESIS +0x8a U+00e8 #LATIN SMALL LETTER E WITH GRAVE +0x8b U+00ef #LATIN SMALL LETTER I WITH DIAERESIS +0x8c U+00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX +0x8d U+0131 #LATIN SMALL LETTER DOTLESS I +0x8e U+00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS +0x8f U+00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE +0x90 U+00c9 #LATIN CAPITAL LETTER E WITH ACUTE +0x91 U+00e6 #LATIN SMALL LIGATURE AE +0x92 U+00c6 #LATIN CAPITAL LIGATURE AE +0x93 U+00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX +0x94 U+00f6 #LATIN SMALL LETTER O WITH DIAERESIS +0x95 U+00f2 #LATIN SMALL LETTER O WITH GRAVE +0x96 U+00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX +0x97 U+00f9 #LATIN SMALL LETTER U WITH GRAVE +0x98 U+0130 #LATIN CAPITAL LETTER I WITH DOT ABOVE +0x99 U+00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS +0x9a U+00dc #LATIN CAPITAL LETTER U WITH DIAERESIS +0x9b U+00f8 #LATIN SMALL LETTER O WITH STROKE +0x9c U+00a3 #POUND SIGN +0x9d U+00d8 #LATIN CAPITAL LETTER O WITH STROKE +0x9e U+015e #LATIN CAPITAL LETTER S WITH CEDILLA +0x9f U+015f #LATIN SMALL LETTER S WITH CEDILLA +0xa0 U+00e1 #LATIN SMALL LETTER A WITH ACUTE +0xa1 U+00ed #LATIN SMALL LETTER I WITH ACUTE +0xa2 U+00f3 #LATIN SMALL LETTER O WITH ACUTE +0xa3 U+00fa #LATIN SMALL LETTER U WITH ACUTE +0xa4 U+00f1 #LATIN SMALL LETTER N WITH TILDE +0xa5 U+00d1 #LATIN CAPITAL LETTER N WITH TILDE +0xa6 U+011e #LATIN CAPITAL LETTER G WITH BREVE +0xa7 U+011f #LATIN SMALL LETTER G WITH BREVE +0xa8 U+00bf #INVERTED QUESTION MARK +0xa9 U+00ae #REGISTERED SIGN +0xaa U+00ac #NOT SIGN +0xab U+00bd #VULGAR FRACTION ONE HALF +0xac U+00bc #VULGAR FRACTION ONE QUARTER +0xad U+00a1 #INVERTED EXCLAMATION MARK +0xae U+00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xaf U+00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xb0 U+2591 #LIGHT SHADE +0xb1 U+2592 #MEDIUM SHADE +0xb2 U+2593 #DARK SHADE +0xb3 U+2502 #BOX DRAWINGS LIGHT VERTICAL +0xb4 U+2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT +0xb5 U+00c1 #LATIN CAPITAL LETTER A WITH ACUTE +0xb6 U+00c2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xb7 U+00c0 #LATIN CAPITAL LETTER A WITH GRAVE +0xb8 U+00a9 #COPYRIGHT SIGN +0xb9 U+2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT +0xba U+2551 #BOX DRAWINGS DOUBLE VERTICAL +0xbb U+2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT +0xbc U+255d #BOX DRAWINGS DOUBLE UP AND LEFT +0xbd U+00a2 #CENT SIGN +0xbe U+00a5 #YEN SIGN +0xbf U+2510 #BOX DRAWINGS LIGHT DOWN AND LEFT +0xc0 U+2514 #BOX DRAWINGS LIGHT UP AND RIGHT +0xc1 U+2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL +0xc2 U+252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +0xc3 U+251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT +0xc4 U+2500 #BOX DRAWINGS LIGHT HORIZONTAL +0xc5 U+253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +0xc6 U+00e3 #LATIN SMALL LETTER A WITH TILDE +0xc7 U+00c3 #LATIN CAPITAL LETTER A WITH TILDE +0xc8 U+255a #BOX DRAWINGS DOUBLE UP AND RIGHT +0xc9 U+2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT +0xca U+2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL +0xcb U+2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +0xcc U+2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +0xcd U+2550 #BOX DRAWINGS DOUBLE HORIZONTAL +0xce U+256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +0xcf U+00a4 #CURRENCY SIGN +0xd0 U+00ba #MASCULINE ORDINAL INDICATOR +0xd1 U+00aa #FEMININE ORDINAL INDICATOR +0xd2 U+00ca #LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xd3 U+00cb #LATIN CAPITAL LETTER E WITH DIAERESIS +0xd4 U+00c8 #LATIN CAPITAL LETTER E WITH GRAVE +0xd5 #UNDEFINED +0xd6 U+00cd #LATIN CAPITAL LETTER I WITH ACUTE +0xd7 U+00ce #LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xd8 U+00cf #LATIN CAPITAL LETTER I WITH DIAERESIS +0xd9 U+2518 #BOX DRAWINGS LIGHT UP AND LEFT +0xda U+250c #BOX DRAWINGS LIGHT DOWN AND RIGHT +0xdb U+2588 #FULL BLOCK +0xdc U+2584 #LOWER HALF BLOCK +0xdd U+00a6 #BROKEN BAR +0xde U+00cc #LATIN CAPITAL LETTER I WITH GRAVE +0xdf U+2580 #UPPER HALF BLOCK +0xe0 U+00d3 #LATIN CAPITAL LETTER O WITH ACUTE +0xe1 U+00df #LATIN SMALL LETTER SHARP S +0xe2 U+00d4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xe3 U+00d2 #LATIN CAPITAL LETTER O WITH GRAVE +0xe4 U+00f5 #LATIN SMALL LETTER O WITH TILDE +0xe5 U+00d5 #LATIN CAPITAL LETTER O WITH TILDE +0xe6 U+00b5 #MICRO SIGN +0xe7 #UNDEFINED +0xe8 U+00d7 #MULTIPLICATION SIGN +0xe9 U+00da #LATIN CAPITAL LETTER U WITH ACUTE +0xea U+00db #LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xeb U+00d9 #LATIN CAPITAL LETTER U WITH GRAVE +0xec U+00ec #LATIN SMALL LETTER I WITH GRAVE +0xed U+00ff #LATIN SMALL LETTER Y WITH DIAERESIS +0xee U+00af #MACRON +0xef U+00b4 #ACUTE ACCENT +0xf0 U+00ad #SOFT HYPHEN +0xf1 U+00b1 #PLUS-MINUS SIGN +0xf2 #UNDEFINED +0xf3 U+00be #VULGAR FRACTION THREE QUARTERS +0xf4 U+00b6 #PILCROW SIGN +0xf5 U+00a7 #SECTION SIGN +0xf6 U+00f7 #DIVISION SIGN +0xf7 U+00b8 #CEDILLA +0xf8 U+00b0 #DEGREE SIGN +0xf9 U+00a8 #DIAERESIS +0xfa U+00b7 #MIDDLE DOT +0xfb U+00b9 #SUPERSCRIPT ONE +0xfc U+00b3 #SUPERSCRIPT THREE +0xfd U+00b2 #SUPERSCRIPT TWO +0xfe U+25a0 #BLACK SQUARE +0xff U+00a0 #NO-BREAK SPACE diff --git a/src/chrtrans/iso10_uni.tbl b/src/chrtrans/iso10_uni.tbl index 28c3dd3b..4c6605c8 100644 --- a/src/chrtrans/iso10_uni.tbl +++ b/src/chrtrans/iso10_uni.tbl @@ -10,114 +10,144 @@ D0 Miso-8859-10 #Name as a Display Charset (used on Options screen) -OISO-8859-10 +ONorth European (ISO-8859-10) + +# Name: ISO 8859-10 Latin 6 (1998) to Unicode +# Date: 2005-12-15 +# Authors: Thomas E Dickey from +# http://czyborra.com/charsets/iso8859.html +# (ISO 8859 Alphabet Soup) 0x20-0x7e idem -#0x7f U+2302 -# -#0x00 U+fffd -#0x01 U+263A -#0x02 U+263B -#0x03 U+2665 -#0x04 U+2666 -#0x05 U+2663 -#0x06 U+2660 -#0x07 U+2022 -#0x08 U+25D8 -#0x09 U+25CB -#0x0A U+25D9 -#0x0B U+2642 -#0x0C U+2640 -#0x0D U+266A -#0x0E U+266B -#0x0E U+266C -#0x0F U+263C -#0x10 U+25B6 -#0x10 U+25BA -#0x11 U+25C0 -#0x11 U+25C4 -#0x12 U+2195 -#0x13 U+203C -#0x14 U+00B6 -#0x15 U+00A7 -#0x16 U+25AC -#0x17 U+21A8 -#0x18 U+2191 -#0x19 U+2193 -#0x1A U+2192 -#0x1B U+2190 -#0x1C U+221F -#0x1C U+2319 -#0x1D U+2194 -#0x1E U+25B2 -#0x1F U+25BC -# -0xa0 U+00a0 -0xa1 U+0104 -0xa2 U+0112 -0xa3 U+0122 -0xa4 U+012a -0xa5 U+0128 -0xa6 U+0136 -0xa7 U+013b -0xa8 U+0143 -0xa9 U+0156 -0xaa U+0160 -0xab U+0166 -0xac U+017d -0xad U+00ad -0xae U+0138 -0xaf U+014a -0xb0 U+0111 -0xb1 U+0105 -0xb2 U+0113 -0xb3 U+0123 -0xb4 U+012b -0xb5 U+0129 -0xb6 U+0137 -0xb7 U+013c -0xb8 U+0144 -0xb9 U+0157 -0xba U+0161 -0xbb U+0167 -0xbc U+017e -0xbd U+2015 # HORIZONTAL BAR -0xbe U+00df -0xbf U+014b -0xc0 U+0100 + +0xa0 U+00a0 # NO-BREAK SPACE +0xa1 U+0104 # LATIN CAPITAL LETTER A WITH OGONEK +0xa2 U+0112 # LATIN CAPITAL LETTER E WITH MACRON +0xa3 U+0122 # LATIN CAPITAL LETTER G WITH CEDILLA +0xa4 U+012a # LATIN CAPITAL LETTER I WITH MACRON +0xa5 U+0128 # LATIN CAPITAL LETTER I WITH TILDE +0xa6 U+0136 # LATIN CAPITAL LETTER K WITH CEDILLA +0xa7 U+00a7 # SECTION SIGN +0xa8 U+013b # LATIN CAPITAL LETTER L WITH CEDILLA +0xa9 U+0110 # LATIN CAPITAL LETTER D WITH STROKE +0xaa U+0160 # LATIN CAPITAL LETTER S WITH CARON +0xab U+0166 # LATIN CAPITAL LETTER T WITH STROKE +0xac U+017d # LATIN CAPITAL LETTER Z WITH CARON +0xad U+00ad # SOFT HYPHEN +0xae U+016a # LATIN CAPITAL LETTER U WITH MACRON +0xaf U+014a # LATIN CAPITAL LETTER ENG +0xb0 U+00b0 # DEGREE SIGN +0xb1 U+0105 # LATIN SMALL LETTER A WITH OGONEK +0xb2 U+0113 # LATIN SMALL LETTER E WITH MACRON +0xb3 U+0123 # LATIN SMALL LETTER G WITH CEDILLA +0xb4 U+012b # LATIN SMALL LETTER I WITH MACRON +0xb5 U+0129 # LATIN SMALL LETTER I WITH TILDE +0xb6 U+0137 # LATIN SMALL LETTER K WITH CEDILLA +0xb7 U+00b7 # MIDDLE DOT +0xb8 U+013c # LATIN SMALL LETTER L WITH CEDILLA +0xb9 U+0111 # LATIN SMALL LETTER D WITH STROKE +0xba U+0161 # LATIN SMALL LETTER S WITH CARON +0xbb U+0167 # LATIN SMALL LETTER T WITH STROKE +0xbc U+017e # LATIN SMALL LETTER Z WITH CARON +0xbd U+2015 # HORIZONTAL BAR +0xbe U+016b # LATIN SMALL LETTER U WITH MACRON +0xbf U+014b # LATIN SMALL LETTER ENG +0xc0 U+0100 # LATIN CAPITAL LETTER A WITH MACRON + 0xc1-0xc6 idem -0xc7 U+012e -0xc8 U+010c -0xc9 U+00c9 -0xca U+0118 -0xcb U+00cb -0xcc U+0116 + +#0xc1 U+00c1 # LATIN CAPITAL LETTER A WITH ACUTE +#0xc2 U+00c2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +#0xc3 U+00c3 # LATIN CAPITAL LETTER A WITH TILDE +#0xc4 U+00c4 # LATIN CAPITAL LETTER A WITH DIAERESIS +#0xc5 U+00c5 # LATIN CAPITAL LETTER A WITH RING ABOVE +#0xc6 U+00c6 # LATIN CAPITAL LETTER AE + +0xc7 U+012e # LATIN CAPITAL LETTER I WITH OGONEK +0xc8 U+010c # LATIN CAPITAL LETTER C WITH CARON +0xc9 U+00c9 # LATIN CAPITAL LETTER E WITH ACUTE +0xca U+0118 # LATIN CAPITAL LETTER E WITH OGONEK +0xcb U+00cb # LATIN CAPITAL LETTER E WITH DIAERESIS +0xcc U+0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE + 0xcd-0xd0 idem -0xd1 U+0145 -0xd2 U+014c + +#0xcd U+00cd # LATIN CAPITAL LETTER I WITH ACUTE +#0xce U+00ce # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +#0xcf U+00cf # LATIN CAPITAL LETTER I WITH DIAERESIS +#0xd0 U+00d0 # LATIN CAPITAL LETTER ETH + +0xd1 U+0145 # LATIN CAPITAL LETTER N WITH CEDILLA +0xd2 U+014c # LATIN CAPITAL LETTER O WITH MACRON + 0xd3-0xd6 idem -0xd7 U+0168 -0xd8 U+00d8 -0xd9 U+0172 + +#0xd3 U+00d3 # LATIN CAPITAL LETTER O WITH ACUTE +#0xd4 U+00d4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +#0xd5 U+00d5 # LATIN CAPITAL LETTER O WITH TILDE +#0xd6 U+00d6 # LATIN CAPITAL LETTER O WITH DIAERESIS + +0xd7 U+0168 # LATIN CAPITAL LETTER U WITH TILDE +0xd8 U+00d8 # LATIN CAPITAL LETTER O WITH STROKE +0xd9 U+0172 # LATIN CAPITAL LETTER U WITH OGONEK + 0xda-0xde idem -0xdf U+016a -0xe0 U+0101 + +#0xda U+00da # LATIN CAPITAL LETTER U WITH ACUTE +#0xdb U+00db # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +#0xdc U+00dc # LATIN CAPITAL LETTER U WITH DIAERESIS +#0xdd U+00dd # LATIN CAPITAL LETTER Y WITH ACUTE +#0xde U+00de # LATIN CAPITAL LETTER THORN + +0xdF U+00df # LATIN SMALL LETTER SHARP S +0xe0 U+0101 # LATIN SMALL LETTER A WITH MACRON + 0xe1-0xe6 idem -0xe7 U+012f -0xe8 U+010d -0xe9 U+00e9 -0xea U+0119 -0xeb U+00eb -0xec U+0117 + +#0xe1 U+00e1 # LATIN SMALL LETTER A WITH ACUTE +#0xe2 U+00e2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +#0xe3 U+00e3 # LATIN SMALL LETTER A WITH TILDE +#0xe4 U+00e4 # LATIN SMALL LETTER A WITH DIAERESIS +#0xe5 U+00e5 # LATIN SMALL LETTER A WITH RING ABOVE +#0xe6 U+00e6 # LATIN SMALL LETTER AE + +0xe7 U+012f # LATIN SMALL LETTER I WITH OGONEK +0xe8 U+010d # LATIN SMALL LETTER C WITH CARON +0xe9 U+00e9 # LATIN SMALL LETTER E WITH ACUTE +0xea U+0119 # LATIN SMALL LETTER E WITH OGONEK +0xeb U+00eb # LATIN SMALL LETTER E WITH DIAERESIS +0xec U+0117 # LATIN SMALL LETTER E WITH DOT ABOVE + 0xed-0xf0 idem -0xf1 U+0146 -0xf2 U+014d + +#0xed U+00ed # LATIN SMALL LETTER I WITH ACUTE +#0xee U+00ee # LATIN SMALL LETTER I WITH CIRCUMFLEX +#0xef U+00ef # LATIN SMALL LETTER I WITH DIAERESIS +#0xf0 U+00F0 # LATIN SMALL LETTER ETH + +0xf1 U+0146 # LATIN SMALL LETTER N WITH CEDILLA +0xf2 U+014d # LATIN SMALL LETTER O WITH MACRON + 0xf3-0xf6 idem -0xf7 U+0169 -0xf8 U+00f8 -0xf9 U+0173 + +#0xf3 U+00f3 # LATIN SMALL LETTER O WITH ACUTE +#0xf4 U+00f4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +#0xf5 U+00f5 # LATIN SMALL LETTER O WITH TILDE +#0xf6 U+00f6 # LATIN SMALL LETTER O WITH DIAERESIS + +0xf7 U+0169 # LATIN SMALL LETTER U WITH TILDE +0xf8 U+00f8 # LATIN SMALL LETTER O WITH STROKE +0xf9 U+0173 # LATIN SMALL LETTER U WITH OGONEK + 0xfa-0xfe idem -0xff U+016b + +#0xfa U+00fa # LATIN SMALL LETTER U WITH ACUTE +#0xfb U+00fb # LATIN SMALL LETTER U WITH CIRCUMFLEX +#0xfc U+00fc # LATIN SMALL LETTER U WITH DIAERESIS +#0xfd U+00fd # LATIN SMALL LETTER Y WITH ACUTE +#0xfe U+00fe # LATIN SMALL LETTER THORN + +0xfF U+0138 # LATIN SMALL LETTER KRA # TRADE MARK SIGN: U+2122:(TM) diff --git a/src/chrtrans/iso13_uni.tbl b/src/chrtrans/iso13_uni.tbl new file mode 100644 index 00000000..e51ea23e --- /dev/null +++ b/src/chrtrans/iso13_uni.tbl @@ -0,0 +1,114 @@ +# The MIME name of this charset. +Miso-8859-13 + +# Name as a Display Charset (used on Options screen) +OBaltic Rim (ISO-8859-13) + +# This is not the default font! +D0 + +# +# Name: ISO 8859-13 Latin 7 (1998) to Unicode +# Date: 2005-12-15 +# Authors: Thomas E Dickey from +# http://czyborra.com/charsets/iso8859.html +# (ISO 8859 Alphabet Soup) + +0x20-0x7E idem # ASCII + +0xA0 U+00A0 # NO-BREAK SPACE +0xA1 U+201D # RIGHT DOUBLE QUOTATION MARK +0xA2 U+00A2 # CENT SIGN +0xA3 U+00A3 # POUND SIGN +0xA4 U+00A4 # CURRENCY SIGN +0xA5 U+201E # DOUBLE LOW-9 QUOTATION MARK +0xA6 U+00A6 # BROKEN BAR +0xA7 U+00A7 # SECTION SIGN +0xA8 U+00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xA9 U+00A9 # COPYRIGHT SIGN +0xAA U+0156 # LATIN CAPITAL LETTER R WITH CEDILLA +0xAB U+00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC U+00AC # NOT SIGN +0xAD U+00AD # SOFT HYPHEN +0xAE U+00AE # REGISTERED SIGN +0xAF U+00C6 # LATIN CAPITAL LETTER AE +0xB0 U+00B0 # DEGREE SIGN +0xB1 U+00B1 # PLUS-MINUS SIGN +0xB2 U+00B2 # SUPERSCRIPT TWO +0xB3 U+00B3 # SUPERSCRIPT THREE +0xB4 U+201C # LEFT DOUBLE QUOTATION MARK +0xB5 U+00B5 # MICRO SIGN +0xB6 U+00B6 # PILCROW SIGN +0xB7 U+00B7 # MIDDLE DOT +0xB8 U+00F8 # LATIN SMALL LETTER O WITH STROKE +0xB9 U+00B9 # SUPERSCRIPT ONE +0xBA U+0157 # LATIN SMALL LETTER R WITH CEDILLA +0xBB U+00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC U+00BC # VULGAR FRACTION ONE QUARTER +0xBD U+00BD # VULGAR FRACTION ONE HALF +0xBE U+00BE # VULGAR FRACTION THREE QUARTERS +0xBF U+00E6 # LATIN SMALL LETTER AE +0xC0 U+0104 # LATIN CAPITAL LETTER A WITH OGONEK +0xC1 U+012E # LATIN CAPITAL LETTER I WITH OGONEK +0xC2 U+0100 # LATIN CAPITAL LETTER A WITH MACRON +0xC3 U+0106 # LATIN CAPITAL LETTER C WITH ACUTE +0xC4 U+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 U+00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 U+0118 # LATIN CAPITAL LETTER E WITH OGONEK +0xC7 U+0112 # LATIN CAPITAL LETTER E WITH MACRON +0xC8 U+010C # LATIN CAPITAL LETTER C WITH CARON +0xC9 U+00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA U+0179 # LATIN CAPITAL LETTER Z WITH ACUTE +0xCB U+0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE +0xCC U+0122 # LATIN CAPITAL LETTER G WITH CEDILLA +0xCD U+0136 # LATIN CAPITAL LETTER K WITH CEDILLA +0xCE U+012A # LATIN CAPITAL LETTER I WITH MACRON +0xCF U+013B # LATIN CAPITAL LETTER L WITH CEDILLA +0xD0 U+0160 # LATIN CAPITAL LETTER S WITH CARON +0xD1 U+0143 # LATIN CAPITAL LETTER N WITH ACUTE +0xD2 U+0145 # LATIN CAPITAL LETTER N WITH CEDILLA +0xD3 U+00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 U+014C # LATIN CAPITAL LETTER O WITH MACRON +0xD5 U+00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xD6 U+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 U+00D7 # MULTIPLICATION SIGN +0xD8 U+0172 # LATIN CAPITAL LETTER U WITH OGONEK +0xD9 U+0141 # LATIN CAPITAL LETTER L WITH STROKE +0xDA U+015A # LATIN CAPITAL LETTER S WITH ACUTE +0xDB U+016A # LATIN CAPITAL LETTER U WITH MACRON +0xDC U+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD U+017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE +0xDE U+017D # LATIN CAPITAL LETTER Z WITH CARON +0xDF U+00DF # LATIN SMALL LETTER SHARP S +0xE0 U+0105 # LATIN SMALL LETTER A WITH OGONEK +0xE1 U+012F # LATIN SMALL LETTER I WITH OGONEK +0xE2 U+0101 # LATIN SMALL LETTER A WITH MACRON +0xE3 U+0107 # LATIN SMALL LETTER C WITH ACUTE +0xE4 U+00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 U+00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0xE6 U+0119 # LATIN SMALL LETTER E WITH OGONEK +0xE7 U+0113 # LATIN SMALL LETTER E WITH MACRON +0xE8 U+010D # LATIN SMALL LETTER C WITH CARON +0xE9 U+00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA U+017A # LATIN SMALL LETTER Z WITH ACUTE +0xEB U+0117 # LATIN SMALL LETTER E WITH DOT ABOVE +0xEC U+0123 # LATIN SMALL LETTER G WITH CEDILLA +0xED U+0137 # LATIN SMALL LETTER K WITH CEDILLA +0xEE U+012B # LATIN SMALL LETTER I WITH MACRON +0xEF U+013C # LATIN SMALL LETTER L WITH CEDILLA +0xF0 U+0161 # LATIN SMALL LETTER S WITH CARON +0xF1 U+0144 # LATIN SMALL LETTER N WITH ACUTE +0xF2 U+0146 # LATIN SMALL LETTER N WITH CEDILLA +0xF3 U+00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 U+014D # LATIN SMALL LETTER O WITH MACRON +0xF5 U+00F5 # LATIN SMALL LETTER O WITH TILDE +0xF6 U+00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 U+00F7 # DIVISION SIGN +0xF8 U+0173 # LATIN SMALL LETTER U WITH OGONEK +0xF9 U+0142 # LATIN SMALL LETTER L WITH STROKE +0xFA U+015B # LATIN SMALL LETTER S WITH ACUTE +0xFB U+016B # LATIN SMALL LETTER U WITH MACRON +0xFC U+00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD U+017C # LATIN SMALL LETTER Z WITH DOT ABOVE +0xFE U+017E # LATIN SMALL LETTER Z WITH CARON +0xFF U+2019 # RIGHT SINGLE QUOTATION MARK diff --git a/src/chrtrans/iso14_uni.tbl b/src/chrtrans/iso14_uni.tbl new file mode 100644 index 00000000..630a9466 --- /dev/null +++ b/src/chrtrans/iso14_uni.tbl @@ -0,0 +1,114 @@ +# The MIME name of this charset. +Miso-8859-14 + +# Name as a Display Charset (used on Options screen) +OCeltic (ISO-8859-14) + +# This is not the default font! +D0 + +# +# Name: ISO 8859-13 Latin 8 (1998) to Unicode +# Date: 2005-12-15 +# Authors: Thomas E Dickey from +# http://czyborra.com/charsets/iso8859.html +# (ISO 8859 Alphabet Soup) + +0x20-0x7E idem # ASCII + +0xA0 U+00A0 # NO-BREAK SPACE +0xA1 U+1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE +0xA2 U+1E03 # LATIN SMALL LETTER B WITH DOT ABOVE +0xA3 U+00A3 # POUND SIGN +0xA4 U+010A # LATIN CAPITAL LETTER C WITH DOT ABOVE +0xA5 U+010B # LATIN SMALL LETTER C WITH DOT ABOVE +0xA6 U+1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE +0xA7 U+00A7 # SECTION SIGN +0xA8 U+1E80 # LATIN CAPITAL LETTER W WITH GRAVE +0xA9 U+00A9 # COPYRIGHT SIGN +0xAA U+1E82 # LATIN CAPITAL LETTER W WITH ACUTE +0xAB U+1E0B # LATIN SMALL LETTER D WITH DOT ABOVE +0xAC U+1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE +0xAD U+00AD # SOFT HYPHEN +0xAE U+00AE # REGISTERED SIGN +0xAF U+0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +0xB0 U+1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE +0xB1 U+1E1F # LATIN SMALL LETTER F WITH DOT ABOVE +0xB2 U+0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE +0xB3 U+0121 # LATIN SMALL LETTER G WITH DOT ABOVE +0xB4 U+1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE +0xB5 U+1E41 # LATIN SMALL LETTER M WITH DOT ABOVE +0xB6 U+00B6 # PILCROW SIGN +0xB7 U+1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE +0xB8 U+1E81 # LATIN SMALL LETTER W WITH GRAVE +0xB9 U+1E57 # LATIN SMALL LETTER P WITH DOT ABOVE +0xBA U+1E83 # LATIN SMALL LETTER W WITH ACUTE +0xBB U+1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE +0xBC U+1EF3 # LATIN SMALL LETTER Y WITH GRAVE +0xBD U+1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS +0xBE U+1E85 # LATIN SMALL LETTER W WITH DIAERESIS +0xBF U+1E61 # LATIN SMALL LETTER S WITH DOT ABOVE +0xC0 U+00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xC1 U+00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 U+00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 U+00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xC4 U+00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 U+00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 U+00C6 # LATIN CAPITAL LETTER AE +0xC7 U+00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 U+00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xC9 U+00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA U+00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB U+00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC U+00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xCD U+00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE U+00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF U+00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xD0 U+0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0xD1 U+00D1 # LATIN CAPITAL LETTER N WITH TILDE +0xD2 U+00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xD3 U+00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 U+00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 U+00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xD6 U+00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 U+1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE +0xD8 U+00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xD9 U+00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xDA U+00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB U+00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC U+00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD U+00DD # LATIN CAPITAL LETTER Y WITH ACUTE +0xDE U+0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0xDF U+00DF # LATIN SMALL LETTER SHARP S +0xE0 U+00E0 # LATIN SMALL LETTER A WITH GRAVE +0xE1 U+00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 U+00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 U+00E3 # LATIN SMALL LETTER A WITH TILDE +0xE4 U+00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 U+00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0xE6 U+00E6 # LATIN SMALL LETTER AE +0xE7 U+00E7 # LATIN SMALL LETTER C WITH CEDILLA +0xE8 U+00E8 # LATIN SMALL LETTER E WITH GRAVE +0xE9 U+00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA U+00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB U+00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC U+00EC # LATIN SMALL LETTER I WITH GRAVE +0xED U+00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE U+00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF U+00EF # LATIN SMALL LETTER I WITH DIAERESIS +0xF0 U+0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX +0xF1 U+00F1 # LATIN SMALL LETTER N WITH TILDE +0xF2 U+00F2 # LATIN SMALL LETTER O WITH GRAVE +0xF3 U+00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 U+00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 U+00F5 # LATIN SMALL LETTER O WITH TILDE +0xF6 U+00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 U+1E6B # LATIN SMALL LETTER T WITH DOT ABOVE +0xF8 U+00F8 # LATIN SMALL LETTER O WITH STROKE +0xF9 U+00F9 # LATIN SMALL LETTER U WITH GRAVE +0xFA U+00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB U+00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC U+00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD U+00FD # LATIN SMALL LETTER Y WITH ACUTE +0xFE U+0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX +0xFF U+00FF # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/src/chrtrans/make-msc.bat b/src/chrtrans/make-msc.bat index 7d7ca0f7..58e00cee 100644 --- a/src/chrtrans/make-msc.bat +++ b/src/chrtrans/make-msc.bat @@ -17,6 +17,7 @@ makeuctb cp737_uni.tbl makeuctb cp775_uni.tbl makeuctb cp850_uni.tbl makeuctb cp852_uni.tbl +makeuctb cp857_uni.tbl makeuctb cp862_uni.tbl makeuctb cp864_uni.tbl makeuctb cp866_uni.tbl @@ -35,6 +36,8 @@ makeuctb iso07_uni.tbl makeuctb iso08_uni.tbl makeuctb iso09_uni.tbl makeuctb iso10_uni.tbl +makeuctb iso13_uni.tbl +makeuctb iso14_uni.tbl makeuctb iso15_uni.tbl makeuctb koi8r_uni.tbl makeuctb koi8u_uni.tbl diff --git a/src/chrtrans/makefile.dos b/src/chrtrans/makefile.dos index 975561d9..07c141f4 100644 --- a/src/chrtrans/makefile.dos +++ b/src/chrtrans/makefile.dos @@ -38,6 +38,7 @@ TABLES= \ cp775_uni.h \ cp850_uni.h \ cp852_uni.h \ + cp857_uni.h \ cp862_uni.h \ cp864_uni.h \ cp866_uni.h \ @@ -56,6 +57,8 @@ TABLES= \ iso08_uni.h \ iso09_uni.h \ iso10_uni.h \ + iso13_uni.h \ + iso14_uni.h \ iso15_uni.h \ koi8r_uni.h \ koi8u_uni.h \ @@ -91,6 +94,7 @@ cp737_uni.h: cp737_uni.tbl makeuctb.exe cp775_uni.h: cp775_uni.tbl makeuctb.exe cp850_uni.h: cp850_uni.tbl makeuctb.exe cp852_uni.h: cp852_uni.tbl makeuctb.exe +cp857_uni.h: cp857_uni.tbl makeuctb.exe cp862_uni.h: cp862_uni.tbl makeuctb.exe cp864_uni.h: cp864_uni.tbl makeuctb.exe cp866_uni.h: cp866_uni.tbl makeuctb.exe @@ -109,6 +113,8 @@ iso07_uni.h: iso07_uni.tbl makeuctb.exe iso08_uni.h: iso08_uni.tbl makeuctb.exe iso09_uni.h: iso09_uni.tbl makeuctb.exe iso10_uni.h: iso10_uni.tbl makeuctb.exe +iso13_uni.h: iso13_uni.tbl makeuctb.exe +iso14_uni.h: iso14_uni.tbl makeuctb.exe iso15_uni.h: iso15_uni.tbl makeuctb.exe koi8r_uni.h: koi8r_uni.tbl makeuctb.exe koi8u_uni.h: koi8u_uni.tbl makeuctb.exe diff --git a/src/chrtrans/makefile.in b/src/chrtrans/makefile.in index 67ed495b..166e69db 100644 --- a/src/chrtrans/makefile.in +++ b/src/chrtrans/makefile.in @@ -74,6 +74,7 @@ TABLES= \ cp775_uni.h \ cp850_uni.h \ cp852_uni.h \ + cp857_uni.h \ cp862_uni.h \ cp864_uni.h \ cp866_uni.h \ @@ -92,6 +93,8 @@ TABLES= \ iso08_uni.h \ iso09_uni.h \ iso10_uni.h \ + iso13_uni.h \ + iso14_uni.h \ iso15_uni.h \ koi8r_uni.h \ koi8u_uni.h \ @@ -141,6 +144,7 @@ cp737_uni.h: $(srcdir)/cp737_uni.tbl $(MAKEUCTB) cp775_uni.h: $(srcdir)/cp775_uni.tbl $(MAKEUCTB) cp850_uni.h: $(srcdir)/cp850_uni.tbl $(MAKEUCTB) cp852_uni.h: $(srcdir)/cp852_uni.tbl $(MAKEUCTB) +cp857_uni.h: $(srcdir)/cp857_uni.tbl $(MAKEUCTB) cp862_uni.h: $(srcdir)/cp862_uni.tbl $(MAKEUCTB) cp864_uni.h: $(srcdir)/cp864_uni.tbl $(MAKEUCTB) cp866_uni.h: $(srcdir)/cp866_uni.tbl $(MAKEUCTB) @@ -159,6 +163,8 @@ iso07_uni.h: $(srcdir)/iso07_uni.tbl $(MAKEUCTB) iso08_uni.h: $(srcdir)/iso08_uni.tbl $(MAKEUCTB) iso09_uni.h: $(srcdir)/iso09_uni.tbl $(MAKEUCTB) iso10_uni.h: $(srcdir)/iso10_uni.tbl $(MAKEUCTB) +iso13_uni.h: $(srcdir)/iso13_uni.tbl $(MAKEUCTB) +iso14_uni.h: $(srcdir)/iso14_uni.tbl $(MAKEUCTB) iso15_uni.h: $(srcdir)/iso15_uni.tbl $(MAKEUCTB) koi8r_uni.h: $(srcdir)/koi8r_uni.tbl $(MAKEUCTB) koi8u_uni.h: $(srcdir)/koi8u_uni.tbl $(MAKEUCTB) diff --git a/src/chrtrans/makefile.msc b/src/chrtrans/makefile.msc index 228af43e..63a19dd8 100644 --- a/src/chrtrans/makefile.msc +++ b/src/chrtrans/makefile.msc @@ -36,6 +36,7 @@ TABLES= \ cp775_uni.h \ cp850_uni.h \ cp852_uni.h \ + cp857_uni.h \ cp862_uni.h \ cp864_uni.h \ cp866_uni.h \ @@ -54,6 +55,8 @@ TABLES= \ iso08_uni.h \ iso09_uni.h \ iso10_uni.h \ + iso13_uni.h \ + iso14_uni.h \ iso15_uni.h \ koi8r_uni.h \ koi8u_uni.h \ @@ -91,6 +94,7 @@ cp737_uni.h: cp737_uni.tbl makeuctb.exe cp775_uni.h: cp775_uni.tbl makeuctb.exe cp850_uni.h: cp850_uni.tbl makeuctb.exe cp852_uni.h: cp852_uni.tbl makeuctb.exe +cp857_uni.h: cp857_uni.tbl makeuctb.exe cp862_uni.h: cp862_uni.tbl makeuctb.exe cp864_uni.h: cp864_uni.tbl makeuctb.exe cp866_uni.h: cp866_uni.tbl makeuctb.exe @@ -109,6 +113,8 @@ iso07_uni.h: iso07_uni.tbl makeuctb.exe iso08_uni.h: iso08_uni.tbl makeuctb.exe iso09_uni.h: iso09_uni.tbl makeuctb.exe iso10_uni.h: iso10_uni.tbl makeuctb.exe +iso13_uni.h: iso13_uni.tbl makeuctb.exe +iso14_uni.h: iso14_uni.tbl makeuctb.exe iso15_uni.h: iso15_uni.tbl makeuctb.exe koi8r_uni.h: koi8r_uni.tbl makeuctb.exe koi8u_uni.h: koi8u_uni.tbl makeuctb.exe diff --git a/src/chrtrans/makew32.bat b/src/chrtrans/makew32.bat index e03e1743..d80663a1 100644 --- a/src/chrtrans/makew32.bat +++ b/src/chrtrans/makew32.bat @@ -22,6 +22,7 @@ makeuctb cp737_uni.tbl makeuctb cp775_uni.tbl makeuctb cp850_uni.tbl makeuctb cp852_uni.tbl +makeuctb cp857_uni.tbl makeuctb cp862_uni.tbl makeuctb cp864_uni.tbl makeuctb cp866_uni.tbl @@ -40,6 +41,8 @@ makeuctb iso07_uni.tbl makeuctb iso08_uni.tbl makeuctb iso09_uni.tbl makeuctb iso10_uni.tbl +makeuctb iso13_uni.tbl +makeuctb iso14_uni.tbl makeuctb iso15_uni.tbl makeuctb koi8r_uni.tbl makeuctb koi8u_uni.tbl diff --git a/src/chrtrans/pt154_uni.tbl b/src/chrtrans/pt154_uni.tbl index a15c22e8..0bacb527 100644 --- a/src/chrtrans/pt154_uni.tbl +++ b/src/chrtrans/pt154_uni.tbl @@ -1,4 +1,4 @@ -Mptcp154 +Mptcp154 # OCyrillic-Asian (PT154) # @@ -12,163 +12,163 @@ C1540 # CP154 # Cyrillic-Asian # -# Suitability for use in MIME text: -# Yes +# Suitability for use in MIME text: +# Yes +# +# ISO 10646 equivalency table: +# Format: Three tab-separated columns +# Column #1 is the Paratype CP154 code (in hex) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 is the Unicode name (follows a comment sign, '#') +# +# The entries are in Paratype CP154 order # -# ISO 10646 equivalency table: -# Format: Three tab-separated columns -# Column #1 is the Paratype CP154 code (in hex) -# Column #2 is the Unicode (in hex as 0xXXXX) -# Column #3 is the Unicode name (follows a comment sign, '#') -# -# The entries are in Paratype CP154 order -# ##### 0x20-0x7e idem # -0x80 U+0496 # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER -0x81 U+0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE -0x82 U+04EE # CYRILLIC CAPITAL LETTER U WITH MACRON -0x83 U+0493 # CYRILLIC SMALL LETTER GHE WITH STROKE -0x84 U+201E # DOUBLE LOW-9 QUOTATION MARK -0x85 U+2026 # HORIZONTAL ELLIPSIS -0x86 U+04B6 # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER -0x87 U+04AE # CYRILLIC CAPITAL LETTER STRAIGHT U -0x88 U+04B2 # CYRILLIC CAPITAL LETTER HA WITH DESCENDER -0x89 U+04AF # CYRILLIC SMALL LETTER STRAIGHT U -0x8a U+04A0 # CYRILLIC CAPITAL LETTER BASHKIR KA -0x8b U+04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON -0x8c U+04A2 # CYRILLIC CAPITAL LETTER EN WITH DESCENDER -0x8d U+049A # CYRILLIC CAPITAL LETTER KA WITH DESCENDER -0x8e U+04BA # CYRILLIC CAPITAL LETTER SHHA -0x8f U+04B8 # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE -0x90 U+0497 # CYRILLIC SMALL LETTER ZHE WITH DESCENDER -0x91 U+2018 # LEFT SINGLE QUOTATION MARK -0x92 U+2019 # RIGHT SINGLE QUOTATION MARK -0x93 U+201C # LEFT DOUBLE QUOTATION MARK -0x94 U+201D # RIGHT DOUBLE QUOTATION MARK -0x95 U+2022 # BULLET -0x96 U+2013 # EN DASH -0x97 U+2014 # EM DASH -0x98 U+04B3 # CYRILLIC SMALL LETTER HA WITH DESCENDER -0x99 U+04B7 # CYRILLIC SMALL LETTER CHE WITH DESCENDER -0x9a U+04A1 # CYRILLIC SMALL LETTER BASHKIR KA -0x9b U+04E3 # CYRILLIC SMALL LETTER I WITH MACRON -0x9c U+04A3 # CYRILLIC SMALL LETTER EN WITH DESCENDER -0x9d U+049B # CYRILLIC SMALL LETTER KA WITH DESCENDER -0x9e U+04BB # CYRILLIC SMALL LETTER SHHA -0x9f U+04B9 # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE -0xa0 U+00A0 # NO-BREAK SPACE -0xa1 U+040E # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) -0xa2 U+045E # CYRILLIC SMALL LETTER SHORT U (Byelorussian) -0xa3 U+0408 # CYRILLIC CAPITAL LETTER JE -0xa4 U+04E8 # CYRILLIC CAPITAL LETTER BARRED O -0xa5 U+0498 # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER -0xa6 U+04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE -0xa7 U+00A7 # SECTION SIGN -0xa8 U+0401 # CYRILLIC CAPITAL LETTER IO -0xa9 U+00A9 # COPYRIGHT SIGN -0xaa U+04D8 # CYRILLIC CAPITAL LETTER SCHWA -0xab U+00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -0xac U+00AC # NOT SIGN -0xad U+04EF # CYRILLIC SMALL LETTER U WITH MACRON -0xae U+00AE # REGISTERED SIGN -0xaf U+049C # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE -0xb0 U+00B0 # DEGREE SIGN -0xb1 U+04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE -0xb2 U+0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -0xb3 U+0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -0xb4 U+0499 # CYRILLIC SMALL LETTER ZE WITH DESCENDER -0xb5 U+04E9 # CYRILLIC SMALL LETTER BARRED O -0xb6 U+00B6 # PILCROW SIGN -0xb7 U+00B7 # MIDDLE DOT -0xb8 U+0451 # CYRILLIC SMALL LETTER IO -0xb9 U+2116 # NUMERO SIGN -0xba U+04D9 # CYRILLIC SMALL LETTER SCHWA -0xbb U+00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -0xbc U+0458 # CYRILLIC SMALL LETTER JE -0xbd U+04AA # CYRILLIC CAPITAL LETTER ES WITH DESCENDER -0xbe U+04AB # CYRILLIC SMALL LETTER ES WITH DESCENDER -0xbf U+049D # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE -0xc0 U+0410 # CYRILLIC CAPITAL LETTER A -0xc1 U+0411 # CYRILLIC CAPITAL LETTER BE -0xc2 U+0412 # CYRILLIC CAPITAL LETTER VE -0xc3 U+0413 # CYRILLIC CAPITAL LETTER GHE -0xc4 U+0414 # CYRILLIC CAPITAL LETTER DE -0xc5 U+0415 # CYRILLIC CAPITAL LETTER IE -0xc6 U+0416 # CYRILLIC CAPITAL LETTER ZHE -0xc7 U+0417 # CYRILLIC CAPITAL LETTER ZE -0xc8 U+0418 # CYRILLIC CAPITAL LETTER I -0xc9 U+0419 # CYRILLIC CAPITAL LETTER SHORT I -0xca U+041A # CYRILLIC CAPITAL LETTER KA -0xcb U+041B # CYRILLIC CAPITAL LETTER EL -0xcc U+041C # CYRILLIC CAPITAL LETTER EM -0xcd U+041D # CYRILLIC CAPITAL LETTER EN -0xce U+041E # CYRILLIC CAPITAL LETTER O -0xcf U+041F # CYRILLIC CAPITAL LETTER PE -0xd0 U+0420 # CYRILLIC CAPITAL LETTER ER -0xd1 U+0421 # CYRILLIC CAPITAL LETTER ES -0xd2 U+0422 # CYRILLIC CAPITAL LETTER TE -0xd3 U+0423 # CYRILLIC CAPITAL LETTER U -0xd4 U+0424 # CYRILLIC CAPITAL LETTER EF -0xd5 U+0425 # CYRILLIC CAPITAL LETTER HA -0xd6 U+0426 # CYRILLIC CAPITAL LETTER TSE -0xd7 U+0427 # CYRILLIC CAPITAL LETTER CHE -0xd8 U+0428 # CYRILLIC CAPITAL LETTER SHA -0xd9 U+0429 # CYRILLIC CAPITAL LETTER SHCHA -0xda U+042A # CYRILLIC CAPITAL LETTER HARD SIGN -0xdb U+042B # CYRILLIC CAPITAL LETTER YERU -0xdc U+042C # CYRILLIC CAPITAL LETTER SOFT SIGN -0xdd U+042D # CYRILLIC CAPITAL LETTER E -0xde U+042E # CYRILLIC CAPITAL LETTER YU -0xdf U+042F # CYRILLIC CAPITAL LETTER YA -0xe0 U+0430 # CYRILLIC SMALL LETTER A -0xe1 U+0431 # CYRILLIC SMALL LETTER BE -0xe2 U+0432 # CYRILLIC SMALL LETTER VE -0xe3 U+0433 # CYRILLIC SMALL LETTER GHE -0xe4 U+0434 # CYRILLIC SMALL LETTER DE -0xe5 U+0435 # CYRILLIC SMALL LETTER IE -0xe6 U+0436 # CYRILLIC SMALL LETTER ZHE -0xe7 U+0437 # CYRILLIC SMALL LETTER ZE -0xe8 U+0438 # CYRILLIC SMALL LETTER I -0xe9 U+0439 # CYRILLIC SMALL LETTER SHORT I -0xea U+043A # CYRILLIC SMALL LETTER KA -0xeb U+043B # CYRILLIC SMALL LETTER EL -0xec U+043C # CYRILLIC SMALL LETTER EM -0xed U+043D # CYRILLIC SMALL LETTER EN -0xee U+043E # CYRILLIC SMALL LETTER O -0xef U+043F # CYRILLIC SMALL LETTER PE -0xf0 U+0440 # CYRILLIC SMALL LETTER ER -0xf1 U+0441 # CYRILLIC SMALL LETTER ES -0xf2 U+0442 # CYRILLIC SMALL LETTER TE -0xf3 U+0443 # CYRILLIC SMALL LETTER U -0xf4 U+0444 # CYRILLIC SMALL LETTER EF -0xf5 U+0445 # CYRILLIC SMALL LETTER HA -0xf6 U+0446 # CYRILLIC SMALL LETTER TSE -0xf7 U+0447 # CYRILLIC SMALL LETTER CHE -0xf8 U+0448 # CYRILLIC SMALL LETTER SHA -0xf9 U+0449 # CYRILLIC SMALL LETTER SHCHA -0xfa U+044A # CYRILLIC SMALL LETTER HARD SIGN -0xfb U+044B # CYRILLIC SMALL LETTER YERU -0xfc U+044C # CYRILLIC SMALL LETTER SOFT SIGN -0xfd U+044D # CYRILLIC SMALL LETTER E -0xfe U+044E # CYRILLIC SMALL LETTER YU -0xff U+044F # CYRILLIC SMALL LETTER YA +0x80 U+0496 # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0x81 U+0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE +0x82 U+04EE # CYRILLIC CAPITAL LETTER U WITH MACRON +0x83 U+0493 # CYRILLIC SMALL LETTER GHE WITH STROKE +0x84 U+201E # DOUBLE LOW-9 QUOTATION MARK +0x85 U+2026 # HORIZONTAL ELLIPSIS +0x86 U+04B6 # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +0x87 U+04AE # CYRILLIC CAPITAL LETTER STRAIGHT U +0x88 U+04B2 # CYRILLIC CAPITAL LETTER HA WITH DESCENDER +0x89 U+04AF # CYRILLIC SMALL LETTER STRAIGHT U +0x8a U+04A0 # CYRILLIC CAPITAL LETTER BASHKIR KA +0x8b U+04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON +0x8c U+04A2 # CYRILLIC CAPITAL LETTER EN WITH DESCENDER +0x8d U+049A # CYRILLIC CAPITAL LETTER KA WITH DESCENDER +0x8e U+04BA # CYRILLIC CAPITAL LETTER SHHA +0x8f U+04B8 # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +0x90 U+0497 # CYRILLIC SMALL LETTER ZHE WITH DESCENDER +0x91 U+2018 # LEFT SINGLE QUOTATION MARK +0x92 U+2019 # RIGHT SINGLE QUOTATION MARK +0x93 U+201C # LEFT DOUBLE QUOTATION MARK +0x94 U+201D # RIGHT DOUBLE QUOTATION MARK +0x95 U+2022 # BULLET +0x96 U+2013 # EN DASH +0x97 U+2014 # EM DASH +0x98 U+04B3 # CYRILLIC SMALL LETTER HA WITH DESCENDER +0x99 U+04B7 # CYRILLIC SMALL LETTER CHE WITH DESCENDER +0x9a U+04A1 # CYRILLIC SMALL LETTER BASHKIR KA +0x9b U+04E3 # CYRILLIC SMALL LETTER I WITH MACRON +0x9c U+04A3 # CYRILLIC SMALL LETTER EN WITH DESCENDER +0x9d U+049B # CYRILLIC SMALL LETTER KA WITH DESCENDER +0x9e U+04BB # CYRILLIC SMALL LETTER SHHA +0x9f U+04B9 # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE +0xa0 U+00A0 # NO-BREAK SPACE +0xa1 U+040E # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) +0xa2 U+045E # CYRILLIC SMALL LETTER SHORT U (Byelorussian) +0xa3 U+0408 # CYRILLIC CAPITAL LETTER JE +0xa4 U+04E8 # CYRILLIC CAPITAL LETTER BARRED O +0xa5 U+0498 # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +0xa6 U+04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +0xa7 U+00A7 # SECTION SIGN +0xa8 U+0401 # CYRILLIC CAPITAL LETTER IO +0xa9 U+00A9 # COPYRIGHT SIGN +0xaa U+04D8 # CYRILLIC CAPITAL LETTER SCHWA +0xab U+00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xac U+00AC # NOT SIGN +0xad U+04EF # CYRILLIC SMALL LETTER U WITH MACRON +0xae U+00AE # REGISTERED SIGN +0xaf U+049C # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +0xb0 U+00B0 # DEGREE SIGN +0xb1 U+04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE +0xb2 U+0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0xb3 U+0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0xb4 U+0499 # CYRILLIC SMALL LETTER ZE WITH DESCENDER +0xb5 U+04E9 # CYRILLIC SMALL LETTER BARRED O +0xb6 U+00B6 # PILCROW SIGN +0xb7 U+00B7 # MIDDLE DOT +0xb8 U+0451 # CYRILLIC SMALL LETTER IO +0xb9 U+2116 # NUMERO SIGN +0xba U+04D9 # CYRILLIC SMALL LETTER SCHWA +0xbb U+00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xbc U+0458 # CYRILLIC SMALL LETTER JE +0xbd U+04AA # CYRILLIC CAPITAL LETTER ES WITH DESCENDER +0xbe U+04AB # CYRILLIC SMALL LETTER ES WITH DESCENDER +0xbf U+049D # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE +0xc0 U+0410 # CYRILLIC CAPITAL LETTER A +0xc1 U+0411 # CYRILLIC CAPITAL LETTER BE +0xc2 U+0412 # CYRILLIC CAPITAL LETTER VE +0xc3 U+0413 # CYRILLIC CAPITAL LETTER GHE +0xc4 U+0414 # CYRILLIC CAPITAL LETTER DE +0xc5 U+0415 # CYRILLIC CAPITAL LETTER IE +0xc6 U+0416 # CYRILLIC CAPITAL LETTER ZHE +0xc7 U+0417 # CYRILLIC CAPITAL LETTER ZE +0xc8 U+0418 # CYRILLIC CAPITAL LETTER I +0xc9 U+0419 # CYRILLIC CAPITAL LETTER SHORT I +0xca U+041A # CYRILLIC CAPITAL LETTER KA +0xcb U+041B # CYRILLIC CAPITAL LETTER EL +0xcc U+041C # CYRILLIC CAPITAL LETTER EM +0xcd U+041D # CYRILLIC CAPITAL LETTER EN +0xce U+041E # CYRILLIC CAPITAL LETTER O +0xcf U+041F # CYRILLIC CAPITAL LETTER PE +0xd0 U+0420 # CYRILLIC CAPITAL LETTER ER +0xd1 U+0421 # CYRILLIC CAPITAL LETTER ES +0xd2 U+0422 # CYRILLIC CAPITAL LETTER TE +0xd3 U+0423 # CYRILLIC CAPITAL LETTER U +0xd4 U+0424 # CYRILLIC CAPITAL LETTER EF +0xd5 U+0425 # CYRILLIC CAPITAL LETTER HA +0xd6 U+0426 # CYRILLIC CAPITAL LETTER TSE +0xd7 U+0427 # CYRILLIC CAPITAL LETTER CHE +0xd8 U+0428 # CYRILLIC CAPITAL LETTER SHA +0xd9 U+0429 # CYRILLIC CAPITAL LETTER SHCHA +0xda U+042A # CYRILLIC CAPITAL LETTER HARD SIGN +0xdb U+042B # CYRILLIC CAPITAL LETTER YERU +0xdc U+042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0xdd U+042D # CYRILLIC CAPITAL LETTER E +0xde U+042E # CYRILLIC CAPITAL LETTER YU +0xdf U+042F # CYRILLIC CAPITAL LETTER YA +0xe0 U+0430 # CYRILLIC SMALL LETTER A +0xe1 U+0431 # CYRILLIC SMALL LETTER BE +0xe2 U+0432 # CYRILLIC SMALL LETTER VE +0xe3 U+0433 # CYRILLIC SMALL LETTER GHE +0xe4 U+0434 # CYRILLIC SMALL LETTER DE +0xe5 U+0435 # CYRILLIC SMALL LETTER IE +0xe6 U+0436 # CYRILLIC SMALL LETTER ZHE +0xe7 U+0437 # CYRILLIC SMALL LETTER ZE +0xe8 U+0438 # CYRILLIC SMALL LETTER I +0xe9 U+0439 # CYRILLIC SMALL LETTER SHORT I +0xea U+043A # CYRILLIC SMALL LETTER KA +0xeb U+043B # CYRILLIC SMALL LETTER EL +0xec U+043C # CYRILLIC SMALL LETTER EM +0xed U+043D # CYRILLIC SMALL LETTER EN +0xee U+043E # CYRILLIC SMALL LETTER O +0xef U+043F # CYRILLIC SMALL LETTER PE +0xf0 U+0440 # CYRILLIC SMALL LETTER ER +0xf1 U+0441 # CYRILLIC SMALL LETTER ES +0xf2 U+0442 # CYRILLIC SMALL LETTER TE +0xf3 U+0443 # CYRILLIC SMALL LETTER U +0xf4 U+0444 # CYRILLIC SMALL LETTER EF +0xf5 U+0445 # CYRILLIC SMALL LETTER HA +0xf6 U+0446 # CYRILLIC SMALL LETTER TSE +0xf7 U+0447 # CYRILLIC SMALL LETTER CHE +0xf8 U+0448 # CYRILLIC SMALL LETTER SHA +0xf9 U+0449 # CYRILLIC SMALL LETTER SHCHA +0xfa U+044A # CYRILLIC SMALL LETTER HARD SIGN +0xfb U+044B # CYRILLIC SMALL LETTER YERU +0xfc U+044C # CYRILLIC SMALL LETTER SOFT SIGN +0xfd U+044D # CYRILLIC SMALL LETTER E +0xfe U+044E # CYRILLIC SMALL LETTER YU +0xff U+044F # CYRILLIC SMALL LETTER YA ##### # -# Additional information: -# This charset based on CP1251 with added asian cyrillic symbols. +# Additional information: +# This charset based on CP1251 with added asian cyrillic symbols. +# +# Person & email address to contact for further information: +# Alexander Uskov +# InternetDataCenter of KazakhTelecom. +# e-mail: auskov@idc.kz # -# Person & email address to contact for further information: -# Alexander Uskov -# InternetDataCenter of KazakhTelecom. -# e-mail: auskov@idc.kz +# Intended usage: +# COMMON # -# Intended usage: -# COMMON -# # (record created 2002-09-27) # ##### |