Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 1 voto(s) - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Soprano, nueva versión.

En el tema de edición no me quise meter en berenjenales. Al exportar el proyecto a un archivo único lo puedes exportar como quieras, bien a .odt para trabajar con él en el LibreOffice directamente a partir de las preferncias que ya tiene, bien en .txt para después copiar y pegar sin formato en un .odt nuevo y formatear como más rabia te de.

Es que eso de la edición es un mundo muy complejo en el que, de momento, no tengo demasiado interés en meterme...

Saludos

No podemos regresar
    ¡Gracias!

Un poco picadito por el comentario de que Focuswriter sí cuenta bien las palabras y Soprano no, he instalado Focuswriter, revisado el código y hecho comparativas. Creo que ahora sí que se cuentan bien las palabras. He actualizado, pues, el gitlab con la versión 2.1.2.

El follón venía del tema de UTF-8 y demás pero creo que ya está resuelto.

Saludos.

"revisado el código"... de Soprano, no de Focuswriter, que conste

No podemos regresar
    ¡Gracias!

Bien, solucione el problema de  la propiedad .Centered borrándola mediante la edición del archivo del form con un editor de texto plano.
Luego me puse a escribir un capitulo de un libro logre asignarle al texto un tipo de encabezado H2, H3 ...etc. pero me gustarias una tecla rapida para eso en vez de tener que usar el botón de la toolbar. escribí un poco y guarde el archivo.
  • El tipo de control ToolBar compromete la compatibilidad hacia atrás, sugiero que no la uses.
  • Se agradecería que incorpores teclas de atajo para asignar los tipos de encabezado como en writer. ctrl+1=Titulo 1, etc.
  • Estaría bien que según donde este el cursor se indique en la barra de abajo que tipo de nivel es h1, h2, párrafo etc. ya que al escribir no logro diferenciar si es un titulo h2 o h3, tal vez una marca de agua que indique estas cosas podría funcionar.
  • Estaría bien poder exportar un xhtml solo con marcas estándar <h1> a <h6>, <p>, <b> etc. para poder tomar esos archivos y crear luego un .epub, podrías agregar la exportación a xhtml para esto. [1]
  • En el caso de la pantalla completa con F11 estaría bueno un cartelito que indique como volver al estado anterior yo le di al botón de pantalla y luego no sabia como volver.
[1] ejemplo de mi propuesta
Así esta en sopprano
[Imagen: J2wVzjK.png]
Así es el html que exporta actualmente
[Imagen: 8GPLsSG.png]
Así seria el formato que me gustaría para formar un epub luego
[Imagen: AUWnqAF.png]
Saludos.
    ¡Gracias!

Cita:Bien, solucione el problema de  la propiedad .Centered borrándola mediante la edición del archivo del form con un editor de texto plano.
Luego me puse a escribir un capitulo de un libro logre asignarle al texto un tipo de encabezado H2, H3 ...etc. pero me gustarias una tecla rapida para eso en vez de tener que usar el botón de la toolbar. escribí un poco y guarde el archivo.
  • El tipo de control ToolBar compromete la compatibilidad hacia atrás, sugiero que no la uses. Si encuentro un control que lo sustituya, no hay problema...
  • Se agradecería que incorpores teclas de atajo para asignar los tipos de encabezado como en writer. ctrl+1=Titulo 1, etc. Esto sí es posible, creo. lo miro.
  • Estaría bien que según donde este el cursor se indique en la barra de abajo que tipo de nivel es h1, h2, párrafo etc. ya que al escribir no logro diferenciar si es un titulo h2 o h3, tal vez una marca de agua que indique estas cosas podría funcionar. Mmmm.... de momento no se me ocurre como, pero lo miro también
  • Estaría bien poder exportar un xhtml solo con marcas estándar <h1> a <h6>, <p>, <b> etc. para poder tomar esos archivos y crear luego un .epub, podrías agregar la exportación a xhtml para esto. [1] Esto también es peliagudo, dado que Soprano depende de TextEdit para su funcionamiento. De todas formas déjame que le de unas vueltas
  • En el caso de la pantalla completa con F11 estaría bueno un cartelito que indique como volver al estado anterior yo le di al botón de pantalla y luego no sabia como volver. Un balloon mismo puede valer ¿no?
Con todo esto veo delicado encontrar el equilibrio entre un programa de mera escritura y un programa de Edición de Textos. Es evidente que un editor de texto plano se queda insuficiente y es evidente, por el otro lado, que yo no puedo hacer un Writer del Libreoffice o un Microsoft Word...

Hay que encontrar ese equilibrio. De momento me apunto a hacer todo aquello que "buenamente" se pueda. Es decir, sin tener que reescribir lo que funciona, sin tener que añadir recursos externos a gambas y sin tener que complicar tanto el código y los tiempos de respuesta que se haga inmanejable.

Muchas gracias por el feed-back y por tu interés en el proyecto.

Saludos

No podemos regresar
    ¡Gracias!

Cita:
Un poco picadito por el comentario de que Focuswriter sí cuenta bien las palabras y Soprano no
Big Grin 
Noooooo, no nos piqueeeeemos, que era una sola mención a un problema que puede ser peliagudo  Smile 

Verás, yo escribía bastante microficción y, cuando en un concurso entras en 50, 40, 20 o 10 palabras, desde luego, ya no se trata de «entre 1.000 y 3.000 palabras», como por ejemplo «El Polidori». Cada palabra cuenta. Y, como los jueces suelen contar «a mano» —yo también lo haría, sobre todo con textos con efectos especiales, que haberlos, haylos—, ha habido varias desgracias por usar Google Docs y que no dé la contabilidad adecuado. De hecho, en su día en una página de éstas precisamente de microficción presenté una tabla con pruebas que había hecho con editores de todo tipo:
 [Imagen: 2021-08-29-20-07.png]

Añadiendo «Soprano» a esta tabla, puedo decir que... sigue contando muy bien de manera aproximada. Pero tampoco hayq ue volverse loco con el asunto. Por cierto, los tres patrones que uso son:
Código:
 
Sueños

―Ya no me quieres...―musita.
―No es eso, Sasha ―contesto sabiéndole el rey del chantaje emocional―.Necesito otros horizontes.
―Quimeras, Laika –dice.
―Está en mi sangre. Mi bisabuelo colaboró con Pavlov, mis padres fueron artistas de circo...
Sasha enmudece y yo, abatida, abandono la granja.
Su postrer aullido no me detiene.
Código:
 
Después



— ¿Te ha gustado? —pregunto él.

—¿Qué si me ha gustado? ¡Has estado fabuloso! Tienes que volver a hacerme eso de… —ella se sorprendió degollando de un tajo a su amante.

La frustración invadió.
su ser.
—Espera al segundo, Cloti. Contrólate —se repitió, a modo de mantra, la mantis religiosa.
Código:
 
Mi última bala

Estoy sobre la cabina oxidada de un camión; él, a unos metros, sobre una cisterna.
Sin munición, sin salida. Rodeados de no vivos.
—Tírame tu pistola —me grita.— ¡Confía en mí!
—¡¿Qué?!
—Hay un depósito de propano. Moriremos matando.
Se la lancé. El muy cabrón se suicidó.
—El último es mío, ahí lo dejo Cool .—
Como ves, no es nada sencillo, yo empleo una miniaplicación que me hice yo mismo con mi mecanismo en html5 y js, y que funciona fenomenal. El problema es que al pasarlo a Gambas3, resulta que las RegExp no funcionan bien con UTF-8, tal cual señalas:

XML
  1. <!-- 
  2.     SOFTWARE LIBRE
  3.  -->
  4.  
  5. <div class="crqt" id="Pral">
  6.     <form class="crqt" id="Escrito" "Estadisticas()">
  7.         <textarea onkeyup="Estadisticas()" id="Texto" class="crqt">Componente en pruebas. Escribe cualquier texto.</textarea>
  8.     </form>
  9.     <form class="crqt" id="Etiquetas">
  10.         <label>Palabras     :<input id="Palabras"      readonly="" /></label>
  11.         <label>Matrices     :<input id="Matrices"      readonly="" /></label>
  12.         <label>Caracteres   :<input id="Caracteres"    readonly="" /></label>
  13.         <label>Letras       :<input id="Letras"        readonly="" /></label>
  14.         <label>Párrafos     :<input id="Parrafos"      readonly="" /></label>
  15.         <label>Sílabas      :<input id="Silabas"       readonly="" /></label>
  16.         <label>Frases       :<input id="Frases"        readonly="" /></label>
  17.         <label style="border-top: solid thin">Szigriszt1993:<input id="Szigriszt1993" readonly="" style="border-top: solid thin"/></label>
  18.         <label>Perspicuidad :<input id="Perspicuidad"  readonly="" /></label>
  19.         
  20.     </form>
  21.     <script>
  22.         function Estadisticas() {
  23.           var strTexto = Texto.value;
  24.           var Resultado = 0
  25.           var pttPalabras  = /([A-Za-z0-9\u00C0-\u02B8\-])[A-Za-z0-9\u00C0-\u02B8\-]*/g;
  26.           var pttMatrices  = /./g;
  27.           var pttCaracteres= /\S/g;
  28.           var pttLetras    = /[A-Za-z0-9\u00C0-\u02B8]/g;
  29.           var pttParrafos  = /[\n][^\n]/g;
  30.           var pttSilabas   = /[aeo]h[iu]|[iu]h[aeo]|[aeo][iu]|[aeo][y]|[y]|[íú]|[iu][^aeo]|[aeo]|[áéíóú]|[q|g]ui[aeo]/gi
  31.           var pttFrases    = /[.?!][^.?!]/g;
  32.         var INFLESZ      = "";
  33.         
  34.           try {
  35.               Resultado = strTexto.match(pttPalabras).length;
  36.               var P = Resultado;
  37.             }
  38.         catch(err) {
  39.               Resultado = 0;
  40.             }
  41.           document.getElementById("Palabras").value = Resultado.toLocaleString();
  42.  
  43.           try {
  44.               Resultado = strTexto.match(pttMatrices).length;
  45.             }
  46.         catch(err) {
  47.               Resultado = 0;
  48.             }
  49.           document.getElementById("Matrices").value = Resultado.toLocaleString();
  50.  
  51.         try {
  52.               Resultado = strTexto.match(pttCaracteres).length;
  53.             }
  54.         catch(err) {
  55.               Resultado = 0;
  56.             }
  57.           document.getElementById("Caracteres").value= Resultado.toLocaleString();
  58.  
  59.         try {
  60.               Resultado = strTexto.match(pttLetras).length;
  61.               var L = Resultado;
  62.             }
  63.         catch(err) {
  64.               Resultado = 0;
  65.             }
  66.           document.getElementById("Letras").value = Resultado.toLocaleString();
  67.  
  68.         try {
  69.               Resultado = 1 + strTexto.match(pttParrafos).length;
  70.             }
  71.         catch(err) {
  72.               Resultado = 0;
  73.             }
  74.           document.getElementById("Parrafos").value = Resultado.toLocaleString();
  75.  
  76.           try {
  77.               Resultado = strTexto.match(pttSilabas).length;
  78.               var S = Resultado;
  79.             }
  80.         catch(err) {
  81.               Resultado = 0;
  82.             }
  83.           document.getElementById("Silabas").value = Resultado.toLocaleString();
  84.  
  85.           try {
  86.               Resultado = strTexto.match(pttFrases).length;
  87.               var F = Resultado;
  88.             }
  89.         catch(err) {
  90.               Resultado = 0;
  91.             }
  92.         document.getElementById("Frases").value = Resultado.toLocaleString();
  93.  
  94.  
  95.           Resultado = 206.835-62.3*S/P-P/F;
  96.           Resultado = Math.round(Resultado);
  97.         if (isNaN(Resultado)) {
  98.               Resultado = 0;
  99.             }
  100.         document.getElementById("Szigriszt1993").value = Resultado.toLocaleString();
  101.         
  102.         if (Resultado<40) {
  103.             INFLESZ="Muy difícil";
  104.             }else if (Resultado<55) {
  105.                 INFLESZ="Algo difícil";
  106.                 }else if (Resultado<65) {
  107.                     INFLESZ="Normal";
  108.                     }else if (Resultado<80) {
  109.                         INFLESZ="Bastante fácil";
  110.                         }else {
  111.                             INFLESZ="Muy fácil";    
  112.                         }
  113.         
  114.         document.getElementById("Perspicuidad").value = INFLESZ;
  115.     }
  116.  
  117.     </script>
  118.     <style type="text/css">
  119.         .crqt {
  120.             background-color: black;
  121.             color: rgb(0, 255, 0);
  122.             font-family: monospace;
  123.             font-size: 14px;
  124.             border-style: solid;
  125.             border-width: thin;
  126.             border-color: rgb(0, 255, 00);
  127.         }
  128.         form label {
  129.             display: inline;
  130.             width: 100px;
  131.         }
  132.         form input {
  133.             display: inline-block;
  134.             background-color: black;
  135.             color: rgb(0, 255, 0);
  136.             font-family: monospace;
  137.             font-size: 14px;
  138.             border-style: none;
  139.             width: 100px;
  140.             text-align: right;
  141.         }
  142.         textarea {
  143.             width: 98%;
  144.             height: 98%;
  145.         }
  146.         #Pral {
  147.             width: 670px;
  148.             height: 190px;
  149.             margin-right: auto;
  150.             margin-left: auto;
  151.         }
  152.         #Escrito {
  153.             width: 65%;
  154.             height: 99%;
  155.             float: left;
  156.         }
  157.         #Etiquetas {
  158.             width: 33%;
  159.             float: right;
  160.         }
  161.     </style>
  162. </div>


Si supiese C, lo mismo montaba una librería para poder usar la función directamente en Gambas3.

PS.—Ésta es mi función de Gambas3, que no funciona todo lo bien que debiera:

GAMBAS
  1. Public Function ContarPalabras(Texto As String) As Integer[]
  2.   ' **** Estadísiticas de un texto.
  3.   ' <<<< Devuelve una matriz de enteros:
  4.   '       [0]: Número de palabras
  5.   '       [1]: Número de tipos
  6.   '       [2]: Número de caracteres
  7.   '       [3]: Perspicuidad de Szgrizt 1993
  8.   ' >>>> Texto plano para obtener estadísticas.
  9.   '
  10.   '' ╔═════════════════════════════════════════════════════════════╗
  11.   '' ║ Atención: PCRE sólo admite texto ASCII extendido, no UTF-8. ║
  12.   '' ║            Los valores obtenidos son aproximados.           ║
  13.   '' ╚═════════════════════════════════════════════════════════════╝
  14.  
  15.   Dim iPaso As New Integer[4]     ' Variable de paso para almacenar resultados
  16.   Dim sEse As String              ' Cadena de trabajo
  17.   Dim iPal As Integer             ' Nº Palabras para cálculo perspicuidad
  18.   Dim iSil As Integer             ' Nº Sílabas   "    "
  19.   Dim iLet As Integer             ' Nº Letras    "    "
  20.   Dim iFrs As Integer             ' Nº Frases    "    "
  21.   Dim SCAM As String = Chr(7)     ' El símbolo «campanita» que ya no se usa
  22.  
  23.   ' Si no hay texto, no hay resultados
  24.   If Not Texto Then Return [0, 0, 0, 0]
  25.  
  26.   ' Palabras
  27.   sEse = RegExp.Replace(Texto, "([A-Za-zÁÉÍÓÚáéíóúÜüñÑ0-9])[A-Za-zÁÉÍÓÚáéíóúÜüñÑ0-9]*", SCAM, RegExp.Greedy)
  28.   iPal = Split(sEse, SCAM).Max
  29.   iPaso[0] = iPal
  30.  
  31.   ' Tipos
  32.   sEse = RegExp.Replace(Texto, ".", SCAM, RegExp.Greedy)
  33.   iPaso[1] = Split(sEse, SCAM).Max
  34.  
  35.   ' Caracteres
  36.   sEse = RegExp.Replace(Texto, "\\S", SCAM, RegExp.Greedy)
  37.   iPaso[2] = Split(sEse, SCAM).Max
  38.  
  39.   ' Sílabas
  40.   sEse = RegExp.Replace(Texto, "[aeo]h[iu]|[iu]h[aeo]|[aeo][iu]|[aeo][y]|[y]|[íú]|[iu][^aeo]|[aeo]|[áéíóú]|[q|g]ui[aeo]", SCAM, RegExp.Greedy + RegExp.Caseless)
  41.   iSil = Split(sEse, SCAM).Max
  42.  
  43.   ' Letras
  44.   sEse = RegExp.Replace(Texto, "[A-Za-zÁÉÍÓÚáéíóúÜüñÑ0-9]", SCAM, RegExp.Greedy)
  45.   iLet = Split(sEse, SCAM).Max
  46.  
  47.   ' Frases
  48.   sEse = RegExp.Replace(Texto, "[.?!][^.?!]", SCAM, RegExp.Greedy)
  49.   iFrs = Split(sEse, SCAM).Max
  50.  
  51.   ' Perspicuidad
  52.   If iPal > 0 And iFrs > 0 Then
  53.     iPaso[3] = 206.835 - 62.3 * iSil / iPal - iPal / iFrs
  54.   Else
  55.     iPaso[3] = 0
  56.  
  57.   Return iPaso
  58.  



En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
    ¡Gracias!

Obra parcialmente escrita con Soprano —el principio ya estaba terminado pero sin corregir— presentada al certamen  IX Concurso homenaje a John William Polidori con la temática de fantasmas. El relato es «Círculo de frío».

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
[-] Los siguientes 1 usuarios dice gracias a Grandamakulo por este post:
  • Shordi
    ¡Gracias!

Gracias! Todo un honor.

Por cierto he subido hoy unas actualizaciones sin acordarme que con tanto lío no había terminado algunas cosas... así que no actualicéis hasta nuevo comunicado, que puede dar fallos garrafales.


Saludos

No podemos regresar
    ¡Gracias!

Acabo de subir la versión corregida de Soprano. Vergüenza me da decir que no recuerdo todos los cambios, sólo los últimos, a saber: He reescrito el sistema de estilos y de atajos para hacerlo más flexible y amplio. Los demás cambios van en la línea que sugirió en su momento Maese Grandamakulo.

Un cambio que se ha hecho ha sido en le fichero de configuración .styles.conf, tanto en user.home/.config/soprano (que no se usa, pero se crea), como en el archivo raíz de cada proyecto que es el que se usa. Para no caer en los errores de siempre con estos archivos le he establecido que si la fecha del archivo es inferior al 8 de septiembre de 2021, lo elimine y lo cree de nuevo (con lo que se eliminará lo que hayáis modificado allí. Sorry).
Aún así, si tenéis algún problema raro, probad primero a borrarlos a mano. Es lo que tiene ser Beta-tester.

Saludos

No podemos regresar
[-] Los siguientes 2 usuarios dicen gracias a Shordi por este post:
  • Grandamakulo, tincho
    ¡Gracias!

Reportando un bug.
Hace unos minutos clone el repo y ejecute soprano desde el ide en gambas 3.16.2 en Manjaro.
Estoy intentando hacer un manual de configuración de la red a medida que voy haciendo los pasos.
Estoy haciendolo con Writer pero decidí volver a probar soprano y salto un error pero he de decirte que tampoco me resulta intuitivo el uso y me parece que deberías hacer algunos cambios en la inteface.

Cree un proyecto (con soprano) eligiendo "Libro" porque no existe "Manual"

[Imagen: 9rl0xqU.png]
Algo de feedback
No me resulta amigable la navegación del documento, creo que tendría que manejarse todo desde un TreeView lateral izquierdo como:
[Imagen: OJJn8BM.png]
Saludos.
    ¡Gracias!

Oído cocina. Investigate mode on

Investigado el bug, creo que se debe a que los ficheros de configuración de los estilos que usas son los de la versión anterior.
El aspecto de del .styles.conf debe ser éste:
Cita:[Colors]
foreground=15658732

[Specials]
Long Dash (Ctrl+-)="kc-安—"
Left Quotes (Ctrl+1)="kc1安«"
Right Quotes (Ctrl+2)="kc2安»"

[Styles]
Normal (Alt+0)="ea0安Ubuntu,10"
Títle 1 (Alt+1)="ea1安Ubuntu,18,Bold"
Títle 2 (Alt+2)="ea2安Ubuntu,16,Bold"
Títle 3 (Alt+3)="ea3安Ubuntu,14,Bold"
Títle 4 (Alt+4)="ea4安Ubuntu,12,Bold"

 
Es decir deben tener la letra china dentro del código. (Lo más clásico es usar "|" como separador pero cuando se trata de almacenar los caracteres especiales no puedes colocar ninguno de los que ofrece el teclado. Por tanto recurrí a la letra china que tiene significado para mí. No creo que nadie quiera que le aparezca al teclear nada y no creo que Soprano llegue a ser usado en china nunca... Big Grin Big Grin Big Grin

Resumiendo: Si tus archivos ~/.config/soprano/.styles.conf y/o ~/<proyectos deSoprano>/<nombre_proyecto/.sytles.conf no tienen ese aspecto chino, elimínalos y se deberían crear correctamente al siguiente inicio.... Es lo que tiene ser beta-tester....

Respecto al interface, no veo cómo puedo hacerlo todo en un treeview sin reducirlo sólo a los nombres de archivo y perder la información de "un vistazo" sobre el número de palabras y fechas de modificación de los archivos dentro de cada capítulo. A lo más puedo unificar "Estructura" y "Adjuntos" en un sólo treeview... pero eso puede ser difícil de manejar cuando tu libro esté avanzado y tengas unas 50 capítulos con trescientas escenas y hayas recopilado tropecientos archivos de documentación...

Gracias por el feedback.

Saludos.

No podemos regresar
    ¡Gracias!


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)