$"..." support in scripts.
* grub-core/script/execute.c (grub_script_arglist_to_argv): Handle GRUB_SCRIPT_ARG_TYPE_GETTEXT. * grub-core/script/yylex.l: Likewise. * include/grub/script_sh.h (GRUB_SCRIPT_ARG_TYPE_GETTEXT): New enum value.
This commit is contained in:
parent
15eff5d9c2
commit
7e8fac16ad
4 changed files with 41 additions and 4 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2012-02-25 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
$"..." support in scripts.
|
||||||
|
|
||||||
|
* grub-core/script/execute.c (grub_script_arglist_to_argv): Handle
|
||||||
|
GRUB_SCRIPT_ARG_TYPE_GETTEXT.
|
||||||
|
* grub-core/script/yylex.l: Likewise.
|
||||||
|
* include/grub/script_sh.h (GRUB_SCRIPT_ARG_TYPE_GETTEXT): New enum
|
||||||
|
value.
|
||||||
|
|
||||||
2012-02-25 Vladimir Serbinenko <phcoder@gmail.com>
|
2012-02-25 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* gentpl.py: Remove obsolete pkglib_DATA handling.
|
* gentpl.py: Remove obsolete pkglib_DATA handling.
|
||||||
|
|
|
@ -328,8 +328,8 @@ grub_script_arglist_to_argv (struct grub_script_arglist *arglist,
|
||||||
struct grub_script_arg *arg = 0;
|
struct grub_script_arg *arg = 0;
|
||||||
struct grub_script_argv result = { 0, 0, 0 };
|
struct grub_script_argv result = { 0, 0, 0 };
|
||||||
|
|
||||||
auto int append (char *s, int escape_type);
|
auto int append (const char *s, int escape_type);
|
||||||
int append (char *s, int escape_type)
|
int append (const char *s, int escape_type)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
char *p = 0;
|
char *p = 0;
|
||||||
|
@ -395,12 +395,20 @@ grub_script_arglist_to_argv (struct grub_script_arglist *arglist,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GRUB_SCRIPT_ARG_TYPE_TEXT:
|
case GRUB_SCRIPT_ARG_TYPE_TEXT:
|
||||||
if (grub_strlen (arg->str) &&
|
if (arg->str[0] &&
|
||||||
grub_script_argv_append (&result, arg->str,
|
grub_script_argv_append (&result, arg->str,
|
||||||
grub_strlen (arg->str)))
|
grub_strlen (arg->str)))
|
||||||
goto fail;
|
goto fail;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GRUB_SCRIPT_ARG_TYPE_GETTEXT:
|
||||||
|
{
|
||||||
|
const char *t = _(arg->str);
|
||||||
|
if (grub_script_argv_append (&result, t, grub_strlen (t)))
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case GRUB_SCRIPT_ARG_TYPE_DQSTR:
|
case GRUB_SCRIPT_ARG_TYPE_DQSTR:
|
||||||
case GRUB_SCRIPT_ARG_TYPE_SQSTR:
|
case GRUB_SCRIPT_ARG_TYPE_SQSTR:
|
||||||
if (append (arg->str, 1))
|
if (append (arg->str, 1))
|
||||||
|
|
|
@ -133,15 +133,17 @@ ESC \\(.|\n)
|
||||||
SQCHR [^\']
|
SQCHR [^\']
|
||||||
DQCHR {ESC}|[^\\\"]
|
DQCHR {ESC}|[^\\\"]
|
||||||
DQSTR \"{DQCHR}*\"
|
DQSTR \"{DQCHR}*\"
|
||||||
|
I18NSTR \$\"{DQCHR}*\"
|
||||||
SQSTR \'{SQCHR}*\'
|
SQSTR \'{SQCHR}*\'
|
||||||
SPECIAL \?|\#|\*|\@
|
SPECIAL \?|\#|\*|\@
|
||||||
VARIABLE ${NAME}|$\{{NAME}\}|${DIGITS}|$\{{DIGITS}\}|${SPECIAL}|$\{{SPECIAL}\}
|
VARIABLE ${NAME}|$\{{NAME}\}|${DIGITS}|$\{{DIGITS}\}|${SPECIAL}|$\{{SPECIAL}\}
|
||||||
WORD ({CHAR}|{DQSTR}|{SQSTR}|{ESC}|{VARIABLE})+
|
WORD ({CHAR}|{DQSTR}|{SQSTR}|{ESC}|{VARIABLE}|{I18NSTR})+
|
||||||
|
|
||||||
MULTILINE {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*)|(\\\n))
|
MULTILINE {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*)|(\\\n))
|
||||||
|
|
||||||
%x SPLIT
|
%x SPLIT
|
||||||
%x DQUOTE
|
%x DQUOTE
|
||||||
|
%x I18NQUOTE
|
||||||
%x SQUOTE
|
%x SQUOTE
|
||||||
%x VAR
|
%x VAR
|
||||||
|
|
||||||
|
@ -217,6 +219,10 @@ MULTILINE {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*)|(\\\n))
|
||||||
yy_push_state (SQUOTE, yyscanner);
|
yy_push_state (SQUOTE, yyscanner);
|
||||||
ARG (GRUB_SCRIPT_ARG_TYPE_TEXT);
|
ARG (GRUB_SCRIPT_ARG_TYPE_TEXT);
|
||||||
}
|
}
|
||||||
|
"\$\"" {
|
||||||
|
yy_push_state (I18NQUOTE, yyscanner);
|
||||||
|
ARG (GRUB_SCRIPT_ARG_TYPE_GETTEXT);
|
||||||
|
}
|
||||||
\$ {
|
\$ {
|
||||||
yy_push_state (VAR, yyscanner);
|
yy_push_state (VAR, yyscanner);
|
||||||
ARG (GRUB_SCRIPT_ARG_TYPE_TEXT);
|
ARG (GRUB_SCRIPT_ARG_TYPE_TEXT);
|
||||||
|
@ -282,6 +288,18 @@ MULTILINE {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*)|(\\\n))
|
||||||
(.|\n) { COPY (yytext, yyleng); }
|
(.|\n) { COPY (yytext, yyleng); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<I18NQUOTE>{
|
||||||
|
\\\\ { COPY ("\\", 1); }
|
||||||
|
\\\" { COPY ("\"", 1); }
|
||||||
|
\\\n { /* ignore */ }
|
||||||
|
[^\"\\\n]+ { COPY (yytext, yyleng); }
|
||||||
|
\" {
|
||||||
|
yy_pop_state (yyscanner);
|
||||||
|
ARG (GRUB_SCRIPT_ARG_TYPE_GETTEXT);
|
||||||
|
}
|
||||||
|
(.|\n) { COPY (yytext, yyleng); }
|
||||||
|
}
|
||||||
|
|
||||||
<<EOF>> {
|
<<EOF>> {
|
||||||
yypop_buffer_state (yyscanner);
|
yypop_buffer_state (yyscanner);
|
||||||
yyextra->lexerstate->eof = 1;
|
yyextra->lexerstate->eof = 1;
|
||||||
|
|
|
@ -53,6 +53,7 @@ typedef enum
|
||||||
{
|
{
|
||||||
GRUB_SCRIPT_ARG_TYPE_VAR,
|
GRUB_SCRIPT_ARG_TYPE_VAR,
|
||||||
GRUB_SCRIPT_ARG_TYPE_TEXT,
|
GRUB_SCRIPT_ARG_TYPE_TEXT,
|
||||||
|
GRUB_SCRIPT_ARG_TYPE_GETTEXT,
|
||||||
GRUB_SCRIPT_ARG_TYPE_DQVAR,
|
GRUB_SCRIPT_ARG_TYPE_DQVAR,
|
||||||
GRUB_SCRIPT_ARG_TYPE_DQSTR,
|
GRUB_SCRIPT_ARG_TYPE_DQSTR,
|
||||||
GRUB_SCRIPT_ARG_TYPE_SQSTR,
|
GRUB_SCRIPT_ARG_TYPE_SQSTR,
|
||||||
|
|
Loading…
Reference in a new issue