private String _convert(
      WikiPage page, PortletURL viewPageURL, PortletURL editPageURL, String attachmentURLPrefix)
      throws PageContentException, WikiFormatException {

    LiferayPortletURL liferayViewPageURL = (LiferayPortletURL) viewPageURL;
    LiferayPortletURL liferayEditPageURL = (LiferayPortletURL) editPageURL;

    WikiEngine engine = _getEngine(page.getFormat());

    String content = engine.convert(page, viewPageURL, editPageURL, attachmentURLPrefix);

    String editPageURLString = StringPool.BLANK;

    if (editPageURL != null) {
      liferayEditPageURL.setParameter("title", "__REPLACEMENT__", false);

      editPageURLString = editPageURL.toString();

      editPageURLString = StringUtil.replace(editPageURLString, "__REPLACEMENT__", "$1");
    }

    Matcher matcher = _editPageURLPattern.matcher(content);

    content = _convertURLs(editPageURLString, matcher);

    String viewPageURLString = StringPool.BLANK;

    if (viewPageURL != null) {
      liferayViewPageURL.setParameter("title", "__REPLACEMENT__", false);

      viewPageURLString = viewPageURL.toString();

      viewPageURLString = StringUtil.replace(viewPageURLString, "__REPLACEMENT__", "$1");
    }

    matcher = _viewPageURLPattern.matcher(content);

    content = _convertURLs(viewPageURLString, matcher);

    content = _replaceAttachments(content, page.getTitle(), attachmentURLPrefix);

    return content;
  }
  private WikiEngine _getEngine(String format) throws WikiFormatException {
    WikiEngine engine = _engines.get(format);

    if (engine != null) {
      return engine;
    }

    synchronized (_engines) {
      engine = _engines.get(format);

      if (engine != null) {
        return engine;
      }

      try {
        String engineClass = PropsUtil.get(PropsKeys.WIKI_FORMATS_ENGINE, new Filter(format));

        if (engineClass == null) {
          throw new WikiFormatException(format);
        }

        if (!InstancePool.contains(engineClass)) {
          engine = (WikiEngine) InstancePool.get(engineClass);

          engine.setMainConfiguration(
              _readConfigurationFile(PropsKeys.WIKI_FORMATS_CONFIGURATION_MAIN, format));

          engine.setInterWikiConfiguration(
              _readConfigurationFile(PropsKeys.WIKI_FORMATS_CONFIGURATION_INTERWIKI, format));
        } else {
          engine = (WikiEngine) InstancePool.get(engineClass);
        }

        _engines.put(format, engine);

        return engine;
      } catch (Exception e) {
        throw new WikiFormatException(e);
      }
    }
  }