Apagada docs

Aprendiendo a programar el pasado

Herramientas de usuario

Herramientas del sitio


es:basic:wordjoinerpowerpoint

Insertar carácter WordJoiner antes de una raya de cierre en PowerPoint

En español, la raya (—) es un carácter parentético, es decir, que, al igual que las comillas o el paréntesis, va pegado a las palabras que hay en su interior.

El problema es que en inglés no sucede así.

Por eso, a pesar de que las normas Unicode sobre cómo dividir palabras a final de línea en distintos idiomas toman en consideración esta característica del español, los algoritmos incluidos en las mismas normas se las pasan por el arco del triunfo. Esto tiene relevancia después a la hora de maquetar archivos, pues ni los procesadores de texto de Microsoft, ni los derivados de OpenOffice (como LibreOffice), ni los navegadores, ni los lectores de libros electrónicos .epub suelen respetar esta característica, que en español es necesaria para distinguir una raya de cierre de una raya de diálogo.

Esta macro de Visual Basic para PowerPoint intentaba solucionar ese problema insertando un carácter de “unión invisible” antes de cada raya que vaya seguida de espacio.

Sin embargo, no funcionó demasiado bien, porque PowerPoint no respeta el carácter “unión invisible” si aparece seguido de una raya. Con el signo “restar” sí funcionaría, pero el signo “restar” tiene otra función semántica distinta.

WordJoinerPowerPoint.bas
Attribute VB_Name = "WordJoinerPowerPoint"
 
'Inserts Word Joiner AFTER em-dash if and only a space appears BEFORE em-dash.
'
Sub EmDashWordJoin()
Dim Sl As Slide
Dim Sh As Shape
Dim tf As TextFrame
Dim f As Long, status As Boolean
 
For Each Sl In ActivePresentation.Slides
    For Each Sh In Sl.Shapes
        If Sh.HasTextFrame Then
            Set tf = Sh.TextFrame
            If tf.HasText Then
                f = 1
                Do
                    Select Case Mid(tf.TextRange.Text, f, 1)
                    Case " "
                        status = True
                    Case "—" 'em-dash
                        If status Then
                            '&h2060: Unicode Word Joiner
                            '&hfeff: Unicode Zero Width No Break Space (ZWNBS)
                            tf.TextRange.Text = _
                                Left(tf.TextRange.Text, f) + _
                                ChrW(&HFEFF) + _
                                Mid(tf.TextRange.Text, f + 1)
                                Debug.Print "Word Join inserted:" & _
                                    Left(tf.TextRange.Text, f) + _
                                    "·" + _
                                    Mid(tf.TextRange.Text, f + 1)
 
                        End If
                        status = False
                    Case Else
                        status = False
                    End Select
                    f = f + 1
                Loop Until f > Len(tf.TextRange.Text)
            End If
        End If
    Next
Next
End Sub
 
'Removes Word Joiner.
'
Sub RemoveWordJoin()
Dim Sl As Slide
Dim Sh As Shape
Dim tf As TextFrame
Dim f As Long, status As Boolean
 
For Each Sl In ActivePresentation.Slides
    For Each Sh In Sl.Shapes
        If Sh.HasTextFrame Then
            Set tf = Sh.TextFrame
            If tf.HasText Then
                f = 1
                Do
                    Select Case Mid(tf.TextRange.Text, f, 1)
                    Case " "
                        status = True
 
                    '&h2060: Unicode Word Joiner
                    '&hfeff: Unicode Zero Width No Break Space (ZWNBS)
                    Case ChrW(&H2060), ChrW(&HFEFF)
                            tf.TextRange.Text = _
                                Left(tf.TextRange.Text, f - 1) + _
                                Mid(tf.TextRange.Text, f + 1)
                                Debug.Print "Word Join removed:" & _
                                    tf.TextRange.Text
                    End Select
                    f = f + 1
                Loop Until f > Len(tf.TextRange.Text)
            End If
        End If
    Next
Next
 
End Sub
Este sitio web utiliza cookies. Al utilizar el sitio web, usted acepta almacenar cookies en su computadora. También reconoce que ha leído y entendido nuestra Política de privacidad. Si no está de acuerdo abandone el sitio web.Más información
es/basic/wordjoinerpowerpoint.txt · Última modificación: 2025/02/20 09:23 por nepenthes