Separated text processing functions

This commit is contained in:
Karlis Goba 2018-10-24 10:35:06 +03:00
parent 27c0f0c42d
commit 95153e6de0
5 changed files with 68 additions and 48 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
*.o *.o
gen_ft8

View file

@ -1,5 +1,5 @@
CXXFLAGS = -std=c++14 CXXFLAGS = -std=c++14
LDFLAGS = -lm LDFLAGS = -lm
gen_ft8: gen_ft8.o encode.o pack.o gen_ft8: gen_ft8.o encode.o pack.o text.o
$(CXX) $(LDFLAGS) -o $@ $^ $(CXX) $(LDFLAGS) -o $@ $^

View file

@ -2,57 +2,11 @@
#include <cstdio> #include <cstdio>
#include "pack.h" #include "pack.h"
#include "text.h"
constexpr int32_t NBASE = 37*36*10*27*27*27L; constexpr int32_t NBASE = 37*36*10*27*27*27L;
constexpr int32_t NGBASE = 180*180L; constexpr int32_t NGBASE = 180*180L;
// Utility functions for characters and strings
char to_upper(char c) {
return (c >= 'a' && c <= 'z') ? (c - 'a' + 'A') : c;
}
bool is_digit(char c) {
return (c >= '0') && (c <= '9');
}
bool is_letter(char c) {
return ((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z'));
}
bool is_space(char c) {
return (c == ' ');
}
bool starts_with(const char *string, const char *prefix) {
return 0 == memcmp(string, prefix, strlen(prefix));
}
bool equals(const char *string1, const char *string2) {
return 0 == strcmp(string1, string2);
}
// Text message formatting:
// - replaces lowercase letters with uppercase
// - merges consecutive spaces into single space
void fmtmsg(char *msg_out, const char *msg_in) {
char c;
char last_out = 0;
while ( (c = *msg_in) ) {
if (c != ' ' || last_out != ' ') {
last_out = to_upper(c);
*msg_out = last_out;
++msg_out;
}
++msg_in;
}
*msg_out = 0; // Add zero termination
}
// Returns integer encoding of a character (number/digit/space). // Returns integer encoding of a character (number/digit/space).
// Alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./?" // Alphabet: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ +-./?"
// - Digits are encoded as 0..9 // - Digits are encoded as 0..9

51
text.cpp Normal file
View file

@ -0,0 +1,51 @@
#include "text.h"
#include <string.h>
// Utility functions for characters and strings
char to_upper(char c) {
return (c >= 'a' && c <= 'z') ? (c - 'a' + 'A') : c;
}
bool is_digit(char c) {
return (c >= '0') && (c <= '9');
}
bool is_letter(char c) {
return ((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z'));
}
bool is_space(char c) {
return (c == ' ');
}
bool in_range(char c, char min, char max) {
return (c >= min) && (c <= max);
}
bool starts_with(const char *string, const char *prefix) {
return 0 == memcmp(string, prefix, strlen(prefix));
}
bool equals(const char *string1, const char *string2) {
return 0 == strcmp(string1, string2);
}
// Text message formatting:
// - replaces lowercase letters with uppercase
// - merges consecutive spaces into single space
void fmtmsg(char *msg_out, const char *msg_in) {
char c;
char last_out = 0;
while ( (c = *msg_in) ) {
if (c != ' ' || last_out != ' ') {
last_out = to_upper(c);
*msg_out = last_out;
++msg_out;
}
++msg_in;
}
*msg_out = 0; // Add zero termination
}

14
text.h Normal file
View file

@ -0,0 +1,14 @@
#pragma once
char to_upper(char c);
bool is_digit(char c);
bool is_letter(char c);
bool is_space(char c);
bool in_range(char c, char min, char max);
bool starts_with(const char *string, const char *prefix);
bool equals(const char *string1, const char *string2);
// Text message formatting:
// - replaces lowercase letters with uppercase
// - merges consecutive spaces into single space
void fmtmsg(char *msg_out, const char *msg_in);