command-line - template - ps1 variable maker
¿Cómo puedo verificar si la computadora de un usuario admite Emoji? (2)
Esta pregunta podría generalizarse a cualquier personaje, supongo; pero mi caso de uso específico son emoji.
Estoy escribiendo un programa de línea de comandos, y quiero detectar si la computadora en la que se ejecuta tiene una fuente instalada que puede mostrar emoji; y si la aplicación del terminal actual los mostrará en esa fuente.
Por el momento, tengo un truco en el lugar que simplemente los filtra en no OS X; pero no quiero cortocircuitar a los usuarios de Linux que tienen una configuración habilitada para emoji. Prefiero hacer esto de la "manera correcta".
¡Gracias! 💖
Tu script debería:
- saber qué fuentes de sistema están disponibles y dónde están los archivos de fuente (por ejemplo, C: / Windows / Fonts)
- inspeccionar estos archivos por su contenido. Supongo que inspeccionarlos podría hacerse de una manera técnica, desentrañando formatos de archivo. Pero también puede simular el uso visual, calculando el cuadro delimitador o simulando el uso de fuentes para los caracteres Emoji.
Si está interesado en PHP , podría calcular el cuadro delimitador de las fuentes TTF conocidas para Emoji y ver si el valor es el esperado de una fuente que lo admita.
También puede simular el uso de la fuente dibujando una imagen en negro en la memoria con una fuente de color blanco usando GD , y calcular la cantidad (promedio) de píxeles blancos para ver si se ajusta a un umbral esperado.
También solicitó un control si la aplicación del terminal actual los mostrará. Para eso debes poder verificar la configuración, que no es trivial ya que necesitarías poder diferenciar en todas las aplicaciones de la terminal. Una solución práctica sería mostrar algunos Emoji con la fuente actual y preguntar al usuario si es visible. Después de todo, ¿necesita confiar en el usuario de todos modos si la aplicación del terminal necesita ser compatible con Emoji?
Intento
No he probado estos entornos, por lo que no estoy seguro de que funcionen, pero creo que puedes hacer que este enfoque funcione. El enfoque básico es probar un render oculto y verificar si el renderizado fue exitoso. Por ejemplo:
echo -e ''/xE0/xA5/xA5'' | wc -m
wc -m cuenta la cantidad de caracteres que se representan. Si encuentra que la falla en el procesamiento hace que su cadena de entrada se imprima, entonces esta debería ser una forma de realizar una verificación de longitud esperada. Si encuentra que la falla en el render hace que se renderice un símbolo predeterminado, entonces sugeriría canalizar el resultado del eco en una verificación de igualdad:
echo -e ''/xE0/xA5/xA5'' | grep -q ''some-default-failure-symbol''
Un enfoque de prueba / fracaso puede parecer raro, pero no creo que haya un estándar para esto, por lo que probablemente sea el enfoque más sólido por ahora.
Node.js
Nota: solo funciona en el navegador, posiblemente un simulador de navegador. No estoy seguro de cómo o si un simulador de navegador encontraría un paquete emoji local, pero probablemente sea algo fácil de verificar.
Hay un módulo node.js que usa un código muy simple para verificar si un sistema / navegador admite un emoji. El código intenta reproducir el emoji y puede decir si el renderizado fue exitoso.
El paquete npm se llama: if-emoji
El código fuente tiene solo unas pocas líneas y debería ser fácil de entender si está familiarizado con javascript (no copiaré y pegaré el código completo aquí para dejar a Dafrok con el crédito): https://github.com / Dafrok / if-emoji