summaryrefslogtreecommitdiff
path: root/lib/skin_parser/skin_parser.c
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2010-08-19 13:49:32 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2010-08-19 13:49:32 +0000
commit74ec011bb8df08b0fba3709cc590ce3842b1c973 (patch)
treef70f9dc4ac88f018ac537971c8ead37f5c290920 /lib/skin_parser/skin_parser.c
parentb73d15e9c6175ac48b2280b089a40f0554d15d6f (diff)
New skin tag: %if(<tag>, <operator>, <operand> [,option count]) which lets you do very simple logical comparissons on other tags.
<tag> is the tag to check against <operator> is the comparisson to do, any one of... =, !=, >, >=, <, <= (when comparring against a string tag like %ia only = and != work, and it is done NOT case sensitive) <operand> is either another tag, a number, or text. [option count] is an optinal number to use for the few tags which scale to the amount of options when used as a conditional (i.e %?pv<a|b|c|d> would have 4 options) example: %?if(%pv, >=, 0)<Warning.. volume clipping|coool...> That says "If the value from %pv (volume) is greater than or equal to 0 then display the warning line, otherwise the cool line." %?if(%ia, =, %Ia)<same artist> <= this artist and next artist are the same. some tags might need a touch of tweaking to work better with this. experiment and have fun git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27846 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'lib/skin_parser/skin_parser.c')
-rw-r--r--lib/skin_parser/skin_parser.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/skin_parser/skin_parser.c b/lib/skin_parser/skin_parser.c
index 66deaab102..b3bc9856b9 100644
--- a/lib/skin_parser/skin_parser.c
+++ b/lib/skin_parser/skin_parser.c
@@ -621,11 +621,13 @@ static int skin_parse_tag(struct skin_element* element, const char** document)
}
temp_params[j] = '\0';
j = 0;
- while (cursor[j] != ',' && cursor[j] != ')')
+ while (cursor[j] && cursor[j] != ',' && cursor[j] != ')')
{
haspercent = haspercent || (cursor[j] == '%');
hasdecimal = hasdecimal || (cursor[j] == '.');
- number = number && (isdigit(cursor[j]) || (cursor[j] == '.'));
+ number = number && (isdigit(cursor[j]) ||
+ (cursor[j] == '.') ||
+ (cursor[j] == '-'));
j++;
}
type_code = '*';