<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:px="http://www.daisy.org/ns/pipeline/xproc" xmlns:pxi="http://www.daisy.org/ns/pipeline/xproc/internal" xmlns:d="http://www.daisy.org/ns/pipeline/data" version="1.0" type="px:sass-compile" name="main"> <p:documentation xmlns="http://www.w3.org/1999/xhtml"> <p>Compile Sass files to CSS.</p> </p:documentation> <p:input port="source.fileset" primary="true"> <p:documentation xmlns="http://www.w3.org/1999/xhtml"> <p>The input fileset containing the Sass files to be compiled (marked with <code>media-type="text/x-scss"</code>).</p> <p>Only the "SCSS" syntax is supported, and only Sass files not starting with "_" are compiled.</p> <p>The fileset will also be used for loading other resources. If files are present in memory, they are expected to be <code>c:data</code> documents. Only when files are not present in this fileset, it will be attempted to load them from disk.</p> </p:documentation> </p:input> <p:input port="source.in-memory" sequence="true"> <p:empty/> </p:input> <p:option name="parameters" select="map{}"> <p:documentation xmlns="http://www.w3.org/1999/xhtml"> <p>Global Sass variables.</p> </p:documentation> </p:option> <p:output port="result.fileset" primary="true"> <p:documentation xmlns="http://www.w3.org/1999/xhtml"> <p>Fileset containing all the CSS files that are a result of the compilation, together with all other files that were present in the input fileset, but except Sass files.</p> </p:documentation> </p:output> <p:output port="result.in-memory" sequence="true"> <p:pipe step="result" port="result.in-memory"/> </p:output> <p:declare-step type="pxi:sass-compile"> <p:input port="source" primary="true"/> <p:input port="context" sequence="true"/> <p:output port="result" sequence="true"/> <p:option name="parameters"/> </p:declare-step> <p:import href="http://www.daisy.org/pipeline/modules/fileset-utils/library.xpl"> <p:documentation> px:fileset-filter px:fileset-load px:fileset-add-entries </p:documentation> </p:import> <px:fileset-filter media-types="text/x-scss" name="sass"> <p:input port="source.in-memory"> <p:pipe step="main" port="source.in-memory"/> </p:input> </px:fileset-filter> <p:add-attribute match="//d:file" attribute-name="method" attribute-value="binary"> <p:documentation>Force base64 because CSS may not be encoded as UTF-8 (and fileset-load does not detect this)</p:documentation> </p:add-attribute> <px:fileset-load name="context"> <p:input port="in-memory"> <p:pipe step="sass" port="result.in-memory"/> </p:input> </px:fileset-load> <p:split-sequence test="not(starts-with(tokenize(base-uri(/),'/')[last()],'_'))"/> <p:for-each> <pxi:sass-compile> <p:input port="context"> <p:pipe step="context" port="result"/> </p:input> <p:with-option name="parameters" select="$parameters"/> </pxi:sass-compile> </p:for-each> <p:identity name="css"/> <p:sink/> <px:fileset-add-entries media-type="text/css" name="result"> <p:input port="source.fileset"> <p:pipe step="sass" port="not-matched"/> </p:input> <p:input port="source.in-memory"> <p:pipe step="sass" port="not-matched.in-memory"/> </p:input> <p:input port="entries"> <p:pipe step="css" port="result"/> </p:input> </px:fileset-add-entries> </p:declare-step>