Ejemplo n.º 1
0
        internal static ISassType[] GetSassArguments(IntPtr rawPointer)
        {
            var length = sass_list_get_length(rawPointer);
            var values = new ISassType[length];

            for (int i = 0; i < length; ++i)
            {
                var rawValue       = sass_list_get_value(rawPointer, i);
                var convertedValue = GetSassType(rawValue);

                values[i] = convertedValue;
            }

            return(values);
        }
Ejemplo n.º 2
0
        private IntPtr SassFunctionCallback(IntPtr sassValues, IntPtr callback, IntPtr compiler)
        {
            ISassType[] convertedValues = TypeFactory.GetSassArguments(sassValues);

            IntPtr signaturePtr = sass_function_get_signature(callback);
            string signature    = PtrToString(signaturePtr);

            IntPtr cookiePtr = sass_function_get_cookie(callback);
            CustomFunctionDelegate customFunctionCallback = _functionsCallbackDictionary[cookiePtr];

            ISassType returnedValue = customFunctionCallback(_sassOptions, signature, convertedValues);

            var ptr = TypeFactory.GetRawPointer(returnedValue, ValidityEvent);

            ValidityEvent.Invoke();

            return(ptr);
        }
Ejemplo n.º 3
0
        public static IntPtr GetRawPointer(ISassType returnedValue, InternalPtrValidityEventHandler onValidityEvent)
        {
            if (returnedValue == null)
            {
                returnedValue = SassNull.Instance;
            }

            var sassExportableType = returnedValue as ISassExportableType;

            if (sassExportableType != null)
            {
                return(sassExportableType.GetInternalTypePtr(onValidityEvent, true));
            }

            // This should never happen. I could not find anyway to keep both
            // OOP and Resharper satisfied with the current design of ISassType
            // with public accessor and ISassExportableType with internal accessor
            // and all Sass types implementing both interfaces.
            return(IntPtr.Zero);
        }