#pragma once
#include <cstdio> // FILE
#include <cstdarg> // va_list
#include <ostream> // std::ostream
namespace heha{
enum{
cNaN =-0x80, // richtiger wäre die „Erweiterung“ von std::limits<>
cInf = 0x7F, // Annahme: -fsigned-char
iNaN =-0x8000, // hier: Integer = 16 Bit (kommt vom 8-Bit-µC)
iInf = 0x7FFF,
lNaN =-0x80000000,
lInf = 0x7FFFFFFF,
};
// Stringlänge in Codepoints
int utf8len(const char*,int=-1);
// Zeichenzeiger in Codepoints vor- oder zurückrücken
// Zeiger muss in gültigen UTF8-String, auf ASCII- oder Leadbyte zeigen!
const char*utf8pos(const char*,int);
// Darstellungsbreite im Terminal berechnen,
// sonst wäre die Feldbreite komplett nonsense.
// Braucht man v.a. für tabellarische Ausgabe.
// Beachtet gängige Escape-Sequenzen.
int utf8width(const char*,int=-1);
// heha::print() für jedes Ausgabeziel geeignet
struct Out{
virtual void operator()(char) = 0; // abstrakt!
int count;
Out():count(0) {}
};
// Zur Anwendung muss <out> von <Out> vererbt sein
void print(Out&out, const char*fmt,va_list);
int vprint(const char*,va_list);
int vprint(FILE*,const char*,va_list);
int vprint(int,const char*,va_list);
int vprint(std::ostream&,const char*,va_list);
int snvprint(char*, int, const char*,va_list);
// Formatierte Ausgabe für die üblichen Ausgabekanäle
// Der Returnwert ist die Anzahl der Bytes, nicht der UTF8-Zeichen.
int print(const char*,...);
int print(FILE*,const char*,...);
int print(int,const char*,...);
int print(std::ostream&,const char*,...);
int snprint(char*, int, const char*,...);
}
Detected encoding: UTF-8 | 0
|