Skip to content
Draft
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions eo-runtime/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,12 @@
<version>2.1.6</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.eolang</groupId>
<artifactId>eo-strings</artifactId>
<version>0.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
Expand Down
60 changes: 60 additions & 0 deletions eo-runtime/src/main/eo/org/eolang/io/sprintf.eo
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
+alias org.eolang.txt.concat
+alias org.eolang.txt.split
+alias org.eolang.txt.at
+alias org.eolang.txt.substring
+alias org.eolang.txt.length
+alias org.eolang.seq
+alias org.eolang.array
+architect [email protected]
+home https://github.com/objectionary/eo
+package org.eolang.io
+version 0.0.0
+unlint unit-test-missing
+spdx SPDX-FileCopyrightText: Copyright (c) 2016-2026 Objectionary.com
+spdx SPDX-License-Identifier: MIT

# The `sprintf` object formats a string using a template and arguments.
#
# Example:
# ```
# sprintf > message
# "Hello %s!"
# (array "World")
# ```
[format args] > sprintf
# Simple implementation handling %s and %%
format.split "%" > parts
parts.at 0 > result

seq > @
parts.slice 1 parts.length > remaining
remaining.each-with-index > part i
if.
part.length.gt 0
seq
part.substring 0 1 > first
if.
first.eq "%"
# Escaped %%
seq
result.write (concat result "%")
part.substring 1 part.length > rest
if.
rest.length.gt 0
result.write (concat result rest)
if.
first.eq "s"
seq
# String substitution
args.at i > arg
result.write (concat result (string arg))
part.substring 1 part.length > rest
if.
rest.length.gt 0
result.write (concat result rest)
# Unknown specifier, keep as is
seq
result.write (concat result "%")
result.write (concat result part)
result
result
Loading