Я поиграл с идеей Лучиана Григоре об отмене определения используемых имен файлов и нашел (почти) общее решение этой проблемы:
, включая "define.file" в начале условных выражений и "undefine.file "после заданного условия.
Таким образом, проблема сводится к двум именам макросов, которые должны остаться: DEFINEFILE и UNDEFINEFILE.Но эти два макроса могут быть зашифрованы их хеш-кодом или случайным именем, чтобы избежать использования этих имен в условном тексте.
«define.file»:
#define height 480
#define os 1
The "undefine.file "
#undef height
#undef os
" conditionalcss.ccss "
/*root*/
some rootcode
#include __DEFINEFILENAMEPATH__
#if height==480
#include __UNDEFINEFILENAMEPATH__
/* height 480 */
.page {
line-height:23px;
}
#include __DEFINEFILENAMEPATH__
#elif height<480
#include __UNDEFINEFILENAMEPATH__
/* height > 480 */
.page {
line-height:46px;
}
#include __DEFINEFILENAMEPATH__
#endif
#if os==1
#include __UNDEFINEFILENAMEPATH__
os is windows (if 1 refers to windows)
and height also undefined i hope
#endif
Наконец, cppcall с параметрическими файлами определения и отмены:
cpp -P -D __DEFINEFILENAMEPATH__="\"define.file\"" -D __UNDEFINEFILENAMEPATH__="\"undefine.file\"" -oout.css css.ccss
С этимПо идее, результат "out.css" выглядит следующим образом:
some rootcode
.page {
line-height:23px;
}
os is windows (if 1 refers to windows)
and height also undefined i hope
Это решение имеет только недостатки двух макросов и возможную низкую производительность из-за множественного импорта.
Я надеюсь, что этопомогает другим людям решать их проблемы.
Greetz Adreamus