[build]
args = [
    "-x", "c++", "-std=c++14",
    "-DTRACING=1", "-DIMPL_LIBXUL", "-DMOZ_STYLO_BINDINGS=1",
    "-DMOZILLA_INTERNAL_API", "-DRUST_BINDGEN", "-DMOZ_STYLO"
]
"family=unix" = ["-DOS_POSIX=1"]
"os=solaris" = ["-DOS_SOLARIS=1"]
"os=dragonfly" = ["-DOS_BSD=1", "-DOS_DRAGONFLY=1"]
"os=freebsd" = ["-DOS_BSD=1", "-DOS_FREEBSD=1"]
"os=netbsd" = ["-DOS_BSD=1", "-DOS_NETBSD=1"]
"os=openbsd" = ["-DOS_BSD=1", "-DOS_OPENBSD=1"]
"os=macos" = [
    "-DOS_MACOSX=1", "-stdlib=libc++",
    # To disable the fixup bindgen applies which adds search
    # paths from clang command line in order to avoid potential
    # conflict with -stdlib=libc++.
    "--target=x86_64-apple-darwin",
]

[build."os=linux"]
args = ["-DOS_LINUX=1"]
"arch=x86" = ["-m32"]
"arch=x86_64" = ["-m64"]

[build."os=android"]
args = ["-DOS_ANDROID=1"]
"arch=aarch64" = ["--target=aarch64-linux-android"]
"arch=arm" = ["--target=armv7-linux-androideabi"]
"arch=x86" = ["--target=i686-linux-android"]

[build."os=windows"."env=msvc"]
args = [
    "-DOS_WIN=1", "-DWIN32=1",
    # For compatibility with MSVC 2015
    "-fms-compatibility-version=19",
    # To enable the builtin __builtin_offsetof so that CRT wouldn't
    # use reinterpret_cast in offsetof() which is not allowed inside
    # static_assert().
    "-D_CRT_USE_BUILTIN_OFFSETOF",
    # Enable hidden attribute (which is not supported by MSVC and
    # thus not enabled by default with a MSVC-compatibile build)
    # to exclude hidden symbols from the generated file.
    "-DHAVE_VISIBILITY_HIDDEN_ATTRIBUTE=1",
]
"arch=x86" = ["--target=i686-pc-win32"]
"arch=x86_64" = ["--target=x86_64-pc-win32"]

[structs]
headers = [
    "nsStyleStruct.h",
    "mozilla/ServoPropPrefList.h",
    "mozilla/StyleAnimationValue.h",
    "gfxFontConstants.h",
    "gfxFontFeatures.h",
    "nsThemeConstants.h",
    "mozilla/css/Loader.h",
    "mozilla/dom/AnimationEffectReadOnlyBinding.h",
    "mozilla/dom/KeyframeEffectBinding.h",
    "mozilla/AnimationPropertySegment.h",
    "mozilla/ComputedTiming.h",
    "mozilla/ComputedTimingFunction.h",
    "mozilla/Keyframe.h",
    "mozilla/ServoElementSnapshot.h",
    "mozilla/ServoElementSnapshotTable.h",
    "mozilla/css/ErrorReporter.h",
    "mozilla/dom/Element.h",
    "mozilla/dom/ChildIterator.h",
    "mozilla/dom/NameSpaceConstants.h",
    "mozilla/LookAndFeel.h",
    "mozilla/StylePrefs.h",
    "mozilla/ServoBindings.h",
    "mozilla/ServoMediaList.h",
    "mozilla/ServoStyleContext.h",
    "mozilla/SizeOfState.h",
    "nsCSSCounterStyleRule.h",
    "nsCSSFontFaceRule.h",
    "nsMediaFeatures.h",
    "nsMediaList.h",
    "nsXBLBinding.h",
]
raw-lines = [
    # FIXME(emilio): Incrementally remove these "pub use"s. Probably
    # mozilla::css and mozilla::dom are easier.
    "pub use self::root::*;",
    "pub use self::root::mozilla::*;",
    "pub use self::root::mozilla::css::*;",
    "pub use self::root::mozilla::dom::*;",
    "use atomic_refcell::AtomicRefCell;",
    "use data::ElementData;",
]
hide-types = [
    "nsString",
    ".*char_traits",
    ".*incompatible_char_type",
    # JS::Value uses alignas(8) which bindgen can't represent correctly on Linux
    # 32-bit.  See https://github.com/rust-lang-nursery/rust-bindgen/issues/917.
    # It's also not used by Stylo.  The following types are also hidden for
    # making use of it and being similarly unused by Stylo.
    "JS::Value",
    "mozilla::binding_danger::TErrorResult.*",
    "mozilla::ErrorResult.*", # Causes JSWhyMagic to be included & handled incorrectly.
    "mozilla::dom::CallbackFunction",
    "mozilla::dom::CallbackObject.*",
    "nsINode_ErrorResult",
    "nsDOMAttributeMap_ErrorResult",
    # End of JS::Value related types
]
bitfield-enums = [
    "nsChangeHint",
    "nsRestyleHint",
    "OriginFlags",
]
# FIXME: use proper namespaces and such when
# https://github.com/rust-lang-nursery/rust-bindgen/issues/1125
# is fixed.
rusty-enums = [
    "nsCompatibility",
    "EffectCompositor_CascadeLevel",
    "SheetType",
    "CallerType",
    "IterationCompositeOperation",
    "CompositeOperation",
    "InheritTarget",
    "SheetParsingMode",
    "FontFamilyType",
    "nsStyleContentType",
    "nsStyleSVGOpacitySource",
    "nsStyleUnit",
    "nsCSSKeyword",
    "nsIDocument_DocumentTheme",
    "nsIDocument_Type",
    "nsCSSUnit",
    "nsCSSPropertyID",
    "nsCSSCounterDesc",
    "nsMediaExpression_Range",
    "nsMediaFeature_RangeType",
    "nsMediaFeature_ValueType",
    "nsresult",
    "nsAtom_AtomKind",
    "nsStyleImageLayers_LayerType",
    "nsStyleImageOrientation_Angles",
    "nsTimingFunction_Type",
    "ServoElementSnapshotFlags",
    "Side",
    "PlaybackDirection",
    "FillMode",
    "HalfCorner",
    "URLMatchingFunction",
    "StyleDisplay",
    "StyleFloatEdge",
    "StyleShapeRadius",
    "StyleWindowDragging",
    "StyleOrient",
    "StyleBoxSizing",
    "StyleClear",
    "StyleFloat",
    "StyleUserModify",
    "StyleUserInput",
    "StyleBoxDirection",
    "StyleTextJustify",
    "StyleHyphens",
    "StyleGeometryBox",
    "StyleFillRule",
    "StyleShapeSourceType",
    "StyleBasicShapeType",
    "nsStyleImageLayers_Size_DimensionType",
    "StyleStackSizing",
    "StyleBoxPack",
    "StyleBoxOrient",
    "StyleBoxAlign",
    "StyleUserFocus",
    "StyleUserSelect",
    "StyleImageLayerRepeat",
    "StyleBoxDecorationBreak",
    "StyleRuleInclusion",
    "StyleGridTrackBreadth",
    "nsStyleImageType",
    "StyleWhiteSpace",
    "nsStyleSVGPaintType",
    "nsStyleSVGFallbackType",
    # ".*Style.*",
    "nsINode_BooleanFlag",
    "CSSPseudoElementType",
    "CSSPseudoClassType",
    "LookAndFeel_ColorID",
    "LookAndFeel_FontID",
    "MatrixTransformOperator",
]
constified-enum-variants = [
    { enum = "nsCSSPropertyID", variants = ["eCSSProperty_COUNT.*"] },
]
whitelist-vars = [
    "NS_AUTHOR_SPECIFIED_.*",
    "NS_THEME_.*",
    "NODE_.*",
    "ELEMENT_.*",
    "NS_FONT_.*",
    "NS_STYLE_.*",
    "NS_MATHML_.*",
    "NS_RADIUS_.*",
    "BORDER_COLOR_.*",
    "BORDER_STYLE_.*",
    "mozilla::SERVO_PREF_.*",
    "CSS_PSEUDO_ELEMENT_.*",
    "SERVO_CSS_PSEUDO_ELEMENT_FLAGS_.*",
    "kNameSpaceID_.*",
    "kGenericFont_.*",
    "kPresContext_.*",
]
whitelist-types = [
    "RawGecko.*",
    "mozilla::AnimationPropertySegment",
    "mozilla::AnonymousCounterStyle",
    "mozilla::AtomArray",
    "mozilla::ComputedTiming",
    "mozilla::ComputedTimingFunction",
    "mozilla::ComputedTimingFunction::BeforeFlag",
    "mozilla::SeenPtrs",
    "mozilla::ServoElementSnapshot.*",
    "mozilla::ServoStyleContext",
    "mozilla::ServoStyleSheetInner",
    "mozilla::ServoStyleSetSizes",
    "mozilla::CSSPseudoClassType",
    "mozilla::css::ErrorReporter",
    "mozilla::css::LoaderReusableStyleSheets",
    "mozilla::css::SheetParsingMode",
    "mozilla::css::URLMatchingFunction",
    "mozilla::dom::IterationCompositeOperation",
    "mozilla::dom::StyleChildrenIterator",
    "mozilla::HalfCorner",
    "mozilla::MallocSizeOf",
    "mozilla::OriginFlags",
    "mozilla::PropertyStyleAnimationValuePair",
    "mozilla::ServoTraversalFlags",
    "mozilla::StylePrefs",
    "mozilla::StyleShapeRadius",
    "mozilla::StyleGrid.*",
    "mozilla::UpdateAnimationsTasks",
    "mozilla::LookAndFeel",
    "mozilla::gfx::Float",
    "mozilla::gfx::FontVariation",
    ".*ThreadSafe.*Holder",
    "AnonymousContent",
    "AudioContext",
    "CapturingContentInfo",
    "DefaultDelete",
    "DOMIntersectionObserverEntry",
    "Element",
    "FontFamilyList",
    "FontFamilyName",
    "FontFamilyType",
    "FontSizePrefs",
    "FragmentOrURL",
    "FrameRequestCallback",
    "GeckoParserExtraData",
    "GeckoFontMetrics",
    "gfxAlternateValue",
    "gfxFontFeature",
    "gfxFontFeatureValueSet",
    "gfxFontVariation",
    "GridNamedArea",
    "HalfCorner",
    "Image",
    "ImageURL",
    "Keyframe",
    "nsAttrName",
    "nsAttrValue",
    "nscolor",
    "nsChangeHint",
    "nsCSSCounterDesc",
    "nsCSSCounterStyleRule",
    "nsCSSFontFaceRule",
    "nsCSSKeyword",
    "nsCSSPropertyID",
    "nsCSSPropertyIDSet",
    "nsCSSProps",
    "nsCSSRect",
    "nsCSSRect_heap",
    "nsCSSShadowArray",
    "nsCSSValue",
    "nsCSSValueFloatColor",
    "nsCSSValueGradient",
    "nsCSSValueGradientStop",
    "nsCSSValueList",
    "nsCSSValueList_heap",
    "nsCSSValuePair_heap",
    "nsCSSValuePairList",
    "nsCSSValuePairList_heap",
    "nsCSSValueTokenStream",
    "nsCSSValueTriplet_heap",
    "nsCursorImage",
    "nsFont",
    "nsAtom",
    "nsMainThreadPtrHandle",
    "nsMainThreadPtrHolder",
    "nsMargin",
    "nsMediaExpression",
    "nsMediaFeature",
    "nsMediaFeatures",
    "nsMediaList",
    "nsRect",
    "nsRestyleHint",
    "nsresult",
    "nsSimpleContentList",
    "nsSize",
    "nsStyleBackground",
    "nsStyleBorder",
    "nsStyleColor",
    "nsStyleColumn",
    "nsStyleContent",
    "nsStyleContentData",
    "nsStyleContext",
    "nsStyleCoord",
    "nsStyleCounterData",
    "nsStyleDisplay",
    "nsStyleEffects",
    "nsStyleFilter",
    "nsStyleFont",
    "nsStyleGradient",
    "nsStyleGradientStop",
    "nsStyleGridTemplate",
    "nsStyleImage",
    "nsStyleImageLayers",
    "nsStyleList",
    "nsStyleMargin",
    "nsStyleOutline",
    "nsStylePadding",
    "nsStylePosition",
    "nsStyleSVG",
    "nsStyleSVGOpacitySource",
    "nsStyleSVGPaint",
    "nsStyleSVGReset",
    "nsStyleTable",
    "nsStyleTableBorder",
    "nsStyleText",
    "nsStyleTextReset",
    "nsStyleUIReset",
    "nsStyleUnion",
    "nsStyleUnit",
    "nsStyleUserInterface",
    "nsStyleVariables",
    "nsStyleVisibility",
    "nsStyleXUL",
    "nsTArrayHeader",
    "Position",
    "PropertyValuePair",
    "Runnable",
    "ServoAttrSnapshot",
    "ServoBundledURI",
    "ServoComputedData",
    "ServoComputedDataBorrowed",
    "ServoElementSnapshot",
    "ServoStyleContextStrong",
    "ServoStyleContextBorrowed",
    "ServoStyleContextBorrowedOrNull",
    "SheetParsingMode",
    "StaticRefPtr",
    "StyleAnimation",
    "StyleBasicShapeType",
    "StyleGeometryBox",
    "StyleShapeSource",
    "StyleTransition",
    "ThemeWidgetType",
    "mozilla::UniquePtr",
    "mozilla::DefaultDelete",
    "mozilla::Side",
    "mozilla::binding_danger::AssertAndSuppressCleanupPolicy",
    "mozilla::ParsingMode",
    "mozilla::InheritTarget",
    "mozilla::ServoMediaList",
    "mozilla::StyleRuleInclusion",
    "nsStyleTransformMatrix::MatrixTransformOperator",
]
opaque-types = [
    "std::pair__PCCP",
    "std::namespace::atomic___base", "std::atomic__My_base",
    "std::atomic",
    "std::atomic___base",
    # We want everything but FontVariation and Float to be opaque but we don't
    # have negative regexes.
    "mozilla::gfx::(.{0,4}|.{6,12}|.{14,}|([^F][^o][^n][^t][^V][^a][^r][^i][^a][^t][^i][^o][^n])|([^F][^l][^o][^a][^t]))",
    "mozilla::dom::Sequence",
    "mozilla::dom::Optional",
    "mozilla::dom::OwningNodeOrString_Value",
    "mozilla::dom::Nullable",
    "RefPtr_Proxy",
    "RefPtr_Proxy_member_function",
    "nsAutoPtr_Proxy",
    "nsAutoPtr_Proxy_member_function",
    "mozilla::detail::PointerType",
    "mozilla::Pair_Base",
    "mozilla::SeenPtrs",
    "mozilla::SupportsWeakPtr",
    "SupportsWeakPtr",
    "mozilla::detail::WeakReference",
    "mozilla::WeakPtr",
    "nsWritingIterator_reference", "nsReadingIterator_reference",
    "nsTObserverArray",  # <- Inherits from nsAutoTObserverArray<T, 0>
    "nsTHashtable",  # <- Inheriting from inner typedefs that clang
                     #    doesn't expose properly.
    "nsBaseHashtable", "nsRefPtrHashtable", "nsDataHashtable", "nsClassHashtable",  # <- Ditto
    "nsInterfaceHashtable",  # <- Ditto
    "nsIDocument_SelectorCache",  # <- Inherits from nsExpirationTracker<.., 4>
    "nsIPresShell_ScrollAxis",  # <- For some reason the alignment of this is 4
                                # for clang.
    "nsPIDOMWindow",  # <- Takes the vtable from a template parameter, and we can't
                      #    generate it conditionally.
    "JS::Rooted",
    "mozilla::Maybe",
    "gfxSize",  # <- union { struct { T width; T height; }; T components[2] };
    "gfxSize_Super",  # Ditto.
    "mozilla::StyleAnimationValue",
    "StyleAnimationValue", # pulls in a whole bunch of stuff we don't need in the bindings
    "mozilla::dom::.*Callback", # Pulls in ErrorResult and other things that
                                # don't align properly on Linux 32-bit
    "mozilla::SchedulerGroup", # Non-standard-layout packing of field into superclass
]
mapped-generic-types = [
    { generic = true, gecko = "mozilla::ServoUnsafeCell", servo = "::std::cell::UnsafeCell" },
    { generic = true, gecko = "mozilla::ServoCell", servo = "::std::cell::Cell" },
    { generic = false, gecko = "ServoNodeData", servo = "AtomicRefCell<ElementData>" },
    { generic = false, gecko = "mozilla::ServoWritingMode", servo = "::logical_geometry::WritingMode" },
    { generic = false, gecko = "mozilla::ServoCustomPropertiesMap", servo = "Option<::servo_arc::Arc<::custom_properties::CustomPropertiesMap>>" },
    { generic = false, gecko = "mozilla::ServoRuleNode", servo = "Option<::rule_tree::StrongRuleNode>" },
    { generic = false, gecko = "mozilla::ServoVisitedStyle", servo = "Option<::servo_arc::RawOffsetArc<::properties::ComputedValues>>" },
    { generic = false, gecko = "mozilla::ServoComputedValueFlags", servo = "::properties::computed_value_flags::ComputedValueFlags" },
    { generic = true, gecko = "mozilla::ServoRawOffsetArc", servo = "::servo_arc::RawOffsetArc" },
    { generic = false, gecko = "ServoStyleContextStrong", servo = "::gecko_bindings::sugar::ownership::Strong<::properties::ComputedValues>" },
]
fixups = [
    { pat = "\\broot\\s*::\\s*nsString\\b", rep = "::nsstring::nsStringRepr" },
    { pat = "\\broot\\s*::\\s*nsTString\\s*<\\s*u16\\s*>", rep = "::nsstring::nsStringRepr" },
]

[bindings]
headers = ["mozilla/ServoBindings.h"]
hide-types = [
    "nsACString_internal",
    "nsAString_internal",
    "ServoStyleContextBorrowed",
    "ServoStyleContextBorrowedOrNull",
]
raw-lines = [
    "pub use nsstring::{nsACString, nsAString, nsString, nsStringRepr};",
    "use gecko_bindings::structs::nsStyleTransformMatrix;",
    "use gecko_bindings::structs::nsTArray;",
    "type nsACString_internal = nsACString;",
    "type nsAString_internal = nsAString;",
    "pub type ServoStyleContextBorrowed<'a> = &'a ::properties::ComputedValues;",
    "pub type ServoStyleContextBorrowedOrNull<'a> = Option<&'a ::properties::ComputedValues>;",
    "pub type ServoComputedDataBorrowed<'a> = &'a ServoComputedData;",
    "pub type RawServoAnimationValueTableBorrowed<'a> = &'a ();"
]
whitelist-functions = ["Servo_.*", "Gecko_.*"]
structs-types = [
    "mozilla::css::GridTemplateAreasValue",
    "mozilla::css::ErrorReporter",
    "mozilla::css::ImageValue",
    "mozilla::css::URLValue",
    "mozilla::css::URLValueData",
    "mozilla::dom::CallerType",
    "mozilla::AnonymousCounterStyle",
    "mozilla::AtomArray",
    "mozilla::MallocSizeOf",
    "mozilla::OriginFlags",
    "mozilla::UniquePtr",
    "ServoRawOffsetArc",
    "nsIContent",
    "nsIDocument",
    "nsIDocument_DocumentTheme",
    "nsSimpleContentList",
    "RawGeckoAnimationPropertySegment",
    "RawGeckoComputedTiming",
    "RawGeckoCSSPropertyIDList",
    "RawGeckoDocument",
    "RawGeckoElement",
    "Element",
    "RawGeckoKeyframeList",
    "RawGeckoPropertyValuePairList",
    "RawGeckoComputedKeyframeValuesList",
    "RawGeckoFontFaceRuleList",
    "RawGeckoNode",
    "RawServoAnimationValue",
    "RawGeckoServoAnimationValueList",
    "RawServoMediaList",
    "RawServoStyleSheetContents",
    "RawServoDeclarationBlock",
    "RawServoStyleRule",
    "RawGeckoPresContext",
    "RawGeckoPresContextOwned",
    "RawGeckoStyleAnimationList",
    "RawGeckoStyleChildrenIterator",
    "RawGeckoServoStyleRuleList",
    "RawGeckoURLExtraData",
    "RawGeckoXBLBinding",
    "RawServoSelectorList",
    "RefPtr",
    "RustString",
    "CSSPseudoClassType",
    "CSSPseudoElementType",
    "ServoTraversalFlags",
    "ComputedTimingFunction_BeforeFlag",
    "CounterStylePtr",
    "FontFamilyType",
    "FontSizePrefs",
    "GeckoFontMetrics",
    "IterationCompositeOperation",
    "Keyframe",
    "PropertyValuePair",
    "SeenPtrs",
    "ServoBundledURI",
    "ServoElementSnapshot",
    "ServoElementSnapshotTable",
    "ServoStyleSetSizes",
    "SheetParsingMode",
    "StyleBasicShapeType",
    "StyleShapeSource",
    "StyleTransition",
    "gfxFontFeatureValueSet",
    "nsCSSCounterStyleRule",
    "nsCSSFontFaceRule",
    "nsCSSKeyword",
    "nsCSSPropertyID",
    "nsCSSPropertyIDSet",
    "nsCSSRect",
    "nsCSSShadowArray",
    "nsCSSUnit",
    "nsCSSValue",
    "nsCSSValueSharedList",
    "nsChangeHint",
    "nsCursorImage",
    "nsFont",
    "nsAtom",
    "nsIURI",
    "nsCompatibility",
    "nsRestyleHint",
    "nsStyleBackground",
    "nsStyleBorder",
    "nsStyleColor",
    "nsStyleColumn",
    "nsStyleContent",
    "nsStyleContentData",
    "nsStyleContentData_CounterFunction",
    "nsStyleContentType",
    "nsStyleContext",
    "nsStyleCoord",
    "nsStyleCoord_Calc",
    "nsStyleCoord_CalcValue",
    "nsStyleDisplay",
    "nsStyleEffects",
    "nsStyleFilter",
    "nsStyleFont",
    "nsStyleGradient",
    "nsStyleGradientStop",
    "nsStyleGridTemplate",
    "nsStyleImage",
    "nsStyleImageLayers",
    "nsStyleImageLayers_Layer",
    "nsStyleImageLayers_LayerType",
    "nsStyleImageRequest",
    "nsStyleList",
    "nsStyleMargin",
    "nsStyleOutline",
    "nsStylePadding",
    "nsStylePosition",
    "nsStyleQuoteValues",
    "nsStyleSVG",
    "nsStyleSVGOpacitySource",
    "nsStyleSVGPaint",
    "nsStyleSVGReset",
    "nsStyleTable",
    "nsStyleTableBorder",
    "nsStyleText",
    "nsStyleTextReset",
    "nsStyleUIReset",
    "nsStyleUnion",
    "nsStyleUnit",
    "nsStyleUserInterface",
    "nsStyleVariables",
    "nsStyleVisibility",
    "nsStyleXUL",
    "nsTimingFunction",
    "nscolor",
    "nscoord",
    "nsresult",
    "Loader",
    "LoaderReusableStyleSheets",
    "ServoStyleSheet",
    "ServoComputedData",
    "ServoStyleContext",
    "ServoStyleContextStrong",
    "EffectCompositor_CascadeLevel",
    "UpdateAnimationsTasks",
    "ParsingMode",
    "InheritTarget",
    "URLMatchingFunction",
    "StyleAnimation",
    "StyleRuleInclusion",
    "nsStyleTransformMatrix::MatrixTransformOperator",
    "RawGeckoGfxMatrix4x4",
    "FontFamilyName",
    "mozilla::SharedFontList",
]
array-types = [
    { cpp-type = "uintptr_t", rust-type = "usize" },
]
servo-owned-types = [
    { name = "RawServoStyleSet", opaque = true },
    { name = "RawServoSelectorList", opaque = false },
    { name = "ServoElementSnapshot", opaque = false },
    { name = "RawServoAnimationValueMap", opaque = true },
]
servo-immutable-borrow-types = [
    "RawGeckoNode",
    "RawGeckoElement",
    "RawGeckoDocument",
    "RawServoDeclarationBlockStrong",
    "RawGeckoPresContext",
    "RawGeckoXBLBinding",
]
servo-borrow-types = [
    "nsCSSPropertyIDSet",
    "nsCSSValue",
    "nsTimingFunction",
    "RawGeckoAnimationPropertySegment",
    "RawGeckoComputedTiming",
    "RawGeckoCSSPropertyIDList",
    "RawGeckoKeyframeList",
    "RawGeckoPropertyValuePairList",
    "RawGeckoComputedKeyframeValuesList",
    "RawGeckoFontFaceRuleList",
    "RawGeckoServoStyleRuleList",
    "RawGeckoServoAnimationValueList",
    "RawGeckoStyleAnimationList",
    "RawGeckoStyleChildrenIterator",
]
fixups = [
    # Remap the templated string type to the helper type
    { pat = "\\bnsTString\\s*<\\s*u16\\s*>", rep = "nsString" },
    # hack for gecko-owned string
    { pat = "<\\s*nsString\\s*", rep = "<nsStringRepr" },
]
