Package net.jangaroo.joodoc

Source Code of net.jangaroo.joodoc.Util

/*
* Copyright 2008 CoreMedia AG
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS
* IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/

package net.jangaroo.joodoc;

import com.sun.javadoc.Tag;
import com.sun.javadoc.Doc;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
* Created by IntelliJ IDEA.
* User: htewis
* Date: 21.07.2004
* Time: 12:17:29
* To change this template use File | Settings | File Templates.
*/
public class Util {

  private static final Pattern SENTENCE_SEPERATOR_PATTERN = Pattern.compile("\\.($|\\s)");
  private static final Pattern TAG_PATTERN = Pattern.compile("@[a-z]*");
  private static final Pattern INLINE_TAG_PATTERN = Pattern.compile("\\{@[a-z]* [^\\}]*\\}");
  private static final Pattern TOP_LEVEL_TAG_PATTERN = Pattern.compile("(^|[^\\{])@[a-z]*");
  private static final Pattern IDENT_PATTERN = Pattern.compile("\\A[\\p{Alpha}_$][\\p{Alnum}_$]*(\\.[\\p{Alpha}$_][\\p{Alnum}$_]*)*");

  public static String tidy(String str) {
    str=str.trim();
    str=str.replaceAll("/\\x2a","");
    str=str.replaceAll("\\x2a/","");
    str=str.replaceAll("\\x2a","");
    //str=str.replaceAll("@","<br/>@");
    str=str.trim();
    return str;
  }

  public static String firstSentence(String str) {
    Matcher sentenceSeperatorMatcher = SENTENCE_SEPERATOR_PATTERN.matcher(str);
    if (sentenceSeperatorMatcher.find()) {
      int dotPos = sentenceSeperatorMatcher.start();
      // check that the "firstSentence" is not in the top-level tags:
      Matcher tagMatcher = TOP_LEVEL_TAG_PATTERN.matcher(str);
      if (!tagMatcher.find() || tagMatcher.start()>dotPos) {
        return str.substring(0,dotPos+1);
      }
    }
    return "";
  }

  public static void main(String[] args) {
   // System.out.println(firstSentence("hallo * @.hallo"));
    Tag[] x = extractTags((Doc)null,"hallo {@link test} eins @see zwei");
    for (int i = 0; i < x.length; i++) {
      System.out.println(((TagImpl)x[i]).getDescription());
    }
  }

  public static String[] extractTags(String ws, String tagName) {
    ArrayList al= new ArrayList();
    int seeTagStart=ws.indexOf(tagName);
    int seeTagEnd=0;
    while (seeTagStart>=0) {
      ws=ws.substring(seeTagStart);
      seeTagEnd=ws.indexOf("@",tagName.length());
      if (ws.indexOf("\n",tagName.length())<seeTagEnd)
        seeTagEnd=ws.indexOf("\n",tagName.length());
      if (seeTagEnd<0) seeTagEnd=ws.length();
      al.add(tidy(ws.substring(tagName.length(),seeTagEnd)));
      seeTagStart=ws.indexOf(tagName,seeTagEnd);
    }
    String[] seeTags = (String[])al.toArray(new String[al.size()]);
    return seeTags;
  }

  public static Tag[] extractInlineTags(Doc holder, String text) {
    Matcher inlineTagMatcher = INLINE_TAG_PATTERN.matcher(text);
    List tags = new ArrayList();
    boolean found;
    int start=0;
    do {
      found = inlineTagMatcher.find();
      int end = found ? inlineTagMatcher.start() : text.length();
      if (end>start) {
        // add plain text tag:
        Tag tag = new TagImpl(holder,text.substring(start,end));
        tags.add(tag);
        start = end;
      }
      if (found) {
        // add inline tag:
        Tag tag = createTag(holder,text.substring(inlineTagMatcher.start()+1,inlineTagMatcher.end()-1));
        tags.add(tag);
        start = inlineTagMatcher.end();
      }
    } while (found);
    return (Tag[])tags.toArray(new Tag[tags.size()]);
  }

  public static Tag[] extractTags(Doc holder, String text) {
    List tags = new ArrayList();
    Matcher tagMatcher = TOP_LEVEL_TAG_PATTERN.matcher(text);
    boolean found;
    int start = 0;
    do {
      found = tagMatcher.find();
      int end = found ? tagMatcher.start() : text.length();
      Tag tag = createTag(holder,text.substring(start,end));
      tags.add(tag);
      start = end;
    } while (found);
    return (Tag[])tags.toArray(new Tag[tags.size()]);
  }

  private static Tag createTag(Doc holder, String text) {
    Matcher tagMatcher = TAG_PATTERN.matcher(text);
    if (tagMatcher.find() && tagMatcher.start()<=1) {
      String tag = text.substring(tagMatcher.start(),tagMatcher.end());
      String content = text.substring(tagMatcher.end()).trim();
      if ("@see".equals(tag)) {
        return new SeeTagImpl(holder, content);
      } else if ("@link".equals(tag)) {
        return new SeeTagImpl(holder, "@link", content);
      } else if ("@override".equals(tag)) {
        return new SeeTagImpl(holder, "@override", content);
      } else if ("@param".equals(tag)) {
        return new ParamTagImpl(holder,content);
      } else {
        return new TagImpl(holder,tag,tag,content);
      }
    }
    return new TagImpl(holder,text);
  }

  public static String getQualifiedName(String[] qualifiedNamePath) {
    StringBuffer buf=new StringBuffer();
    for (int i = 0; i < qualifiedNamePath.length; i++) {
      if (i>0)
       buf.append('.');
      buf.append(qualifiedNamePath[i]);
    }
    return buf.toString();
  }

  public static int getIdentifierLength(String text) {
    Matcher matcher = IDENT_PATTERN.matcher(text);
    return matcher.find() ? matcher.end() : 0;
  }

}
TOP

Related Classes of net.jangaroo.joodoc.Util

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.