mirror of
https://github.com/markdavidlong/AppleSAWS.git
synced 2025-02-11 08:30:26 +00:00
Added new ApplesoftFormatter and moved formatting functionality there.
This commit is contained in:
parent
2f7845229d
commit
808cbc32c5
@ -32,7 +32,8 @@ SOURCES += \
|
||||
src/ui/catalogwidget.cxx \
|
||||
src/ui/mainwindow.cxx \
|
||||
src/ui/viewers/hiresviewwidget.cxx \
|
||||
src/ui/viewers/applesoftfileviewer.cxx
|
||||
src/ui/viewers/applesoftfileviewer.cxx \
|
||||
src/applesoftfile/applesoftformatter.cxx
|
||||
|
||||
HEADERS += \
|
||||
src/diskfiles/dos33/diskfile.h \
|
||||
@ -51,7 +52,8 @@ HEADERS += \
|
||||
src/ui/catalogwidget.h \
|
||||
src/ui/mainwindow.h \
|
||||
src/ui/viewers/hiresviewwidget.h \
|
||||
src/ui/viewers/applesoftfileviewer.h
|
||||
src/ui/viewers/applesoftfileviewer.h \
|
||||
src/applesoftfile/applesoftformatter.h
|
||||
|
||||
FORMS += \
|
||||
src/ui/catalogwidget.ui \
|
||||
|
@ -3,8 +3,6 @@
|
||||
|
||||
ApplesoftFile::ApplesoftFile(QByteArray data) : GenericFile(data)
|
||||
{
|
||||
|
||||
|
||||
if (!data.isEmpty())
|
||||
{
|
||||
setData(data);
|
||||
@ -19,12 +17,13 @@ void ApplesoftFile::setData(QByteArray data)
|
||||
quint8 addhi = m_data.at(1);
|
||||
m_length = addlo + (addhi * 256);
|
||||
m_data.remove(0,2);
|
||||
m_detokenized = detokenize();
|
||||
parse();
|
||||
// m_detokenized = detokenize();
|
||||
}
|
||||
|
||||
QList<ApplesoftLine> ApplesoftFile::detokenize(quint16 start_address)
|
||||
void ApplesoftFile::parse(quint16 start_address)
|
||||
{
|
||||
QList<ApplesoftLine> retval;
|
||||
// QList<ApplesoftLine> retval;
|
||||
|
||||
int idx = 0;
|
||||
quint8 val = 0;
|
||||
@ -44,50 +43,10 @@ QList<ApplesoftLine> ApplesoftFile::detokenize(quint16 start_address)
|
||||
val = m_data[idx++];
|
||||
ApplesoftToken token(val);
|
||||
line.tokens.append(token);
|
||||
// line.raw_tokens.append(val);
|
||||
|
||||
// if (val >= 0x80) {
|
||||
// // line.detokenized_line.append("~");
|
||||
// line.detokenized_line.append(m_tokens[val]);
|
||||
// } else {
|
||||
// if (val >= 0x20) {
|
||||
// line.detokenized_line.append(val);
|
||||
// } else if (val == 0x7F) {
|
||||
// QChar ch = QChar(0x2401);
|
||||
// line.detokenized_line.append(ch);
|
||||
// }else if (val > 0x00) {
|
||||
// QChar ch = QChar(0x2400 + val);
|
||||
// line.detokenized_line.append(ch);
|
||||
// }
|
||||
// }
|
||||
} while (val != 0x00);
|
||||
|
||||
Retokenizer::retokenize(line);
|
||||
|
||||
//Make Detokenized line
|
||||
foreach (ApplesoftToken token, line.tokens) {
|
||||
quint16 tokenval = token.getTokenId();
|
||||
line.detokenized_line.append(token.getRawPrintableString());
|
||||
// if (tokenval >= 0x80 && tokenval < 0xFE) {
|
||||
// line.detokenized_line.append("{kwd}");
|
||||
// } else if (tokenval >= 0xF0) {
|
||||
// line.detokenized_line.append(ApplesoftToken::getStringForToken(tokenval));
|
||||
// } else {
|
||||
// if (tokenval >= 0x20) {
|
||||
// line.detokenized_line.append(tokenval);
|
||||
// } else if (tokenval == 0x7F) {
|
||||
// QChar ch = QChar(0x2401);
|
||||
// line.detokenized_line.append(ch);
|
||||
// }else if (tokenval > 0x00) {
|
||||
// QChar ch = QChar(0x2400 + tokenval);
|
||||
// line.detokenized_line.append(ch);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
current_address = line.next_address;
|
||||
retval.append(line);
|
||||
m_lines.append(line);
|
||||
}
|
||||
|
||||
m_data_end = idx;
|
||||
@ -95,25 +54,6 @@ QList<ApplesoftLine> ApplesoftFile::detokenize(quint16 start_address)
|
||||
if (idx < m_data.length()) {
|
||||
qDebug() << QString("%1 byte(s) unaccounted for.").arg(m_data.length() - idx);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
void ApplesoftFile::list() {
|
||||
foreach (ApplesoftLine line,detokenized()) {
|
||||
QString debugline = QString("%1 %2 %3").arg(line.next_address,4,16,QChar('0')).arg(line.linenum).arg(line.detokenized_line);
|
||||
qDebug() << debugline;
|
||||
/*
|
||||
debugline = "";
|
||||
foreach (quint8 val, line.tokens) {
|
||||
debugline.append(QString("%1 ").arg(val,2,16,QChar('0')));
|
||||
}
|
||||
qDebug() << " " << debugline;
|
||||
qDebug() << "\n";
|
||||
*/
|
||||
}
|
||||
|
||||
qDebug() << extraDataHexValues().join("\n");
|
||||
}
|
||||
|
||||
QStringList ApplesoftFile::extraDataHexValues() {
|
||||
|
@ -14,9 +14,7 @@ struct ApplesoftLine {
|
||||
quint16 next_address;
|
||||
quint16 linenum;
|
||||
QVector<ApplesoftToken> tokens;
|
||||
// QByteArray raw_tokens;
|
||||
// QByteArray advanced_tokens;
|
||||
QString detokenized_line;
|
||||
// QString detokenized_line;
|
||||
};
|
||||
|
||||
|
||||
@ -25,17 +23,23 @@ class ApplesoftFile : public GenericFile
|
||||
public:
|
||||
ApplesoftFile(QByteArray data = QByteArray());
|
||||
void setData(QByteArray data);
|
||||
void setFilename(QString filename) { m_filename = filename; }
|
||||
QByteArray extraData();
|
||||
QList<ApplesoftLine> detokenized() { return m_detokenized; }
|
||||
void list();
|
||||
// QList<ApplesoftLine> detokenized() { return m_detokenized; }
|
||||
QStringList extraDataHexValues();
|
||||
|
||||
private:
|
||||
QList<ApplesoftLine> detokenize(quint16 start_address = 0x0801);
|
||||
QVector<ApplesoftLine> getLines() const { return m_lines; }
|
||||
|
||||
QString filename() const { return m_filename; }
|
||||
|
||||
private:
|
||||
void parse(quint16 start_address = 0x0801);
|
||||
|
||||
QVector<ApplesoftLine> m_lines;
|
||||
int m_data_end;
|
||||
quint16 m_length;
|
||||
QList<ApplesoftLine> m_detokenized;
|
||||
QString m_filename;
|
||||
// QList<ApplesoftLine> m_detokenized;
|
||||
|
||||
friend class Retokenizer;
|
||||
};
|
||||
|
45
src/applesoftfile/applesoftformatter.cxx
Normal file
45
src/applesoftfile/applesoftformatter.cxx
Normal file
@ -0,0 +1,45 @@
|
||||
#include "applesoftformatter.h"
|
||||
|
||||
ApplesoftFormatter::ApplesoftFormatter(QObject *parent) :
|
||||
QObject(parent)
|
||||
{
|
||||
m_file = 0;
|
||||
}
|
||||
|
||||
void ApplesoftFormatter::setFile(ApplesoftFile *file)
|
||||
{
|
||||
m_file = file;
|
||||
emit newFile(file);
|
||||
}
|
||||
|
||||
QString ApplesoftFormatter::formatText()
|
||||
{
|
||||
if (!m_file) {
|
||||
return ("No File");
|
||||
}
|
||||
|
||||
QString retval;
|
||||
foreach (ApplesoftLine line, m_file->getLines()) {
|
||||
QString linestring = QString("%1 ").arg(line.linenum,5,10,QChar(' '));
|
||||
retval.append(linestring);
|
||||
foreach (ApplesoftToken token, line.tokens) {
|
||||
QString tokenstr = token.getRawPrintableString();
|
||||
|
||||
if (m_format_options.testFlag(ShowCtrlChars)) {
|
||||
tokenstr.replace(QChar(0x7f),QChar(0x2401));
|
||||
|
||||
for (int idx = 1; idx <= 0x1f; idx++) {
|
||||
tokenstr.replace(QChar(idx),QChar(idx+0x2400));
|
||||
}
|
||||
}
|
||||
|
||||
if (m_format_options.testFlag(BreakAfterReturn)) {
|
||||
tokenstr.replace("RETURN","RETURN\n");
|
||||
}
|
||||
|
||||
retval.append(tokenstr);
|
||||
}
|
||||
retval.append("\n");
|
||||
}
|
||||
return retval;
|
||||
}
|
44
src/applesoftfile/applesoftformatter.h
Normal file
44
src/applesoftfile/applesoftformatter.h
Normal file
@ -0,0 +1,44 @@
|
||||
#ifndef APPLESOFTFORMATTER_H
|
||||
#define APPLESOFTFORMATTER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QFlags>
|
||||
#include "applesoftfile.h"
|
||||
|
||||
class ApplesoftFormatter : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum FormatOption {
|
||||
NoOptions = 0x00,
|
||||
FormatHTML = 0x01,
|
||||
ShowCtrlChars = 0x02,
|
||||
BreakAfterReturn = 0x04,
|
||||
PrettyFlags = 0x07,
|
||||
AllFlags = 0xffffffff
|
||||
};
|
||||
Q_DECLARE_FLAGS(FormatOptions, FormatOption)
|
||||
|
||||
public:
|
||||
explicit ApplesoftFormatter(QObject *parent = 0);
|
||||
void setFlags(FormatOptions options) { m_format_options = options; }
|
||||
void setFile(ApplesoftFile *file);
|
||||
|
||||
QString formatText();
|
||||
|
||||
signals:
|
||||
void newFile(ApplesoftFile *file);
|
||||
|
||||
public slots:
|
||||
|
||||
private:
|
||||
FormatOptions m_format_options;
|
||||
|
||||
ApplesoftFile *m_file;
|
||||
|
||||
};
|
||||
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(ApplesoftFormatter::FormatOptions)
|
||||
|
||||
#endif // APPLESOFTFORMATTER_H
|
@ -32,6 +32,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
connect(this, SIGNAL(diskFileUnloading(DiskFile*)),
|
||||
ui->catalogWidget, SLOT(unloadDisk(DiskFile*)));
|
||||
|
||||
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
@ -95,34 +96,10 @@ void MainWindow::handleDiskItemSelectedDefaultOpen(DiskFile *disk, FileDescripti
|
||||
else if (dynamic_cast<ApplesoftFile *>(file))
|
||||
{
|
||||
ApplesoftFile *abf = dynamic_cast<ApplesoftFile *>(file);
|
||||
ApplesoftFileViewer *afv = new ApplesoftFileViewer(0);
|
||||
QString title = QString("AppleSoft Viewer: %1").arg(AppleString(fde.filename).printable().trimmed());
|
||||
afv->setWindowTitle(title);
|
||||
QStringList strings;
|
||||
foreach (ApplesoftLine line, abf->detokenized())
|
||||
{
|
||||
QString linestring = QString("%1 %2").arg(line.linenum,5,10,QChar(' ')).arg(line.detokenized_line);
|
||||
strings.append(linestring);
|
||||
}
|
||||
QString fulltext = Qt::convertFromPlainText(strings.join("\n"));
|
||||
// fulltext.replace("{kwd}","<font color=\"red\">{kwd}</font>");
|
||||
// fulltext.replace("{num}","<font color=\"red\">{num}</font>");
|
||||
// fulltext.replace("{string}","<font color=\"red\">{string}</font>");
|
||||
fulltext.replace("GOTO","<b><font color=\"green\">GOTO</font></b>");
|
||||
fulltext.replace("GOSUB","<b><font color=\"green\">GOSUB</font></b>");
|
||||
// fulltext.replace("0","<font color=\"orange\">0</font>");
|
||||
// fulltext.replace("1","<font color=\"orange\">1</font>");
|
||||
// fulltext.replace("2","<font color=\"orange\">2</font>");
|
||||
// fulltext.replace("3","<font color=\"orange\">3</font>");
|
||||
// fulltext.replace("4","<font color=\"orange\">4</font>");
|
||||
// fulltext.replace("5","<font color=\"orange\">5</font>");
|
||||
// fulltext.replace("6","<font color=\"orange\">6</font>");
|
||||
// fulltext.replace("7","<font color=\"orange\">7</font>");
|
||||
// fulltext.replace("8","<font color=\"orange\">8</font>");
|
||||
// fulltext.replace("9","<font color=\"orange\">9</font>");
|
||||
fulltext.replace("RETURN","RETURN<p>");
|
||||
abf->setFilename(AppleString(fde.filename).printable().trimmed());
|
||||
|
||||
afv->setText(fulltext);
|
||||
ApplesoftFileViewer *afv = new ApplesoftFileViewer(0);
|
||||
afv->setFile(abf);
|
||||
afv->show();
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,17 @@
|
||||
#include "applesoftfileviewer.h"
|
||||
#include "ui_applesoftfileviewer.h"
|
||||
#include "applesoftformatter.h"
|
||||
|
||||
ApplesoftFileViewer::ApplesoftFileViewer(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::ApplesoftFileViewer)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
QString title = QString("AppleSoft Viewer");
|
||||
setWindowTitle(title);
|
||||
|
||||
m_formatter = new ApplesoftFormatter(this);
|
||||
m_formatter->setFlags(ApplesoftFormatter::PrettyFlags);
|
||||
}
|
||||
|
||||
ApplesoftFileViewer::~ApplesoftFileViewer()
|
||||
@ -13,6 +19,16 @@ ApplesoftFileViewer::~ApplesoftFileViewer()
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void ApplesoftFileViewer::setFile(ApplesoftFile *file) {
|
||||
m_file = file;
|
||||
m_formatter->setFile(file);
|
||||
|
||||
QString title = QString("AppleSoft Viewer: %1").arg(m_file->filename());
|
||||
setWindowTitle(title);
|
||||
|
||||
ui->textArea->setText(m_formatter->formatText());
|
||||
}
|
||||
|
||||
void ApplesoftFileViewer::setData(QByteArray data)
|
||||
{
|
||||
ui->textArea->setText(data);
|
||||
|
@ -2,6 +2,8 @@
|
||||
#define APPLESOFTFILEVIEWER_H
|
||||
|
||||
#include <QWidget>
|
||||
#include "applesoftfile.h"
|
||||
#include "applesoftformatter.h"
|
||||
|
||||
namespace Ui {
|
||||
class ApplesoftFileViewer;
|
||||
@ -15,11 +17,17 @@ public:
|
||||
explicit ApplesoftFileViewer(QWidget *parent = 0);
|
||||
~ApplesoftFileViewer();
|
||||
|
||||
void setFormatter(ApplesoftFormatter *formatter);
|
||||
|
||||
public slots:
|
||||
void setFile(ApplesoftFile *m_file);
|
||||
void setData(QByteArray data);
|
||||
void setText(QString text);
|
||||
|
||||
private:
|
||||
ApplesoftFile *m_file;
|
||||
ApplesoftFormatter *m_formatter;
|
||||
|
||||
Ui::ApplesoftFileViewer *ui;
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user