1 package org.simantics.scl.compiler.internal.parsing.declarations;
\r
4 public class DDocumentationAst extends DeclarationAst {
\r
5 public final String documentation;
\r
7 public DDocumentationAst(String documentation) {
\r
8 this.documentation = cleanUp(documentation);
\r
12 public void toString(int indentation, StringBuilder b) {
\r
13 for(int i=0;i<indentation;++i) b.append(" ");
\r
14 b.append("\"\"\"\n");
\r
15 b.append(documentation);
\r
16 b.append("\"\"\"\n");
\r
20 private static String cleanUp(String documentation) {
\r
21 // Remove empty lines
\r
22 int end = documentation.length();
\r
24 char c = documentation.charAt(end-1);
\r
25 if(c != ' ' && c != '\n')
\r
31 for(int i=0;i<end;++i) {
\r
32 char c = documentation.charAt(i);
\r
39 // Calculate common indentation
\r
40 int lineStart = begin;
\r
41 int commonIndentation = Integer.MAX_VALUE;
\r
42 for(int i=begin;i<end;++i) {
\r
43 char c = documentation.charAt(i);
\r
47 else if(lineStart >= 0 && c != ' ') {
\r
48 int indentation = i - lineStart;
\r
49 commonIndentation = Math.min(commonIndentation, indentation);
\r
50 if(commonIndentation == 0) {
\r
51 if(begin == 0 && end == documentation.length())
\r
52 return documentation;
\r
54 return documentation.substring(begin, end);
\r
60 // Remove common indentation
\r
61 StringBuilder result = new StringBuilder();
\r
62 int charsToSkip = commonIndentation;
\r
63 for(int i=begin;i<end;++i) {
\r
64 char c = documentation.charAt(i);
\r
67 charsToSkip = commonIndentation;
\r
75 return result.toString();
\r