static createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(
      tagName, attributes = undefined, content = undefined) {
    let result = `<${tagName}`;
    result += SafeHtml.stringifyAttributes(tagName, attributes);

    if (content == null) {
      content = [];
    } else if (!Array.isArray(content)) {
      content = [content];
    }

    if (tags.isVoidTag(tagName.toLowerCase())) {
      asserts.assert(
          !content.length, `Void tag <${tagName}> does not allow content.`);
      result += '>';
    } else {
      const html = SafeHtml.concat(content);
      result += '>' + SafeHtml.unwrap(html) + '</' + tagName + '>';
    }

    return SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(result);
  }
Like create() but does not restrict which tags can be constructed.

@param {string} tagName Tag name. Set or validated by caller.
@param {?Object<string, ?SafeHtml.AttributeValue>=} attributes
@param {(!SafeHtml.TextOrHtml_|
    !Array<!SafeHtml.TextOrHtml_>)=} content
@return {!SafeHtml}
@throws {!Error} If invalid or unsafe attribute name or value is provided.
@throws {!asserts.AssertionError} If content for void tag is provided.
@package