filepatterns, чтобы исключить совпадение - PullRequest
1 голос
/ 07 марта 2019

Shake использует различные формы сопоставления, filepath и pattern. Есть ли такой, который можно использовать для исключения шаблона?

Пример: У меня есть три каталога a, b, c (где-то в каталоге x), и для каждого нужны html файлы. Есть правило

(dir <> "//*.html") %> \out -> do -- deal with a and b

, который должен иметь дело только с каталогами a и b и аналогичным правилом для обработки файлов в c.

Есть ли способ (возможно, с использованием ?>), чтобы отделить два правила для одного

(\f -> "x" prefixOf f && not "x/c" prefixOf f) <> "//*.html")
(\f -> "x/x" prefixOf f ) <> "//*.html")

а другой аналогично?

Рекомендованный подход к использованию xx.a.html и xx.b.html здесь невозможен, поскольку файлы обрабатываются другими программами, которые ожидают обычное расширение html.

* * В качестве альтернативы тысячи двадцать-один * * тысяча двадцать-два

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Правило:

pattern %> action

Эквивалентно:

(pattern ?==) ?> action

Таким образом, вы можете написать:

(\x -> "//*.html" ?== x && not ("c//*.html" ?== x) ?> action

Для сопоставления правил, соответствующих //*.html,но не c//*.html.

В более общем смысле вообще нет необходимости использовать оператор FilePattern ?==, поэтому вместо него можно использовать произвольные совпадающие предикаты.

0 голосов
/ 08 марта 2019

С советом (особенно намеком на использование **/*.html) у меня это работает. Путь bakedD является префиксом staticD, и первое правило относится только к файлам в bakedD, которых нет в staticD, а другое только к этим:

(\x -> ((bakedD <> "**/*.html") ?== x) 
     && not  ((staticD <> "**/*.html") ?== x)) ?> \out -> do
            let md =   doughD </>  (makeRelative bakedD $ out -<.> "md")
            runErr2action $ bakeOneFileFPs  md  doughD templatesD out

(staticD <> "**/*.html" ) %> \out -> do
        copyFileChanged (replaceDirectory out doughD) out

Нет никакого совпадения между двумя правилами.

Я надеюсь, что это полезно для других с тем же типом проблемы.

...