Esempio n. 1
0
  public static String computeDocumentation(
      FunctionDocumentation documentation, IDocument document, String name) {
    String additionalInfo = Messages.PHPDocUtils_noAvailableDocs;
    StringBuilder bld = new StringBuilder();

    bld.append("<b>" + name + "</b><br>"); // $NON-NLS-1$ //$NON-NLS-2$

    if (documentation != null) {

      String longDescription = documentation.getDescription();
      longDescription = longDescription.replaceAll("\r\n", "<br>"); // $NON-NLS-1$ //$NON-NLS-2$
      longDescription = longDescription.replaceAll("\r", "<br>"); // $NON-NLS-1$ //$NON-NLS-2$
      longDescription = longDescription.replaceAll("\n", "<br>"); // $NON-NLS-1$ //$NON-NLS-2$
      if (longDescription.length() > 0) {
        bld.append(longDescription);
        bld.append("<br>"); // $NON-NLS-1$
      }
      TypedDescription[] tagsAsArray = documentation.getParams();
      // buf.append("<br>"); //$NON-NLS-1$
      for (int a = 0; a < tagsAsArray.length; a++) {

        bld.append("<br>"); // $NON-NLS-1$

        bld.append("@<b>"); // $NON-NLS-1$
        bld.append("param "); // $NON-NLS-1$
        // buf.append();
        bld.append("</b>"); // $NON-NLS-1$
        bld.append(tagsAsArray[a].getName());
        bld.append(' ');
        for (String s : tagsAsArray[a].getTypes()) {
          bld.append(s);
          bld.append(' ');
        }
        bld.append(' ');
        bld.append(ContentAssistUtils.truncateLineIfNeeded(tagsAsArray[a].getDescription()));
      }

    } else {
      bld.append(additionalInfo);
    }

    if (documentation != null) {
      TypedDescription return1 = documentation.getReturn();
      if (return1 != null) {
        String[] types = return1.getTypes();
        if (types.length > 0) {
          bld.append("<br>"); // $NON-NLS-1$
          bld.append("@<b>return </b>"); // $NON-NLS-1$
          bld.append(ContentAssistUtils.truncateLineIfNeeded(return1.getDescription()));

          StringBuilder typesBuilder = new StringBuilder();
          for (int a = 0; a < types.length; a++) {
            typesBuilder.append(types[a]);
            typesBuilder.append(' ');
          }
          bld.append(ContentAssistUtils.truncateLineIfNeeded(typesBuilder.toString()));
        }
      }

      List<TypedDescription> vars = documentation.getVars();
      if (vars != null) {
        for (TypedDescription var : vars) {

          if (var != null) {
            String[] types = var.getTypes();
            if (types.length > 0) {
              bld.append("<br>"); // $NON-NLS-1$
              bld.append("<b>"); // $NON-NLS-1$
              bld.append(Messages.PHPDocUtils_documentedType);
              bld.append("</b>"); // $NON-NLS-1$
              bld.append(var.getDescription());

              for (int a = 0; a < types.length; a++) {
                bld.append(types[a]);
                bld.append(' ');
              }
            }
          }
        }
      }
    }
    // Specifically look for HTML 'input' tags and change their open and close chars. The HTML
    // rendering does
    // not
    // remove them when the hover is rendered, introducing form inputs in the hover popup.
    // @See https://aptana.lighthouseapp.com/projects/35272/tickets/1653
    Matcher inputMatcher = INPUT_TAG_PATTERN.matcher(bld.toString());
    int addedOffset = 0;
    while (inputMatcher.find()) {
      int start = inputMatcher.start();
      int end = inputMatcher.end();
      bld.replace(start + addedOffset, start + addedOffset + 1, "&lt;"); // $NON-NLS-1$
      addedOffset += 2;
      bld.replace(end + addedOffset, end + addedOffset + 1, "&gt;"); // $NON-NLS-1$
      addedOffset += 4;
    }
    additionalInfo = bld.toString();
    return additionalInfo;
  }