el Guille, la Web del Visual Basic, C#, .NET y más...

gsColorearNET
Biblioteca para colorear código para .NET Standard 2.0

Publicado el 11/Sep/2020
Actualizado el 24/Oct/2020

Esta es una biblioteca (DLL) compilada para .NET Standard 2.0 y así poder usarla en cualquier plataforma que lo acepte, incluidos los proyectos de .NET Framework 4.6.1 a 4.8 y de .NET Core 2.0 a .NET 5.0, entre otros...



Esta es una biblioteca (DLL) compilada para .NET Standard 2.0 y así poder usarla en cualquier plataforma que lo acepte, incluidos los proyectos de .NET Framework 4.6.1 a 4.8 y de .NET Core 2.0 a .NET 5.0, entre otros...
Si quieres ver dónde se pueden usar las DLL compiladas con .NET Standard 2.0 mira este enlace: .NET Standard

 

Últimas actualizaciones

Nota del 24/Oct/2020 (v1.0.0.14)
He actualizado tanto el paquete de NuGet como el código en GitHub.
También la utilidad de gsColorearCodigo para que use esta nueva versión.

Los cambios principales son para no eliminar las líneas en blanco que haya en el código.
Esto era porque la función Split original de Visual Basic no elimina las líneas en blanco.
Además de usar vbCr en lugar de vbCrLf al examinar cada línea y crear nuevas separaciones, ya que al añadir vbCrLf añadía una línea extra en blanco.

Aunque últimamente se me ha dado el problema que no todos los ficheros tienen el mismo tipo de retorno de carro.
Por tanto he tenido que comprobar antes de hacer el Split qué tipo de retorno de carro tiene:
vbCrLf o vbCr o vbLf.

 

Nota del 16/Sep/2020 (v1.0.0.7)
He actualizado tanto el paquete de NuGet como el código en GitHub.
También la utilidad de gsColorearCodigo para que use esta nueva versión.

Los cambios principales son para no eliminar las líneas en blanco que haya en el código.
Esto era porque la función Split original de Visual Basic no elimina las líneas en blanco.
Además de usar vbCr en lugar de vbCrLf al examinar cada línea y crear nuevas separaciones, ya que al añadir vbCrLf añadía una línea extra en blanco.

 

Nota del 13/Sep/2020 (v1.0.0.6)
He actualizado tanto el paquete de NuGet como el código en GitHub.
También la utilidad de gsColorearCodigo para que use esta nueva versión.

 

Con fecha del 12 de septiembre de 2020 he creado un repositorio en gitHub para el código de gsColorearNET.

De ahí puedes descargar el proyecto completo a excepción del fichero de nombre seguro (.snk)

 

Este es el enlace: gsColorearNET en gitHub.

 

Y este es el enlace a los paquetes de NuGet: gsColorearNET en NuGet.

 

Estoy probando la utilidad de colorear en .NET 5.0 Preview 8 y a duras penas ya está operativa...
es que el editor de Visual Studio 2019 Preview está aún muy verde para las aplicaciones de Windows Forms para Visual Basic.

El hacerlo con esa versión es para poder depurar el código de la DLL de colorear, ya que en un proyecto de .NET framework no se puede... o yo no sé cómo hacerlo... todo hay que decirlo.

Cuando tenga tiempo publicaré en el blog las cosillas que recomiendo hacer hasta que mejoren el editor/diseñador de WinForms para Visual Basic.

 

NOTA:
Aún la estoy probando desde NuGet ya que usándola como proyecto compila y funciona bien, pero al publicar el paquete en NuGet (aquí tienes el enlace: gsColorearNET en NuGet), no me encuentra los lenguajes de las palabras clave.
¡Esto último ya está solucionado con el paquete 1.0.0.1! Smile

 

He publicado la utilidad de colorear código (gsColorearCodigo) para instalar con ClickOnce que utiliza el paquete de NuGet 1.0.0.1 y... ¡funciona a la perfección!

 

Por ahora no te voy a poner el código fuente, en realidad ha cambiado poco desde lo que publiqué anteayer, y como lo que quiero añadir o corregir aún lo tengo que hacer... pues... habrá que esperar unos días a que lo tenga terminado y así ya la publico de forma, que salvo que haya algunos fallos, no tenga que modificarla en algún tiempo.

Lo que sí haré es actualizar el paquete de NuGet con las correcciones que le vaya haciendo.

 

Sobre el uso de un proyecto DLL de .NET Standard con un proyecto de .NET Framework

Probando el código de gsColorearCodigo usando el .NET 4.8 en Visual Studio 2019 con el proyecto de gsColorearNET usando .NET Standard 2.0, al producirse un error (o sin que se produzca) y querer depurar en el código de la DLL, el VS no me dejaba...
Así que... para comprobar porqué fallaba el penúltimo cambio que le hice, tuve que abrir un proyecto de .NET 5.0 (Preview 8) usando el Visual Studio Preview, y en ese entorno si pude depurar y averiguar cuál era el fallo... que después resultó ser algo trivial, pero...

Así qué... ya sabes... si mezclas... no debugues... ;-)

 

Usar código de Visual Basic en .NET Standard

Otra de las cosillas que me he encontrado a la hora de poder compilar el código del proyecto gsColorear para .NET Framework (ya hay que ir haciendo las aclaraciones de que no todo es simplemtente .NET, porque tenemos .NET Framework, .NET Core, .NET Standard y... casi ya... también simplemente .NET refiriéndose a .NET Core) es la definición de algunas de las funciones del ensamblado Microsoft.VisualBasic en concreto de la clase Strings que no están definidas en .NET Standard 2.0, tal como:
Len, Left, Mid, Right, Split, InStr y Trim.

Para no tener que cambiar todo el código que usaba esas funciones (recuerda que el código de colorear lo hice sobre el año 2001, sí, con Visual Basic 6.0, después en diciembre del 2002 lo pasé a la beta de Visual Studio .NET, la aplicación de aquél entonces era HTMLColorCode, aunque debo tener otra aplicación llamada gsEditor... el tiempo no perdona... por la memoria...) así que... me he creado una clase en la que he definido esas funciones, que (seguramente) pueden mejorarse, pero... así las he programado / codificado / como prefieras decirlo.

 

Y te pego aquí el código por si te puede ser de ayuda.

'------------------------------------------------------------------------------
' Clase definida en la biblioteca para .NET Standard 2.0            (10/Sep/20)
' Basada en gsColorear y gsColorearCore
'
' VBCompat                                                          (10/Sep/20)
' Clase con instrucciones para compatibilidad con .NET Standard 2.0
'
' Declaro algunas funciones de Microsoft.VisualBasic.Strings
' que no están en .NET Standard 2.0
'
' (c) Guillermo (elGuille) Som, 2020
'------------------------------------------------------------------------------
Option Strict On
Option Infer On
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
'Imports System.Data
Public Class VBCompat
    ''' <summary>
    ''' Devuelve los caracteres desde la posición (en base 1)
    ''' hasta el final.
    ''' </summary>
    ''' <param name="str"></param>
    ''' <param name="pos"></param>
    Public Shared Function Mid(str As String, pos As Integer) As String
        Return str.Substring(pos - 1)
    End Function
    ''' <summary>
    ''' Devuelve la cadena desde la posición indicada con len caracteres.
    ''' La posición del primer carácter es el 1.
    ''' </summary>
    ''' <param name="str"></param>
    ''' <param name="pos"></param>
    ''' <param name="len"></param>
    ''' <remarks>10/Sep/20/20</remarks>
    Public Shared Function Mid(str As String, pos As Integer, len As Integer) As String
        Return str.Substring(pos - 1, len)
    End Function
    ''' <summary>
    ''' Devuelve el número de caracteres.
    ''' Si es cadena vacía o nulo devuelve 0.
    ''' </summary>
    ''' <param name="str"></param>
    ''' <returns></returns>
    Public Shared Function Len(str As String) As Integer
        If String.IsNullOrEmpty(str) Then Return 0
        Return str.Length
    End Function
    ''' <summary>
    ''' Devuelve los primeros caracteres de la cadena.
    ''' </summary>
    ''' <param name="str"></param>
    ''' <param name="len"></param>
    ''' <returns></returns>
    Public Shared Function Left(str As String, len As Integer) As String
        Return str.Substring(0, If(len > str.Length, str.Length, len))
    End Function
    ''' <summary>
    ''' Devuelve los caracteres indicados desde la derecha.
    ''' </summary>
    ''' <param name="str"></param>
    ''' <param name="len"></param>
    ''' <returns></returns>
    Public Shared Function Right(str As String, len As Integer) As String
        Dim iPos = str.Length - len
        Return str.Substring(iPos, len)
    End Function
    ''' <summary>
    ''' Devuelve la posición (en base 1) de la segunda cadena en la primera
    ''' </summary>
    ''' <param name="str1"></param>
    ''' <param name="str2"></param>
    ''' <returns></returns>
    Public Shared Function InStr(str1 As String, str2 As String) As Integer
        Return str1.IndexOf(str2) + 1
    End Function
    ''' <summary>
    ''' Devuelve la posición (en base 1) de la segunda cadena en la primera 
    ''' empezando en la posición indicada.
    ''' </summary>
    ''' <param name="startPos"></param>
    ''' <param name="str1"></param>
    ''' <param name="str2"></param>
    ''' <returns></returns>
    Public Shared Function InStr(startPos As Integer, str1 As String, str2 As String) As Integer
        Return str1.IndexOf(str2, startPos - 1) + 1
    End Function
    ''' <summary>
    ''' Devuelve una cadena después de haber quitado 
    ''' los espacios delante y detrás.
    ''' </summary>
    ''' <param name="str"></param>
    ''' <returns></returns>
    Public Shared Function Trim(str As String) As String
        Return str.Trim
    End Function
    ''' <summary>
    ''' Divide una cadena en elementos de un array.
    ''' Usando el delimitador indicado.
    ''' </summary>
    ''' <param name="Expression"></param>
    ''' <param name="Delimiter"></param>
    ''' <returns></returns>
    Public Shared Function Split(Expression As String, Optional Delimiter As String = " ") As String()
        Return Expression.Split(Delimiter.ToCharArray, StringSplitOptions.RemoveEmptyEntries)
    End Function
    ''
    '' El código IL de Prueba1 es más corto (y parece que eficiente) que el de Prueba2
    ''
    'Public Shared Function Prueba1(str As String, len As Integer) As String
    '    Return str.Substring(0, If(len > str.Length, str.Length, len))
    'End Function
    'Public Shared Function Prueba2(str As String, len As Integer) As String
    '    If len > str.Length Then
    '        len = str.Length
    '    End If
    '    Return str.Substring(0, len)
    'End Function
End Class

 

Y esto es todo por ahora...

Espero que te sea de utilidad

Nos vemos.
Guillermo


 
El código fuernte completo

El código para Visual Basic con el proyecto para Visual Studio 2019 está publicado en gitHub.

 

Este es el enlace: gsColorearNET en gitHub.

 

Y este es el enlace a los paquetes de NuGet: gsColorearNET en NuGet.

 




La fecha/hora en el servidor es: 09/12/2024 22:00:26

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024