# HG changeset patch # User ulion # Date 1198642556 0 # Node ID 26a8396379724ba326911535f9472fd8ff7834d3 # Parent 1e8364740a86f59877d1239980476bab0f4769ec Support ?(!NAME:TEXT) format for expanding string by property. diff -r 1e8364740a86 -r 26a839637972 DOCS/man/en/mplayer.1 --- a/DOCS/man/en/mplayer.1 Tue Dec 25 12:22:50 2007 +0000 +++ b/DOCS/man/en/mplayer.1 Wed Dec 26 04:15:56 2007 +0000 @@ -990,6 +990,8 @@ Expand to the value of the property NAME. .IPs ?(NAME:TEXT) Expand TEXT only if the property NAME is available. +.IPs ?(!NAME:TEXT) +Expand TEXT only if the property NAME is not available. .RE . .TP diff -r 1e8364740a86 -r 26a839637972 m_property.c --- a/m_property.c Tue Dec 25 12:22:50 2007 +0000 +++ b/m_property.c Wed Dec 26 04:15:56 2007 +0000 @@ -146,11 +146,16 @@ } else if(str[0] == '?' && str[1] == '(' && (e = strchr(str+2,':'))) { lvl++; if(!skip) { - int pl = e-str-2; + int is_not = str[2] == '!'; + int pl = e - str - (is_not ? 3 : 2); char pname[pl+1]; - memcpy(pname,str+2,pl); + memcpy(pname, str + (is_not ? 3 : 2), pl); pname[pl] = 0; - if(m_property_do(prop_list,pname,M_PROPERTY_GET,NULL,ctx) < 0) + if(m_property_do(prop_list,pname,M_PROPERTY_GET,NULL,ctx) < 0) { + if (!is_not) + skip = 1, skip_lvl = lvl; + } + else if (is_not) skip = 1, skip_lvl = lvl; } str = e+1, l = 0;