[ITP] noto-emojis

Thomas Wolff via Cygwin-apps <[email protected]> Thu, 25 Sep 2025 22:21:10 +0200
Newsgroups gmane.os.cygwin.applications
Message-ID <[email protected]>
Hi, I'd like to contribute a package with emoji graphics from the Google 
noto-emojis repository.
There was some trouble with the cygport as discussed in another thread 
but not it appears to be working.
Attached are the cygport file and two scripts used for the build 
process, which are identical to the scripts in the mintty tools directory.
If this package is installed, this enables mintty 3.8.1 to display 
graphic emojis implicitly without further configuration.
Thomas
emojis-noto.cygport (text/plain, 1.7 KB)
NAME="emojis-noto"
SUMMARY="graphic emojis from Google Noto Emoji font, enables mintty emojis"
DESCRIPTION="Google Noto Emoji graphic images for shared installation."
LICENSE=Apache-2.0
#CATEGORY="Fonts"
CATEGORY="Shells"
#CATEGORY="Shells Graphics"
HOMEPAGE="https://github.com/googlefonts/noto-emoji"
VERSION=v2.051
RELEASE=1

ARCH=noarch
SRC_DIR="emojis-noto-$VERSION-$RELEASE.$ARCH"

# git "download" would also provide shallow clone but not sparse checkout,
# also it fails to finish, so use the git download in script getnoto below
#GIT_URI="https://github.com/googlefonts/noto-emoji.git"
#GIT_TAG=$VERSION
#inherit git
#SRC_URI+=" getnoto getflags"

# this fails:
#inherit git
#tools=https://raw.githubusercontent.com/mintty/mintty/refs/heads/master/tools
#SRC_URI="$tools/getnoto $tools/getflags"

# this includes the scripts in the source archive
CYGWIN_FILES="getnoto getflags"

BUILD_REQUIRES=""

REQUIRES=""

#git() {
#	echo ------------ cygport calling git $*
#	/bin/git "$@"
#}

src_compile() {
	cd ${B}

	# the getnoto script downloads the repository 
	# using shallow clone and sparse checkout 
	# to limit download and storage volume

	../../getnoto --tag ${VERSION}

	# getnoto also calls the script getflags to transform 
	# flags emojis filenames to a format searchable by 
	# Unicode codepoint sequences
}

src_install() {
	cd ${B}

	# this would copy all again, wasting time and space
	#insinto /usr/share/emojis/common
	#doins common/*.png
	# so do it this way
	mkdir -p $D/usr/share/emojis/common
	ln common/*.png $D/usr/share/emojis/common/

	#insinto /usr/share/emojis/noto
	#doins noto/*.png
	mkdir -p $D/usr/share/emojis/noto
	ln noto/*.png $D/usr/share/emojis/noto/
}
getnoto (text/plain, 1.4 KB)
#! /bin/sh

tag=
case "$1" in
--tag)	tag="--branch $2";;
esac

#############################################################################
# download Noto font emojis

if [ -d noto-emojis ]
then	if [ -d noto-emojis/.git ]
	then	(cd noto-emojis; git pull)
	else	echo WARNING: directory noto-emojis already exists but no git config - Exit
		exit 9
	fi
else
	notogit=https://github.com/googlefonts/noto-emoji
	if git clone $tag --depth 1 -n --filter=blob:none $notogit noto-emojis
	then	true
	else	echo WARNING: given git tag $tag not found - Exit
		exit 9
	fi
	(cd noto-emojis
	 git sparse-checkout set --no-cone png/128 third_party/region-flags/png
	 git checkout
	)
fi
(mkdir -p noto; rm -f noto/*.png; ln noto-emojis/png/128/*.png noto/)

#############################################################################
# download Noto third-party flags emojis
# like getflags -n but use same repository

if [ -d noto-emoji-flags ]
then	if [ -d noto-emoji-flags/.git ]
	then	(cd noto-emoji-flags; git pull)
	else	echo WARNING: directory noto-emoji-flags already exists but no git config - Exit
		exit 9
	fi
else
	ln -s noto-emojis noto-emoji-flags
fi
(cd noto-emoji-flags; rm -f *.png; ln third_party/region-flags/png/*.png ./)

#############################################################################
# download rename Noto third-party flags

`dirname $0`/getflags -e

#############################################################################
# end
getflags (text/plain, 4.1 KB)
#! /bin/dash

# this script is 20% faster with dash than with bash

#############################################################################
# download function

download_noto () {

# download noto third-party region flags
if [ -d noto-emoji-flags ]
then	if [ -d noto-emoji-flags/.git ]
	then	(cd noto-emoji-flags; git pull)
	else	echo WARNING: directory noto-emoji-flags already exists but no git config - Exit
		exit 9
	fi
else
	notogit=https://github.com/googlefonts/noto-emoji
	git clone --depth 1 -n --filter=blob:none $notogit noto-emoji-flags
	(cd noto-emoji-flags
	 git sparse-checkout set --no-cone third_party/region-flags/png
	 git checkout
	)
fi
(cd noto-emoji-flags; rm -f *.png; ln third_party/region-flags/png/*.png ./)

}

download_other () {

# download Puellanivis’ flag emojis
if [ -d puellanivis-flags ]
then	if [ -d puellanivis-flags/.git ]
	then	(cd puellanivis-flags; git pull)
	else	echo WARNING: directory puellanivis-flags already exists but no git config - Exit
		exit 9
	fi
else
	puelgit=https://github.com/puellanivis/emoji.git
	git clone --depth 1 $puelgit puellanivis-flags
fi
(cd puellanivis-flags; rm -f *.png; ln flags/*.png flags/*/*.png ./)

}

download () {
	download_noto

	# drop download of old Google region flags
	#git clone --depth 1 https://github.com/google/region-flags.git google-region-flags &&
	#ln google-region-flags/png/*.png google-region-flags/

	download_other
}

#############################################################################
# extract emoji files:
# pre-deploy them with proper filename, according to codepoint pattern

extract () {
	mkdir -p common

	for f in `ls *-flags/*.png`
	do	e=${f##*/}
		e=${e%.png}
		if [ -n "$BASH_VERSION" ]
		then
			e=${e//-}
			e=${e//\'}
		#else filter them out by missing case below
		fi
		case $e in
		??)	# 1F1E6 1F1E8 ; RGI_Emoji_Flag_Sequence
			tagseq=false;;
		*)	# 1F3F4 E0067 E0062 E0065 E006E E0067 E007F; RGI_Emoji_Tag_Sequence; flag: England
			tagseq=true;;
		esac
		if $tagseq
		then	n=1f3f4
		else	n=
		fi
		# speed-up possible by using a common sed script...
		for l in $( echo "$e" | tr 'A-Z' 'a-z' | sed -e 's,.,& ,g' )
		do	d=$( printf %d "'$l'" )
			if $tagseq
			then	case "$l" in
				[a-z]|[0-9])
					d=$(( $d + 917504 ))
					n=$n-$( printf %x $d )
					;;
				#[a-z])	d=$(( $d - 97 + 917601 ))	# 'a' -> U+E0061 ...
				#	n=$n-$( printf %x $d )
				#	;;
				#[0-9])	d=$(( $d - 48 + 917552 ))	# '0' -> U+E0030 ...
				#	n=$n-$( printf %x $d )
				#	;;
				esac
			else	d=$(( $d - 97 + 127462 ))	# U+1F1E6
				n=$n-$( printf %x $d )
			fi
		done
		if $tagseq
		then	n=$n-e007f.png
		else	n=${n#-}.png
		fi

		echo "$f -> common/$n"
		if [ -L "$f" ]
		then	# linking a symbolic link while renaming the target 
			# would yield a dangling link, so copy it
			cp "$f" "common/$n"
		else	ln "$f" "common/$n"
		fi
	done
}

#############################################################################
# perform download and extraction/deployment

case "$1" in
""|-h|--help)
	echo "Usage: `basename $0` [-d | -e | -de]" >&2
	echo >&2
	echo "This script retrieves flag emojis from various sources." >&2
	echo >&2
	echo "Options:" >&2
	echo "	-d	Download flags emojis repositories" >&2
	echo "	-n	Download only Noto flags" >&2
	echo "	-e	Extract emoji files with proper filenames into common/" >&2
	echo "	-de	-d and -e" >&2
	echo "	-ne	-n and -e" >&2
	echo >&2
	if [ `uname` = "Linux" ] && type wslpath 2> /dev/null 1>&2
	then	echo "Note: for direct deployment from WSL, first go into the common config directory:" >&2
		echo '  cd `wslpath "$APPDATA/mintty/emojis"` || cd `wslpath "$APPDATA/wsltty/emojis"`' >&2
	else	echo "Note: for direct deployment, first go into subdirectory 'emojis' of one of the" >&2
		echo "mintty config directories:" >&2
		echo '  ~/.mintty' >&2
		echo '  ~/.config/mintty' >&2
		echo '  $APPDATA/mintty' >&2
		echo '  /usr/share/mintty' >&2
	fi
	exit;;
-n|--download-noto)
	download_noto
	;;
-ne|--noto)
	download_noto
	extract
	;;
-d|--download)
	download
	;;
-e|--extract)
	extract
	;;
-de|--all)
	download
	extract
	;;
esac

#############################################################################
# end