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
12 changes: 4 additions & 8 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) {
if (this.context.HOME() == null && this.context.XI() == null) {
fqn = name;
} else {
} 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,34 @@
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!--
Here we go through all bases that match pattern: `foo.bar`, and resolve it's FQN:
1. If `oname` is defined in the current scope => `oname`
2. Else if an alias exists for `oname` => use FQN from alias
3. Otherwise => `Φ.org.eolang.oname`
-->
<xsl:template match="@base[matches(., '^\w+(?:\.\w+)+$') and not(starts-with(., 'Φ.')) and not(starts-with(., 'ξ'))]">
<xsl:variable name="q" select="."/>
<xsl:variable name="head" select="substring-before(concat($q, '.'), '.')"/>
<xsl:variable name="alias" select="/object/metas/meta[head='alias' and part[1]=$head]/part[last()]"/>
<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>
<!-- ENTRY POINT -->
<xsl:template match="o[@base]">
<xsl:apply-templates select="." mode="with-base"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ final class CompactArrayFqnTest {
@CsvSource(
{
"foo *1,foo",
"tt.x *55,tt.x",
"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 @@ -10,27 +10,27 @@ asserts:
- //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.tt.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: |
# No comments.
[] > foo
sprintf *2 > with-error
QQ.tt.sprintf *2 > with-error
x
sprintf * > first
QQ.tt.sprintf * > first
x
y
sprintf *1 > second
QQ.tt.sprintf *1 > second
x
y
z
sprintf *2 > third
QQ.tt.sprintf *2 > third
x
y
z
sprintf *1 > fourth
sprintf *
QQ.tt.sprintf *1 > fourth
QQ.tt.sprintf *
x
y
z
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