+docstring InsetRef::xhtml(XHTMLStream & xs, OutputParams const &) const
+{
+ docstring const & ref = getParam("reference");
+ InsetLabel const * il = buffer().insetLabel(ref);
+ string const & cmd = params().getCmdName();
+ docstring display_string;
+
+ if (il && !il->counterValue().empty()) {
+ // Try to construct a label from the InsetLabel we reference.
+ docstring const & value = il->counterValue();
+ if (cmd == "ref")
+ display_string = value;
+ else if (cmd == "vref")
+ // normally, would be "ref on page #", but we have no pages
+ display_string = value;
+ else if (cmd == "pageref" || cmd == "vpageref")
+ // normally would be "on page #", but we have no pages
+ display_string = _("elsewhere");
+ else if (cmd == "eqref")
+ display_string = bformat(from_ascii("equation (%1$s)"), value);
+ else if (cmd == "formatted"
+ // we don't really have the ability to handle these
+ // properly in XHTML output
+ || cmd == "nameref")
+ display_string = il->prettyCounter();
+ } else
+ display_string = ref;
+
+ // FIXME What we'd really like to do is to be able to output some
+ // appropriate sort of text here. But to do that, we need to associate
+ // some sort of counter with the label, and we don't have that yet.
+ string const attr = "href=\"#" + html::cleanAttr(to_utf8(ref)) + "\"";
+ xs << html::StartTag("a", attr);
+ xs << display_string;
+ xs << html::EndTag("a");
+ return docstring();
+}
+
+
+void InsetRef::toString(odocstream & os) const