| # Copyright 1999-2007 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| # $Header: /var/cvsroot/gentoo-x86/app-admin/eselect-fontconfig/files/fontconfig.eselect-1.0,v 1.1 2007/07/28 02:50:13 dirtyepic Exp $ |
| |
| DESCRIPTION="Manage fontconfig /etc/fonts/conf.d/ symlinks" |
| MAINTAINER="fonts@gentoo.org" |
| VERSION="1.0" |
| |
| find_targets() { |
| local targets bc x i=0 |
| bcdirs[i]="${ROOT}/etc/fonts/conf.avail/*.conf" |
| |
| if [[ -n "${ES_FONTCONFIG_DIRS}" ]] ; then |
| for x in ${ES_FONTCONFIG_DIRS} ; do |
| bcdirs[$((++i))]="${x}/*" |
| done |
| fi |
| |
| for bc in ${bcdirs[@]} ; do |
| [[ -e ${bc} && ${bc} != *~ ]] && targets="${targets}\n$(basename ${bc})" |
| done |
| |
| echo -ne ${targets} | sort -u |
| } |
| |
| is_enabled() { |
| bcdir="${ROOT}/etc/fonts/conf.d" |
| |
| [[ -e ${bcdir}/${1} ]] || return 1 |
| return 0 |
| } |
| |
| ### list action ### |
| |
| describe_list() { |
| echo "List available fontconfig .conf files" |
| } |
| |
| do_list() { |
| local opts |
| targets=( $(find_targets) ) |
| write_list_start "Available fontconfig .conf files ( $(highlight '*') is enabled ):" |
| |
| if [[ -n "${targets[@]}" ]] ; then |
| for (( n = 0 ; n < ${#targets[@]} ; ++n )) ; do |
| is_enabled ${opts:-} ${targets[${n}]} && \ |
| targets[${n}]="${targets[${n}]} $(highlight '*')" |
| done |
| write_numbered_list "${targets[@]}" |
| else |
| write_kv_list_entry "(none found)" "" |
| fi |
| |
| return 0 |
| } |
| |
| ### enable action ### |
| |
| describe_enable() { |
| echo "Enable specified fontconfig .conf file(s)" |
| } |
| |
| describe_enable_parameters() { |
| echo "<target>" |
| } |
| |
| describe_enable_options() { |
| echo "<target> : Target name or number (from 'list' action)" |
| } |
| |
| do_enable() { |
| local bc bcdir="${ROOT}/etc/fonts/conf.d" |
| |
| [[ -z ${1} ]] && die -q "You didn't specify any .conf files to enable" |
| |
| # create directory if necessary |
| if [[ ! -d ${bcdir} && -w $(dirname ${bcdir}) ]] ; then |
| mkdir ${bcdir} || die -q "Failed to create ${bcdir}" |
| elif [[ ! -d ${bcdir} ]] ; then |
| die -q "You don't have permission to create ${bcdir}" |
| fi |
| |
| # make sure we have proper permissions |
| [[ -w ${bcdir} ]] || \ |
| die -q "You don't have permission to write to ${bcdir}" |
| |
| targets=( $(find_targets) ) |
| |
| for bc in $@ ; do |
| local file target=${bc} |
| |
| is_number "${target}" && \ |
| target=${targets[$(( ${target} - 1 ))]} |
| |
| [[ -z "${target}" ]] && \ |
| die -q "Target \"${bc}\" doesn't appear to be valid!" |
| |
| bc=${target} |
| |
| # ignore any unrecognized options |
| [[ ${bc} == --* ]] && continue |
| |
| # what form is the argument in? |
| case "${bc}" in |
| # absolute path |
| /*) |
| file="${ROOT}/${bc}" |
| ;; |
| # relative path |
| */*) |
| file="${ROOT}/${PWD}/${bc}" |
| ;; |
| # no path |
| *) |
| # CWD |
| if [[ -f ${bc} ]] ; then |
| file="${ROOT}/${PWD}/${bc}" |
| # assume /etc/fonts/conf.avail |
| elif [[ -f ${ROOT}/etc/fonts/conf.avail/${bc} ]] |
| then |
| file="${ROOT}/etc/fonts/conf.avail/${bc}" |
| else |
| if [[ -n "${ES_FONTCONFIG_DIRS}" ]] ; then |
| for x in ${ES_FONTCONFIG_DIRS} ; do |
| [[ -f ${x}/${bc} ]] && file="${x}/${bc}" |
| done |
| fi |
| |
| [[ -e ${file} ]] || \ |
| file="${ROOT}/etc/fonts/conf.avail/${bc}" |
| fi |
| ;; |
| esac |
| |
| # does it exist? |
| if [[ ! -e ${file} ]] ; then |
| write_error_msg "${file} doesn't exist" |
| continue |
| fi |
| |
| # already installed? |
| if [[ -e ${bcdir}/$(basename ${bc}) ]] ; then |
| write_error_msg "$(basename ${bc}) is already installed" |
| continue |
| fi |
| |
| # finally, create the symlink |
| ln -s "${file}" "${bcdir}" || \ |
| die -q "Failed to create symlink from '${file}' to '${bcdir}'" |
| done |
| } |
| |
| ### disable action ### |
| |
| describe_disable() { |
| echo "Disable specified fontconfig .conf file(s)" |
| } |
| |
| describe_disable_parameters() { |
| echo "<target>" |
| } |
| |
| describe_disable_options() { |
| echo "<target> : Target name or number (from 'list' action)" |
| } |
| |
| |
| do_disable() { |
| local bc bcdir="${ROOT}/etc/fonts/conf.d" |
| |
| [[ -z ${1} ]] && die -q "You didn't specify any .conf files to disable" |
| |
| targets=( $(find_targets) ) |
| |
| for bc in $@ ; do |
| local file target=${bc} |
| |
| is_number "${target}" && \ |
| target=${targets[$(( ${target} - 1 ))]} |
| |
| [[ -z "${target}" ]] && \ |
| die -q "Target \"${bc}\" doesn't appear to be valid!" |
| |
| bc=${target} |
| file="${bcdir}/${bc}" |
| |
| # ignore any unrecognized options |
| [[ ${bc} == --* ]] && continue |
| |
| # is in installed? |
| if [[ ! -e ${file} ]] ; then |
| write_error_msg "${bc} is not installed" |
| continue |
| fi |
| |
| # remove it if we have permissions |
| if [[ -w $(dirname ${file}) ]] ; then |
| rm "${file}" || die -q "Failed to remove ${file}" |
| else |
| die -q "You don't have permission to remove ${file}" |
| fi |
| done |
| } |
| |
| # vim: set ft=eselect : |