anchor.diff:              if obj.ReferenceEquals(a, null) then false else
               match a with
               | Attr.AppendAttr attrs -> List.exists testAttr attrs
  -            | Attr.SingleAttr (("ws-replace" | "ws-hole"), ("styles" | "meta")) -> true
  +            | Attr.SingleAttr (("ws-replace" | "ws-hole" | "data-replace" | "data-hole"), ("styles" | "meta")) -> true
               | Attr.SingleAttr _
               | Attr.DepAttr _ -> false
           (attrs |> List.exists testAttr)
  
positive.code:     | VerbatimDoc of string
      | INodeDoc of INode
  
  and [<Sealed>] Elt(tag: string, attrs: list<Attr>, children: list<Doc>) =
      inherit Doc()
  
  
negative.code:                 let rec findHole a =
                      if obj.ReferenceEquals(a, null) then None else
                      match a with
                      | Attr.SingleAttr (("ws-replace" | "data-replace"), value)
                          when (value = "scripts" || value = "styles" || value = "meta") ->
                          Some (HoleName.Replace, value, res)
                      | Attr.SingleAttr (("ws-hole" | "data-hole"), value)
                          when (value = "scripts" || value = "styles" || value = "meta") ->
                          Some (HoleName.Hole, value, res)
                      | Attr.SingleAttr _ | Attr.DepAttr _ -> None
                      | Attr.AppendAttr attrs -> List.tryPick findHole attrs
                  List.tryPick findHole attrs
              )
          match hole with
          | Some (HoleName.Replace, name, res) -> w.Write(res.[name])
          | Some (HoleName.Hole, name, res) ->
              w.WriteBeginTag(tag)
              attrs |> List.iter (fun a -> a.Write(meta, w, true))
              w.Write(HtmlTextWriter.TagRightChar)
              w.Write(res.[name])
              w.WriteEndTag(tag)
          | None ->
              w.WriteBeginTag(tag)
              attrs |> List.iter (fun a ->
  