okular PDF görüntüleyici çift tıklama ile seçim

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
23,686
Linux'ta yaygın kullanılan bir PDF görüntüleyici olan okular kullanarak bir işlemci dokümanından register isimlerini kopyalayıp ghidra'ya aktarmaya çalışıyordum. Register ismi üzerine çift tıklayıp copy/paste yapıyordum. Ama dokümanda register isimlerinin etrafında bazan normal parantez, bazan köşeli, bazan da farklı bir parantez oluyor. Her seferinde seçilen bölgeyi ayarlamam gerekiyordu. Yüzlerce register var aktarılması gereken, yeterince canımı sıktı ve bu konuda birşey yapmaya karar verdim.

Okular ve bağımlı olduğu bütün kütüphanelerin kaynak kodlarını ve debug sembollerini indirdim. Sonra da okular'da "double click" işinin gereğini yapan fonksiyonu araştırdım ilgili fonksiyonu bulup analiz ettim. Benim tanımladığım bir listedeki karakterleri de "delimiter" olarak kabul edecek şekilde değiştirdim. Başkasının da işini yarayabilir o yüzden yaptığım değişikliği paylaşıyorum. Benim kullandığım okular 23.08.11, ama değişikliğin mantığı basit, başka sürümlere de uyarlanabilir.

Kod:
diff --git a/core/textpage.cpp b/core/textpage.cpp
index 0693fcf..39470c3 100644
--- a/core/textpage.cpp
+++ b/core/textpage.cpp
@@ -1775,6 +1775,23 @@ TextEntity::List TextPage::words(const RegularAreaRect *area, TextAreaInclusionB
     return ret;
 }
 
+static char delimiters[] = {'[', ']', '(', ')', '{', '}'};
+
+static bool is_delimiter(const QChar& c, const char* delim, unsigned int count)
+{
+    bool rc = false;
+
+    for (unsigned int i = 0; i < count; ++i)
+    {
+        if (c.toLatin1() == delim[i])
+        {
+            rc = true;
+        }
+    }
+
+    return rc;
+}
+
 RegularAreaRect *TextPage::wordAt(const NormalizedPoint &p, QString *word) const
 {
     TextList::ConstIterator itBegin = d->m_words.constBegin(), itEnd = d->m_words.constEnd();
@@ -1795,7 +1812,8 @@ RegularAreaRect *TextPage::wordAt(const NormalizedPoint &p, QString *word) const
         while (posIt != itBegin) {
             --posIt;
             const QString itText = (*posIt)->text();
-            if (itText.right(1).at(0).isSpace()) {
+            if (itText.right(1).at(0).isSpace() ||
+                    is_delimiter(itText.right(1).at(0), delimiters, sizeof(delimiters))) {
                 if (itText.endsWith(QLatin1String("-\n"))) {
                     // Is an hyphenated word
                     // continue searching the start of the word back
@@ -1819,7 +1837,8 @@ RegularAreaRect *TextPage::wordAt(const NormalizedPoint &p, QString *word) const
         RegularAreaRect *ret = new RegularAreaRect();
         for (; posIt != itEnd; ++posIt) {
             const QString itText = (*posIt)->text();
-            if (itText.simplified().isEmpty()) {
+            if (itText.simplified().isEmpty() ||
+                is_delimiter(itText.simplified().right(1).at(0), delimiters, sizeof(delimiters))) {
                 break;
             }
 
Son düzenleme:
Daha önce register ismi parantezler dahil olarak seçiliyordu çift tıklayınca, şimdi sadece parantez içi seçiliyor

1729364113837.png
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,759
Mesajlar
115,260
Üyeler
2,761
Son üye
ekin

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Back
Top