KMacroExpanderBase
#include <KMacroExpander>
Public Member Functions | |
KMacroExpanderBase (QChar c=QLatin1Char('%')) | |
virtual | ~KMacroExpanderBase () |
QChar | escapeChar () const |
void | expandMacros (QString &str) |
bool | expandMacrosShellQuote (QString &str) |
bool | expandMacrosShellQuote (QString &str, int &pos) |
void | setEscapeChar (QChar c) |
Protected Member Functions | |
virtual int | expandEscapedMacro (const QString &str, int pos, QStringList &ret) |
virtual int | expandPlainMacro (const QString &str, int pos, QStringList &ret) |
Detailed Description
Abstract base class for the worker classes behind the KMacroExpander namespace and the KCharMacroExpander and KWordMacroExpander classes.
Definition at line 31 of file kmacroexpander.h.
Constructor & Destructor Documentation
◆ KMacroExpanderBase()
|
explicit |
Constructor.
- Parameters
-
c escape char indicating start of macros, or QChar::null for none
Definition at line 14 of file kmacroexpander.cpp.
◆ ~KMacroExpanderBase()
|
virtualdefault |
Destructor.
Member Function Documentation
◆ escapeChar()
QChar KMacroExpanderBase::escapeChar | ( | ) | const |
Obtain the macro escape character.
- Returns
- escape char indicating start of macros, or QChar::null if none
Definition at line 26 of file kmacroexpander.cpp.
◆ expandEscapedMacro()
|
protectedvirtual |
This function is called every time the escape char is found if it is not QChar::null.
It should determine whether the string starting at pos
witin str
is a valid macro and return the substitution value for it if so.
- Parameters
-
str the input string pos the offset within str
. Note that this is the position of the occurrence of the escape charret return value: the string to substitute for the macro
- Returns
- If greater than zero, the number of chars at
pos
instr
to substitute withret
(i.e., a valid macro was found). If less than zero, subtract this value frompos
(to skip a macro, i.e., substitute it with itself). If zero, scanning continues as if no escape char was encountered at all.
Reimplemented in KCharMacroExpander, and KWordMacroExpander.
Definition at line 78 of file kmacroexpander.cpp.
◆ expandMacros()
void KMacroExpanderBase::expandMacros | ( | QString & | str | ) |
Perform safe macro expansion (substitution) on a string.
- Parameters
-
str the string in which macros are expanded in-place
Definition at line 31 of file kmacroexpander.cpp.
◆ expandMacrosShellQuote() [1/2]
bool KMacroExpanderBase::expandMacrosShellQuote | ( | QString & | str | ) |
Same as above, but always starts at position 0, and unmatched closing parens and braces are treated as errors.
Definition at line 66 of file kmacroexpander.cpp.
◆ expandMacrosShellQuote() [2/2]
bool KMacroExpanderBase::expandMacrosShellQuote | ( | QString & | str, |
int & | pos ) |
Perform safe macro expansion (substitution) on a string for use in shell commands.
*NIX notes
Explicitly supported shell constructs: \ '' "" $'' $"" {} () $(()) ${} $() ``
Implicitly supported shell constructs: (())
Unsupported shell constructs that will cause problems: Shortened "case $v in pat)
" syntax. Use "case $v in (pat)
" instead.
The rest of the shell (incl. bash) syntax is simply ignored, as it is not expected to cause problems.
Note that bash contains a bug which makes macro expansion within double quoted substitutions ("${VAR:-%macro}"
) inherently insecure.
For security reasons, never put expandos in command line arguments that are shell commands by themselves - "sh -c 'foo %f'
" is taboo. "file=%f sh -c 'foo "$file"'
" is OK.
Windows notes
All quoting syntax supported by KShell is supported here as well. Additionally, command grouping via parentheses is recognized - note however, that the parser is much stricter about unquoted parentheses than cmd itself. The rest of the cmd syntax is simply ignored, as it is not expected to cause problems - do not use commands that embed other commands, though - "for /f ...
" is taboo.
- Parameters
-
str the string in which macros are expanded in-place pos the position inside the string at which parsing/substitution should start, and upon exit where processing stopped
- Returns
- false if the string could not be parsed and therefore no safe substitution was possible. Note that macros will have been processed up to the point where the error occurred. An unmatched closing paren or brace outside any shell construct is not an error (unlike in the function below), but still prematurely terminates processing.
Definition at line 77 of file kmacroexpander_unix.cpp.
◆ expandPlainMacro()
|
protectedvirtual |
This function is called for every single char within the string if the escape char is QChar::null.
It should determine whether the string starting at pos
within str
is a valid macro and return the substitution value for it if so.
- Parameters
-
str the input string pos the offset within str
ret return value: the string to substitute for the macro
- Returns
- If greater than zero, the number of chars at
pos
instr
to substitute withret
(i.e., a valid macro was found). If less than zero, subtract this value frompos
(to skip a macro, i.e., substitute it with itself). If zero, no macro starts atpos
.
Reimplemented in KCharMacroExpander, and KWordMacroExpander.
Definition at line 72 of file kmacroexpander.cpp.
◆ setEscapeChar()
void KMacroExpanderBase::setEscapeChar | ( | QChar | c | ) |
Set the macro escape character.
- Parameters
-
c escape char indicating start of macros, or QChar::null if none
Definition at line 21 of file kmacroexpander.cpp.
The documentation for this class was generated from the following files:
Documentation copyright © 1996-2024 The KDE developers.
Generated on Mon Nov 18 2024 12:08:22 by doxygen 1.12.0 written by Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.