Merge pull request #41 from NataliaUkhorskaya/master
Changes in confluence plugin
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<project name="ConfluenceLexer" default="confluenceLexer">
|
||||
<property name="home" value="${basedir}"/>
|
||||
<property file="${home}/../compiler/frontend/idea.properties"/>
|
||||
<property file="${home}/../ideaSDK/bin/idea.properties"/>
|
||||
|
||||
<property name="flex.base" value="${idea.home}/tools/lexer/jflex-1.4"/>
|
||||
<property name="out.dir" value="${basedir}/tmpout"/>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package org.jetbrains.jet;
|
||||
|
||||
/**
|
||||
* @author Natalia.Ukhorskaya
|
||||
*/
|
||||
|
||||
public class ConfluenceUtils {
|
||||
|
||||
public static void escapeHTML(StringBuilder builder, CharSequence seq) {
|
||||
if (seq == null) return;
|
||||
for (int i = 0; i < seq.length(); i++) {
|
||||
char c = seq.charAt(i);
|
||||
switch (c) {
|
||||
case '<':
|
||||
builder.append("<");
|
||||
break;
|
||||
case '>':
|
||||
builder.append(">");
|
||||
break;
|
||||
case '&':
|
||||
builder.append("&");
|
||||
break;
|
||||
case ' ':
|
||||
builder.append(" ");
|
||||
break;
|
||||
case '"':
|
||||
builder.append(""");
|
||||
break;
|
||||
default:
|
||||
builder.append(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static String getErrorInHtml(Throwable e, String info) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.append("<div class=\"jet herror\">Jet highlighter error [").append(e.getClass().getSimpleName()).append("]: ");
|
||||
ConfluenceUtils.escapeHTML(stringBuilder, e.getMessage());
|
||||
stringBuilder.append("<br/>");
|
||||
stringBuilder.append("Original text:");
|
||||
stringBuilder.append("<pre>");
|
||||
ConfluenceUtils.escapeHTML(stringBuilder, info);
|
||||
stringBuilder.append("</pre>");
|
||||
stringBuilder.append("</div>");
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,10 @@ import com.atlassian.renderer.v2.macro.MacroException;
|
||||
import com.intellij.psi.TokenType;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import org.apache.velocity.VelocityContext;
|
||||
import org.jetbrains.jet.ConfluenceUtils;
|
||||
import org.jetbrains.jet.tags.StyledDivTagType;
|
||||
import org.jetbrains.jet.tags.TagData;
|
||||
import org.jetbrains.jet.tags.TagType;
|
||||
|
||||
import java.io.StringReader;
|
||||
import java.util.*;
|
||||
@@ -38,61 +42,6 @@ public class JetMacro extends BaseMacro {
|
||||
|
||||
public static final StringReader DUMMY_READER = new StringReader("");
|
||||
|
||||
private static class TagData {
|
||||
final TagType type;
|
||||
final String message;
|
||||
final int start;
|
||||
final boolean nextToken;
|
||||
int end;
|
||||
|
||||
TagData(TagType type, String message, int start, boolean nextToken) {
|
||||
this.type = type;
|
||||
this.message = message;
|
||||
this.start = start;
|
||||
this.nextToken = nextToken;
|
||||
}
|
||||
}
|
||||
|
||||
private static abstract class TagType {
|
||||
public final String tagName;
|
||||
|
||||
private TagType(String tagName) {
|
||||
this.tagName = tagName;
|
||||
}
|
||||
|
||||
public abstract void appendOpenTag(StringBuilder builder, TagData tagData);
|
||||
public abstract void appendCloseTag(StringBuilder builder, TagData tagData);
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return tagName;
|
||||
}
|
||||
}
|
||||
|
||||
private static class StyledDivTagType extends TagType {
|
||||
|
||||
private StyledDivTagType(String tagName) {
|
||||
super(tagName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendOpenTag(StringBuilder builder, TagData tagData) {
|
||||
assert tagData.type == this;
|
||||
builder.append("<div class=\"jet ").append(tagName).append("\"");
|
||||
if (tagData.message != null) {
|
||||
builder.append(" title=\"");
|
||||
escapeHTML(builder, tagData.message);
|
||||
builder.append("\"");
|
||||
}
|
||||
builder.append(">");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendCloseTag(StringBuilder builder, TagData tagData) {
|
||||
builder.append("</div>");
|
||||
}
|
||||
}
|
||||
|
||||
private static final TagType[] knownExtraTagTypes = {
|
||||
new StyledDivTagType("error"),
|
||||
new StyledDivTagType("warning"),
|
||||
@@ -101,7 +50,7 @@ public class JetMacro extends BaseMacro {
|
||||
@Override
|
||||
public void appendOpenTag(StringBuilder builder, TagData tagData) {
|
||||
builder.append("<a class=\"jet ref\" href=\"#");
|
||||
builder.append(tagData.message);
|
||||
builder.append(tagData.getMessage());
|
||||
builder.append("\">");
|
||||
}
|
||||
|
||||
@@ -114,7 +63,7 @@ public class JetMacro extends BaseMacro {
|
||||
@Override
|
||||
public void appendOpenTag(StringBuilder builder, TagData tagData) {
|
||||
builder.append("<a name=\"");
|
||||
builder.append(tagData.message);
|
||||
builder.append(tagData.getMessage());
|
||||
builder.append("\">");
|
||||
}
|
||||
|
||||
@@ -127,7 +76,7 @@ public class JetMacro extends BaseMacro {
|
||||
@Override
|
||||
public void appendOpenTag(StringBuilder builder, TagData tagData) {
|
||||
builder.append("<a class=\"jet anchor\" href=\"");
|
||||
builder.append(tagData.message);
|
||||
builder.append(tagData.getMessage());
|
||||
builder.append("\">");
|
||||
}
|
||||
|
||||
@@ -140,7 +89,7 @@ public class JetMacro extends BaseMacro {
|
||||
@Override
|
||||
public void appendOpenTag(StringBuilder builder, TagData tagData) {
|
||||
builder.append("<div style=\"");
|
||||
builder.append(tagData.message);
|
||||
builder.append(tagData.getMessage());
|
||||
builder.append("\">");
|
||||
}
|
||||
|
||||
@@ -153,7 +102,7 @@ public class JetMacro extends BaseMacro {
|
||||
@Override
|
||||
public void appendOpenTag(StringBuilder builder, TagData tagData) {
|
||||
builder.append("<div class=\"");
|
||||
builder.append(tagData.message);
|
||||
builder.append(tagData.getMessage());
|
||||
builder.append("\">");
|
||||
}
|
||||
|
||||
@@ -167,9 +116,10 @@ public class JetMacro extends BaseMacro {
|
||||
private static final Map<TagType, Pattern> nextTokenTags = new HashMap<TagType, Pattern>();
|
||||
private static final Map<TagType, Pattern> closedTags = new HashMap<TagType, Pattern>();
|
||||
private static final Map<TagType, Pattern> closeTags = new HashMap<TagType, Pattern>();
|
||||
|
||||
static {
|
||||
for (TagType type : knownExtraTagTypes) {
|
||||
String tagName = type.tagName;
|
||||
String tagName = type.getTagName();
|
||||
openTags.put(type, Pattern.compile("<" + tagName + "\\s*((desc)?=\\\"([^\n\"]*?)\\\")?>", Pattern.MULTILINE));
|
||||
closeTags.put(type, Pattern.compile("</" + tagName + ">"));
|
||||
|
||||
@@ -179,6 +129,7 @@ public class JetMacro extends BaseMacro {
|
||||
}
|
||||
|
||||
private static final Map<IElementType, String> styleMap = new HashMap<IElementType, String>();
|
||||
|
||||
static {
|
||||
styleMap.put(JetTokens.BLOCK_COMMENT, "jet-comment");
|
||||
styleMap.put(JetTokens.DOC_COMMENT, "jet-comment");
|
||||
@@ -198,7 +149,6 @@ public class JetMacro extends BaseMacro {
|
||||
styleMap.put(JetTokens.LABEL_IDENTIFIER, "label");
|
||||
styleMap.put(JetTokens.ATAT, "label");
|
||||
styleMap.put(JetTokens.FIELD_IDENTIFIER, "field");
|
||||
styleMap.put(JetTokens.RAW_STRING_LITERAL, "string");
|
||||
styleMap.put(TokenType.BAD_CHARACTER, "bad");
|
||||
}
|
||||
|
||||
@@ -212,25 +162,20 @@ public class JetMacro extends BaseMacro {
|
||||
return RenderMode.allow(0);
|
||||
}
|
||||
|
||||
private static void escapeHTML(StringBuilder builder, CharSequence seq) {
|
||||
if (seq == null) return;
|
||||
for (int i = 0; i < seq.length(); i++) {
|
||||
char c = seq.charAt(i);
|
||||
switch (c) {
|
||||
case '<':
|
||||
builder.append("<");
|
||||
break;
|
||||
case '>':
|
||||
builder.append(">");
|
||||
break;
|
||||
case '&':
|
||||
builder.append("&");
|
||||
break;
|
||||
case '"':
|
||||
builder.append(""");
|
||||
break;
|
||||
default:
|
||||
builder.append(c);
|
||||
private String addNewLineOpenTag() {
|
||||
return "<div class=\"line\">";
|
||||
}
|
||||
|
||||
private String addNewLineCloseTag() {
|
||||
return "</div>";
|
||||
}
|
||||
|
||||
private void convertNewLines(StringBuilder result, String yytext) {
|
||||
for (int i = 0; i < yytext.length(); i++) {
|
||||
if (yytext.charAt(i) == '\n') {
|
||||
result.append(" ");
|
||||
result.append(addNewLineCloseTag());
|
||||
result.append(addNewLineOpenTag());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -238,20 +183,31 @@ public class JetMacro extends BaseMacro {
|
||||
@Override
|
||||
public String execute(Map map, String code, RenderContext renderContext) throws MacroException {
|
||||
try {
|
||||
List<TagData> tags = new ArrayList<TagData>();
|
||||
|
||||
StringBuilder afterPreprocessing = preprocess(code.trim(), tags);
|
||||
|
||||
VelocityContext context = new VelocityContext(MacroUtils.defaultVelocityContext());
|
||||
String renderedTemplate = VelocityUtils.getRenderedTemplate("template.velocity", context);
|
||||
|
||||
StringBuilder result = new StringBuilder(renderedTemplate);
|
||||
|
||||
generateHtmlFromCode(code, result);
|
||||
|
||||
return result.toString();
|
||||
} catch (Throwable e) {
|
||||
return ConfluenceUtils.getErrorInHtml(e, code);
|
||||
}
|
||||
}
|
||||
|
||||
public void generateHtmlFromCode(String code, StringBuilder result) throws java.io.IOException {
|
||||
try {
|
||||
List<TagData> tags = new ArrayList<TagData>();
|
||||
StringBuilder afterPreprocessing = preprocess(code.trim(), tags);
|
||||
|
||||
result.append(
|
||||
"<div class=\"code panel\" style=\"border-width: 1px;\">" +
|
||||
"<div class=\"codeContent panelContent\">" +
|
||||
"<div class=\"container\">"
|
||||
);
|
||||
|
||||
result.append(addNewLineOpenTag());
|
||||
|
||||
_JetLexer jetLexer = new _JetLexer(DUMMY_READER);
|
||||
jetLexer.reset(afterPreprocessing, 0, afterPreprocessing.length(), _JetLexer.YYINITIAL);
|
||||
|
||||
@@ -259,24 +215,24 @@ public class JetMacro extends BaseMacro {
|
||||
TagData tag = iterator.hasNext() ? iterator.next() : null;
|
||||
while (true) {
|
||||
int tokenEnd = jetLexer.getTokenEnd();
|
||||
while (tag != null && tag.end < tokenEnd) {
|
||||
result.append("<div class=\"jet hwarning\">Skipping a tag in the middle of a token: <").append(tag.type).append("></div>");
|
||||
while (tag != null && tag.getEnd() < tokenEnd) {
|
||||
result.append("<div class=\"jet hwarning\">Skipping a tag in the middle of a token: <").append(tag.getType()).append("></div>");
|
||||
tag = iterator.hasNext() ? iterator.next() : null;
|
||||
}
|
||||
|
||||
if (tag != null) {
|
||||
if (tag.start == tokenEnd) {
|
||||
if (tag.getStart() == tokenEnd) {
|
||||
// result.append("<div class=\"jet ").append(tag.type).append("\"");
|
||||
// if (tag.message != null) {
|
||||
// result.append(" title=\"").append(tag.message).append("\"");
|
||||
// }
|
||||
// result.append(">");
|
||||
tag.type.appendOpenTag(result, tag);
|
||||
tag.getType().appendOpenTag(result, tag);
|
||||
}
|
||||
}
|
||||
if (tag != null) {
|
||||
if (tag.end == tokenEnd || (tag.nextToken && tag.start < tokenEnd)) {
|
||||
tag.type.appendCloseTag(result, tag);
|
||||
if (tag.getEnd() == tokenEnd || (tag.isNextToken() && tag.getStart() < tokenEnd)) {
|
||||
tag.getType().appendCloseTag(result, tag);
|
||||
tag = iterator.hasNext() ? iterator.next() : null;
|
||||
}
|
||||
}
|
||||
@@ -284,7 +240,13 @@ public class JetMacro extends BaseMacro {
|
||||
IElementType token = jetLexer.advance();
|
||||
if (token == null) break;
|
||||
// CharSequence yytext = jetLexer.yytext();
|
||||
String yytext = jetLexer.yytext().toString().replaceAll("\n", "\r\n");
|
||||
String yytext = jetLexer.yytext().toString();
|
||||
|
||||
if (yytext.contains("\n")) {
|
||||
convertNewLines(result, yytext);
|
||||
yytext = yytext.replaceAll("\n", "");
|
||||
}
|
||||
|
||||
String style = null;
|
||||
if (token instanceof JetKeywordToken) {
|
||||
style = "keyword";
|
||||
@@ -305,26 +267,18 @@ public class JetMacro extends BaseMacro {
|
||||
style = "plain";
|
||||
}
|
||||
result.append("<code class=\"jet ").append(style).append("\">");
|
||||
escapeHTML(result, yytext);
|
||||
ConfluenceUtils.escapeHTML(result, yytext);
|
||||
result.append("</code>");
|
||||
}
|
||||
|
||||
result.append(addNewLineCloseTag());
|
||||
result.append("</div>");
|
||||
result.append("</div>");
|
||||
result.append("</div>");
|
||||
return result.toString();
|
||||
} catch (Throwable e) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.append("<div class=\"jet herror\">Jet highlighter error [").append(e.getClass().getSimpleName()).append("]: ");
|
||||
escapeHTML(stringBuilder, e.getMessage());
|
||||
stringBuilder.append("<br/>");
|
||||
stringBuilder.append("Original text:");
|
||||
stringBuilder.append("<pre>");
|
||||
escapeHTML(stringBuilder, code);
|
||||
stringBuilder.append("</pre>");
|
||||
stringBuilder.append("</div>");
|
||||
return stringBuilder.toString();
|
||||
result = new StringBuilder(ConfluenceUtils.getErrorInHtml(e, code));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private StringBuilder preprocess(CharSequence code, Collection<TagData> tags) {
|
||||
@@ -355,11 +309,11 @@ public class JetMacro extends BaseMacro {
|
||||
}
|
||||
else {
|
||||
TagData tag = tagStack.pop();
|
||||
if (type != tag.type) {
|
||||
if (type != tag.getType()) {
|
||||
throw new IllegalArgumentException("Unmatched closing tag: " + closeMatcher.group());
|
||||
}
|
||||
|
||||
tag.end = position;
|
||||
tag.setEnd(position);
|
||||
tags.add(tag);
|
||||
i += closeMatcher.end() - 1;
|
||||
continue charLoop;
|
||||
@@ -370,7 +324,7 @@ public class JetMacro extends BaseMacro {
|
||||
Matcher closedMatcher = matchFrom(code, i, closed);
|
||||
if (closedMatcher != null) {
|
||||
TagData tag = new TagData(type, closedMatcher.group(3), position, false);
|
||||
tag.end = position;
|
||||
tag.setEnd(position);
|
||||
tags.add(tag);
|
||||
i += closedMatcher.end() - 1;
|
||||
continue charLoop;
|
||||
@@ -381,7 +335,7 @@ public class JetMacro extends BaseMacro {
|
||||
if (nextMatcher != null) {
|
||||
TagData tag = new TagData(type, nextMatcher.group(3), position, true);
|
||||
tags.add(tag);
|
||||
tag.end = code.length();
|
||||
tag.setEnd(code.length());
|
||||
i += nextMatcher.end() - 1;
|
||||
continue charLoop;
|
||||
}
|
||||
|
||||
@@ -45,9 +45,7 @@ public interface JetTokens {
|
||||
JetToken LONG_TEMPLATE_ENTRY_END = new JetToken("LONG_TEMPLATE_ENTRY_END");
|
||||
JetToken DANGLING_NEWLINE = new JetToken("DANGLING_NEWLINE");
|
||||
|
||||
JetToken RAW_STRING_LITERAL = new JetToken("RAW_STRING_LITERAL");
|
||||
|
||||
JetKeywordToken NAMESPACE_KEYWORD = JetKeywordToken.keyword("namespace");
|
||||
JetKeywordToken PACKAGE_KEYWORD = JetKeywordToken.keyword("package");
|
||||
JetKeywordToken AS_KEYWORD = JetKeywordToken.keyword("as");
|
||||
JetKeywordToken TYPE_KEYWORD = JetKeywordToken.keyword("type");
|
||||
JetKeywordToken CLASS_KEYWORD = JetKeywordToken.keyword("class");
|
||||
@@ -109,6 +107,7 @@ public interface JetTokens {
|
||||
JetToken EXCLEQEQEQ = new JetToken("EXCLEQEQEQ");
|
||||
JetToken EQEQ = new JetToken("EQEQ");
|
||||
JetToken EXCLEQ = new JetToken("EXCLEQ");
|
||||
JetToken EXCLEXCL = new JetToken("EXCLEXCL");
|
||||
JetToken ANDAND = new JetToken("ANDAND");
|
||||
JetToken OROR = new JetToken("OROR");
|
||||
JetToken SAFE_ACCESS = new JetToken("SAFE_ACCESS");
|
||||
@@ -130,6 +129,9 @@ public interface JetTokens {
|
||||
JetToken HASH = new JetToken("HASH");
|
||||
JetToken AT = new JetToken("AT");
|
||||
JetToken ATAT = new JetToken("ATAT");
|
||||
|
||||
JetToken IDE_TEMPLATE_START = new JetToken("IDE_TEMPLATE_START");
|
||||
JetToken IDE_TEMPLATE_END = new JetToken("IDE_TEMPLATE_END");
|
||||
|
||||
TokenSet LABELS = TokenSet.create(AT, ATAT, LABEL_IDENTIFIER);
|
||||
|
||||
@@ -154,14 +156,12 @@ public interface JetTokens {
|
||||
JetKeywordToken OUT_KEYWORD = JetKeywordToken.softKeyword("out");
|
||||
JetKeywordToken VARARG_KEYWORD = JetKeywordToken.softKeyword("vararg");
|
||||
JetKeywordToken INLINE_KEYWORD = JetKeywordToken.softKeyword("inline");
|
||||
JetKeywordToken ERASED_KEYWORD = JetKeywordToken.softKeyword("erased");
|
||||
|
||||
JetKeywordToken FINALLY_KEYWORD = JetKeywordToken.softKeyword("finally");
|
||||
JetKeywordToken FINAL_KEYWORD = JetKeywordToken.softKeyword("final");
|
||||
|
||||
// TODO: support this as an annotation on arguments. Then, they it probably can not be a soft keyword
|
||||
JetKeywordToken REF_KEYWORD = JetKeywordToken.softKeyword("ref");
|
||||
|
||||
TokenSet KEYWORDS = TokenSet.create(NAMESPACE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD, TRAIT_KEYWORD,
|
||||
TokenSet KEYWORDS = TokenSet.create(PACKAGE_KEYWORD, AS_KEYWORD, TYPE_KEYWORD, CLASS_KEYWORD, TRAIT_KEYWORD,
|
||||
THIS_KEYWORD, SUPER_KEYWORD, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, FOR_KEYWORD,
|
||||
NULL_KEYWORD,
|
||||
TRUE_KEYWORD, FALSE_KEYWORD, IS_KEYWORD,
|
||||
@@ -173,23 +173,23 @@ public interface JetTokens {
|
||||
TokenSet SOFT_KEYWORDS = TokenSet.create(IMPORT_KEYWORD, WHERE_KEYWORD, BY_KEYWORD, GET_KEYWORD,
|
||||
SET_KEYWORD, ABSTRACT_KEYWORD, ENUM_KEYWORD, OPEN_KEYWORD, ANNOTATION_KEYWORD,
|
||||
OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD, PROTECTED_KEYWORD,
|
||||
CATCH_KEYWORD, FINALLY_KEYWORD, REF_KEYWORD, OUT_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD
|
||||
CATCH_KEYWORD, FINALLY_KEYWORD, OUT_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, ERASED_KEYWORD
|
||||
);
|
||||
|
||||
TokenSet MODIFIER_KEYWORDS = TokenSet.create(ABSTRACT_KEYWORD, ENUM_KEYWORD,
|
||||
OPEN_KEYWORD, ANNOTATION_KEYWORD, OVERRIDE_KEYWORD, PRIVATE_KEYWORD, PUBLIC_KEYWORD, INTERNAL_KEYWORD,
|
||||
PROTECTED_KEYWORD, REF_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD
|
||||
PROTECTED_KEYWORD, OUT_KEYWORD, IN_KEYWORD, FINAL_KEYWORD, VARARG_KEYWORD, INLINE_KEYWORD, ERASED_KEYWORD
|
||||
);
|
||||
TokenSet WHITE_SPACE_OR_COMMENT_BIT_SET = TokenSet.create(WHITE_SPACE, BLOCK_COMMENT, EOL_COMMENT, DOC_COMMENT);
|
||||
TokenSet WHITESPACES = TokenSet.create(TokenType.WHITE_SPACE);
|
||||
TokenSet COMMENTS = TokenSet.create(EOL_COMMENT, BLOCK_COMMENT, DOC_COMMENT);
|
||||
|
||||
TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART, RAW_STRING_LITERAL);
|
||||
TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, MUL, PLUS,
|
||||
TokenSet STRINGS = TokenSet.create(CHARACTER_LITERAL, REGULAR_STRING_PART);
|
||||
TokenSet OPERATIONS = TokenSet.create(AS_KEYWORD, AS_SAFE, IS_KEYWORD, IN_KEYWORD, DOT, PLUSPLUS, MINUSMINUS, EXCLEXCL, MUL, PLUS,
|
||||
MINUS, EXCL, DIV, PERC, LT, GT, LTEQ, GTEQ, EQEQEQ, EXCLEQEQEQ, EQEQ, EXCLEQ, ANDAND, OROR,
|
||||
SAFE_ACCESS, ELVIS,
|
||||
// MAP, FILTER,
|
||||
QUEST, COLON,
|
||||
COLON,
|
||||
RANGE, EQ, MULTEQ, DIVEQ, PERCEQ, PLUSEQ, MINUSEQ,
|
||||
NOT_IN, NOT_IS,
|
||||
// HASH,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,31 @@
|
||||
package org.jetbrains.jet.tags;
|
||||
|
||||
import org.jetbrains.jet.ConfluenceUtils;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
*/
|
||||
|
||||
public class StyledDivTagType extends TagType {
|
||||
|
||||
public StyledDivTagType(String tagName) {
|
||||
super(tagName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendOpenTag(StringBuilder builder, TagData tagData) {
|
||||
assert tagData.getType() == this;
|
||||
builder.append("<div class=\"jet ").append(getTagName()).append("\"");
|
||||
if (tagData.getMessage() != null) {
|
||||
builder.append(" title=\"");
|
||||
ConfluenceUtils.escapeHTML(builder, tagData.getMessage());
|
||||
builder.append("\"");
|
||||
}
|
||||
builder.append(">");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendCloseTag(StringBuilder builder, TagData tagData) {
|
||||
builder.append("</div>");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package org.jetbrains.jet.tags;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
*/
|
||||
|
||||
public class TagData {
|
||||
private final TagType type;
|
||||
private final String message;
|
||||
private final int start;
|
||||
private final boolean nextToken;
|
||||
private int end;
|
||||
|
||||
public TagData(TagType type, String message, int start, boolean nextToken) {
|
||||
this.type = type;
|
||||
this.message = message;
|
||||
this.start = start;
|
||||
this.nextToken = nextToken;
|
||||
}
|
||||
|
||||
public TagType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public int getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
public boolean isNextToken() {
|
||||
return nextToken;
|
||||
}
|
||||
|
||||
public int getEnd() {
|
||||
return end;
|
||||
}
|
||||
|
||||
public void setEnd(int end) {
|
||||
this.end = end;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.jetbrains.jet.tags;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
*/
|
||||
|
||||
public abstract class TagType {
|
||||
private final String tagName;
|
||||
|
||||
protected TagType(String tagName) {
|
||||
this.tagName = tagName;
|
||||
}
|
||||
|
||||
public abstract void appendOpenTag(StringBuilder builder, TagData tagData);
|
||||
public abstract void appendCloseTag(StringBuilder builder, TagData tagData);
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return tagName;
|
||||
}
|
||||
|
||||
public String getTagName() {
|
||||
return tagName;
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,19 @@
|
||||
.jet {
|
||||
white-space: pre;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.code {
|
||||
padding: 5px !important;
|
||||
}
|
||||
|
||||
.codeContent {
|
||||
margin: 5px !important;
|
||||
}
|
||||
|
||||
.line {
|
||||
white-space: pre !important;
|
||||
}
|
||||
|
||||
.jet.keyword {
|
||||
font-weight: bold;
|
||||
color: #369;
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package org.jetbrains.jet.confluence;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author Natalia.Ukhorskaya
|
||||
*/
|
||||
|
||||
public class TestUtils {
|
||||
|
||||
public static String readFile(File file) throws IOException {
|
||||
FileReader reader = new FileReader(file);
|
||||
StringBuilder builder = new StringBuilder();
|
||||
int c;
|
||||
while ((c = reader.read()) >= 0) {
|
||||
builder.append((char) c);
|
||||
}
|
||||
reader.close();
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
public static void writeFile(File file, String str) throws IOException {
|
||||
FileWriter writer = new FileWriter(file);
|
||||
writer.write(str);
|
||||
writer.close();
|
||||
}
|
||||
|
||||
public static String divideResultForLines(String result) {
|
||||
return result.replaceAll("<div class=\"line\">", "\n<div class=\"line\">");
|
||||
}
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
package org.jetbrains.jet.confluence.rendering;
|
||||
|
||||
import com.atlassian.renderer.v2.macro.MacroException;
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
import org.jetbrains.jet.confluence.TestUtils;
|
||||
import org.jetbrains.jet.lexer.JetMacro;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author Natalia.Ukhorskaya
|
||||
*/
|
||||
|
||||
public class ConfluenceRenderingTest extends TestCase {
|
||||
|
||||
public static Test suite() {
|
||||
TestSuite suite = new TestSuite();
|
||||
TestSuite ats = new TestSuite();
|
||||
suite.addTest(ats);
|
||||
File parsingSourceDir = new File("./testData/rendering");
|
||||
addFilesFromDirToSuite(parsingSourceDir, ats);
|
||||
return suite;
|
||||
}
|
||||
|
||||
private static void addFilesFromDirToSuite(File file, TestSuite ats) {
|
||||
if (file.isDirectory()) {
|
||||
for (File sourceFile : file.listFiles()) {
|
||||
addFilesFromDirToSuite(sourceFile, ats);
|
||||
}
|
||||
} else {
|
||||
if (file.getName().endsWith(".kt")) {
|
||||
ats.addTest(new ConfluenceRenderingTest(file.getName(), file));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final File sourceFile;
|
||||
|
||||
public ConfluenceRenderingTest(String name, File sourceFile) {
|
||||
super(name);
|
||||
this.sourceFile = sourceFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void runTest() throws Throwable {
|
||||
checkSourceFile(sourceFile);
|
||||
}
|
||||
|
||||
private void checkSourceFile(File sourceFile) throws IOException, MacroException {
|
||||
String source = TestUtils.readFile(sourceFile);
|
||||
|
||||
StringBuilder actualResult = new StringBuilder();
|
||||
new JetMacro().generateHtmlFromCode(source, actualResult);
|
||||
|
||||
File expectedResultFile = new File(sourceFile.getAbsolutePath().replace(".kt", ".txt"));
|
||||
if (!expectedResultFile.exists()) {
|
||||
expectedResultFile.createNewFile();
|
||||
TestUtils.writeFile(expectedResultFile, TestUtils.divideResultForLines(actualResult.toString()));
|
||||
assertTrue("File with expected result for " + expectedResultFile.getAbsolutePath() + " is absent.", false);
|
||||
}
|
||||
|
||||
String expectedResult = TestUtils.readFile(expectedResultFile);
|
||||
|
||||
|
||||
assertEquals(expectedResult,
|
||||
TestUtils.divideResultForLines(actualResult.toString()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
class Greeter1() {
|
||||
|
||||
}
|
||||
|
||||
class Greeter2(val name : String) {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">Greeter1</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">Greeter2</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">name</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
|
||||
@@ -0,0 +1,5 @@
|
||||
val a : Int = 1
|
||||
val b = 1
|
||||
val c : Int
|
||||
c = 1
|
||||
var a : String = "sss"
|
||||
@@ -0,0 +1,6 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">a</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet number">1</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">b</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet number">1</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">c</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">c</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet number">1</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">var</code><code class="jet whitespace"> </code><code class="jet plain">a</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">sss</code><code class="jet string">"</code></div></div></div></div>
|
||||
@@ -0,0 +1,7 @@
|
||||
val language = if (args.size == 0) "EN" else args[0]
|
||||
when (language) {
|
||||
"EN" -> "Hello!"
|
||||
"ES" -> "¡Hola!"
|
||||
"RU" -> "Привет!"
|
||||
else -> "Sorry, I can't greet you in $language yet"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">language</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet keyword">if</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">.</code><code class="jet plain">size</code><code class="jet whitespace"> </code><code class="jet plain">==</code><code class="jet whitespace"> </code><code class="jet number">0</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">EN</code><code class="jet string">"</code><code class="jet whitespace"> </code><code class="jet keyword">else</code><code class="jet whitespace"> </code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">when</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">language</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">EN</code><code class="jet string">"</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">Hello!</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">ES</code><code class="jet string">"</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">¡Hola!</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">RU</code><code class="jet string">"</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">Привет!</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">else</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">Sorry, I can't greet you in </code><code class="jet escape">$</code><code class="jet plain">language</code><code class="jet string"> yet</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
|
||||
@@ -0,0 +1,47 @@
|
||||
namespace addressbook
|
||||
|
||||
class Contact(
|
||||
val name : String,
|
||||
val emails : List<EmailAddress>,
|
||||
val addresses : List<PostalAddress>,
|
||||
val phonenums : List<PhoneNumber>
|
||||
)
|
||||
|
||||
class EmailAddress(
|
||||
val user : String,
|
||||
val host : String
|
||||
)
|
||||
|
||||
class PostalAddress(
|
||||
val streetAddress : String,
|
||||
val city : String,
|
||||
val zip : String,
|
||||
val state : USState?,
|
||||
val country : Country
|
||||
) {
|
||||
assert {(state == null) xor (country == Countries["US"]) }
|
||||
}
|
||||
|
||||
class PhoneNumber(
|
||||
val country : Country,
|
||||
val areaCode : Int,
|
||||
val number : Long
|
||||
)
|
||||
|
||||
object Countries {
|
||||
fun get(id : CountryID) : Country = countryTable[id]
|
||||
|
||||
private var table : Map<String, Country>? = null
|
||||
private val countryTable : Map<String, Country>
|
||||
get() {
|
||||
if (table == null) {
|
||||
table = HashMap()
|
||||
for (line in TextFile("countries.txt").lines(stripWhiteSpace = true)) {
|
||||
table[line] = Country(line)
|
||||
}
|
||||
}
|
||||
return table
|
||||
}
|
||||
}
|
||||
|
||||
class Country(val name : String)
|
||||
@@ -0,0 +1,48 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet plain">namespace</code><code class="jet whitespace"> </code><code class="jet plain">addressbook</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">Contact</code><code class="jet plain">(</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">name</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">,</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">emails</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">List</code><code class="jet plain"><</code><code class="jet plain">EmailAddress</code><code class="jet plain">></code><code class="jet plain">,</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">addresses</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">List</code><code class="jet plain"><</code><code class="jet plain">PostalAddress</code><code class="jet plain">></code><code class="jet plain">,</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">phonenums</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">List</code><code class="jet plain"><</code><code class="jet plain">PhoneNumber</code><code class="jet plain">></code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">EmailAddress</code><code class="jet plain">(</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">user</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">,</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">host</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">PostalAddress</code><code class="jet plain">(</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">streetAddress</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">,</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">city</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">,</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">zip</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">,</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">state</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">USState</code><code class="jet plain">?</code><code class="jet plain">,</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">country</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Country</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">assert</code><code class="jet whitespace"> </code><code class="jet plain">{</code><code class="jet plain">(</code><code class="jet plain">state</code><code class="jet whitespace"> </code><code class="jet plain">==</code><code class="jet whitespace"> </code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">xor</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">country</code><code class="jet whitespace"> </code><code class="jet plain">==</code><code class="jet whitespace"> </code><code class="jet plain">Countries</code><code class="jet plain">[</code><code class="jet string">"</code><code class="jet string">US</code><code class="jet string">"</code><code class="jet plain">]</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">PhoneNumber</code><code class="jet plain">(</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">country</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Country</code><code class="jet plain">,</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">areaCode</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet plain">,</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">number</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Long</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">object</code><code class="jet whitespace"> </code><code class="jet plain">Countries</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet softkeyword">get</code><code class="jet plain">(</code><code class="jet plain">id</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">CountryID</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Country</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">countryTable</code><code class="jet plain">[</code><code class="jet plain">id</code><code class="jet plain">]</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet softkeyword">private</code><code class="jet whitespace"> </code><code class="jet keyword">var</code><code class="jet whitespace"> </code><code class="jet plain">table</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Map</code><code class="jet plain"><</code><code class="jet plain">String</code><code class="jet plain">,</code><code class="jet whitespace"> </code><code class="jet plain">Country</code><code class="jet plain">></code><code class="jet plain">?</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet keyword">null</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet softkeyword">private</code><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">countryTable</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Map</code><code class="jet plain"><</code><code class="jet plain">String</code><code class="jet plain">,</code><code class="jet whitespace"> </code><code class="jet plain">Country</code><code class="jet plain">></code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet softkeyword">get</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">if</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">table</code><code class="jet whitespace"> </code><code class="jet plain">==</code><code class="jet whitespace"> </code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">table</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">HashMap</code><code class="jet plain">(</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">for</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">line</code><code class="jet whitespace"> </code><code class="jet keyword">in</code><code class="jet whitespace"> </code><code class="jet plain">TextFile</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">countries.txt</code><code class="jet string">"</code><code class="jet plain">)</code><code class="jet plain">.</code><code class="jet plain">lines</code><code class="jet plain">(</code><code class="jet plain">stripWhiteSpace</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet keyword">true</code><code class="jet plain">)</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">table</code><code class="jet plain">[</code><code class="jet plain">line</code><code class="jet plain">]</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">Country</code><code class="jet plain">(</code><code class="jet plain">line</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">return</code><code class="jet whitespace"> </code><code class="jet plain">table</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">Country</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">name</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">)</code></div></div></div></div>
|
||||
@@ -0,0 +1,4 @@
|
||||
// Return type mandatory
|
||||
fun sum(a : Int, b : Int) : Int {
|
||||
return a + b
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet jet-comment">// Return type mandatory</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">sum</code><code class="jet plain">(</code><code class="jet plain">a</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet plain">,</code><code class="jet whitespace"> </code><code class="jet plain">b</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">return</code><code class="jet whitespace"> </code><code class="jet plain">a</code><code class="jet whitespace"> </code><code class="jet plain">+</code><code class="jet whitespace"> </code><code class="jet plain">b</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
|
||||
@@ -0,0 +1,4 @@
|
||||
val a : Int = 1
|
||||
val b = 1 // Type is inferred
|
||||
val c : Int // Type required when no initializer provided
|
||||
c = 1 // definite assignment
|
||||
@@ -0,0 +1,5 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">a</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet number">1</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">b</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet number">1</code><code class="jet whitespace"> </code><code class="jet jet-comment">// Type is inferred</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">c</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet whitespace"> </code><code class="jet jet-comment">// Type required when no initializer provided</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">c</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet number">1</code><code class="jet whitespace"> </code><code class="jet jet-comment">// definite assignment</code></div></div></div></div>
|
||||
@@ -0,0 +1,32 @@
|
||||
package multiplier
|
||||
|
||||
// Return null if str does not hold a number
|
||||
fun parseInt(str : String) : Int? {
|
||||
// ...
|
||||
}
|
||||
|
||||
fun main(args : Array<String>) {
|
||||
if (args.size < 2) {
|
||||
print("No number supplied");
|
||||
}
|
||||
val x = parseInt(args[0])
|
||||
val y = parseInt(args[1])
|
||||
|
||||
// We cannot say 'x * y' now because they may hold nulls
|
||||
|
||||
if (x != null && y != null) {
|
||||
print(x * y) // Now we can
|
||||
}
|
||||
|
||||
// ...
|
||||
if (x == null) {
|
||||
print("Wrong number format in '${args[0]}'")
|
||||
return
|
||||
}
|
||||
if (y == null) {
|
||||
print("Wrong number format in '${args[1]}'")
|
||||
return
|
||||
}
|
||||
print(x * y) // Now we know that x and y are not nulls
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">package</code><code class="jet whitespace"> </code><code class="jet plain">multiplier</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet jet-comment">// Return null if str does not hold a number</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">parseInt</code><code class="jet plain">(</code><code class="jet plain">str</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet plain">?</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet jet-comment">// ...</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Array</code><code class="jet plain"><</code><code class="jet plain">String</code><code class="jet plain">></code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">if</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">.</code><code class="jet plain">size</code><code class="jet whitespace"> </code><code class="jet plain"><</code><code class="jet whitespace"> </code><code class="jet number">2</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">No number supplied</code><code class="jet string">"</code><code class="jet plain">)</code><code class="jet plain">;</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">x</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">parseInt</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">y</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">parseInt</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">1</code><code class="jet plain">]</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet jet-comment">// We cannot say 'x * y' now because they may hold nulls</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">if</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace"> </code><code class="jet plain">!=</code><code class="jet whitespace"> </code><code class="jet keyword">null</code><code class="jet whitespace"> </code><code class="jet plain">&&</code><code class="jet whitespace"> </code><code class="jet plain">y</code><code class="jet whitespace"> </code><code class="jet plain">!=</code><code class="jet whitespace"> </code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace"> </code><code class="jet plain">*</code><code class="jet whitespace"> </code><code class="jet plain">y</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet jet-comment">// Now we can</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet jet-comment">// ...</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">if</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace"> </code><code class="jet plain">==</code><code class="jet whitespace"> </code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">Wrong number format in '</code><code class="jet escape">${</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code><code class="jet escape">}</code><code class="jet string">'</code><code class="jet string">"</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">return</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">if</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">y</code><code class="jet whitespace"> </code><code class="jet plain">==</code><code class="jet whitespace"> </code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">Wrong number format in '</code><code class="jet escape">${</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">1</code><code class="jet plain">]</code><code class="jet escape">}</code><code class="jet string">'</code><code class="jet string">"</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">return</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace"> </code><code class="jet plain">*</code><code class="jet whitespace"> </code><code class="jet plain">y</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet jet-comment">// Now we know that x and y are not nulls</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
|
||||
@@ -0,0 +1,6 @@
|
||||
fun max(a : Int, b : Int) : Int {
|
||||
if (a > b)
|
||||
return a
|
||||
else
|
||||
return b
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">max</code><code class="jet plain">(</code><code class="jet plain">a</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet plain">,</code><code class="jet whitespace"> </code><code class="jet plain">b</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">if</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">a</code><code class="jet whitespace"> </code><code class="jet plain">></code><code class="jet whitespace"> </code><code class="jet plain">b</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">return</code><code class="jet whitespace"> </code><code class="jet plain">a</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">else</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">return</code><code class="jet whitespace"> </code><code class="jet plain">b</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
|
||||
@@ -0,0 +1,9 @@
|
||||
fun main(args : Array<String>) {
|
||||
val language = if (args.size == 0) "EN" else args[0]
|
||||
println(when (language) {
|
||||
"EN" -> "Hello!"
|
||||
"ES" -> "¡Hola!"
|
||||
"RU" -> "Привет!"
|
||||
else -> "Sorry, I can't greet you in $language yet"
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Array</code><code class="jet plain"><</code><code class="jet plain">String</code><code class="jet plain">></code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">language</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet keyword">if</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">.</code><code class="jet plain">size</code><code class="jet whitespace"> </code><code class="jet plain">==</code><code class="jet whitespace"> </code><code class="jet number">0</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">EN</code><code class="jet string">"</code><code class="jet whitespace"> </code><code class="jet keyword">else</code><code class="jet whitespace"> </code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet keyword">when</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">language</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">EN</code><code class="jet string">"</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">Hello!</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">ES</code><code class="jet string">"</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">¡Hola!</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">RU</code><code class="jet string">"</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">Привет!</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">else</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">Sorry, I can't greet you in </code><code class="jet escape">$</code><code class="jet plain">language</code><code class="jet string"> yet</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
|
||||
@@ -0,0 +1,9 @@
|
||||
class Greeter(val name : String) {
|
||||
fun greet() {
|
||||
println("Hello, ${name}");
|
||||
}
|
||||
}
|
||||
|
||||
fun main(args : Array<String>) {
|
||||
Greeter(args[0]).greet()
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">Greeter</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">name</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">greet</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">Hello, </code><code class="jet escape">${</code><code class="jet plain">name</code><code class="jet escape">}</code><code class="jet string">"</code><code class="jet plain">)</code><code class="jet plain">;</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Array</code><code class="jet plain"><</code><code class="jet plain">String</code><code class="jet plain">></code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">Greeter</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code><code class="jet plain">)</code><code class="jet plain">.</code><code class="jet plain">greet</code><code class="jet plain">(</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
|
||||
@@ -0,0 +1,7 @@
|
||||
fun main(args : Array<String>) {
|
||||
if (args.size == 0) {
|
||||
println("Please provide a name as a command-line argument")
|
||||
return
|
||||
}
|
||||
println("Hello, ${args[0]}!")
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Array</code><code class="jet plain"><</code><code class="jet plain">String</code><code class="jet plain">></code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">if</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet plain">.</code><code class="jet plain">size</code><code class="jet whitespace"> </code><code class="jet plain">==</code><code class="jet whitespace"> </code><code class="jet number">0</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">Please provide a name as a command-line argument</code><code class="jet string">"</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">return</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">Hello, </code><code class="jet escape">${</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code><code class="jet escape">}</code><code class="jet string">!</code><code class="jet string">"</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
|
||||
@@ -0,0 +1,31 @@
|
||||
import html.*
|
||||
|
||||
fun result(args : Array<String>) =
|
||||
html {
|
||||
head {
|
||||
title {+"XML encoding with Kotlin"}
|
||||
}
|
||||
body {
|
||||
h1 {+"XML encoding with Kotlin"}
|
||||
p {+"this format can be used as an alternative markup to XML"}
|
||||
|
||||
// an element with attributes and text content
|
||||
a(href = "http://jetbrains.com/kotlin") {+"Kotlin"}
|
||||
|
||||
// mixed content
|
||||
p {
|
||||
+"This is some"
|
||||
b {+"mixed"}
|
||||
+"text. For more see the"
|
||||
a(href = "http://jetbrains.com/kotlin") {+"Kotlin"}
|
||||
+"project"
|
||||
}
|
||||
p {+"some text"}
|
||||
|
||||
// content generated by
|
||||
p {
|
||||
for (arg in args)
|
||||
+arg
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet softkeyword">import</code><code class="jet whitespace"> </code><code class="jet plain">html</code><code class="jet plain">.</code><code class="jet plain">*</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">result</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Array</code><code class="jet plain"><</code><code class="jet plain">String</code><code class="jet plain">></code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">html</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">head</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">title</code><code class="jet whitespace"> </code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">"</code><code class="jet string">XML encoding with Kotlin</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">body</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">h1</code><code class="jet whitespace"> </code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">"</code><code class="jet string">XML encoding with Kotlin</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">p</code><code class="jet whitespace"> </code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">"</code><code class="jet string">this format can be used as an alternative markup to XML</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet jet-comment">// an element with attributes and text content</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">a</code><code class="jet plain">(</code><code class="jet plain">href</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">http://jetbrains.com/kotlin</code><code class="jet string">"</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">"</code><code class="jet string">Kotlin</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet jet-comment">// mixed content</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">p</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">+</code><code class="jet string">"</code><code class="jet string">This is some</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">b</code><code class="jet whitespace"> </code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">"</code><code class="jet string">mixed</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">+</code><code class="jet string">"</code><code class="jet string">text. For more see the</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">a</code><code class="jet plain">(</code><code class="jet plain">href</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">http://jetbrains.com/kotlin</code><code class="jet string">"</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">"</code><code class="jet string">Kotlin</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">+</code><code class="jet string">"</code><code class="jet string">project</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">p</code><code class="jet whitespace"> </code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">"</code><code class="jet string">some text</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet jet-comment">// content generated by</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">p</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">for</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">arg</code><code class="jet whitespace"> </code><code class="jet keyword">in</code><code class="jet whitespace"> </code><code class="jet plain">args</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">+</code><code class="jet plain">arg</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code></div></div></div></div>
|
||||
@@ -0,0 +1,114 @@
|
||||
import <ref="html_ns":>html.*
|
||||
|
||||
fun result(args : Array<String>) =
|
||||
<ref="html":>html {
|
||||
<ref="head":>head {
|
||||
<ref="title":>title {<ref="plus":>+"XML encoding with Kotlin"}
|
||||
}
|
||||
<ref="body":>body {
|
||||
<ref="h1":>h1 {<ref="plus":>+"XML encoding with Kotlin"}
|
||||
<ref="p":>p {<ref="plus":>+"this format can be used as an alternative markup to XML"}
|
||||
|
||||
// an element with attributes and text content
|
||||
<ref="a":>a(href = "http://jetbrains.com/kotlin") {<ref="plus":>+"Kotlin"}
|
||||
|
||||
// mixed content
|
||||
<ref="p":>p {
|
||||
<ref="plus":>+"This is some"
|
||||
<ref="b":>b {<ref="plus":>+"mixed"}
|
||||
<ref="plus":>+"text. For more see the"
|
||||
<ref="a":>a(href = "http://jetbrains.com/kotlin") {<ref="plus":>+"Kotlin"}
|
||||
<ref="plus":>+"project"
|
||||
}
|
||||
<ref="p":>p {<ref="plus":>+"some text"}
|
||||
|
||||
// content generated by
|
||||
<ref="p":>p {
|
||||
for (arg in args)
|
||||
<ref="plus":>+arg
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<label="html_ns":>namespace html {
|
||||
|
||||
<label="Factory":>abstract class Factory<T> {
|
||||
fun create() : T
|
||||
}
|
||||
|
||||
<label="Element":>abstract class Element
|
||||
|
||||
<label="TextElement":>class TextElement(val text : String) : Element
|
||||
|
||||
<label="Tag":>abstract class Tag(val name : String) : Element {
|
||||
<label="children":>val children = ArrayList<Element>()
|
||||
<label="attributes":>val attributes = HashMap<String, String>()
|
||||
|
||||
protected fun initTag<T : Element>(init : T.() -> Unit) : T
|
||||
where class object T : Factory<T> {
|
||||
val tag = T.create()
|
||||
tag.init()
|
||||
<ref="children":>children.add(tag)
|
||||
return tag
|
||||
}
|
||||
}
|
||||
|
||||
<label="TagWithText":>abstract class TagWithText(name : String) : Tag(name) {
|
||||
<label="plus"/>fun String.plus() {
|
||||
children.add(TextElement(this))
|
||||
}
|
||||
}
|
||||
|
||||
<label="HTML":>class HTML() : TagWithText("html") {
|
||||
class object : Factory<HTML> {
|
||||
override fun create() = HTML()
|
||||
}
|
||||
|
||||
<label="head"/>fun head(init : Head.() -> Unit) = initTag(init)
|
||||
|
||||
<label="body"/>fun body(init : Body.() -> Unit) = initTag(init)
|
||||
}
|
||||
|
||||
<label="Head":>class Head() : TagWithText("head") {
|
||||
class object : Factory<Head> {
|
||||
override fun create() = Head()
|
||||
}
|
||||
|
||||
<label="title"/>fun title(init : Title.() -> Unit) = initTag(init)
|
||||
}
|
||||
|
||||
<label="Title":>class Title() : TagWithText("title")
|
||||
|
||||
<label="BodyTag":>abstract class BodyTag(name : String) : TagWithText(name) {
|
||||
}
|
||||
|
||||
<label="Body":>class Body() : BodyTag("body") {
|
||||
class object : Factory<Body> {
|
||||
override fun create() = Body()
|
||||
}
|
||||
|
||||
<label="b"/>fun b(init : B.() -> Unit) = initTag(init)
|
||||
<label="p"/>fun p(init : P.() -> Unit) = initTag(init)
|
||||
<label="h1"/>fun h1(init : H1.() -> Unit) = initTag(init)
|
||||
<label="a"/>fun a(href : String, init : A.() -> Unit) {
|
||||
val a = initTag(init)
|
||||
a.href = href
|
||||
}
|
||||
}
|
||||
|
||||
class B() : BodyTag("b")
|
||||
class P() : BodyTag("p")
|
||||
class H1() : BodyTag("h1")
|
||||
class A() : BodyTag("a") {
|
||||
var href : String
|
||||
get() = <ref="attributes":>attributes["href"]
|
||||
set(value) { <ref="attributes":>attributes["href"] = value }
|
||||
}
|
||||
|
||||
<label="html"/>fun html(init : HTML.() -> Unit) : HTML {
|
||||
val html = HTML()
|
||||
html.init()
|
||||
return html
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet softkeyword">import</code><code class="jet whitespace"> </code><a class="jet ref" href="#html_ns"><code class="jet plain">html</code></a><code class="jet plain">.</code><code class="jet plain">*</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">result</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Array</code><code class="jet plain"><</code><code class="jet plain">String</code><code class="jet plain">></code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#html"><code class="jet plain">html</code></a><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#head"><code class="jet plain">head</code></a><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#title"><code class="jet plain">title</code></a><code class="jet whitespace"> </code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">"</code><code class="jet string">XML encoding with Kotlin</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#body"><code class="jet plain">body</code></a><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#h1"><code class="jet plain">h1</code></a><code class="jet whitespace"> </code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">"</code><code class="jet string">XML encoding with Kotlin</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#p"><code class="jet plain">p</code></a><code class="jet whitespace"> </code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">"</code><code class="jet string">this format can be used as an alternative markup to XML</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet jet-comment">// an element with attributes and text content</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#a"><code class="jet plain">a</code></a><code class="jet plain">(</code><code class="jet plain">href</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">http://jetbrains.com/kotlin</code><code class="jet string">"</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">"</code><code class="jet string">Kotlin</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet jet-comment">// mixed content</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#p"><code class="jet plain">p</code></a><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">"</code><code class="jet string">This is some</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#b"><code class="jet plain">b</code></a><code class="jet whitespace"> </code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">"</code><code class="jet string">mixed</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">"</code><code class="jet string">text. For more see the</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#a"><code class="jet plain">a</code></a><code class="jet plain">(</code><code class="jet plain">href</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet string">"</code><code class="jet string">http://jetbrains.com/kotlin</code><code class="jet string">"</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">"</code><code class="jet string">Kotlin</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">"</code><code class="jet string">project</code><code class="jet string">"</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#p"><code class="jet plain">p</code></a><code class="jet whitespace"> </code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">"</code><code class="jet string">some text</code><code class="jet string">"</code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet jet-comment">// content generated by</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#p"><code class="jet plain">p</code></a><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">for</code><code class="jet whitespace"> </code><code class="jet plain">(</code><code class="jet plain">arg</code><code class="jet whitespace"> </code><code class="jet keyword">in</code><code class="jet whitespace"> </code><code class="jet plain">args</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet plain">arg</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><a name="html_ns"><code class="jet plain">namespace</code></a><code class="jet whitespace"> </code><code class="jet plain">html</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="Factory"><code class="jet softkeyword">abstract</code></a><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">Factory</code><code class="jet plain"><</code><code class="jet plain">T</code><code class="jet plain">></code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">create</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">T</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="Element"><code class="jet softkeyword">abstract</code></a><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">Element</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="TextElement"><code class="jet keyword">class</code></a><code class="jet whitespace"> </code><code class="jet plain">TextElement</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">text</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Element</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="Tag"><code class="jet softkeyword">abstract</code></a><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">Tag</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">name</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Element</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="children"><code class="jet keyword">val</code></a><code class="jet whitespace"> </code><code class="jet plain">children</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">ArrayList</code><code class="jet plain"><</code><code class="jet plain">Element</code><code class="jet plain">></code><code class="jet plain">(</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="attributes"><code class="jet keyword">val</code></a><code class="jet whitespace"> </code><code class="jet plain">attributes</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">HashMap</code><code class="jet plain"><</code><code class="jet plain">String</code><code class="jet plain">,</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">></code><code class="jet plain">(</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet softkeyword">protected</code><code class="jet whitespace"> </code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">initTag</code><code class="jet plain"><</code><code class="jet plain">T</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Element</code><code class="jet plain">></code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">T</code><code class="jet plain">.</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">T</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet softkeyword">where</code><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet keyword">object</code><code class="jet whitespace"> </code><code class="jet plain">T</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Factory</code><code class="jet plain"><</code><code class="jet plain">T</code><code class="jet plain">></code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">tag</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">T</code><code class="jet plain">.</code><code class="jet plain">create</code><code class="jet plain">(</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">tag</code><code class="jet plain">.</code><code class="jet plain">init</code><code class="jet plain">(</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a class="jet ref" href="#children"><code class="jet plain">children</code></a><code class="jet plain">.</code><code class="jet plain">add</code><code class="jet plain">(</code><code class="jet plain">tag</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">return</code><code class="jet whitespace"> </code><code class="jet plain">tag</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="TagWithText"><code class="jet softkeyword">abstract</code></a><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">TagWithText</code><code class="jet plain">(</code><code class="jet plain">name</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Tag</code><code class="jet plain">(</code><code class="jet plain">name</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="plus"></a><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">.</code><code class="jet plain">plus</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">children</code><code class="jet plain">.</code><code class="jet plain">add</code><code class="jet plain">(</code><code class="jet plain">TextElement</code><code class="jet plain">(</code><code class="jet keyword">this</code><code class="jet plain">)</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="HTML"><code class="jet keyword">class</code></a><code class="jet whitespace"> </code><code class="jet plain">HTML</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">TagWithText</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">html</code><code class="jet string">"</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet keyword">object</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Factory</code><code class="jet plain"><</code><code class="jet plain">HTML</code><code class="jet plain">></code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet softkeyword">override</code><code class="jet whitespace"> </code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">create</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">HTML</code><code class="jet plain">(</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="head"></a><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">head</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Head</code><code class="jet plain">.</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="body"></a><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">body</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Body</code><code class="jet plain">.</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="Head"><code class="jet keyword">class</code></a><code class="jet whitespace"> </code><code class="jet plain">Head</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">TagWithText</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">head</code><code class="jet string">"</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet keyword">object</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Factory</code><code class="jet plain"><</code><code class="jet plain">Head</code><code class="jet plain">></code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet softkeyword">override</code><code class="jet whitespace"> </code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">create</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">Head</code><code class="jet plain">(</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="title"></a><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">title</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Title</code><code class="jet plain">.</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="Title"><code class="jet keyword">class</code></a><code class="jet whitespace"> </code><code class="jet plain">Title</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">TagWithText</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">title</code><code class="jet string">"</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="BodyTag"><code class="jet softkeyword">abstract</code></a><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet plain">name</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">TagWithText</code><code class="jet plain">(</code><code class="jet plain">name</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="Body"><code class="jet keyword">class</code></a><code class="jet whitespace"> </code><code class="jet plain">Body</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">body</code><code class="jet string">"</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet keyword">object</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Factory</code><code class="jet plain"><</code><code class="jet plain">Body</code><code class="jet plain">></code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet softkeyword">override</code><code class="jet whitespace"> </code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">create</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">Body</code><code class="jet plain">(</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="b"></a><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">b</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">B</code><code class="jet plain">.</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="p"></a><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">p</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">P</code><code class="jet plain">.</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="h1"></a><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">h1</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">H1</code><code class="jet plain">.</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="a"></a><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">a</code><code class="jet plain">(</code><code class="jet plain">href</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code><code class="jet plain">,</code><code class="jet whitespace"> </code><code class="jet plain">init</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">A</code><code class="jet plain">.</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">a</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">a</code><code class="jet plain">.</code><code class="jet plain">href</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">href</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">B</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">b</code><code class="jet string">"</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">P</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">p</code><code class="jet string">"</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">H1</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">h1</code><code class="jet string">"</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">class</code><code class="jet whitespace"> </code><code class="jet plain">A</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">a</code><code class="jet string">"</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">var</code><code class="jet whitespace"> </code><code class="jet plain">href</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">String</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet softkeyword">get</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><a class="jet ref" href="#attributes"><code class="jet plain">attributes</code></a><code class="jet plain">[</code><code class="jet string">"</code><code class="jet string">href</code><code class="jet string">"</code><code class="jet plain">]</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet softkeyword">set</code><code class="jet plain">(</code><code class="jet plain">value</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code><code class="jet whitespace"> </code><a class="jet ref" href="#attributes"><code class="jet plain">attributes</code></a><code class="jet plain">[</code><code class="jet string">"</code><code class="jet string">href</code><code class="jet string">"</code><code class="jet plain">]</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">value</code><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><a name="html"></a><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">html</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">HTML</code><code class="jet plain">.</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">-></code><code class="jet whitespace"> </code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">HTML</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">val</code><code class="jet whitespace"> </code><code class="jet plain">html</code><code class="jet whitespace"> </code><code class="jet plain">=</code><code class="jet whitespace"> </code><code class="jet plain">HTML</code><code class="jet plain">(</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">html</code><code class="jet plain">.</code><code class="jet plain">init</code><code class="jet plain">(</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet keyword">return</code><code class="jet whitespace"> </code><code class="jet plain">html</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">}</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
|
||||
@@ -0,0 +1,5 @@
|
||||
package hello
|
||||
|
||||
fun main(args : Array<String>) {
|
||||
println("Hello, world!")
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">package</code><code class="jet whitespace"> </code><code class="jet plain">hello</code> </div>
|
||||
<div class="line"> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace"> </code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Array</code><code class="jet plain"><</code><code class="jet plain">String</code><code class="jet plain">></code><code class="jet plain">)</code><code class="jet whitespace"> </code><code class="jet plain">{</code> </div>
|
||||
<div class="line"><code class="jet whitespace"> </code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">"</code><code class="jet string">Hello, world!</code><code class="jet string">"</code><code class="jet plain">)</code> </div>
|
||||
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code></div></div></div></div>
|
||||
@@ -0,0 +1 @@
|
||||
var <a="s"/>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <a="s":>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <a="a">allByDefault : Int?</a>
|
||||
@@ -0,0 +1 @@
|
||||
var <class="class"/>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <class="class":>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <class="class">allByDefault : Int?</class>
|
||||
@@ -0,0 +1 @@
|
||||
var <label="label"/>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <label="label":>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <label="label">allByDefault : Int?</label>
|
||||
@@ -0,0 +1 @@
|
||||
var <ref="ref"/>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <ref="ref":>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <ref="ref">allByDefault : Int?</ref>
|
||||
@@ -0,0 +1 @@
|
||||
var <style="style"/>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <style="style":>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <style="style">allByDefault : Int?</style>
|
||||
@@ -0,0 +1 @@
|
||||
var <unresolved/>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <unresolved:>allByDefault : Int?
|
||||
@@ -0,0 +1 @@
|
||||
var <unresolved>allByDefault : Int?</unresolved>
|
||||
@@ -0,0 +1 @@
|
||||
var <warning/>allByDefault : Int?
|
||||
@@ -0,0 +1,2 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">var</code><code class="jet whitespace"> </code><div class="jet warning"></div><code class="jet plain">allByDefault</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet plain">?</code></div></div></div></div>
|
||||
@@ -0,0 +1 @@
|
||||
var <warning:>allByDefault : Int?
|
||||
@@ -0,0 +1,2 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">var</code><code class="jet whitespace"> </code><div class="jet warning"><code class="jet plain">allByDefault</code></div><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet plain">?</code></div></div></div></div>
|
||||
@@ -0,0 +1 @@
|
||||
var <warning>allByDefault : Int?</warning>
|
||||
@@ -0,0 +1,2 @@
|
||||
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent"><div class="container">
|
||||
<div class="line"><code class="jet keyword">var</code><code class="jet whitespace"> </code><div class="jet warning"><code class="jet plain">allByDefault</code><code class="jet whitespace"> </code><code class="jet plain">:</code><code class="jet whitespace"> </code><code class="jet plain">Int</code><code class="jet plain">?</code></div></div></div></div></div>
|
||||
Reference in New Issue
Block a user