/* * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.flex.compiler.asdoc.flexjs; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.flex.compiler.asdoc.IASDocComment; import org.apache.flex.compiler.asdoc.IASDocTag; import antlr.Token; public class ASDocComment implements IASDocComment { public ASDocComment(Token t) { token = t; } Token token; public String commentNoEnd() { String s = token.getText(); String[] lines = s.split("\n"); StringBuilder sb = new StringBuilder(); int n = lines.length; if (n == 1) { int c = lines[0].indexOf("*/"); if (c != -1) lines[0] = lines[0].substring(0, c); } sb.append(lines[0]); sb.append("\n"); for (int i = 1; i < n - 1; i++) { String line = lines[i]; int star = line.indexOf("*"); sb.append(" "); if (star > -1) sb.append(line.substring(star)); sb.append("\n"); } return sb.toString(); } private String description = null; private Map<String, List<IASDocTag>> tagMap; @Override public String getDescription() { return description; } @Override public void compile() { compile(true); } public void compile(boolean trimlines) { String s = token.getText(); String[] lines = s.split("\n"); StringBuilder sb = new StringBuilder(); int n = lines.length; if (n == 1) { int c = lines[0].indexOf("*/"); if (c != -1) lines[0] = lines[0].substring(0, c); } // clip off asdoc slash-star-star String line = lines[0].substring(3); if (trimlines) sb.append(line.trim()); else sb.append(line + "\n"); for (int i = 1; i < n - 1; i++) { line = lines[i]; int star = line.indexOf("*"); int at = line.indexOf("@"); if (at == -1) { sb.append(" "); if (star > -1) { if (trimlines) sb.append(line.substring(star + 1).trim()); else sb.append(line.substring(star + 1) + "\n"); } } else { if (tagMap == null) tagMap = new HashMap<String, List<IASDocTag>>(); int after = line.indexOf(" ", at + 1); if (after == -1) { tagMap.put(line.substring(at + 1), null); } else { String tagName = line.substring(at + 1, after); List<IASDocTag> tags = tagMap.get(tagName); if (tags == null) { tags = new ArrayList<IASDocTag>(); tagMap.put(tagName, tags); } tags.add(new ASDocTag(tagName, line.substring(after + 1))); } } } if (trimlines) description = sb.toString().trim().replace("\"", "\\\""); else description = sb.toString(); } @Override public boolean hasTag(String name) { if (tagMap == null) return false; return (tagMap.containsKey(name)); } @Override public IASDocTag getTag(String name) { if (tagMap == null) return null; List<IASDocTag> tags = tagMap.get(name); if (tags == null) return null; return tags.get(0); } @Override public Map<String, List<IASDocTag>> getTags() { return tagMap; } @Override public Collection<IASDocTag> getTagsByName(String string) { return tagMap.get(string); } @Override public void paste(IASDocComment source) { } class ASDocTag implements IASDocTag { public ASDocTag(String name, String desc) { this.name = name; this.desc = desc; } private String name; private String desc; @Override public String getName() { // TODO Auto-generated method stub return name; } @Override public String getDescription() { // TODO Auto-generated method stub return desc; } @Override public boolean hasDescription() { // TODO Auto-generated method stub return desc != null; } } }