-
Notifications
You must be signed in to change notification settings - Fork 0
/
borrar.c
104 lines (90 loc) · 3.48 KB
/
borrar.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
* Se borra el último elemento de ambas partes: texto y braille.
* Consideraciones especiales para signos que ocupan dos chars y
* para signos que hay que borrar juntos.
*/
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "modules.h"
extern const char *diacríticos[];
int borrar(char *textoBrai, char *texto, bool *NUMERAL, bool *MAYUS) {
if (textoBrai[strlen(textoBrai)-1] == '\n' || textoBrai[strlen(textoBrai)-1] == '\t') {
// Para borrar tabulación o salto solo se borra el último char
textoBrai[strlen(textoBrai)-1] = '\0';
}
else { // Caracteres braille requieren borrar 3 chars
if ( ! strcmp(textoBrai + (strlen(textoBrai)-3), "⠨")){ //se borra mayus
*MAYUS = false;
for (int i=0; i < 3; i++) {
textoBrai[strlen(textoBrai)-1] = '\0';
}
if ( isdigit(texto[strlen(texto)-1]) ){
// si había nums antes de mayus
// se regresa a seguir escribiendo nums.
*NUMERAL = true;
}
return 0;
}
else if ( ! strcmp(textoBrai + (strlen(textoBrai)-3), "⠼")) { //se borra numeral
if ( ! isdigit(texto[strlen(texto)-1])) {
// Previene un error molesto por descuido
*NUMERAL = false;
}
for (int i=0; i < 3; i++) {
textoBrai[strlen(textoBrai)-1] = '\0';
}
return 0;
} else if (
( ! strcmp(textoBrai + (strlen(textoBrai)-3), "⠐")) && // Punto 5
isdigit(texto[strlen(texto)-1]) // usado como separador de nums
) {
for (int i=0; i <3; i++) {
textoBrai[strlen(textoBrai)-1] = '\0';
}
*NUMERAL = true;
return 0;
}
for (int i=0; i <3; i++) {
textoBrai[strlen(textoBrai)-1] = '\0';
}
}
// Si después de borrar el último caracter braille quedó un s. numeral o de mayus:
if ( ! strcmp(textoBrai + (strlen(textoBrai)-3), "⠨") ) {//mayus
*MAYUS = false;
for (int i=0; i <3; i++) {
textoBrai[strlen(textoBrai)-1] = '\0';
}
} else if ( ! strcmp(textoBrai + (strlen(textoBrai)-3), "⠼")) { // Numeral
*NUMERAL = false;
}
// Se borra también el texto normal
// Primero el caracter de reemplazo para signo desconocido '�':
if ( ! strcmp(texto + (strlen(texto)-3), "�") ) {
for (int i=0; i<2; i++)
texto[strlen(texto)-1] = '\0';
}
for (int i=0; i<14; i++) {
// los signos diacríticos de interpretan como dos caracteres, se comparan como string
if ( ! strcmp(texto + (strlen(texto)-2), diacríticos[i]) ) {
texto[strlen(texto)-1] = '\0';
}
}
texto[strlen(texto)-1] = '\0';
// Si después de borrar ambas partes quedó un punto 5 como separador, se borra.
if (
( ! strcmp(textoBrai + (strlen(textoBrai)-3), "⠐")) && // Punto 5
texto[strlen(texto)-1] != '@' // no usado como '@'
) {
for (int i=0; i <3; i++) {
textoBrai[strlen(textoBrai)-1] = '\0';
}
*NUMERAL = true;
}
if ( isdigit(texto[strlen(texto)-1]) && // Si hay un número al final
( strcmp(textoBrai + (strlen(textoBrai)-3), "⠐")) && // Y no hay signo de mayus o separador
( strcmp(textoBrai + (strlen(textoBrai)-3), "⠨")) ) {
*NUMERAL = true;
}
return 0;
};