5 Commits b4ec1cff02 ... 07f4513777

Autor SHA1 Mensagem Data
  David 'Judah's Shadow' Blue 07f4513777 Adding descriptions to module lists. Cut out some "middle-man" processing and just return a list so we don't have to tokenize it now. 9 anos atrás
  David 'Judah's Shadow' Blue a4d334e412 Prevent "" from being in the list of tokens rather than having to ignore them later. They seem to occur at the front and back of the lists so this also prevents double free crashes. 9 anos atrás
  David 'Judah's Shadow' Blue b4e2b30f2a Move the page count into the loop unwinding the text so that the last page doesn't make you press enter to get back to the prompt. 9 anos atrás
  David 'Judah's Shadow' Blue 9917eb7e53 Pages are now structs with content (the page) and linecount so the spacing works correctly for pages that don't take the whole screen. 9 anos atrás
  David 'Judah's Shadow' Blue 6680bbadaf Refactoring more. Pages are now a string to reduce the amount of processing, pages are now printed to the screen all in one go. The current side effect though is there isn't a good way to get a line count. Fixing that later. 9 anos atrás
6 arquivos alterados com 52 adições e 41 exclusões
  1. 15 10
      src/back/library.cpp
  2. 3 1
      src/back/library.h
  3. 4 2
      src/back/parser.cpp
  4. 9 1
      src/back/types.h
  5. 7 11
      src/front/interface.cpp
  6. 14 16
      src/front/pager.cpp

+ 15 - 10
src/back/library.cpp

@@ -21,30 +21,35 @@
 #include "library.h"
 #include "library.h"
 
 
 #include <string>
 #include <string>
+#include <list>
 
 
 #include <swmgr.h>
 #include <swmgr.h>
 #include <swmodule.h>
 #include <swmodule.h>
 
 
-std::string Library::getBibles() {
-    std::string moduleList = "";
-    std::string bibleType = "Biblical Texts";
-    std::string moduleType = "";
+std::list<std::string> Library::getBibles() {
+    std::string modules = "";
+    std::string module = "";
     sword::ModMap::iterator libraryIterator;
     sword::ModMap::iterator libraryIterator;
+    std::list<std::string> bibleList;
+    std::string modType;
 
 
     for(libraryIterator = swordLibrary->Modules.begin();
     for(libraryIterator = swordLibrary->Modules.begin();
             libraryIterator != swordLibrary->Modules.end();
             libraryIterator != swordLibrary->Modules.end();
             libraryIterator++) {
             libraryIterator++) {
 
 
         sword::SWModule *tempMod = libraryIterator->second;
         sword::SWModule *tempMod = libraryIterator->second;
-        moduleType = tempMod->getType();
-
-        if(moduleType == bibleType) {
-            moduleList += tempMod->getName();
-            moduleList += " ";
+        modType = tempMod->getType();
+
+        if(modType == sword::SWMgr::MODTYPE_BIBLES) {
+            module = tempMod->getDescription();
+            module += " - ";
+            module += tempMod->getName();
+            bibleList.push_front(module);
+            module = "";
         }
         }
     }
     }
 
 
-    return moduleList;
+    return bibleList;
 }
 }
 
 
 void Library::setSwordLibrary(sword::SWMgr *library) {
 void Library::setSwordLibrary(sword::SWMgr *library) {

+ 3 - 1
src/back/library.h

@@ -22,12 +22,14 @@
 #define LIBRARY_H
 #define LIBRARY_H
 
 
 #include <string>
 #include <string>
+#include <list>
+
 #include <swmgr.h>
 #include <swmgr.h>
 
 
 class Library {
 class Library {
     public:
     public:
         //returns a space separated list of bibles in the current sword library
         //returns a space separated list of bibles in the current sword library
-        std::string getBibles();
+        std::list<std::string> getBibles();
 
 
         void setSwordLibrary(sword::SWMgr *library);
         void setSwordLibrary(sword::SWMgr *library);
     private:
     private:

+ 4 - 2
src/back/parser.cpp

@@ -103,8 +103,10 @@ std::list<std::string> Parser::split(std::string string) {
       std::string token;
       std::string token;
       std::getline(tokenStream, token, ' ');
       std::getline(tokenStream, token, ' ');
 
 
-      // do this even if we've already seen EOF.
-      parts.push_back(token);
+      // do this even if we've already seen EOF. unless token is ""
+      if( token != "") {
+          parts.push_back(token);
+      }
   }
   }
 
 
   return parts;
   return parts;

+ 9 - 1
src/back/types.h

@@ -27,9 +27,17 @@
 //Keep this around in case it is decided to keep lines as lists of words
 //Keep this around in case it is decided to keep lines as lists of words
 //instead of a block of text
 //instead of a block of text
 // typedef std::list<std::string> line;
 // typedef std::list<std::string> line;
+// typedef std::list<line> page;
 
 
 typedef std::string line;
 typedef std::string line;
-typedef std::list<line> page;
+struct Page {
+    int lineCount;
+    line content;
+};
+
+typedef Page page;
+
+
 
 
 //convience type so the project doesn't have to depend on glibc
 //convience type so the project doesn't have to depend on glibc
 typedef unsigned int uint;
 typedef unsigned int uint;

+ 7 - 11
src/front/interface.cpp

@@ -128,20 +128,17 @@ std::string Interface::processCommand(std::string command) {
 
 
         textPager.setSize(display.getSize());
         textPager.setSize(display.getSize());
         pagedText = textPager.getPagedText(text);
         pagedText = textPager.getPagedText(text);
-        numPages = pagedText.size();
 
 
         while(!pagedText.empty()) {
         while(!pagedText.empty()) {
-            curPage = pagedText.front();
             displayText = "";
             displayText = "";
-            numLines = curPage.size();
-            while(!curPage.empty()) {
-                curLine = curPage.front();
-                displayText += curLine;
-                curPage.pop_front();
-            }
-            pagedText.pop_front();
+            curPage = pagedText.front();
+            displayText = curPage.content;
+            numLines = curPage.lineCount;
+            numPages = pagedText.size();
+
             std::cout << displayText;
             std::cout << displayText;
             display.displaySpacer(numLines);
             display.displaySpacer(numLines);
+            pagedText.pop_front();
             if(numPages > 1) {
             if(numPages > 1) {
                 std::string dummy = "";
                 std::string dummy = "";
                 std::cout << "Press enter for next page";
                 std::cout << "Press enter for next page";
@@ -158,8 +155,7 @@ std::string Interface::processCommand(std::string command) {
         int numBibles = 0;
         int numBibles = 0;
 
 
         library.setSwordLibrary(swordLibrary);
         library.setSwordLibrary(swordLibrary);
-        tempBibles = library.getBibles();
-        bibles = worksParser.tokenize(tempBibles);
+        bibles = library.getBibles();
 
 
         if(bibles.empty()) {
         if(bibles.empty()) {
             std::cerr <<  "No bibles found, please install in another frontend";
             std::cerr <<  "No bibles found, please install in another frontend";

+ 14 - 16
src/front/pager.cpp

@@ -58,13 +58,6 @@ std::list<page> Pager::getPagedText(std::string text) {
         currentWord = words.front();
         currentWord = words.front();
         words.pop_front();
         words.pop_front();
 
 
-        if(currentWord == "") {
-            //We've got an empty word sometimes at the beginning of a passage
-            //ignore it and get the next one
-            currentWord = words.front();
-            words.pop_front();
-        }
-
         //Newlines appear within words and not always at EOL, so find them and
         //Newlines appear within words and not always at EOL, so find them and
         //act accordingly.
         //act accordingly.
         if(currentWord.find("\n") != std::string::npos) {
         if(currentWord.find("\n") != std::string::npos) {
@@ -74,7 +67,7 @@ std::list<page> Pager::getPagedText(std::string text) {
                 //we've not got an EOL newline, so we need to split it again :/
                 //we've not got an EOL newline, so we need to split it again :/
                 std::string preEndl = currentWord.substr(0, endlPos);
                 std::string preEndl = currentWord.substr(0, endlPos);
                 currentLine += preEndl + "\n";
                 currentLine += preEndl + "\n";
-                currentPage.push_back(currentLine);
+                currentPage.content += currentLine;
                 currentLine = "";
                 currentLine = "";
                 colCount = 0;
                 colCount = 0;
                 lineCount++;
                 lineCount++;
@@ -104,11 +97,11 @@ std::list<page> Pager::getPagedText(std::string text) {
             currentWord = "";
             currentWord = "";
             if(newLineCount > 0) {
             if(newLineCount > 0) {
                 currentLine += "\n";
                 currentLine += "\n";
-                currentPage.push_back(currentLine);
+                currentPage.content += currentLine;
                 currentLine = "";
                 currentLine = "";
                 if(newLineCount > 1) {
                 if(newLineCount > 1) {
                     currentLine += "\n";
                     currentLine += "\n";
-                    currentPage.push_back(currentLine);
+                    currentPage.content +=currentLine;
                     currentLine = "";
                     currentLine = "";
                 }
                 }
                 lineCount += newLineCount;
                 lineCount += newLineCount;
@@ -117,7 +110,7 @@ std::list<page> Pager::getPagedText(std::string text) {
             //TODO: Do stuff about words that are by themselves longer than
             //TODO: Do stuff about words that are by themselves longer than
             //TODO: the width.
             //TODO: the width.
             currentLine += "\n";
             currentLine += "\n";
-            currentPage.push_back(currentLine);
+            currentPage.content += currentLine;
             currentLine = "";
             currentLine = "";
             currentLine += currentWord + " ";
             currentLine += currentWord + " ";
             colCount = currentWord.length() + 1;
             colCount = currentWord.length() + 1;
@@ -125,22 +118,27 @@ std::list<page> Pager::getPagedText(std::string text) {
         }
         }
 
 
         if(lineCount >= pageSize - 3) {
         if(lineCount >= pageSize - 3) {
+            currentPage.lineCount = lineCount;
             pagedText.push_back(currentPage);
             pagedText.push_back(currentPage);
-            currentPage.clear();
+            currentPage.content = "";
             lineCount = 0;
             lineCount = 0;
+            currentPage.lineCount = lineCount;
         }
         }
     }
     }
 
 
     //Check to see if we have any lines that didn't get pushed and flush them in
     //Check to see if we have any lines that didn't get pushed and flush them in
-    if(currentLine.size() > 0) {
-        currentPage.push_back(currentLine);
+    if(currentLine.length() > 0) {
+        currentPage.content += currentLine + "\n";
         currentLine = "";
         currentLine = "";
+        lineCount++;
     }
     }
 
 
-    if(currentPage.size() > 0) {
+    if(currentPage.content.length() > 0) {
+        currentPage.lineCount = lineCount;
         pagedText.push_back(currentPage);
         pagedText.push_back(currentPage);
-        currentPage.clear();
+        currentPage.content = "";
         lineCount = 0;
         lineCount = 0;
+        currentPage.lineCount = lineCount;
     }
     }
 
 
     return pagedText;
     return pagedText;