Add project files.

This commit is contained in:
Miguel 2024-04-18 17:22:19 +02:00
parent 97cd6c5bf0
commit 646023350e
8 changed files with 538 additions and 0 deletions

13
App.xaml Normal file
View File

@ -0,0 +1,13 @@
<Application x:Class="GTPAsk.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:GTPAsk"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/ToastNotifications.Messages;component/Themes/Default.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

14
App.xaml.cs Normal file
View File

@ -0,0 +1,14 @@
using System.Configuration;
using System.Data;
using System.Windows;
namespace GTPAsk
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}

10
AssemblyInfo.cs Normal file
View File

@ -0,0 +1,10 @@
using System.Windows;
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]

18
GTPAsk.csproj Normal file
View File

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="LanguageDetection" Version="1.2.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="ToastNotifications" Version="2.5.1" />
<PackageReference Include="ToastNotifications.Messages" Version="2.5.1" />
</ItemGroup>
</Project>

25
GTPAsk.sln Normal file
View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.8.34330.188
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GTPAsk", "GTPAsk.csproj", "{6342C8D0-40D6-4DAF-A0E4-8EFA577F435F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6342C8D0-40D6-4DAF-A0E4-8EFA577F435F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6342C8D0-40D6-4DAF-A0E4-8EFA577F435F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6342C8D0-40D6-4DAF-A0E4-8EFA577F435F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6342C8D0-40D6-4DAF-A0E4-8EFA577F435F}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0BC503E4-ABF3-4126-8CFF-5FEDFA7D2BEE}
EndGlobalSection
EndGlobal

44
MainWindow.xaml Normal file
View File

@ -0,0 +1,44 @@
<Window x:Class="GTPAsk.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:GTPAsk"
mc:Ignorable="d"
Title="GTPAsk" Height="550" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto" MinWidth="495"/>
</Grid.ColumnDefinitions>
<!-- Cuadro de texto para la entrada -->
<TextBox Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="10,10,10,10" x:Name="TextoDesdePortapapeles" TextWrapping="Wrap" AcceptsReturn="True" />
<!-- ComboBox y cuadro de texto con texto por defecto -->
<ComboBox Grid.Row="1" Grid.Column="0" Margin="10,10,10,10" x:Name="CB_ListaInstrucciones" SelectionChanged="ComboBox_SelectionChanged"/>
<TextBox Grid.Row="1" Grid.Column="1" Margin="10,10,10,10" x:Name="TB_Instrucciones" Text="Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor: " TextWrapping="Wrap" AcceptsReturn="True"/>
<!-- Botón para ejecutar -->
<Button Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="10,10,10,10" x:Name="executeButton" Click="ExecuteButton_Click">Procesar con IA...</Button>
<!-- Cuadro de texto para mostrar el resultado -->
<TextBox Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Margin="10,10,10,10" x:Name="resultTextBox" TextWrapping="Wrap" AcceptsReturn="True"/>
<!-- Cuadro de texto para mostrar el estado -->
<TextBox Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Margin="10,10,10,10" x:Name="statusTextBox" IsReadOnly="True"/>
</Grid>
</Window>

356
MainWindow.xaml.cs Normal file
View File

@ -0,0 +1,356 @@
using System.Net.Http;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO;
using LanguageDetection;
using ToastNotifications;
using ToastNotifications.Lifetime;
using ToastNotifications.Messages;
using ToastNotifications.Position;
using System.Windows.Threading;
using System;
using System.Runtime.InteropServices;
using System;
namespace GTPAsk
{
public partial class MainWindow // Asumiendo que estás dentro de una clase de WPF
{
private readonly string openAiApiKey = "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";
private readonly string instruccionesCSV = @"D:\Proyectos\VisualStudio\GTPAsk\instrucciones.csv";
private Notifier _notifier;
private Dictionary<string, string> languageMap = new Dictionary<string, string>
{
{ "en", "Inglés" },
{ "es", "Español" },
{ "it", "Italiano" },
{ "pt", "Portugués" }
// Agrega más idiomas según sea necesario
};
[StructLayout(LayoutKind.Sequential)]
internal struct INPUT
{
public uint type;
public InputUnion U;
public static int Size => Marshal.SizeOf(typeof(INPUT));
}
[StructLayout(LayoutKind.Explicit)]
internal struct InputUnion
{
[FieldOffset(0)] public MOUSEINPUT mi;
[FieldOffset(0)] public KEYBDINPUT ki;
[FieldOffset(0)] public HARDWAREINPUT hi;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MOUSEINPUT
{
public int dx;
public int dy;
public uint mouseData;
public uint dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
internal struct KEYBDINPUT
{
public ushort wVk;
public ushort wScan;
public uint dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
internal struct HARDWAREINPUT
{
public uint uMsg;
public ushort wParamL;
public ushort wParamH;
}
[DllImport("user32.dll", SetLastError = true)]
private static extern uint SendInput(uint nInputs, [MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs, int cbSize);
[DllImport("user32.dll")]
private static extern IntPtr GetMessageExtraInfo();
// VK and KEYEVENTF Constants
const uint INPUT_KEYBOARD = 1;
const ushort VK_TAB = 0x09;
const ushort VK_MENU = 0x12; // ALT key
const uint KEYEVENTF_KEYDOWN = 0x0000;
const uint KEYEVENTF_KEYUP = 0x0002;
static void VolverAUltimaAplicaicon()
{
// Simulate ALT key down
SendKeyboardInput(VK_MENU, KEYEVENTF_KEYDOWN);
// Simulate TAB key down and up
SendKeyboardInput(VK_TAB, KEYEVENTF_KEYDOWN);
SendKeyboardInput(VK_TAB, KEYEVENTF_KEYUP);
// Simulate ALT key up
SendKeyboardInput(VK_MENU, KEYEVENTF_KEYUP);
}
private static void SendKeyboardInput(ushort key, uint flag)
{
INPUT[] inputs = new INPUT[]
{
new INPUT
{
type = INPUT_KEYBOARD,
U = new InputUnion
{
ki = new KEYBDINPUT
{
wVk = key,
wScan = 0,
dwFlags = flag,
time = 0,
dwExtraInfo = GetMessageExtraInfo(),
}
}
}
};
SendInput((uint)inputs.Length, inputs, INPUT.Size);
}
private void NotifyUserWithCursor()
{
// Establecer el cursor personalizado
var customCursor = new Cursor(Application.GetResourceStream(new Uri("/<projectname>;component/Resource/Images/BusyCursor.cur", UriKind.RelativeOrAbsolute)).Stream);
Mouse.OverrideCursor = customCursor;
// Crear un temporizador para revertir el cursor después de 3 segundos
var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(3) };
timer.Tick += (sender, args) =>
{
// Revertir al cursor predeterminado
Mouse.OverrideCursor = Cursors.Arrow;
timer.Stop();
};
timer.Start();
}
private string DetectarIdioma(string TextoACorregir)
{
LanguageDetector detector = new LanguageDetector();
detector.AddLanguages("en", "es", "it", "pt");
string detectedLanguageCode = detector.Detect(TextoACorregir);
string detectedLanguageName = languageMap.ContainsKey(detectedLanguageCode)
? languageMap[detectedLanguageCode]
: "Desconocido";
return detectedLanguageName;
}
private void LoadClipboardContent()
{
if (Clipboard.ContainsText())
{
string idioma;
TextoDesdePortapapeles.Text = Clipboard.GetText();
idioma = DetectarIdioma(TextoDesdePortapapeles.Text);
statusTextBox.Text = "Idioma: " + idioma;
_notifier.ShowInformation("Idioma detectado: " + idioma);
// Verificar si la tecla Control está presionada
// if (!Keyboard.IsKeyDown(Key.LeftCtrl) && !Keyboard.IsKeyDown(Key.RightCtrl))
// {
CorregirTexto();
// }
}
}
private async void CorregirTexto()
{
statusTextBox.Text = "Llamando a la API de OpenAI...";
var TextoACorregir = TextoDesdePortapapeles.Text;
var Instrucciones = TB_Instrucciones.Text;
var idioma = DetectarIdioma(TextoACorregir);
// Verificar si el texto de modifiableTextBox no está en defaultTextComboBox
if (!CB_ListaInstrucciones.Items.Contains(Instrucciones))
{
CB_ListaInstrucciones.Items.Add(Instrucciones);
}
if (idioma == "Desconocido")
{
_notifier.ShowError("No se puede detectar el idioma del texto.");
statusTextBox.Text = "No se puede detectar el idioma del texto.";
return;
}
TextoACorregir = "El resultado debe estar en " + DetectarIdioma(TextoACorregir) + ". " + Instrucciones + "\"" + TextoACorregir + "\"";
VolverAUltimaAplicaicon(); // Hacer ALT-TAB
var Respuesta = await CallOpenAiApi(TextoACorregir);
// Elimina comillas al principio y al final si existen
Respuesta = Respuesta.Trim('\"');
resultTextBox.Text = Respuesta;
Clipboard.SetText(Respuesta);
// Mostrar notificación
_notifier.ShowInformation("La respuesta está lista.");
statusTextBox.Text = "Respuesta recibida.";
NotifyUserWithCursor();
// Configurar y comenzar el temporizador para cerrar la aplicación
DispatcherTimer closeTimer = new DispatcherTimer
{
Interval = TimeSpan.FromSeconds(10) // Establece el intervalo a 5 segundos
};
closeTimer.Tick += CloseTimer_Tick; // Suscribirse al evento Tick
closeTimer.Start();
}
private async void ExecuteButton_Click(object sender, RoutedEventArgs e)
{
CorregirTexto();
}
private async Task<string> CallOpenAiApi(string input)
{
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {openAiApiKey}");
var requestData = new
{
model = "gpt-4",
messages = new[]
{
new { role = "system", content = "Este es un mensaje del sistema inicializando la conversación" },
new { role = "user", content = input }
}
};
var content = new StringContent(JsonConvert.SerializeObject(requestData), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("https://api.openai.com/v1/chat/completions", content);
response.EnsureSuccessStatusCode();
var jsonResponse = await response.Content.ReadAsStringAsync();
dynamic data = JsonConvert.DeserializeObject(jsonResponse);
return data.choices[0].message.content;
}
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (CB_ListaInstrucciones.SelectedItem != null)
{
var selectedItem = CB_ListaInstrucciones.SelectedItem.ToString();
// Actualizar modifiableTextBox
TB_Instrucciones.Text = selectedItem;
}
}
private void LoadComboBoxItems()
{
try
{
var lines = File.ReadAllLines(instruccionesCSV);
foreach (var line in lines)
{
CB_ListaInstrucciones.Items.Add(line);
}
if (CB_ListaInstrucciones.Items.Count > 0)
{
CB_ListaInstrucciones.SelectedIndex = CB_ListaInstrucciones.Items.Count - 1;
}
}
catch (FileNotFoundException)
{
CB_ListaInstrucciones.Items.Add("Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor: ");
CB_ListaInstrucciones.SelectedIndex = 0;
}
}
protected override void OnClosed(EventArgs e)
{
statusTextBox.Text = "Guardando cambios...";
_notifier.Dispose();
base.OnClosed(e);
SaveComboBoxItems();
}
private void SaveComboBoxItems()
{
var lines = new List<string>();
foreach (var item in CB_ListaInstrucciones.Items)
{
lines.Add(item.ToString());
}
File.WriteAllLines(instruccionesCSV, lines);
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
_notifier = new Notifier(cfg =>
{
cfg.PositionProvider = new PrimaryScreenPositionProvider(
corner: Corner.BottomRight, // Puedes cambiar esto a la esquina que prefieras
offsetX: 10,
offsetY: 10);
cfg.LifetimeSupervisor = new TimeAndCountBasedLifetimeSupervisor(
notificationLifetime: TimeSpan.FromSeconds(3),
maximumNotificationCount: MaximumNotificationCount.FromCount(5));
cfg.Dispatcher = Application.Current.Dispatcher;
});
LoadClipboardContent();
LoadComboBoxItems();
}
private void CloseTimer_Tick(object sender, EventArgs e)
{
DispatcherTimer timer = (DispatcherTimer)sender;
timer.Stop(); // Detener el temporizador
timer.Tick -= CloseTimer_Tick; // Desuscribirse del evento
this.Close(); // Cerrar la ventana actual
}
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}
}
}

58
instrucciones.csv Normal file
View File

@ -0,0 +1,58 @@
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
Texto por defecto
Texto por defecto
Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
1 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
2 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
3 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
4 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
5 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
6 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
7 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
8 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
9 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
10 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
11 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
12 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
13 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
14 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
15 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
16 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
17 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
18 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
19 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
20 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
21 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
22 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
23 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
24 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
25 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
26 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
27 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
28 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
29 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
30 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
31 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
32 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
33 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
34 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
35 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
36 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
37 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
38 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
39 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
40 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
41 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
42 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
43 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
44 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
45 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
46 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
47 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
48 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
49 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
50 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
51 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
52 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
53 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
54 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor:
55 Texto por defecto
56 Texto por defecto
57 Me puedes corregir el siguiente texto y mejorarlo para que se comprenda mejor: