Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
out:
- ".*Hello, 上海.*"
file: program.eo
args: ["org.eolang.snippets.program", "上海"]
target: "eoc"
eo: |
+alias org.eolang.io.stdout
+package org.eolang.snippets

[args] > program
io.stdout > @
tt.sprintf *1
"Hello, %s\n"
args.at 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
sheets:
- /org/eolang/maven/transpile/set-locators.xsl
- /org/eolang/maven/transpile/set-original-names.xsl
- /org/eolang/maven/transpile/classes.xsl
- /org/eolang/maven/transpile/package.xsl
- /org/eolang/maven/transpile/attrs.xsl
- /org/eolang/maven/transpile/data.xsl
- /org/eolang/maven/transpile/to-java.xsl
asserts:
- /object[not(errors)]
- //java[contains(text(), 'base="Φ.org.eolang.tt.sprintf"')]
input: |
+alias org.eolang.io.stdout
+package org.eolang.snippets

[args] > program
io.stdout > @
tt.sprintf *1
"Hello, %s\n"
args.at 0
14 changes: 5 additions & 9 deletions eo-parser/src/main/java/org/eolang/parser/CompactArrayFqn.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,13 @@ public String asString() {
.map(ParseTree::getText)
.collect(Collectors.joining("."));
final String fqn;
if (this.context.HOME() == null) {
fqn = name;
} else {
if (this.context.HOME() == null && this.context.XI() == null) {
fqn = String.format("@compact:%s", name);
} else if (this.context.HOME() != null && this.context.XI() == null) {
fqn = String.format("Φ.org.eolang.%s", name);
}
final String base;
if (this.context.XI() == null) {
base = fqn;
} else {
base = String.format("ξ.%s", fqn);
fqn = String.format("ξ.%s", name);
}
return base;
return fqn;
}
}
3 changes: 3 additions & 0 deletions eo-parser/src/main/java/org/eolang/parser/EoSyntax.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,9 @@ public final class EoSyntax implements Syntax {
"/org/eolang/parser/parse/expand-qqs.xsl",
"/org/eolang/parser/parse/expand-aliases.xsl",
"/org/eolang/parser/parse/resolve-aliases.xsl",
"/org/eolang/parser/parse/resolve-compacts.xsl",
"/org/eolang/parser/parse/validate-before-stars.xsl",
"/org/eolang/parser/parse/resolve-before-stars.xsl",
"/org/eolang/parser/parse/add-default-package.xsl",
"/org/eolang/parser/parse/roll-bases.xsl",
"/org/eolang/parser/parse/cti-adds-errors.xsl",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
* SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
* SPDX-License-Identifier: MIT
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" id="resolve-compacts" version="2.0">
<!--
Here we go through all `@compact:oname` bases and resolve it's FQN:
1. If `oname` is defined in the current scope => `oname`
2. Otherwise => `Φ.org.eolang.oname`
-->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@base[starts-with(., '@compact:')]">
<xsl:variable name="q" select="substring-after(., '@compact:')"/>
<xsl:variable name="head" select="substring-before(concat($q, '.'), '.')"/>
<xsl:variable name="alias" select="/object/metas/meta[head='alias' and part[1]=$head]/part[2]"/>
<xsl:choose>
<xsl:when test="parent::o/parent::o/o[@name = $head]">
<xsl:attribute name="base">
<xsl:value-of select="$q"/>
</xsl:attribute>
</xsl:when>
<xsl:when test="string-length($alias) &gt; 0">
<xsl:attribute name="base">
<xsl:value-of select="$alias"/>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="base">
<xsl:value-of select="concat('Φ.org.eolang.', $q)"/>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ final class CompactArrayFqnTest {
@ParameterizedTest
@CsvSource(
{
"foo *1,foo",
"foo *1,@compact:foo",
"QQ.foo.bar *42,Φ.org.eolang.foo.bar",
"QQ.nan *52,Φ.org.eolang.nan",
"$.seq *1,ξ.seq"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
---
# yamllint disable rule:line-length
sheets:
- /org/eolang/parser/parse/resolve-compacts.xsl
- /org/eolang/parser/parse/validate-before-stars.xsl
- /org/eolang/parser/parse/resolve-before-stars.xsl
asserts:
- /object/errors/error[@line='3' and @severity='error']
- //o[@name='first' and count(o)=1]/o[@base='Φ.org.eolang.tuple' and @star and count(o)=2]
- //o[@name='second' and count(o)=2]/o[position()=2 and @base='Φ.org.eolang.tuple' and @star and count(o)=2]
- //o[@name='third' and count(o)=3]/o[position()=3 and @base='Φ.org.eolang.tuple' and @star and count(o)=1]
- //o[@name='fourth' and count(o)=2]/o[@base='sprintf' and count(o)=1]/o[@base='Φ.org.eolang.tuple' and @star and count(o)=2]
- //o[@name='fourth' and count(o)=2]/o[@base='Φ.org.eolang.sprintf' and count(o)=1]/o[@base='Φ.org.eolang.tuple' and @star and count(o)=2]
- //o[@name='fourth']/o[@base='Φ.org.eolang.tuple' and @star and count(o)=1]
- /object[count(//o[@before-star])=0]
input: |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
sheets: []
asserts:
- /object[not(errors)]
- //o[@base='foo.bar']/o[@base='Φ.org.eolang.x']
- //o[@base='foo.bar']//o[@base='Φ.org.eolang.y']
input: |
# No comments.
[] > app
boom > foo
foo.bar *1 > @
x
y
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
sheets: []
asserts:
- /object[not(errors)]
- //o[@base='Φ.org.eolang.tt.sprintf']
input: |
+alias org.eolang.io.stdout
+package org.eolang.snippets

[args] > program
io.stdout > @
tt.sprintf *1
"Hello, %s\n"
args.at 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
sheets: []
asserts:
- /object[not(errors)]
- //o[@base='Φ.org.eolang.tt.sprintf']/o[@base='Φ.org.eolang.string']
input: |
+alias org.eolang.io.stdout
+alias org.eolang.tt.sprintf

# No comments.
[args] > simple
stdout > @
sprintf *1
"Hello, %s"
args.at 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
# SPDX-License-Identifier: MIT
---
# yamllint disable rule:line-length
sheets: []
asserts:
- /object[not(errors)]
- //o[@base='Φ.org.eolang.foo.bar']/o[@base='Φ.org.eolang.x']
- //o[@base='Φ.org.eolang.foo.bar']//o[@base='Φ.org.eolang.y']
input: |
+alias org.eolang.foo.bar

[] > app
bar *1 > @
x
y
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
sheets: []
asserts:
- /object[not(errors)]
- //o[@base='foo.bar']/o[@base='Φ.org.eolang.x']
- //o[@base='foo.bar']//o[@base='Φ.org.eolang.y']
- //o[@base='Φ.org.eolang.foo.bar']/o[@base='Φ.org.eolang.x']
- //o[@base='Φ.org.eolang.foo.bar']//o[@base='Φ.org.eolang.y']
input: |
# No comments.
[] > app
Expand Down