Skip to content

Commit

Permalink
init: ported Replace_Right_{String,Unicode} primitive function
Browse files Browse the repository at this point in the history
Since there are a number of level 1 libraries using the string
function, we have to port its primitive ones into HestiaKERNEL
library. Let's do this.

This patch ports Replace_Right_{String,Unicode} primitive function
into HestiaKERNEL library into init/ directory.

Co-authored-by: Shuralyov, Jean <[email protected]>
Co-authored-by: Galyna, Cory <[email protected]>
Co-authored-by: (Holloway) Chew, Kean Ho <[email protected]>
Signed-off-by: (Holloway) Chew, Kean Ho <[email protected]>
  • Loading branch information
4 people committed Nov 24, 2024
1 parent 218da13 commit 9544a3e
Show file tree
Hide file tree
Showing 7 changed files with 444 additions and 0 deletions.
41 changes: 41 additions & 0 deletions init/services/HestiaKERNEL/String/Replace_Right_String.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Copyright 2024 (Holloway) Chew, Kean Ho <[email protected]>
#
#
# Licensed under (Holloway) Chew, Kean Ho’s Liberal License (the "License").
# You must comply with the license to use the content. Get the License at:
#
# https://doi.org/10.5281/zenodo.13770769
#
# You MUST ensure any interaction with the content STRICTLY COMPLIES with
# the permissions and limitations set forth in the license.
. "${env:LIBS_HESTIA}\HestiaKERNEL\String\To_String_From_Unicode.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\Unicode\Replace_Right_Unicode.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\Unicode\To_Unicode_From_String.ps1"




function HestiaKERNEL-Replace-Right-String {
param (
[string]$___input,
[string]$___from,
[string]$___to,
[int32]$___count,
[int32]$___ignore
)


# execute
$___content = HestiaKERNEL-To-Unicode-From-String $___input
$___chars_from = HestiaKERNEL-To-Unicode-From-String $___from
$___chars_to = HestiaKERNEL-To-Unicode-From-String $___to
$___content = HestiaKERNEL-Replace-Right-Unicode $___content `
$___chars_from `
$___chars_to `
$___count `
$___ignore


# report status
return HestiaKERNEL-To-String-From-Unicode $___content
}
42 changes: 42 additions & 0 deletions init/services/HestiaKERNEL/String/Replace_Right_String.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/bin/sh
# Copyright 2024 (Holloway) Chew, Kean Ho <[email protected]>
#
#
# Licensed under (Holloway) Chew, Kean Ho’s Liberal License (the "License").
# You must comply with the license to use the content. Get the License at:
#
# https://doi.org/10.5281/zenodo.13770769
#
# You MUST ensure any interaction with the content STRICTLY COMPLIES with
# the permissions and limitations set forth in the license.
. "${LIBS_HESTIA}/HestiaKERNEL/String/To_String_From_Unicode.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/Unicode/Replace_Right_Unicode.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/Unicode/To_Unicode_From_String.sh"




HestiaKERNEL_Replace_Right_String() {
#___input="$1"
#___from="$2"
#___to="$3"
#___count="$4"
#___ignore="$5"


# execute
___content="$(HestiaKERNEL_To_Unicode_From_String "$1")"
___chars_from="$(HestiaKERNEL_To_Unicode_From_String "$2")"
___chars_to="$(HestiaKERNEL_To_Unicode_From_String "$3")"
___content="$(HestiaKERNEL_Replace_Right_Unicode "$___content" \
"$___chars_from" \
"$___chars_to" \
"$4" \
"$5" \
)"


# report status
printf -- "%b" "$(HestiaKERNEL_To_String_From_Unicode "$___content")"
return $?
}
135 changes: 135 additions & 0 deletions init/services/HestiaKERNEL/Unicode/Replace_Right_Unicode.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# Copyright 2024 (Holloway) Chew, Kean Ho <[email protected]>
#
#
# Licensed under (Holloway) Chew, Kean Ho’s Liberal License (the "License").
# You must comply with the license to use the content. Get the License at:
#
# https://doi.org/10.5281/zenodo.13770769
#
# You MUST ensure any interaction with the content STRICTLY COMPLIES with
# the permissions and limitations set forth in the license.
. "${env:LIBS_HESTIA}\HestiaKERNEL\Errors\Error_Codes.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\Unicode\Is_Unicode.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\Number\Is_Number.ps1"




function HestiaKERNEL-Replace-Right-Unicode {
param (
[uint32[]]$___content_unicode,
[uint32[]]$___from_unicode,
[uint32[]]$___to_unicode,
[int32]$___count,
[int32]$___ignore
)


# validate input
if (
($(HestiaKERNEL-Is-Unicode $___content_unicode) -ne ${env:HestiaKERNEL_ERROR_OK}) -or
($(HestiaKERNEL-Is-Unicode $___from_unicode) -ne ${env:HestiaKERNEL_ERROR_OK})
) {
return $___content_unicode
}

if ("${___to_unicode}" -ne "") {
if ($(HestiaKERNEL-Is-Unicode $___to_unicode) -ne ${env:HestiaKERNEL_ERROR_OK}) {
return [uint32[]]@()
}
}

if (
("${___count}" -eq "") -or
($___count -le 0)
) {
$___count = -1
}

if (
("${___ignore}" -eq "") -or
($___ignore -le 0)
) {
$___ignore = -1
}

if ($___target_unicode.Length -gt $___content_unicode.Length) {
return $___content_unicode
}


# execute
[System.Collections.Generic.List[uint32]]$___converted = @()
[System.Collections.Generic.List[uint32]]$___buffer = @()
$___from_length = $___from_unicode.Length - 1
$___from_index = $___from_length
$___is_replacing = 0
for ($___index = $___content_unicode.Length - 1; $___index -ge 0; $___index--) {
# get current character
$___current = $___content_unicode[$___index]

if ($___is_replacing -ne 0) {
$___converted.Insert(0, $___current)
continue
}


# get target character
$___from = $___from_unicode[$___from_index]
$___from_index -= 1


# bail if mismatched
if ($___current -ne $___from) {
$___from_index = $___from_length

if ($___buffer.Length -gt 0) {
foreach ($___char in $___buffer) {
$___converted.Insert(0, $___char)
}
[System.Collections.Generic.List[uint32]]$___buffer = @()
}

$___converted.Insert(0, $___current)
continue
}


# it's a match - save to buffer if the scan is still ongoing
if ($___from_index -ge 0) {
$___buffer.Insert(0, $___current)
continue
}


# complete match - perform replacement
if ($___ignore -le 0) {
foreach ($___char in $___to_unicode) {
$___converted.Add($___char)
}

if ($___count -gt 0) {
$___count -= 1
if ($___count -le 0) {
$___is_replacing = 1

continue
}
}
} else {
foreach ($___char in $___buffer) {
$___converted.Insert(0, $___char)
}

$___converted.Insert(0, $___current)
$___ignore -= 1
}

[System.Collections.Generic.List[uint32]]$___buffer = @()
$___target_index = $___target_length
}


# report status
return [uint32[]]$___converted
}
136 changes: 136 additions & 0 deletions init/services/HestiaKERNEL/Unicode/Replace_Right_Unicode.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# Copyright 2024 (Holloway) Chew, Kean Ho <[email protected]>
#
#
# Licensed under (Holloway) Chew, Kean Ho’s Liberal License (the "License").
# You must comply with the license to use the content. Get the License at:
#
# https://doi.org/10.5281/zenodo.13770769
#
# You MUST ensure any interaction with the content STRICTLY COMPLIES with
# the permissions and limitations set forth in the license.
. "${LIBS_HESTIA}/HestiaKERNEL/Errors/Error_Codes.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/Unicode/Is_Unicode.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/Number/Is_Number.sh"




HestiaKERNEL_Replace_Right_Unicode() {
#___content_unicode="$1"
#___from_unicode="$2"
#___to_unicode="$3"
#___count="$4"
#___ignore="$5"


# validate input
if [ "$(HestiaKERNEL_Is_Unicode "$1")" -ne $HestiaKERNEL_ERROR_OK ]; then
printf -- "%s" "$1"
return $HestiaKERNEL_ERROR_ENTITY_EMPTY
fi

if [ "$(HestiaKERNEL_Is_Unicode "$2")" -ne $HestiaKERNEL_ERROR_OK ]; then
printf -- "%s" "$1"
return $HestiaKERNEL_ERROR_DATA_EMPTY
fi

if [ ! "$3" = "" ]; then
if [ "$(HestiaKERNEL_Is_Unicode "$3")" -ne $HestiaKERNEL_ERROR_OK ]; then
printf -- ""
return $HestiaKERNEL_ERROR_DATA_EMPTY
fi
fi

___count=-1
if [ "$(HestiaKERNEL_Is_Number "$4")" -eq $HestiaKERNEL_ERROR_OK ]; then
___count="$4"
fi

___ignore=-1
if [ "$(HestiaKERNEL_Is_Number "$5")" -eq $HestiaKERNEL_ERROR_OK ]; then
___ignore="$5"
fi


# execute
___converted=""
___buffer=""
___content_unicode="$1"
___from_unicode="$2"
___to_unicode="$3"
___is_replacing=0
while [ ! "$___content_unicode" = "" ]; do
# get current character
___current="${___content_unicode##*, }"
___content_unicode="${___content_unicode%"$___current"}"
if [ "${___content_unicode#"${___content_unicode%?}"}" = " " ]; then
___content_unicode="${___content_unicode%, }"
fi

if [ $___is_replacing -ne 0 ]; then
___converted="${___current}, ${___converted}"
continue
fi


# get from character
___from="${___from_unicode##*, }"
___from_unicode="${___from_unicode%"$___from"}"
if [ "${___from_unicode#"${___from_unicode%?}"}" = " " ]; then
___from_unicode="${___from_unicode%, }"
fi


# bail if mismatched
if [ ! "$___current" = "$___from" ]; then
___from_unicode="$2"

if [ ! "$___buffer" = "" ]; then
___converted="${___buffer%, }, ${___converted}"
___buffer=""
fi

___converted="${___current}, ${___converted}"
continue
fi


# it's a match - save to buffer if the scan is still ongoing
if [ ! "$___from_unicode" = "" ]; then
___buffer="${___current}, ${___buffer}"
continue
fi


# complete match - perform replacement
if [ $___ignore -le 0 ]; then
if [ ! "$___to_unicode" = "" ]; then
___converted="${___to_unicode}, ${___converted}"
fi

if [ $___count -gt 0 ]; then
___count=$(($___count - 1))
if [ $___count -le 0 ]; then
___is_replacing=1

continue
fi
fi
else
if [ ! "$___buffer" = "" ]; then
___converted="${___buffer%, }, ${___converted}"
fi

___converted="${___current}, ${___converted}"
___ignore=$(($___ignore - 1))
fi

___buffer=""
___from_unicode="$2"
done


# report status
printf -- "%b" "${___converted%, }"
return $HestiaKERNEL_ERROR_OK
}
4 changes: 4 additions & 0 deletions init/services/HestiaKERNEL/Vanilla.sh.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ echo \" <<'RUN_AS_POWERSHELL' >/dev/null # " | Out-Null
. "${env:LIBS_HESTIA}\HestiaKERNEL\String\Is_Punctuation_String.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\String\Is_Whitespace_String.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\String\Replace_Left_String.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\String\Replace_Right_String.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\String\Scan_Any_Left_String.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\String\Scan_Any_Right_String.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\String\Scan_Any_String.ps1"
Expand Down Expand Up @@ -82,6 +83,7 @@ echo \" <<'RUN_AS_POWERSHELL' >/dev/null # " | Out-Null
. "${env:LIBS_HESTIA}\HestiaKERNEL\Unicode\Is_UTF.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\Unicode\Is_Whitespace_Unicode.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\Unicode\Replace_Left_Unicode.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\Unicode\Replace_Right_Unicode.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\Unicode\Scan_Any_Left_Unicode.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\Unicode\Scan_Any_Right_Unicode.ps1"
. "${env:LIBS_HESTIA}\HestiaKERNEL\Unicode\Scan_Any_Unicode.ps1"
Expand Down Expand Up @@ -138,6 +140,7 @@ RUN_AS_POWERSHELL
. "${LIBS_HESTIA}/HestiaKERNEL/String/Is_Punctuation_String.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/String/Is_Whitespace_String.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/String/Replace_Left_String.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/String/Replace_Right_String.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/String/Scan_Any_Left_String.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/String/Scan_Any_Right_String.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/String/Scan_Any_String.sh"
Expand Down Expand Up @@ -169,6 +172,7 @@ RUN_AS_POWERSHELL
. "${LIBS_HESTIA}/HestiaKERNEL/Unicode/Is_UTF.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/Unicode/Is_Whitespace_Unicode.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/Unicode/Replace_Left_Unicode.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/Unicode/Replace_Right_Unicode.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/Unicode/Scan_Any_Left_Unicode.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/Unicode/Scan_Any_Right_Unicode.sh"
. "${LIBS_HESTIA}/HestiaKERNEL/Unicode/Scan_Any_Unicode.sh"
Expand Down
Loading

0 comments on commit 9544a3e

Please sign in to comment.