viernes, 17 de julio de 2020

Chirimbolos



Macro para diferenciar caracteres


No siempre es fácil determinar a simple vista cuál es un carácter de escritura en Word. Dependerá del tipo de letra que usemos (si son letras paloseco, sans serif, o con remates, serif), junto a qué otros caracteres estén, que si están en cursiva, en versalitas o en otro color y, por supuesto, del cansancio que tengamos y las horas que llevemos corrigiendo. Además, la imaginación de algunos escritores para introducir soluciones creativas no tiene límites.

  l|I1°ºo     
   

¿Podrías determinar qué caracteres son?

Si hay un caracter seleccionado, la macro Chirimbolos presenta un cuadro de diálogo con información sobre ese caracter. Si no hay ningún caracter seleccionado, la información es sobre el caracter a la derecha del cursor.

En el cuadro de diálogo, la macro indica se trata de es una l minúscula, una pleca (|, raya vertical),  una I mayúscula y el número 1, seguidas del símbolo de grado (°), el ordinal masculino (º, empleado en N.º 1) y la letra o minúscula como un superíndice.






Se informa sobre la fuente, el tamaño y el color del Estilo Normal y si la fuente, el tamaño y el color del caracter son diferentes a los que corresponden al Estilo Normal, lo indicará. Fíjate que el color de la fuente en el Estilo Normal es "0" (Automático), pero el color de esa "I" es "2" (un azul muy oscuro); por lo tanto, se usó un formato directo y no un estilo. Chirimbolos también determina si el caracter es un subíndice o superíndice (o una referencia a una nota) y si está en cursiva, negrita o versalitas.

No están todos los que son


Faltan muchos caracteres, sin duda. Por ejemplo, la diferencia entre el signo de número # y el signo de sostenido ♯ (en notación musical), o entre letras griegas y operadores matemáticos, los signos usados en fonética, y seguramente muchos signos más propios de diversos campos. Es posible agregarlos a la macro si crees que los necesitarás.

La macro

Sub Chirimbolos()

' Chirimbolos - WhatChar in SPANISH

' Muestra el nombre y código ASCII/unicode de un caracter

' y el formato si es diferente a la plantilla Normal

' Macro adaptada de Paul Beverly



' To use voice, "uncomment" this line:

' Set speech = New SpVoice

' Decidir dónde mostrar el resultado

showOnStatusbar = False

showInMessageBox = True

useVoice = False

' No mostrar CD si el caracter es un espacio

justBeepForSpace = True

' Mostrar también valor hex del código ANSI

showHexANSI = True

' If you also want to use this code in FRedit:

prepareFReditCode = False

If showOnStatusbar + showInMessageBox + useVoice = 0 Then _

     Beep: MsgBox "Alter options in macro code to show results.": _

     Exit Sub



charSelected = (Selection.Start <> Selection.End)

If AscW(Selection) = 32 Then Beep: Exit Sub



CR2 = vbCr & vbCr

' Si no hay nada seleccionado, usar caracter a la derecha

If Selection.Start = Selection.End Then Selection.MoveEnd wdCharacter, 1

' aceptar todos los cambios de la selección

Selection.Range.Revisions.AcceptAll



ansicode = Asc(Selection)

uCode = Val(Dialogs(wdDialogInsertSymbol).CharNum)

If Asc(ansicode) = 63 And uCode <> 63 Then

  ansiBit = "ANSI: ???"

Else

  ansiBit = ">>>>>>  ANSI: " & Str(ansicode) & _

       " (hex " & Hex(ansicode) & ")"

End If



' expresar uCode en hexadecimal

hexCode = Replace(Hex(uCode), "FFFF", "")

ucodeBit = vbCr & "Unicode: " & Str(uCode) & "   (hex " & _

      hexCode & ")"



'Mostrar fuente/tamaño/color si difiere del estilo Normal

fntName = Selection.Font.Name

normalName = ActiveDocument.Styles(wdStyleNormal).Font.Name

If normalName <> fntName Then

  fontBit = vbCr & "Fuente: " & fntName

Else

  fontBit = ""

End If



fntSize = Selection.Font.Size

normalSize = ActiveDocument.Styles(wdStyleNormal).Font.Size

If normalSize <> fntSize Then _

     fontBit = fontBit & "           Tamaño: " & Str(fntSize)

    

fntColor = Selection.Font.ColorIndex

normalColor = ActiveDocument.Styles(wdStyleNormal).Font.ColorIndex

If normalColor <> fntColor Then _

     fontBit = fontBit & "         Color:  " & Str(fntColor)

    

fntNormal = "Normal:" & vbCr & "Fuente: " & normalName & _ "        Tamaño: "  & Str(normalSize) & _ "     Color: " & Str(normalColor)



' Cut the FREditBit to the clipboard, which you can then paste to a script

HexBit = ""

If uCode < 0 Then

  HexBit = CR2 & "For FRedit, use Find: <&H" & hexCode & ">"

  If prepareFReditCode = True Then

    Selection.Collapse wdCollapseStart

    startCode = Selection.Start

    Selection.TypeText Text:="<&H" & hexCode & ">|"

    Selection.Start = startCode

    Selection.Cut

  End If

End If



' To correct for Mac codes

Select Case ansicode

  Case 2: extraBit = "Remisión a una nota"

  Case 32: extraBit = "Espacio"

  Case 34: extraBit = "Comillas rectas (doble)"

  Case 39: extraBit = "Comilla recta (sencilla) ¡Ojo! No se usa."

  Case 40: If Selection.Font.Name = "Symbol" Then extraBit = "¡Ni idea qué es esto!"

  Case 44: extraBit = "Coma"

  Case 45: extraBit = "Guion"

  Case 46: extraBit = "Punto"

  Case 48: extraBit = "0 (número)"

  Case 49: extraBit = "1 (número)"

  Case 50: extraBit = "2 (número)"

  Case 51: extraBit = "3 (número)"

  Case 58: extraBit = "Dos puntos"

  Case 59: extraBit = "Punto y coma"

  Case 60: extraBit = "Paréntesis angulado (apertura)/Menor que (Matem.)"

  Case 62: extraBit = "Paréntesis angulado (cierre)/Mayor que (Matem.)"

  Case 63: extraBit = "Horizontal Bar"

  Case 73: extraBit = "I mayúscula"

  Case 76: extraBit = "L mayúscula"

  Case 79: extraBit = "O mayúscula"

  Case 88: extraBit = "X mayúscula"

  Case 95: extraBit = "Subraya"

  Case 96: extraBit = "Acento grave ¡suelto!"

  Case 105: extraBit = "i minúscula"

  Case 108: extraBit = "l (ele) minúscula"

  Case 111: extraBit = "o minúscula"

  Case 120: extraBit = "x minúscula"

  Case 139: extraBit = "Comilla angular simple (apertura)"

  Case 155: extraBit = "Comilla angular simple (cierre)"

  Case 150: extraBit = "Semirraya "

  Case 151: extraBit = "Raya"

  Case 161: extraBit = "Exclamación (apertura)"

  Case 174: extraBit = "Marca registrada"

  Case 171: extraBit = "Comillas latinas (apertura)"

  Case 176: extraBit = "Grado"

  Case 187: extraBit = "Comillas latinas (cierre)"

  Case Else: extraBit = ""

End Select



' The unicode information will overwrite the ANSI

Select Case uCode

  Case 9: extraBit = "Marca de tabulación"

  Case 11: extraBit = "Salto de línea manual"

  Case 13: extraBit = "Marca de párrafo"

  Case 30: extraBit = "Guion de no separación"

  Case 31: extraBit = "Guion opcional"

  Case 47: extraBit = "Barra"

  Case 124: extraBit = "Pleca"

  Case 160: extraBit = "Espacio de no separación"

  Case 167: extraBit = "Párrafo/Sección"

  Case 176: extraBit = "Grado"

  Case 178: extraBit = "Dodgy squared symbol!"

  Case 179: extraBit = "Dodgy cubed symbol!"

  Case 180: extraBit = "Acento agudo ¡Tilde suelto!"

  Case 182: extraBit = "Calderón"

  Case 183: extraBit = "Punto alto o centrado"

  Case 186: extraBit = "Ordinal masculino"

  Case 215: extraBit = "Multiplicación"

  Case 937: extraBit = "Omega"

  Case 956: extraBit = "Mu = micro"

  Case 8194: extraBit = "en-space"

  Case 8195: extraBit = "em-space"

  Case 8201: extraBit = "Espacio fino"

  Case 8216: extraBit = "Comilla simple (apertura)"

  Case 8217: extraBit = "Comilla simple (cierre) = apóstrofo"

  Case 8211: extraBit = "Semirraya"

  Case 8212: extraBit = "Raya"

  Case 8220: extraBit = "Comillas inglesas (apertura)"

  Case 8221: extraBit = "Comillas inglesas (cierre)"

  Case 8222: extraBit = "Comilla alemana (apertura)"

  Case 8226: extraBit = "Bolo"

  Case 8230: extraBit = "Puntos suspensivos"

  Case 8242: extraBit = "Minuto de ángulo >> Unicode: Prima"

  Case 8243: extraBit = "Segundo de ángulo >> Unicode: Doble prima"

  Case 8249: extraBit = "Comilla angular simple (apertura)"

  Case 8250: extraBit = "Comilla angular simple (cierre)"

  Case 8722: extraBit = "Menos (Mat.)"

End Select



If extraBit > "" Then extraBit = "      >>>>  " & extraBit



' Revisar superíndice/subíndice,cursiva,negrita y versalitas

If Selection.Font.Superscript = True Then

  extraBit = extraBit & "     >>> superíndice"

Else

  If Selection.Font.Subscript = True Then

  extraBit = extraBit & "     >>> subíndice"

  End If

End If

If Selection.Font.Italic = True Then

  extraBit = extraBit & "     >>> cursiva"

End If

If Selection.Font.Bold = True Then

  extraBit = extraBit & "     >>> negrita"

End If

If Selection.Font.SmallCaps = True Then

  extraBit = extraBit & "     >>> versalitas"

End If



' This isn't a 'funny' Symbol font, undo the Revisions.AcceptAll

If uCode > 0 Then WordBasic.EditUndo



' Mostrar en la Barra de estado

s = "                   "

If showOnStatusbar = True Then _

       StatusBar = s & s & s & s & ansiBit & "    " & _ extraBit      & "    " & _ ucodeBit & "    " & fontBit & HexBit



If useVoice And extraBit > "" And charSelected = False Then _

     speech.Speak extraBit, SVSFPurgeBeforeSpeak

    

' Mostrar en un Cuadro de diálogo

If (useVoice And charSelected) Or showInMessageBox _

     Or extraBit = "" Or uCode < 0 Then _

     MsgBox ansiBit & extraBit & vbCr & ucodeBit & vbCr & fontBit _

     & HexBit & vbCr & fntNormal, , "¿Qué chirimbolo es este?"

Selection.Collapse wdCollapseStart

End Sub



Nota:

Esta macro es una adaptación al español de la macro WhatChar de Paul Beverly. Te sugiero visitar el sitio http://www.archivepub.co.uk/macros.html porque, gentileza de su creador, hay muchas macros disponibles . Entre ellas, hay una que se llama FRedit (FR viene de "Find & Replace") que permite automatizar el "Buscar y Reemplazar" de MS Word.