Merge pull request #41 from NataliaUkhorskaya/master

Changes in confluence plugin
This commit is contained in:
Andrey Breslav
2012-04-19 09:25:56 -07:00
64 changed files with 1731 additions and 818 deletions
+1 -1
View File
@@ -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"/>
+1
View File
@@ -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("&lt;");
break;
case '>':
builder.append("&gt;");
break;
case '&':
builder.append("&amp;");
break;
case ' ':
builder.append("&nbsp;");
break;
case '"':
builder.append("&quot;");
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("&lt;");
break;
case '>':
builder.append("&gt;");
break;
case '&':
builder.append("&amp;");
break;
case '"':
builder.append("&quot;");
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("&nbsp;");
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: &lt;").append(tag.type).append("&gt;</div>");
while (tag != null && tag.getEnd() < tokenEnd) {
result.append("<div class=\"jet hwarning\">Skipping a tag in the middle of a token: &lt;").append(tag.getType()).append("&gt;</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;
}
}
+12 -1
View File
@@ -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\">");
}
}
@@ -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">&nbsp;</code><code class="jet plain">Greeter1</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Greeter2</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">name</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line">&nbsp;</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">&nbsp;</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">c</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">c</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">var</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">sss</code><code class="jet string">&quot;</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">&nbsp;</code><code class="jet plain">language</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet number">0</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">EN</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">else</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">when</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">language</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">EN</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Hello!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">ES</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">¡Hola!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">RU</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Привет!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;</code><code class="jet keyword">else</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Sorry,&nbsp;I&nbsp;can't&nbsp;greet&nbsp;you&nbsp;in&nbsp;</code><code class="jet escape">$</code><code class="jet plain">language</code><code class="jet string">&nbsp;yet</code><code class="jet string">&quot;</code>&nbsp;</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">&nbsp;</code><code class="jet plain">addressbook</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Contact</code><code class="jet plain">(</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">name</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">emails</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">List</code><code class="jet plain">&lt;</code><code class="jet plain">EmailAddress</code><code class="jet plain">&gt;</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">addresses</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">List</code><code class="jet plain">&lt;</code><code class="jet plain">PostalAddress</code><code class="jet plain">&gt;</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">phonenums</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">List</code><code class="jet plain">&lt;</code><code class="jet plain">PhoneNumber</code><code class="jet plain">&gt;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">EmailAddress</code><code class="jet plain">(</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">user</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">host</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">PostalAddress</code><code class="jet plain">(</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">streetAddress</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">city</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">zip</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">state</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">USState</code><code class="jet plain">?</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">country</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;</code><code class="jet plain">assert</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">(</code><code class="jet plain">state</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">xor</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">country</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Countries</code><code class="jet plain">[</code><code class="jet string">&quot;</code><code class="jet string">US</code><code class="jet string">&quot;</code><code class="jet plain">]</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">PhoneNumber</code><code class="jet plain">(</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">country</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">areaCode</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">,</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">number</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Long</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">)</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">object</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Countries</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet softkeyword">get</code><code class="jet plain">(</code><code class="jet plain">id</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">CountryID</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">countryTable</code><code class="jet plain">[</code><code class="jet plain">id</code><code class="jet plain">]</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet softkeyword">private</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">var</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">table</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Map</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">,</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet plain">&gt;</code><code class="jet plain">?</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet softkeyword">private</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">countryTable</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Map</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">,</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet plain">&gt;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet softkeyword">get</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">table</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">table</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">HashMap</code><code class="jet plain">(</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">for</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">line</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">in</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">TextFile</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">countries.txt</code><code class="jet string">&quot;</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">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">true</code><code class="jet plain">)</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet plain">(</code><code class="jet plain">line</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">table</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Country</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">name</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">//&nbsp;Return&nbsp;type&nbsp;mandatory</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">sum</code><code class="jet plain">(</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">,</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">return</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">+</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code>&nbsp;</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">&nbsp;</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code><code class="jet whitespace">&nbsp;</code><code class="jet jet-comment">//&nbsp;Type&nbsp;is&nbsp;inferred</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">c</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet whitespace">&nbsp;</code><code class="jet jet-comment">//&nbsp;Type&nbsp;required&nbsp;when&nbsp;no&nbsp;initializer&nbsp;provided</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">c</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet number">1</code><code class="jet whitespace">&nbsp;</code><code class="jet jet-comment">//&nbsp;definite&nbsp;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">&nbsp;</code><code class="jet plain">multiplier</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet jet-comment">//&nbsp;Return&nbsp;null&nbsp;if&nbsp;str&nbsp;does&nbsp;not&nbsp;hold&nbsp;a&nbsp;number</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">parseInt</code><code class="jet plain">(</code><code class="jet plain">str</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">?</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;...</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">&lt;</code><code class="jet whitespace">&nbsp;</code><code class="jet number">2</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">No&nbsp;number&nbsp;supplied</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet plain">;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">x</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</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>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">y</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</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>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;We&nbsp;cannot&nbsp;say&nbsp;'x&nbsp;*&nbsp;y'&nbsp;now&nbsp;because&nbsp;they&nbsp;may&nbsp;hold&nbsp;nulls</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">!=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">&amp;&amp;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">y</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">!=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">*</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">y</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet jet-comment">//&nbsp;Now&nbsp;we&nbsp;can</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;...</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Wrong&nbsp;number&nbsp;format&nbsp;in&nbsp;'</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">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">(</code><code class="jet plain">y</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">null</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Wrong&nbsp;number&nbsp;format&nbsp;in&nbsp;'</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">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">print</code><code class="jet plain">(</code><code class="jet plain">x</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">*</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">y</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet jet-comment">//&nbsp;Now&nbsp;we&nbsp;know&nbsp;that&nbsp;x&nbsp;and&nbsp;y&nbsp;are&nbsp;not&nbsp;nulls</code>&nbsp;</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">&nbsp;</code><code class="jet plain">max</code><code class="jet plain">(</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">,</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">a</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">else</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code>&nbsp;</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">&nbsp;</code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">language</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet number">0</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">EN</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">else</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">args</code><code class="jet plain">[</code><code class="jet number">0</code><code class="jet plain">]</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet keyword">when</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">language</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">EN</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Hello!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">ES</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">¡Hola!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">RU</code><code class="jet string">&quot;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Привет!</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">else</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">Sorry,&nbsp;I&nbsp;can't&nbsp;greet&nbsp;you&nbsp;in&nbsp;</code><code class="jet escape">$</code><code class="jet plain">language</code><code class="jet string">&nbsp;yet</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code><code class="jet plain">)</code>&nbsp;</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">&nbsp;</code><code class="jet plain">Greeter</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">name</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">greet</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Hello,&nbsp;</code><code class="jet escape">${</code><code class="jet plain">name</code><code class="jet escape">}</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet plain">;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</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>&nbsp;</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]}!")
}
@@ -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">&nbsp;</code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">if</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">==</code><code class="jet whitespace">&nbsp;</code><code class="jet number">0</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Please&nbsp;provide&nbsp;a&nbsp;name&nbsp;as&nbsp;a&nbsp;command-line&nbsp;argument</code><code class="jet string">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Hello,&nbsp;</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">&quot;</code><code class="jet plain">)</code>&nbsp;</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">&nbsp;</code><code class="jet plain">html</code><code class="jet plain">.</code><code class="jet plain">*</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">result</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">html</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">head</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">title</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">XML&nbsp;encoding&nbsp;with&nbsp;Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">body</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">h1</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">XML&nbsp;encoding&nbsp;with&nbsp;Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">p</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">this&nbsp;format&nbsp;can&nbsp;be&nbsp;used&nbsp;as&nbsp;an&nbsp;alternative&nbsp;markup&nbsp;to&nbsp;XML</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;an&nbsp;element&nbsp;with&nbsp;attributes&nbsp;and&nbsp;text&nbsp;content</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">a</code><code class="jet plain">(</code><code class="jet plain">href</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">http://jetbrains.com/kotlin</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;mixed&nbsp;content</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">p</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">This&nbsp;is&nbsp;some</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">b</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">mixed</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">text.&nbsp;For&nbsp;more&nbsp;see&nbsp;the</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">a</code><code class="jet plain">(</code><code class="jet plain">href</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">http://jetbrains.com/kotlin</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">project</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">p</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><code class="jet plain">+</code><code class="jet string">&quot;</code><code class="jet string">some&nbsp;text</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;content&nbsp;generated&nbsp;by</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">p</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">for</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">arg</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">in</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">args</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">+</code><code class="jet plain">arg</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</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">&nbsp;</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>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">result</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a class="jet ref" href="#html"><code class="jet plain">html</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#head"><code class="jet plain">head</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#title"><code class="jet plain">title</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">&quot;</code><code class="jet string">XML&nbsp;encoding&nbsp;with&nbsp;Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#body"><code class="jet plain">body</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#h1"><code class="jet plain">h1</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">&quot;</code><code class="jet string">XML&nbsp;encoding&nbsp;with&nbsp;Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#p"><code class="jet plain">p</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">&quot;</code><code class="jet string">this&nbsp;format&nbsp;can&nbsp;be&nbsp;used&nbsp;as&nbsp;an&nbsp;alternative&nbsp;markup&nbsp;to&nbsp;XML</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;an&nbsp;element&nbsp;with&nbsp;attributes&nbsp;and&nbsp;text&nbsp;content</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">http://jetbrains.com/kotlin</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">&quot;</code><code class="jet string">Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;mixed&nbsp;content</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#p"><code class="jet plain">p</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">&quot;</code><code class="jet string">This&nbsp;is&nbsp;some</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#b"><code class="jet plain">b</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">&quot;</code><code class="jet string">mixed</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">&quot;</code><code class="jet string">text.&nbsp;For&nbsp;more&nbsp;see&nbsp;the</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet string">&quot;</code><code class="jet string">http://jetbrains.com/kotlin</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">&quot;</code><code class="jet string">Kotlin</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">&quot;</code><code class="jet string">project</code><code class="jet string">&quot;</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#p"><code class="jet plain">p</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet string">&quot;</code><code class="jet string">some&nbsp;text</code><code class="jet string">&quot;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet jet-comment">//&nbsp;content&nbsp;generated&nbsp;by</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#p"><code class="jet plain">p</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">for</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">(</code><code class="jet plain">arg</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">in</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">args</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><a class="jet ref" href="#plus"><code class="jet plain">+</code></a><code class="jet plain">arg</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><a name="html_ns"><code class="jet plain">namespace</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">html</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a name="Factory"><code class="jet softkeyword">abstract</code></a><code class="jet whitespace">&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Factory</code><code class="jet plain">&lt;</code><code class="jet plain">T</code><code class="jet plain">&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">create</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">T</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a name="Element"><code class="jet softkeyword">abstract</code></a><code class="jet whitespace">&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Element</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a name="TextElement"><code class="jet keyword">class</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">TextElement</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">text</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Element</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a name="Tag"><code class="jet softkeyword">abstract</code></a><code class="jet whitespace">&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Tag</code><code class="jet plain">(</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">name</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Element</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a name="children"><code class="jet keyword">val</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">children</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">ArrayList</code><code class="jet plain">&lt;</code><code class="jet plain">Element</code><code class="jet plain">&gt;</code><code class="jet plain">(</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a name="attributes"><code class="jet keyword">val</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">attributes</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">HashMap</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">,</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">(</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet softkeyword">protected</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">initTag</code><code class="jet plain">&lt;</code><code class="jet plain">T</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Element</code><code class="jet plain">&gt;</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">T</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet softkeyword">where</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">object</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">T</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Factory</code><code class="jet plain">&lt;</code><code class="jet plain">T</code><code class="jet plain">&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">tag</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</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>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">tag</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a name="TagWithText"><code class="jet softkeyword">abstract</code></a><code class="jet whitespace">&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">TagWithText</code><code class="jet plain">(</code><code class="jet plain">name</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a name="plus"></a><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a name="HTML"><code class="jet keyword">class</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">HTML</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">TagWithText</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">html</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">object</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Factory</code><code class="jet plain">&lt;</code><code class="jet plain">HTML</code><code class="jet plain">&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet softkeyword">override</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">create</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">HTML</code><code class="jet plain">(</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a name="head"></a><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">head</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a name="body"></a><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">body</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a name="Head"><code class="jet keyword">class</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">Head</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">TagWithText</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">head</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">object</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Factory</code><code class="jet plain">&lt;</code><code class="jet plain">Head</code><code class="jet plain">&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet softkeyword">override</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">create</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Head</code><code class="jet plain">(</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a name="title"></a><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">title</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a name="Title"><code class="jet keyword">class</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">Title</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">TagWithText</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">title</code><code class="jet string">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a name="BodyTag"><code class="jet softkeyword">abstract</code></a><code class="jet whitespace">&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet plain">name</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a name="Body"><code class="jet keyword">class</code></a><code class="jet whitespace">&nbsp;</code><code class="jet plain">Body</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">body</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">object</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Factory</code><code class="jet plain">&lt;</code><code class="jet plain">Body</code><code class="jet plain">&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet softkeyword">override</code><code class="jet whitespace">&nbsp;</code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">create</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Body</code><code class="jet plain">(</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a name="b"></a><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">b</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a name="p"></a><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">p</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a name="h1"></a><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">h1</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><a name="a"></a><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">a</code><code class="jet plain">(</code><code class="jet plain">href</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code><code class="jet plain">,</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">init</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">a</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">initTag</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">a</code><code class="jet plain">.</code><code class="jet plain">href</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">href</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">B</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">b</code><code class="jet string">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">P</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">p</code><code class="jet string">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">H1</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">h1</code><code class="jet string">&quot;</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet keyword">class</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">A</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">BodyTag</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">a</code><code class="jet string">&quot;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">var</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">href</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">String</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet softkeyword">get</code><code class="jet plain">(</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><a class="jet ref" href="#attributes"><code class="jet plain">attributes</code></a><code class="jet plain">[</code><code class="jet string">&quot;</code><code class="jet string">href</code><code class="jet string">&quot;</code><code class="jet plain">]</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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">&nbsp;</code><code class="jet plain">{</code><code class="jet whitespace">&nbsp;</code><a class="jet ref" href="#attributes"><code class="jet plain">attributes</code></a><code class="jet plain">[</code><code class="jet string">&quot;</code><code class="jet string">href</code><code class="jet string">&quot;</code><code class="jet plain">]</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">value</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><a name="html"></a><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">html</code><code class="jet plain">(</code><code class="jet plain">init</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><code class="jet plain">-&gt;</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Unit</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">HTML</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">val</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">html</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">=</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">HTML</code><code class="jet plain">(</code><code class="jet plain">)</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="jet keyword">return</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">html</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">}</code>&nbsp;</div>
<div class="line">&nbsp;</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">&nbsp;</code><code class="jet plain">hello</code>&nbsp;</div>
<div class="line">&nbsp;</div>
<div class="line"><code class="jet whitespace"></code><code class="jet keyword">fun</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">main</code><code class="jet plain">(</code><code class="jet plain">args</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Array</code><code class="jet plain">&lt;</code><code class="jet plain">String</code><code class="jet plain">&gt;</code><code class="jet plain">)</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">{</code>&nbsp;</div>
<div class="line"><code class="jet whitespace">&nbsp;&nbsp;</code><code class="jet plain">println</code><code class="jet plain">(</code><code class="jet string">&quot;</code><code class="jet string">Hello,&nbsp;world!</code><code class="jet string">&quot;</code><code class="jet plain">)</code>&nbsp;</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">&nbsp;</code><div class="jet warning"></div><code class="jet plain">allByDefault</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><div class="jet warning"><code class="jet plain">allByDefault</code></div><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</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">&nbsp;</code><div class="jet warning"><code class="jet plain">allByDefault</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">:</code><code class="jet whitespace">&nbsp;</code><code class="jet plain">Int</code><code class="jet plain">?</code></div></div></div></div></div>