C11 veya C++ 11'de yazılan uygulamalar için alternatif bir çözüm, Unicode combining long stroke overlay karakterini kullanmaktır.
#include <iostream>
#include <string>
std::string strikethrough(const std::string& text) {
std::string result;
for (auto ch : text) {
result.append(u8"\u0336");
result.push_back(ch);
}
return result;
}
int main() {
std::cout << strikethrough("strikethrough") << std::endl;
}
kod inme bindirme \u0336
ile giriş text
her karakteri önek:
C++ 11 yılında böyle kod şey yazabilir. Işlevinin, text
'un ASCII veya Latin gibi bir tek kodlu kodlamayla kodlandığını varsayar. Giriş UTF-8 ise, karakter sınırlarını almak için önce UTF-32'ye dönüştürülmelidir.
Bu çıktı, UTF-8 özellikli bir terminalde s̶t̶r̶i̶k̶e̶t̶h̶r̶o̶u̶g̶h
'dir. İlk karakterin neden çarpmadığını bilmiyorum, bir uçbirim sorunu olmalı. Üstü açılmış işlev çağrısından önce en az bir karakter yazdırarak bu konuda çalışabilirim.
Unicode çözümü ayrıca, terminalimde (terminator
) yukarıda bahsedilen ANSI çıkış dizisine kıyasla biraz farklı bir kilitleme oluşturur. Birincisi çizgiyi tam olarak metnin ortasına yerleştirir, ikincisi ise onu biraz aşağıda işler.
'libvterm' /' pangoterm' bunu gayet iyi yapabilir. [Link] 'deki ikinci ekran görüntüsüne bakın (http://leonerds-code.blogspot.com/2011/09/libvtermpangoterm-and-tickit.html) – LeoNerd
Aslında büyük kabuk terminalinin iyi bir takımı onu destekliyor gibi görünüyor. "guake", "terminatör", "gnome-terminal", ...). http://misc.flogisoft.com/bash/tip_colors_and_formatting#terminals_compatibility. Hızlı test: "echo -e" \ e [9mtest \ e [0m "' '. – vaab