mirror of
https://github.com/rkd77/elinks.git
synced 2025-02-02 15:09:23 -05:00
Merge with git+ssh://pasky/srv/git/elinks.git
This commit is contained in:
commit
b42c3f5bd2
78
po/fr.po
78
po/fr.po
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: ELinks 0.10.CVS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2005-10-30 17:19+0100\n"
|
||||
"PO-Revision-Date: 2005-10-30 17:20+0200\n"
|
||||
"POT-Creation-Date: 2005-11-27 19:21+0100\n"
|
||||
"PO-Revision-Date: 2005-11-27 19:22+0200\n"
|
||||
"Last-Translator: Laurent Monin <zas@norz.org>\n"
|
||||
"Language-Team: French <zas@norz.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -35,7 +35,7 @@ msgstr "Pressez espace pour d
|
||||
#: src/dialogs/options.c:210 src/dialogs/options.c:290 src/mime/dialogs.c:129
|
||||
#: src/protocol/auth/dialogs.c:110 src/protocol/protocol.c:231
|
||||
#: src/scripting/lua/core.c:377 src/scripting/lua/core.c:457
|
||||
#: src/session/session.c:798 src/viewer/text/search.c:1593
|
||||
#: src/session/session.c:799 src/viewer/text/search.c:1593
|
||||
msgid "~OK"
|
||||
msgstr "~OK"
|
||||
|
||||
@ -1784,7 +1784,7 @@ msgstr "Description"
|
||||
|
||||
#: src/config/dialogs.c:320 src/protocol/bittorrent/dialogs.c:594
|
||||
#: src/protocol/protocol.c:225 src/session/session.c:282
|
||||
#: src/session/session.c:960 src/viewer/text/textarea.c:362
|
||||
#: src/session/session.c:961 src/viewer/text/textarea.c:362
|
||||
#: src/viewer/text/textarea.c:369
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
@ -5380,7 +5380,7 @@ msgstr "Ignorer le contenu de <noscript>"
|
||||
#: src/ecmascript/ecmascript.c:50
|
||||
msgid ""
|
||||
"Whether to ignore content enclosed by the <noscript> tag\n"
|
||||
" when ECMAScript is enabled."
|
||||
"when ECMAScript is enabled."
|
||||
msgstr ""
|
||||
"Ignorer ou non le contenu du tag <noscript> quand ECMAScript\n"
|
||||
"est actif."
|
||||
@ -6309,70 +6309,66 @@ msgid "Bad HTTP response"
|
||||
msgstr "Réponse HTTP incorrecte"
|
||||
|
||||
#: src/network/state.c:71
|
||||
msgid "HTTP 100 (???)"
|
||||
msgstr "HTTP 100 (???)"
|
||||
|
||||
#: src/network/state.c:72
|
||||
msgid "No content"
|
||||
msgstr "Aucun contenu"
|
||||
|
||||
#: src/network/state.c:74
|
||||
#: src/network/state.c:73
|
||||
msgid "Unknown file type"
|
||||
msgstr "Type de fichier inconnu"
|
||||
|
||||
#: src/network/state.c:75
|
||||
#: src/network/state.c:74
|
||||
msgid "Error opening file"
|
||||
msgstr "Erreur lors de l'ouverture du fichier"
|
||||
|
||||
#: src/network/state.c:76
|
||||
#: src/network/state.c:75
|
||||
msgid "CGI script not in CGI path"
|
||||
msgstr "Script CGI absent du chemin des CGIs"
|
||||
|
||||
#: src/network/state.c:77
|
||||
#: src/network/state.c:76
|
||||
msgid "Local file access is not allowed in anonymous mode"
|
||||
msgstr "L'accès aux fichiers locaux n'est pas autorisé en mode anonyme"
|
||||
|
||||
#: src/network/state.c:80
|
||||
#: src/network/state.c:79
|
||||
msgid "Bad FTP response"
|
||||
msgstr "Réponse FTP incorrecte"
|
||||
|
||||
#: src/network/state.c:81
|
||||
#: src/network/state.c:80
|
||||
msgid "FTP service unavailable"
|
||||
msgstr "Service FTP indisponible"
|
||||
|
||||
#: src/network/state.c:82
|
||||
#: src/network/state.c:81
|
||||
msgid "Bad FTP login"
|
||||
msgstr "Échec de l'authentification FTP"
|
||||
|
||||
#: src/network/state.c:83
|
||||
#: src/network/state.c:82
|
||||
msgid "FTP PORT command failed"
|
||||
msgstr "Échec de la commande FTP PORT"
|
||||
|
||||
#: src/network/state.c:84
|
||||
#: src/network/state.c:83
|
||||
msgid "File not found"
|
||||
msgstr "Fichier introuvable"
|
||||
|
||||
#: src/network/state.c:85
|
||||
#: src/network/state.c:84
|
||||
msgid "FTP file error"
|
||||
msgstr "Erreur de fichier FTP"
|
||||
|
||||
#: src/network/state.c:89
|
||||
#: src/network/state.c:88
|
||||
msgid "SSL error"
|
||||
msgstr "Erreur SSL"
|
||||
|
||||
#: src/network/state.c:91
|
||||
#: src/network/state.c:90
|
||||
msgid "This version of ELinks does not contain SSL/TLS support"
|
||||
msgstr "Cette version de ELinks ne supporte ni SSL ni TLS"
|
||||
|
||||
#: src/network/state.c:94
|
||||
#: src/network/state.c:93
|
||||
msgid "JavaScript support is not enabled"
|
||||
msgstr "Le support du Javascript n'est pas activé"
|
||||
|
||||
#: src/network/state.c:97
|
||||
#: src/network/state.c:96
|
||||
msgid "Bad NNTP response"
|
||||
msgstr "Réponse NNTP incorrecte"
|
||||
|
||||
#: src/network/state.c:98
|
||||
#: src/network/state.c:97
|
||||
msgid ""
|
||||
"Unable to handle news: URI because no news server has been\n"
|
||||
"been configured. Either set the option protocol.nntp.server\n"
|
||||
@ -6382,35 +6378,35 @@ msgstr ""
|
||||
"n'a été configuré. Configurez l'option protocol.nntp.server\n"
|
||||
"ou la variable d'environnement NNTPSERVER."
|
||||
|
||||
#: src/network/state.c:101
|
||||
#: src/network/state.c:100
|
||||
msgid "Server hang up for some reason"
|
||||
msgstr "Le serveur est bloqué pour une raison inconnue"
|
||||
|
||||
#: src/network/state.c:102
|
||||
#: src/network/state.c:101
|
||||
msgid "No such newsgroup"
|
||||
msgstr "Groupe de nouvelles introuvable"
|
||||
|
||||
#: src/network/state.c:103
|
||||
#: src/network/state.c:102
|
||||
msgid "No such article"
|
||||
msgstr "Article introuvable"
|
||||
|
||||
#: src/network/state.c:104
|
||||
#: src/network/state.c:103
|
||||
msgid "Transfer failed"
|
||||
msgstr "Echec de transfert"
|
||||
|
||||
#: src/network/state.c:105
|
||||
#: src/network/state.c:104
|
||||
msgid "Authorization required"
|
||||
msgstr "Authentication requise"
|
||||
|
||||
#: src/network/state.c:106
|
||||
#: src/network/state.c:105
|
||||
msgid "Access to server denied"
|
||||
msgstr "Accès au serveur refusé"
|
||||
|
||||
#: src/network/state.c:110
|
||||
#: src/network/state.c:109
|
||||
msgid "The CSO phone-book protocol is not supported."
|
||||
msgstr "Le protocole de carnet d'adresse CSO n'est pas supporté."
|
||||
|
||||
#: src/network/state.c:113
|
||||
#: src/network/state.c:112
|
||||
msgid ""
|
||||
"Configuration of the proxy server failed.\n"
|
||||
"This might be caused by an incorrect proxy\n"
|
||||
@ -6429,19 +6425,19 @@ msgstr ""
|
||||
"le nom d'hôte éventuellement suivi de deux points et\n"
|
||||
"du numéro de port. Par exemple: 'localhost:8080'."
|
||||
|
||||
#: src/network/state.c:123
|
||||
#: src/network/state.c:122
|
||||
msgid "BitTorrent error"
|
||||
msgstr "Erreur de BitTorrent"
|
||||
|
||||
#: src/network/state.c:124
|
||||
#: src/network/state.c:123
|
||||
msgid "The BitTorrent metainfo file contained errors"
|
||||
msgstr "Le fichier metainfo de BitTorrent contenait des erreurs"
|
||||
|
||||
#: src/network/state.c:125
|
||||
#: src/network/state.c:124
|
||||
msgid "The tracker requesting failed"
|
||||
msgstr "L'interrogation du serveur a échouée"
|
||||
|
||||
#: src/network/state.c:149
|
||||
#: src/network/state.c:148
|
||||
msgid "Unknown error"
|
||||
msgstr "Erreur inconnue"
|
||||
|
||||
@ -7908,11 +7904,11 @@ msgstr "Le fichier sera ouvert avec le programme '%s'."
|
||||
msgid "~Open"
|
||||
msgstr "~Ouvrir"
|
||||
|
||||
#: src/session/session.c:748 src/session/session.c:767 src/session/task.c:269
|
||||
#: src/session/session.c:749 src/session/session.c:768 src/session/task.c:269
|
||||
msgid "Warning"
|
||||
msgstr "Avertissement"
|
||||
|
||||
#: src/session/session.c:749
|
||||
#: src/session/session.c:750
|
||||
msgid ""
|
||||
"You have empty string in protocol.http.user_agent - this was a default value "
|
||||
"in the past, substituted by default ELinks User-Agent string. However, "
|
||||
@ -7931,7 +7927,7 @@ msgstr ""
|
||||
"défaut sera utilisée. Si vous n'avez aucune idée de quoi nous parlons alors "
|
||||
"faites juste ça. Toutes nos excuses pour ce désagrément."
|
||||
|
||||
#: src/session/session.c:768
|
||||
#: src/session/session.c:769
|
||||
msgid ""
|
||||
"You have option config.saving_style set to a de facto obsolete value. The "
|
||||
"configuration saving algorithms of ELinks were changed from the last time "
|
||||
@ -7952,11 +7948,11 @@ msgstr ""
|
||||
"l'option config.saving_style dans le but d'obtenir un fonctionnement "
|
||||
"correct. Toutes nos excuses pour l'éventuel désagrément causé."
|
||||
|
||||
#: src/session/session.c:793
|
||||
#: src/session/session.c:794
|
||||
msgid "Welcome"
|
||||
msgstr "Bienvenue"
|
||||
|
||||
#: src/session/session.c:794
|
||||
#: src/session/session.c:795
|
||||
msgid ""
|
||||
"Welcome to ELinks!\n"
|
||||
"\n"
|
||||
|
@ -262,193 +262,6 @@ html_skip(struct html_context *html_context, unsigned char *a)
|
||||
html_top.type = ELEMENT_DONT_KILL;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ECMASCRIPT
|
||||
int
|
||||
do_html_script(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *html, unsigned char *eof, unsigned char **end)
|
||||
{
|
||||
/* TODO: <noscript> processing. Well, same considerations apply as to
|
||||
* CSS property display: none processing. */
|
||||
/* TODO: Charsets for external scripts. */
|
||||
unsigned char *type, *language, *src;
|
||||
int in_comment = 0;
|
||||
|
||||
html_skip(html_context, a);
|
||||
|
||||
/* We try to process nested <script> if we didn't process the parent
|
||||
* one. That's why's all the fuzz. */
|
||||
/* Ref:
|
||||
* http://www.ietf.org/internet-drafts/draft-hoehrmann-script-types-03.txt
|
||||
*/
|
||||
type = get_attr_val(a, "type", html_context->options);
|
||||
if (type) {
|
||||
unsigned char *pos = type;
|
||||
|
||||
if (!strncasecmp(type, "text/", 5)) {
|
||||
pos += 5;
|
||||
|
||||
} else if (!strncasecmp(type, "application/", 12)) {
|
||||
pos += 12;
|
||||
|
||||
} else {
|
||||
mem_free(type);
|
||||
not_processed:
|
||||
/* Permit nested scripts and retreat. */
|
||||
html_top.invisible++;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!strncasecmp(pos, "javascript", 10)) {
|
||||
int len = strlen(pos);
|
||||
|
||||
if (len > 10 && !isdigit(pos[10])) {
|
||||
mem_free(type);
|
||||
goto not_processed;
|
||||
}
|
||||
|
||||
} else if (strcasecmp(pos, "ecmascript")
|
||||
&& strcasecmp(pos, "jscript")
|
||||
&& strcasecmp(pos, "livescript")
|
||||
&& strcasecmp(pos, "x-javascript")
|
||||
&& strcasecmp(pos, "x-ecmascript")) {
|
||||
mem_free(type);
|
||||
goto not_processed;
|
||||
}
|
||||
|
||||
mem_free(type);
|
||||
}
|
||||
|
||||
/* Check that the script content is ecmascript. The value of the
|
||||
* language attribute can be JavaScript with optional version digits
|
||||
* postfixed (like: ``JavaScript1.1'').
|
||||
* That attribute is deprecated in favor of type by HTML 4.01 */
|
||||
language = get_attr_val(a, "language", html_context->options);
|
||||
if (language) {
|
||||
int languagelen = strlen(language);
|
||||
|
||||
if (languagelen < 10
|
||||
|| (languagelen > 10 && !isdigit(language[10]))
|
||||
|| strncasecmp(language, "javascript", 10)) {
|
||||
mem_free(language);
|
||||
goto not_processed;
|
||||
}
|
||||
|
||||
mem_free(language);
|
||||
}
|
||||
|
||||
if (html_context->part->document
|
||||
&& (src = get_attr_val(a, "src", html_context->options))) {
|
||||
/* External reference. */
|
||||
|
||||
unsigned char *import_url;
|
||||
struct uri *uri;
|
||||
|
||||
if (!get_opt_bool("ecmascript.enable")) {
|
||||
mem_free(src);
|
||||
goto not_processed;
|
||||
}
|
||||
|
||||
/* HTML <head> urls should already be fine but we can.t detect them. */
|
||||
import_url = join_urls(html_context->base_href, src);
|
||||
mem_free(src);
|
||||
if (!import_url) goto imported;
|
||||
|
||||
uri = get_uri(import_url, URI_BASE);
|
||||
if (!uri) goto imported;
|
||||
|
||||
/* Request the imported script as part of the document ... */
|
||||
html_context->special_f(html_context, SP_SCRIPT, uri);
|
||||
done_uri(uri);
|
||||
|
||||
/* Create URL reference onload snippet. */
|
||||
insert_in_string(&import_url, 0, "^", 1);
|
||||
add_to_string_list(&html_context->part->document->onload_snippets,
|
||||
import_url, -1);
|
||||
|
||||
imported:
|
||||
/* Retreat. Do not permit nested scripts, tho'. */
|
||||
if (import_url) mem_free(import_url);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Positive, grab the rest and interpret it. */
|
||||
|
||||
/* First position to the real script start. */
|
||||
while (html < eof && *html <= ' ') html++;
|
||||
if (eof - html > 4 && !strncmp(html, "<!--", 4)) {
|
||||
in_comment = 1;
|
||||
/* We either skip to the end of line or to -->. */
|
||||
for (; *html != '\n' && *html != '\r' && eof - html >= 3; html++) {
|
||||
if (!strncmp(html, "-->", 3)) {
|
||||
/* This means the document is probably broken.
|
||||
* We will now try to process the rest of
|
||||
* <script> contents, which is however likely
|
||||
* to be empty. Should we try to process the
|
||||
* comment too? Currently it seems safer but
|
||||
* less tolerant to broken pages, if there are
|
||||
* any like this. */
|
||||
html += 3;
|
||||
in_comment = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*end = html;
|
||||
|
||||
/* Now look ahead for the script end. The <script> contents is raw
|
||||
* CDATA, so we just look for the ending tag and need not care for
|
||||
* any quote marks counting etc - YET, we are more tolerant and permit
|
||||
* </script> stuff inside of the script if the whole <script> element
|
||||
* contents is wrapped in a comment. See i.e. Mozilla bug 26857 for fun
|
||||
* reading regarding this. */
|
||||
for (; *end < eof; (*end)++) {
|
||||
unsigned char *name;
|
||||
int namelen;
|
||||
|
||||
if (in_comment) {
|
||||
/* TODO: If we ever get some standards-quirk mode
|
||||
* distinction, this should be disabled in the
|
||||
* standards mode (and we should just look for CDATA
|
||||
* end, which is "</"). --pasky */
|
||||
if (eof - *end >= 3 && !strncmp(*end, "-->", 3)) {
|
||||
/* Next iteration will jump passed the ending '>' */
|
||||
(*end) += 2;
|
||||
in_comment = 0;
|
||||
}
|
||||
continue;
|
||||
/* XXX: Scan for another comment? That's admittelly
|
||||
* already stretching things a little bit to an
|
||||
* extreme ;-). */
|
||||
}
|
||||
|
||||
if (**end != '<')
|
||||
continue;
|
||||
/* We want to land before the closing element, that's why we
|
||||
* don't pass @end also as the appropriate parse_element()
|
||||
* argument. */
|
||||
if (parse_element(*end, eof, &name, &namelen, NULL, NULL))
|
||||
continue;
|
||||
if (strlcasecmp(name, namelen, "/script", 7))
|
||||
continue;
|
||||
/* We have won! */
|
||||
break;
|
||||
}
|
||||
if (*end >= eof) {
|
||||
/* Either the document is not completely loaded yet or it's
|
||||
* broken. At any rate, run away screaming. */
|
||||
*end = eof; /* Just for sanity. */
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (html_context->part->document && *html != '^') {
|
||||
add_to_string_list(&html_context->part->document->onload_snippets,
|
||||
html, *end - html);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
process_head(struct html_context *html_context, unsigned char *head)
|
||||
{
|
||||
|
@ -207,8 +207,4 @@ void ln_break(struct html_context *html_context, int n);
|
||||
|
||||
int get_color(struct html_context *html_context, unsigned char *a, unsigned char *c, color_T *rgb);
|
||||
|
||||
#ifdef CONFIG_ECMASCRIPT
|
||||
int do_html_script(struct html_context *html_context, unsigned char *attr, unsigned char *html, unsigned char *eof, unsigned char **end);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -298,105 +298,9 @@ hid:
|
||||
html_context->special_f(html_context, SP_CONTROL, fc);
|
||||
}
|
||||
|
||||
void
|
||||
html_select(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *html, unsigned char *eof, unsigned char **end)
|
||||
{
|
||||
unsigned char *al;
|
||||
|
||||
if (!do_html_select(a, html, eof, end, html_context))
|
||||
return;
|
||||
|
||||
al = get_attr_val(a, "name", html_context->options);
|
||||
if (!al) return;
|
||||
|
||||
html_focusable(html_context, a);
|
||||
html_top.type = ELEMENT_DONT_KILL;
|
||||
mem_free_set(&format.select, al);
|
||||
format.select_disabled = has_attr(a, "disabled", html_context->options)
|
||||
? FORM_MODE_DISABLED
|
||||
: FORM_MODE_NORMAL;
|
||||
}
|
||||
|
||||
void
|
||||
html_option(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5)
|
||||
{
|
||||
struct form_control *fc;
|
||||
unsigned char *val;
|
||||
|
||||
if (!format.select) return;
|
||||
|
||||
val = get_attr_val(a, "value", html_context->options);
|
||||
if (!val) {
|
||||
struct string str;
|
||||
unsigned char *p, *r;
|
||||
unsigned char *name;
|
||||
int namelen;
|
||||
|
||||
for (p = a - 1; *p != '<'; p--);
|
||||
|
||||
if (!init_string(&str)) goto end_parse;
|
||||
if (parse_element(p, html_context->eoff, NULL, NULL, NULL, &p)) {
|
||||
INTERNAL("parse element failed");
|
||||
val = str.source;
|
||||
goto end_parse;
|
||||
}
|
||||
|
||||
se:
|
||||
while (p < html_context->eoff && isspace(*p)) p++;
|
||||
while (p < html_context->eoff && !isspace(*p) && *p != '<') {
|
||||
|
||||
sp:
|
||||
add_char_to_string(&str, *p ? *p : ' '), p++;
|
||||
}
|
||||
|
||||
r = p;
|
||||
val = str.source; /* Has to be before the possible 'goto end_parse' */
|
||||
|
||||
while (r < html_context->eoff && isspace(*r)) r++;
|
||||
if (r >= html_context->eoff) goto end_parse;
|
||||
if (r - 2 <= html_context->eoff && (r[1] == '!' || r[1] == '?')) {
|
||||
p = skip_comment(r, html_context->eoff);
|
||||
goto se;
|
||||
}
|
||||
if (parse_element(r, html_context->eoff, &name, &namelen, NULL, &p)) goto sp;
|
||||
if (strlcasecmp(name, namelen, "OPTION", 6)
|
||||
&& strlcasecmp(name, namelen, "/OPTION", 7)
|
||||
&& strlcasecmp(name, namelen, "SELECT", 6)
|
||||
&& strlcasecmp(name, namelen, "/SELECT", 7)
|
||||
&& strlcasecmp(name, namelen, "OPTGROUP", 8)
|
||||
&& strlcasecmp(name, namelen, "/OPTGROUP", 9))
|
||||
goto se;
|
||||
}
|
||||
|
||||
end_parse:
|
||||
fc = init_form_control(FC_CHECKBOX, a, html_context);
|
||||
if (!fc) {
|
||||
mem_free_if(val);
|
||||
return;
|
||||
}
|
||||
|
||||
fc->name = null_or_stracpy(format.select);
|
||||
fc->default_value = val;
|
||||
fc->default_state = has_attr(a, "selected", html_context->options);
|
||||
fc->mode = has_attr(a, "disabled", html_context->options)
|
||||
? FORM_MODE_DISABLED
|
||||
: format.select_disabled;
|
||||
|
||||
put_chrs(html_context, " ", 1);
|
||||
html_stack_dup(html_context, ELEMENT_KILLABLE);
|
||||
format.form = fc;
|
||||
format.style.attr |= AT_BOLD;
|
||||
put_chrs(html_context, "[ ]", 3);
|
||||
kill_html_stack_item(html_context, &html_top);
|
||||
put_chrs(html_context, " ", 1);
|
||||
html_context->special_f(html_context, SP_CONTROL, fc);
|
||||
}
|
||||
|
||||
static struct list_menu lnk_menu;
|
||||
|
||||
int
|
||||
static void
|
||||
do_html_select(unsigned char *attr, unsigned char *html,
|
||||
unsigned char *eof, unsigned char **end,
|
||||
struct html_context *html_context)
|
||||
@ -414,7 +318,6 @@ do_html_select(unsigned char *attr, unsigned char *html,
|
||||
int group = 0;
|
||||
int i, max_width;
|
||||
|
||||
if (has_attr(attr, "multiple", html_context->options)) return 1;
|
||||
html_focusable(html_context, attr);
|
||||
init_menu(&lnk_menu);
|
||||
|
||||
@ -440,7 +343,7 @@ abort:
|
||||
}
|
||||
destroy_menu(&lnk_menu);
|
||||
*end = en;
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (lbl.source) {
|
||||
@ -563,20 +466,115 @@ end_parse:
|
||||
kill_html_stack_item(html_context, &html_top);
|
||||
put_chrs(html_context, "]", 1);
|
||||
html_context->special_f(html_context, SP_CONTROL, fc);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
static void
|
||||
do_html_select_multiple(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *html, unsigned char *eof,
|
||||
unsigned char **end)
|
||||
{
|
||||
unsigned char *al = get_attr_val(a, "name", html_context->options);
|
||||
|
||||
if (!al) return;
|
||||
html_focusable(html_context, a);
|
||||
html_top.type = ELEMENT_DONT_KILL;
|
||||
mem_free_set(&format.select, al);
|
||||
format.select_disabled = has_attr(a, "disabled", html_context->options)
|
||||
? FORM_MODE_DISABLED
|
||||
: FORM_MODE_NORMAL;
|
||||
}
|
||||
|
||||
void
|
||||
html_textarea(struct html_context *html_context, unsigned char *a,
|
||||
html_select(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *html, unsigned char *eof, unsigned char **end)
|
||||
{
|
||||
do_html_textarea(a, html, eof, end, html_context);
|
||||
if (has_attr(a, "multiple", html_context->options))
|
||||
do_html_select_multiple(html_context, a, html, eof, end);
|
||||
else
|
||||
do_html_select(a, html, eof, end, html_context);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
do_html_textarea(unsigned char *attr, unsigned char *html, unsigned char *eof,
|
||||
unsigned char **end, struct html_context *html_context)
|
||||
html_option(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5)
|
||||
{
|
||||
struct form_control *fc;
|
||||
unsigned char *val;
|
||||
|
||||
if (!format.select) return;
|
||||
|
||||
val = get_attr_val(a, "value", html_context->options);
|
||||
if (!val) {
|
||||
struct string str;
|
||||
unsigned char *p, *r;
|
||||
unsigned char *name;
|
||||
int namelen;
|
||||
|
||||
for (p = a - 1; *p != '<'; p--);
|
||||
|
||||
if (!init_string(&str)) goto end_parse;
|
||||
if (parse_element(p, html_context->eoff, NULL, NULL, NULL, &p)) {
|
||||
INTERNAL("parse element failed");
|
||||
val = str.source;
|
||||
goto end_parse;
|
||||
}
|
||||
|
||||
se:
|
||||
while (p < html_context->eoff && isspace(*p)) p++;
|
||||
while (p < html_context->eoff && !isspace(*p) && *p != '<') {
|
||||
|
||||
sp:
|
||||
add_char_to_string(&str, *p ? *p : ' '), p++;
|
||||
}
|
||||
|
||||
r = p;
|
||||
val = str.source; /* Has to be before the possible 'goto end_parse' */
|
||||
|
||||
while (r < html_context->eoff && isspace(*r)) r++;
|
||||
if (r >= html_context->eoff) goto end_parse;
|
||||
if (r - 2 <= html_context->eoff && (r[1] == '!' || r[1] == '?')) {
|
||||
p = skip_comment(r, html_context->eoff);
|
||||
goto se;
|
||||
}
|
||||
if (parse_element(r, html_context->eoff, &name, &namelen, NULL, &p)) goto sp;
|
||||
if (strlcasecmp(name, namelen, "OPTION", 6)
|
||||
&& strlcasecmp(name, namelen, "/OPTION", 7)
|
||||
&& strlcasecmp(name, namelen, "SELECT", 6)
|
||||
&& strlcasecmp(name, namelen, "/SELECT", 7)
|
||||
&& strlcasecmp(name, namelen, "OPTGROUP", 8)
|
||||
&& strlcasecmp(name, namelen, "/OPTGROUP", 9))
|
||||
goto se;
|
||||
}
|
||||
|
||||
end_parse:
|
||||
fc = init_form_control(FC_CHECKBOX, a, html_context);
|
||||
if (!fc) {
|
||||
mem_free_if(val);
|
||||
return;
|
||||
}
|
||||
|
||||
fc->name = null_or_stracpy(format.select);
|
||||
fc->default_value = val;
|
||||
fc->default_state = has_attr(a, "selected", html_context->options);
|
||||
fc->mode = has_attr(a, "disabled", html_context->options)
|
||||
? FORM_MODE_DISABLED
|
||||
: format.select_disabled;
|
||||
|
||||
put_chrs(html_context, " ", 1);
|
||||
html_stack_dup(html_context, ELEMENT_KILLABLE);
|
||||
format.form = fc;
|
||||
format.style.attr |= AT_BOLD;
|
||||
put_chrs(html_context, "[ ]", 3);
|
||||
kill_html_stack_item(html_context, &html_top);
|
||||
put_chrs(html_context, " ", 1);
|
||||
html_context->special_f(html_context, SP_CONTROL, fc);
|
||||
}
|
||||
|
||||
void
|
||||
html_textarea(struct html_context *html_context, unsigned char *attr,
|
||||
unsigned char *html, unsigned char *eof, unsigned char **end)
|
||||
{
|
||||
struct form_control *fc;
|
||||
unsigned char *p, *t_name, *wrap_attr;
|
||||
|
@ -13,7 +13,4 @@ element_handler_T html_select;
|
||||
element_handler_T html_option;
|
||||
element_handler_T html_textarea;
|
||||
|
||||
int do_html_select(unsigned char *attr, unsigned char *html, unsigned char *eof, unsigned char **end, struct html_context *html_context);
|
||||
void do_html_textarea(unsigned char *attr, unsigned char *html, unsigned char *eof, unsigned char **end, struct html_context *html_context);
|
||||
|
||||
#endif
|
||||
|
@ -23,6 +23,8 @@
|
||||
#include "document/html/parser/stack.h"
|
||||
#include "document/html/parser/parse.h"
|
||||
#include "document/html/parser.h"
|
||||
#include "document/html/renderer.h"
|
||||
#include "document/html/tables.h"
|
||||
#include "document/options.h"
|
||||
#include "intl/charsets.h"
|
||||
#include "protocol/uri.h"
|
||||
@ -164,9 +166,186 @@ html_script(struct html_context *html_context, unsigned char *a,
|
||||
unsigned char *html, unsigned char *eof, unsigned char **end)
|
||||
{
|
||||
#ifdef CONFIG_ECMASCRIPT
|
||||
do_html_script(html_context, a, html, eof, end);
|
||||
#else
|
||||
/* TODO: <noscript> processing. Well, same considerations apply as to
|
||||
* CSS property display: none processing. */
|
||||
/* TODO: Charsets for external scripts. */
|
||||
unsigned char *type, *language, *src;
|
||||
int in_comment = 0;
|
||||
#endif
|
||||
|
||||
html_skip(html_context, a);
|
||||
|
||||
#ifdef CONFIG_ECMASCRIPT
|
||||
/* We try to process nested <script> if we didn't process the parent
|
||||
* one. That's why's all the fuzz. */
|
||||
/* Ref:
|
||||
* http://www.ietf.org/internet-drafts/draft-hoehrmann-script-types-03.txt
|
||||
*/
|
||||
type = get_attr_val(a, "type", html_context->options);
|
||||
if (type) {
|
||||
unsigned char *pos = type;
|
||||
|
||||
if (!strncasecmp(type, "text/", 5)) {
|
||||
pos += 5;
|
||||
|
||||
} else if (!strncasecmp(type, "application/", 12)) {
|
||||
pos += 12;
|
||||
|
||||
} else {
|
||||
mem_free(type);
|
||||
not_processed:
|
||||
/* Permit nested scripts and retreat. */
|
||||
html_top.invisible++;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!strncasecmp(pos, "javascript", 10)) {
|
||||
int len = strlen(pos);
|
||||
|
||||
if (len > 10 && !isdigit(pos[10])) {
|
||||
mem_free(type);
|
||||
goto not_processed;
|
||||
}
|
||||
|
||||
} else if (strcasecmp(pos, "ecmascript")
|
||||
&& strcasecmp(pos, "jscript")
|
||||
&& strcasecmp(pos, "livescript")
|
||||
&& strcasecmp(pos, "x-javascript")
|
||||
&& strcasecmp(pos, "x-ecmascript")) {
|
||||
mem_free(type);
|
||||
goto not_processed;
|
||||
}
|
||||
|
||||
mem_free(type);
|
||||
}
|
||||
|
||||
/* Check that the script content is ecmascript. The value of the
|
||||
* language attribute can be JavaScript with optional version digits
|
||||
* postfixed (like: ``JavaScript1.1'').
|
||||
* That attribute is deprecated in favor of type by HTML 4.01 */
|
||||
language = get_attr_val(a, "language", html_context->options);
|
||||
if (language) {
|
||||
int languagelen = strlen(language);
|
||||
|
||||
if (languagelen < 10
|
||||
|| (languagelen > 10 && !isdigit(language[10]))
|
||||
|| strncasecmp(language, "javascript", 10)) {
|
||||
mem_free(language);
|
||||
goto not_processed;
|
||||
}
|
||||
|
||||
mem_free(language);
|
||||
}
|
||||
|
||||
if (html_context->part->document
|
||||
&& (src = get_attr_val(a, "src", html_context->options))) {
|
||||
/* External reference. */
|
||||
|
||||
unsigned char *import_url;
|
||||
struct uri *uri;
|
||||
|
||||
if (!get_opt_bool("ecmascript.enable")) {
|
||||
mem_free(src);
|
||||
goto not_processed;
|
||||
}
|
||||
|
||||
/* HTML <head> urls should already be fine but we can.t detect them. */
|
||||
import_url = join_urls(html_context->base_href, src);
|
||||
mem_free(src);
|
||||
if (!import_url) goto imported;
|
||||
|
||||
uri = get_uri(import_url, URI_BASE);
|
||||
if (!uri) goto imported;
|
||||
|
||||
/* Request the imported script as part of the document ... */
|
||||
html_context->special_f(html_context, SP_SCRIPT, uri);
|
||||
done_uri(uri);
|
||||
|
||||
/* Create URL reference onload snippet. */
|
||||
insert_in_string(&import_url, 0, "^", 1);
|
||||
add_to_string_list(&html_context->part->document->onload_snippets,
|
||||
import_url, -1);
|
||||
|
||||
imported:
|
||||
/* Retreat. Do not permit nested scripts, tho'. */
|
||||
if (import_url) mem_free(import_url);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Positive, grab the rest and interpret it. */
|
||||
|
||||
/* First position to the real script start. */
|
||||
while (html < eof && *html <= ' ') html++;
|
||||
if (eof - html > 4 && !strncmp(html, "<!--", 4)) {
|
||||
in_comment = 1;
|
||||
/* We either skip to the end of line or to -->. */
|
||||
for (; *html != '\n' && *html != '\r' && eof - html >= 3; html++) {
|
||||
if (!strncmp(html, "-->", 3)) {
|
||||
/* This means the document is probably broken.
|
||||
* We will now try to process the rest of
|
||||
* <script> contents, which is however likely
|
||||
* to be empty. Should we try to process the
|
||||
* comment too? Currently it seems safer but
|
||||
* less tolerant to broken pages, if there are
|
||||
* any like this. */
|
||||
html += 3;
|
||||
in_comment = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*end = html;
|
||||
|
||||
/* Now look ahead for the script end. The <script> contents is raw
|
||||
* CDATA, so we just look for the ending tag and need not care for
|
||||
* any quote marks counting etc - YET, we are more tolerant and permit
|
||||
* </script> stuff inside of the script if the whole <script> element
|
||||
* contents is wrapped in a comment. See i.e. Mozilla bug 26857 for fun
|
||||
* reading regarding this. */
|
||||
for (; *end < eof; (*end)++) {
|
||||
unsigned char *name;
|
||||
int namelen;
|
||||
|
||||
if (in_comment) {
|
||||
/* TODO: If we ever get some standards-quirk mode
|
||||
* distinction, this should be disabled in the
|
||||
* standards mode (and we should just look for CDATA
|
||||
* end, which is "</"). --pasky */
|
||||
if (eof - *end >= 3 && !strncmp(*end, "-->", 3)) {
|
||||
/* Next iteration will jump passed the ending '>' */
|
||||
(*end) += 2;
|
||||
in_comment = 0;
|
||||
}
|
||||
continue;
|
||||
/* XXX: Scan for another comment? That's admittelly
|
||||
* already stretching things a little bit to an
|
||||
* extreme ;-). */
|
||||
}
|
||||
|
||||
if (**end != '<')
|
||||
continue;
|
||||
/* We want to land before the closing element, that's why we
|
||||
* don't pass @end also as the appropriate parse_element()
|
||||
* argument. */
|
||||
if (parse_element(*end, eof, &name, &namelen, NULL, NULL))
|
||||
continue;
|
||||
if (strlcasecmp(name, namelen, "/script", 7))
|
||||
continue;
|
||||
/* We have won! */
|
||||
break;
|
||||
}
|
||||
if (*end >= eof) {
|
||||
/* Either the document is not completely loaded yet or it's
|
||||
* broken. At any rate, run away screaming. */
|
||||
*end = eof; /* Just for sanity. */
|
||||
return;
|
||||
}
|
||||
|
||||
if (html_context->part->document && *html != '^') {
|
||||
add_to_string_list(&html_context->part->document->onload_snippets,
|
||||
html, *end - html);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -411,12 +590,20 @@ html_hr(struct html_context *html_context, unsigned char *a,
|
||||
}
|
||||
|
||||
void
|
||||
html_table(struct html_context *html_context, unsigned char *a,
|
||||
html_table(struct html_context *html_context, unsigned char *attr,
|
||||
unsigned char *html, unsigned char *eof, unsigned char **end)
|
||||
{
|
||||
if (html_context->options->tables
|
||||
&& html_context->table_level < HTML_MAX_TABLE_LEVEL) {
|
||||
format_table(attr, html, eof, end, html_context);
|
||||
ln_break(html_context, 2);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
par_format.leftmargin = par_format.rightmargin = html_context->margin;
|
||||
par_format.align = ALIGN_LEFT;
|
||||
html_linebrk(html_context, a, html, eof, end);
|
||||
html_linebrk(html_context, attr, html, eof, end);
|
||||
format.style.attr = 0;
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,6 @@
|
||||
#include "document/html/parser/parse.h"
|
||||
#include "document/html/parser/stack.h"
|
||||
#include "document/html/parser.h"
|
||||
#include "document/html/tables.h"
|
||||
#include "document/options.h"
|
||||
#include "intl/charsets.h"
|
||||
#include "util/conv.h"
|
||||
@ -782,14 +781,6 @@ start_element(struct element_info *ei,
|
||||
restore_format = html_is_preformatted();
|
||||
old_format = par_format;
|
||||
|
||||
if (ei->func == html_table && html_context->options->tables
|
||||
&& html_context->table_level < HTML_MAX_TABLE_LEVEL) {
|
||||
ELEMENT_RENDER_PROLOGUE
|
||||
format_table(attr, html, eof, &html, html_context);
|
||||
ln_break(html_context, 2);
|
||||
return html;
|
||||
}
|
||||
|
||||
/* Support for <meta refresh="..."> inside <body>. (bug 700) */
|
||||
if (ei->func == html_meta && html_context->was_body) {
|
||||
html_handle_body_meta(html_context, name - 1, eof);
|
||||
|
@ -951,19 +951,42 @@ static inline void
|
||||
draw_frame_point(struct table *table, signed char *frame[2], int x, int y,
|
||||
int col, int row, struct html_context *html_context)
|
||||
{
|
||||
/* TODO: Use /BORDER._.* / macros ! --pasky */
|
||||
static unsigned char const border_chars[81] = {
|
||||
0x00, 0xb3, 0xba, 0xc4, 0xc0, 0xd3, 0xcd, 0xd4, 0xc8,
|
||||
0xc4, 0xd9, 0xbd, 0xc4, 0xc1, 0xd0, 0xcd, 0xd4, 0xc8,
|
||||
0xcd, 0xbe, 0xbc, 0xcd, 0xbe, 0xbc, 0xcd, 0xcf, 0xca,
|
||||
static enum border_char const border_chars[81] = {
|
||||
BORDER_NONE, BORDER_SVLINE, BORDER_DVLINE,
|
||||
BORDER_SHLINE, BORDER_SDLCORNER, BORDER_DSDLCORNER,
|
||||
BORDER_DHLINE, BORDER_SDDLCORNER, BORDER_DDLCORNER,
|
||||
|
||||
0xb3, 0xb3, 0xba, 0xda, 0xc3, 0xd3, 0xd5, 0xc6, 0xc8,
|
||||
0xbf, 0xb4, 0xbd, 0xc2, 0xc5, 0xd0, 0xd5, 0xc6, 0xc8,
|
||||
0xb8, 0xb5, 0xbc, 0xb8, 0xb5, 0xbc, 0xd1, 0xd8, 0xca,
|
||||
BORDER_SHLINE, BORDER_SDRCORNER, BORDER_DSDRCORNER,
|
||||
BORDER_SHLINE, BORDER_SUTEE, BORDER_DSUTEE,
|
||||
BORDER_DHLINE, BORDER_SDDLCORNER, BORDER_DDLCORNER,
|
||||
|
||||
0xba, 0xba, 0xba, 0xd6, 0xd6, 0xc7, 0xc9, 0xc9, 0xcc,
|
||||
0xb7, 0xb7, 0xb6, 0xd2, 0xd2, 0xd7, 0xc9, 0xc9, 0xcc,
|
||||
0xbb, 0xbb, 0xb9, 0xbb, 0xbb, 0xb9, 0xcb, 0xcb, 0xce,
|
||||
BORDER_DHLINE, BORDER_SDDRCORNER, BORDER_DDRCORNER,
|
||||
BORDER_DHLINE, BORDER_SDDRCORNER, BORDER_DDRCORNER,
|
||||
BORDER_DHLINE, BORDER_SDUTEE, BORDER_DUTEE,
|
||||
|
||||
BORDER_SVLINE, BORDER_SVLINE, BORDER_DVLINE,
|
||||
BORDER_SULCORNER, BORDER_SRTEE, BORDER_DSDLCORNER,
|
||||
BORDER_SDULCORNER, BORDER_SDRTEE, BORDER_DDLCORNER,
|
||||
|
||||
BORDER_SURCORNER, BORDER_SLTEE, BORDER_DSDRCORNER,
|
||||
BORDER_SDTEE, BORDER_SCROSS, BORDER_DSUTEE,
|
||||
BORDER_SDULCORNER, BORDER_SDRTEE, BORDER_DDLCORNER,
|
||||
|
||||
BORDER_SDURCORNER, BORDER_SDLTEE, BORDER_DDRCORNER,
|
||||
BORDER_SDURCORNER, BORDER_SDLTEE, BORDER_DDRCORNER,
|
||||
BORDER_SDDTEE, BORDER_SDCROSS, BORDER_DUTEE,
|
||||
|
||||
BORDER_DVLINE, BORDER_DVLINE, BORDER_DVLINE,
|
||||
BORDER_DSULCORNER, BORDER_DSULCORNER, BORDER_DSRTEE,
|
||||
BORDER_DULCORNER, BORDER_DULCORNER, BORDER_DRTEE,
|
||||
|
||||
BORDER_DSURCORNER, BORDER_DSURCORNER, BORDER_DSLTEE,
|
||||
BORDER_DSDTEE, BORDER_DSDTEE, BORDER_DSCROSS,
|
||||
BORDER_DULCORNER, BORDER_DULCORNER, BORDER_DRTEE,
|
||||
|
||||
BORDER_DURCORNER, BORDER_DURCORNER, BORDER_DLTEE,
|
||||
BORDER_DURCORNER, BORDER_DURCORNER, BORDER_DLTEE,
|
||||
BORDER_DDTEE, BORDER_DDTEE, BORDER_DCROSS,
|
||||
};
|
||||
/* Note: I have no clue wether any of these names are suitable but they
|
||||
* should give an idea of what is going on. --jonas */
|
||||
|
@ -155,8 +155,10 @@ extern char *__builtin_stpcpy(char *dest, const char *src);
|
||||
extern void *__builtin_mempcpy(void *dest, const void *src, size_t n);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
#ifndef __builtin_va_copy
|
||||
#define __builtin_va_copy(dest, src) do { dest = src; } while (0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -42,27 +42,148 @@ struct screen_char {
|
||||
/* TODO: When we'll support internal Unicode, this should be changed to some
|
||||
* Unicode sequences. --pasky */
|
||||
|
||||
enum border_char {
|
||||
/* single-lined */
|
||||
BORDER_SULCORNER = 218,
|
||||
BORDER_SURCORNER = 191,
|
||||
BORDER_SDLCORNER = 192,
|
||||
BORDER_SDRCORNER = 217,
|
||||
BORDER_SLTEE = 180, /* => the tee points to the left => -| */
|
||||
BORDER_SRTEE = 195,
|
||||
BORDER_SDTEE = 194,
|
||||
BORDER_SUTEE = 193,
|
||||
BORDER_SVLINE = 179,
|
||||
BORDER_SHLINE = 196,
|
||||
BORDER_SCROSS = 197, /* + */
|
||||
/* Codes extracted from twin-0.4.6 GPL project, a Textmode WINdow environment,
|
||||
* by Massimiliano Ghilardi http://linuz.sns.it/~max/ */
|
||||
|
||||
/* double-lined */ /* TODO: The TEE-chars! */
|
||||
BORDER_DULCORNER = 201,
|
||||
BORDER_DURCORNER = 187,
|
||||
BORDER_DDLCORNER = 200,
|
||||
BORDER_DDRCORNER = 188,
|
||||
BORDER_DVLINE = 186,
|
||||
BORDER_DHLINE = 205,
|
||||
/* Not yet used
|
||||
#define T_UTF_16_BOX_DRAWINGS_LIGHT_VERTICAL 0x2502
|
||||
#define T_UTF_16_BOX_DRAWINGS_LIGHT_VERTICAL_AND_LEFT 0x2524
|
||||
#define T_UTF_16_BOX_DRAWINGS_VERTICAL_SINGLE_AND_LEFT_DOUBLE 0x2561
|
||||
#define T_UTF_16_BOX_DRAWINGS_VERTICAL_DOUBLE_AND_LEFT_SINGLE 0x2562
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOWN_DOUBLE_AND_LEFT_SINGLE 0x2556
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOWN_SINGLE_AND_LEFT_DOUBLE 0x2555
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOUBLE_VERTICAL_AND_LEFT 0x2563
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOUBLE_VERTICAL 0x2551
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOUBLE_DOWN_AND_LEFT 0x2557
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOUBLE_UP_AND_LEFT 0x255D
|
||||
#define T_UTF_16_BOX_DRAWINGS_UP_DOUBLE_AND_LEFT_SINGLE 0x255C
|
||||
#define T_UTF_16_BOX_DRAWINGS_UP_SINGLE_AND_LEFT_DOUBLE 0x255B
|
||||
#define T_UTF_16_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT 0x2510
|
||||
#define T_UTF_16_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT 0x2514
|
||||
#define T_UTF_16_BOX_DRAWINGS_LIGHT_UP_AND_HORIZONTAL 0x2534
|
||||
#define T_UTF_16_BOX_DRAWINGS_LIGHT_DOWN_AND_HORIZONTAL 0x252C
|
||||
#define T_UTF_16_BOX_DRAWINGS_LIGHT_VERTICAL_AND_RIGHT 0x251C
|
||||
#define T_UTF_16_BOX_DRAWINGS_LIGHT_HORIZONTAL 0x2500
|
||||
#define T_UTF_16_BOX_DRAWINGS_LIGHT_VERTICAL_AND_HORIZONTAL 0x253C
|
||||
#define T_UTF_16_BOX_DRAWINGS_VERTICAL_SINGLE_AND_RIGHT_DOUBLE 0x255E
|
||||
#define T_UTF_16_BOX_DRAWINGS_VERTICAL_DOUBLE_AND_RIGHT_SINGLE 0x255F
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOUBLE_UP_AND_RIGHT 0x255A
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOUBLE_DOWN_AND_RIGHT 0x2554
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOUBLE_UP_AND_HORIZONTAL 0x2569
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOUBLE_DOWN_AND_HORIZONTAL 0x2566
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOUBLE_VERTICAL_AND_RIGHT 0x2560
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOUBLE_HORIZONTAL 0x2550
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOUBLE_VERTICAL_AND_HORIZONTAL 0x256C
|
||||
#define T_UTF_16_BOX_DRAWINGS_UP_SINGLE_AND_HORIZONTAL_DOUBLE 0x2567
|
||||
#define T_UTF_16_BOX_DRAWINGS_UP_DOUBLE_AND_HORIZONTAL_SINGLE 0x2568
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOWN_SINGLE_AND_HORIZONTAL_DOUBLE 0x2564
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOWN_DOUBLE_AND_HORIZONTAL_SINGLE 0x2565
|
||||
#define T_UTF_16_BOX_DRAWINGS_UP_DOUBLE_AND_RIGHT_SINGLE 0x2559
|
||||
#define T_UTF_16_BOX_DRAWINGS_UP_SINGLE_AND_RIGHT_DOUBLE 0x2558
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOWN_SINGLE_AND_RIGHT_DOUBLE 0x2552
|
||||
#define T_UTF_16_BOX_DRAWINGS_DOWN_DOUBLE_AND_RIGHT_SINGLE 0x2553
|
||||
#define T_UTF_16_BOX_DRAWINGS_VERTICAL_DOUBLE_AND_HORIZONTAL_SINGLE 0x256B
|
||||
#define T_UTF_16_BOX_DRAWINGS_VERTICAL_SINGLE_AND_HORIZONTAL_DOUBLE 0x256A
|
||||
#define T_UTF_16_BOX_DRAWINGS_LIGHT_UP_AND_LEFT 0x2518
|
||||
#define T_UTF_16_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT 0x250C
|
||||
*/
|
||||
|
||||
/* CP437 is used by default */
|
||||
#define T_CP437_BOX_DRAWINGS_LIGHT_VERTICAL 0x00B3
|
||||
#define T_CP437_BOX_DRAWINGS_LIGHT_VERTICAL_AND_LEFT 0x00B4
|
||||
#define T_CP437_BOX_DRAWINGS_VERTICAL_SINGLE_AND_LEFT_DOUBLE 0x00B5
|
||||
#define T_CP437_BOX_DRAWINGS_VERTICAL_DOUBLE_AND_LEFT_SINGLE 0x00B6
|
||||
#define T_CP437_BOX_DRAWINGS_DOWN_DOUBLE_AND_LEFT_SINGLE 0x00B7
|
||||
#define T_CP437_BOX_DRAWINGS_DOWN_SINGLE_AND_LEFT_DOUBLE 0x00B8
|
||||
#define T_CP437_BOX_DRAWINGS_DOUBLE_VERTICAL_AND_LEFT 0x00B9
|
||||
#define T_CP437_BOX_DRAWINGS_DOUBLE_VERTICAL 0x00BA
|
||||
#define T_CP437_BOX_DRAWINGS_DOUBLE_DOWN_AND_LEFT 0x00BB
|
||||
#define T_CP437_BOX_DRAWINGS_DOUBLE_UP_AND_LEFT 0x00BC
|
||||
#define T_CP437_BOX_DRAWINGS_UP_DOUBLE_AND_LEFT_SINGLE 0x00BD
|
||||
#define T_CP437_BOX_DRAWINGS_UP_SINGLE_AND_LEFT_DOUBLE 0x00BE
|
||||
#define T_CP437_BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT 0x00BF
|
||||
#define T_CP437_BOX_DRAWINGS_LIGHT_UP_AND_RIGHT 0x00C0
|
||||
#define T_CP437_BOX_DRAWINGS_LIGHT_UP_AND_HORIZONTAL 0x00C1
|
||||
#define T_CP437_BOX_DRAWINGS_LIGHT_DOWN_AND_HORIZONTAL 0x00C2
|
||||
#define T_CP437_BOX_DRAWINGS_LIGHT_VERTICAL_AND_RIGHT 0x00C3
|
||||
#define T_CP437_BOX_DRAWINGS_LIGHT_HORIZONTAL 0x00C4
|
||||
#define T_CP437_BOX_DRAWINGS_LIGHT_VERTICAL_AND_HORIZONTAL 0x00C5
|
||||
#define T_CP437_BOX_DRAWINGS_VERTICAL_SINGLE_AND_RIGHT_DOUBLE 0x00C6
|
||||
#define T_CP437_BOX_DRAWINGS_VERTICAL_DOUBLE_AND_RIGHT_SINGLE 0x00C7
|
||||
#define T_CP437_BOX_DRAWINGS_DOUBLE_UP_AND_RIGHT 0x00C8
|
||||
#define T_CP437_BOX_DRAWINGS_DOUBLE_DOWN_AND_RIGHT 0x00C9
|
||||
#define T_CP437_BOX_DRAWINGS_DOUBLE_UP_AND_HORIZONTAL 0x00CA
|
||||
#define T_CP437_BOX_DRAWINGS_DOUBLE_DOWN_AND_HORIZONTAL 0x00CB
|
||||
#define T_CP437_BOX_DRAWINGS_DOUBLE_VERTICAL_AND_RIGHT 0x00CC
|
||||
#define T_CP437_BOX_DRAWINGS_DOUBLE_HORIZONTAL 0x00CD
|
||||
#define T_CP437_BOX_DRAWINGS_DOUBLE_VERTICAL_AND_HORIZONTAL 0x00CE
|
||||
#define T_CP437_BOX_DRAWINGS_UP_SINGLE_AND_HORIZONTAL_DOUBLE 0x00CF
|
||||
#define T_CP437_BOX_DRAWINGS_UP_DOUBLE_AND_HORIZONTAL_SINGLE 0x00D0
|
||||
#define T_CP437_BOX_DRAWINGS_DOWN_SINGLE_AND_HORIZONTAL_DOUBLE 0x00D1
|
||||
#define T_CP437_BOX_DRAWINGS_DOWN_DOUBLE_AND_HORIZONTAL_SINGLE 0x00D2
|
||||
#define T_CP437_BOX_DRAWINGS_UP_DOUBLE_AND_RIGHT_SINGLE 0x00D3
|
||||
#define T_CP437_BOX_DRAWINGS_UP_SINGLE_AND_RIGHT_DOUBLE 0x00D4
|
||||
#define T_CP437_BOX_DRAWINGS_DOWN_SINGLE_AND_RIGHT_DOUBLE 0x00D5
|
||||
#define T_CP437_BOX_DRAWINGS_DOWN_DOUBLE_AND_RIGHT_SINGLE 0x00D6
|
||||
#define T_CP437_BOX_DRAWINGS_VERTICAL_DOUBLE_AND_HORIZONTAL_SINGLE 0x00D7
|
||||
#define T_CP437_BOX_DRAWINGS_VERTICAL_SINGLE_AND_HORIZONTAL_DOUBLE 0x00D8
|
||||
#define T_CP437_BOX_DRAWINGS_LIGHT_UP_AND_LEFT 0x00D9
|
||||
#define T_CP437_BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT 0x00DA
|
||||
|
||||
#define BD_LIGHT(XXX) T_CP437_BOX_DRAWINGS_LIGHT_##XXX
|
||||
#define BD_DOUBLE(XXX) T_CP437_BOX_DRAWINGS_DOUBLE_##XXX
|
||||
#define BD_MIXED(XXX) T_CP437_BOX_DRAWINGS_##XXX
|
||||
|
||||
enum border_char {
|
||||
BORDER_NONE = 0x0000,
|
||||
|
||||
/* single-lined */
|
||||
BORDER_SULCORNER = BD_LIGHT(DOWN_AND_RIGHT),
|
||||
BORDER_SURCORNER = BD_LIGHT(DOWN_AND_LEFT),
|
||||
BORDER_SDLCORNER = BD_LIGHT(UP_AND_RIGHT),
|
||||
BORDER_SDRCORNER = BD_LIGHT(UP_AND_LEFT),
|
||||
BORDER_SLTEE = BD_LIGHT(VERTICAL_AND_LEFT), /* => the tee points to the left => -| */
|
||||
BORDER_SRTEE = BD_LIGHT(VERTICAL_AND_RIGHT),
|
||||
BORDER_SDTEE = BD_LIGHT(DOWN_AND_HORIZONTAL),
|
||||
BORDER_SUTEE = BD_LIGHT(UP_AND_HORIZONTAL),
|
||||
BORDER_SVLINE = BD_LIGHT(VERTICAL),
|
||||
BORDER_SHLINE = BD_LIGHT(HORIZONTAL),
|
||||
BORDER_SCROSS = BD_LIGHT(VERTICAL_AND_HORIZONTAL), /* + */
|
||||
|
||||
/* double-lined */
|
||||
BORDER_DULCORNER = BD_DOUBLE(DOWN_AND_RIGHT),
|
||||
BORDER_DURCORNER = BD_DOUBLE(DOWN_AND_LEFT),
|
||||
BORDER_DDLCORNER = BD_DOUBLE(UP_AND_RIGHT),
|
||||
BORDER_DDRCORNER = BD_DOUBLE(UP_AND_LEFT),
|
||||
BORDER_DLTEE = BD_DOUBLE(VERTICAL_AND_LEFT),
|
||||
BORDER_DRTEE = BD_DOUBLE(VERTICAL_AND_RIGHT),
|
||||
BORDER_DDTEE = BD_DOUBLE(DOWN_AND_HORIZONTAL),
|
||||
BORDER_DUTEE = BD_DOUBLE(UP_AND_HORIZONTAL),
|
||||
BORDER_DVLINE = BD_DOUBLE(VERTICAL),
|
||||
BORDER_DHLINE = BD_DOUBLE(HORIZONTAL),
|
||||
BORDER_DCROSS = BD_DOUBLE(VERTICAL_AND_HORIZONTAL),
|
||||
|
||||
/* Mixed single then double */
|
||||
BORDER_SDULCORNER = BD_MIXED(DOWN_SINGLE_AND_RIGHT_DOUBLE),
|
||||
BORDER_SDURCORNER = BD_MIXED(DOWN_SINGLE_AND_LEFT_DOUBLE),
|
||||
BORDER_SDDLCORNER = BD_MIXED(UP_SINGLE_AND_RIGHT_DOUBLE),
|
||||
BORDER_SDDRCORNER = BD_MIXED(UP_SINGLE_AND_LEFT_DOUBLE),
|
||||
BORDER_SDLTEE = BD_MIXED(VERTICAL_SINGLE_AND_LEFT_DOUBLE),
|
||||
BORDER_SDRTEE = BD_MIXED(VERTICAL_SINGLE_AND_RIGHT_DOUBLE),
|
||||
BORDER_SDDTEE = BD_MIXED(DOWN_SINGLE_AND_HORIZONTAL_DOUBLE),
|
||||
BORDER_SDUTEE = BD_MIXED(UP_SINGLE_AND_HORIZONTAL_DOUBLE),
|
||||
BORDER_SDCROSS = BD_MIXED(VERTICAL_SINGLE_AND_HORIZONTAL_DOUBLE),
|
||||
|
||||
/* Mixed double then single */
|
||||
BORDER_DSULCORNER = BD_MIXED(DOWN_DOUBLE_AND_RIGHT_SINGLE),
|
||||
BORDER_DSURCORNER = BD_MIXED(DOWN_DOUBLE_AND_LEFT_SINGLE),
|
||||
BORDER_DSDLCORNER = BD_MIXED(UP_DOUBLE_AND_RIGHT_SINGLE),
|
||||
BORDER_DSDRCORNER = BD_MIXED(UP_DOUBLE_AND_LEFT_SINGLE),
|
||||
BORDER_DSLTEE = BD_MIXED(VERTICAL_DOUBLE_AND_LEFT_SINGLE),
|
||||
BORDER_DSRTEE = BD_MIXED(VERTICAL_DOUBLE_AND_RIGHT_SINGLE),
|
||||
BORDER_DSDTEE = BD_MIXED(DOWN_DOUBLE_AND_HORIZONTAL_SINGLE),
|
||||
BORDER_DSUTEE = BD_MIXED(UP_DOUBLE_AND_HORIZONTAL_SINGLE),
|
||||
BORDER_DSCROSS = BD_MIXED(VERTICAL_DOUBLE_AND_HORIZONTAL_SINGLE),
|
||||
};
|
||||
|
||||
/* 0 -> 1 <- 2 v 3 ^ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user