Skip to content

Commit

Permalink
v0.0.95
Browse files Browse the repository at this point in the history
  • Loading branch information
yousefvand committed Jan 12, 2025
1 parent bb9f7f7 commit 1895071
Show file tree
Hide file tree
Showing 15 changed files with 653 additions and 8 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

============

## 0.0.95

- Implemented:
- Encoding Menu -> Interpret as ... IBM-01144, IBM-01143, IBM-01142, IBM-01141, IBM-01140

## 0.0.94

- Implemented:
Expand Down
10 changes: 10 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,16 @@ set(PROJECT_SOURCES
src/encoding/interpret_as_ibm_01146.h
src/encoding/interpret_as_ibm_01145.cpp
src/encoding/interpret_as_ibm_01145.h
src/encoding/interpret_as_ibm_01144.cpp
src/encoding/interpret_as_ibm_01144.h
src/encoding/interpret_as_ibm_01143.cpp
src/encoding/interpret_as_ibm_01143.h
src/encoding/interpret_as_ibm_01142.cpp
src/encoding/interpret_as_ibm_01142.h
src/encoding/interpret_as_ibm_01141.cpp
src/encoding/interpret_as_ibm_01141.h
src/encoding/interpret_as_ibm_01140.cpp
src/encoding/interpret_as_ibm_01140.h
${PROJECT_UI}
)

Expand Down
14 changes: 7 additions & 7 deletions CMakeLists.txt.user
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 15.0.0, 2025-01-11T14:36:00. -->
<!-- Written by QtCreator 15.0.0, 2025-01-12T11:09:20. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
Expand Down Expand Up @@ -103,14 +103,14 @@
<value type="int" key="CMake.Configure.BaseEnvironment">2</value>
<value type="bool" key="CMake.Configure.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="CMake.Configure.UserEnvironmentChanges"/>
<value type="QString" key="CMake.Initial.Parameters">-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
<value type="QString" key="CMake.Initial.Parameters">-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_C_COMPILER:FILEPATH=%{Compiler:Executable:C}
-DCMAKE_GENERATOR:STRING=Ninja
-DQT_QMAKE_EXECUTABLE:FILEPATH=%{Qt:qmakeExecutable}
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}</value>
-DCMAKE_CXX_FLAGS_INIT:STRING=%{Qt:QML_DEBUG_FLAG}
-DCMAKE_CXX_COMPILER:FILEPATH=%{Compiler:Executable:Cxx}
-DCMAKE_PREFIX_PATH:PATH=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=%{BuildConfig:BuildDirectory:NativeFilePath}/.qtc/package-manager/auto-setup.cmake
-DCMAKE_GENERATOR:STRING=Ninja</value>
<value type="QString" key="CMake.Source.Directory">/data/Code/Qt/Notepad--</value>
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/data/Code/Qt/Notepad--/build/Desktop_Qt_6_8_1-Debug</value>
Expand Down
7 changes: 6 additions & 1 deletion src/encoding/interpret_as_dialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,12 @@ InterpreteAsDialog::InterpreteAsDialog(QWidget* parent)
"IBM-01148",
"IBM-01147",
"IBM-01146",
"IBM-01145"
"IBM-01145",
"IBM-01144",
"IBM-01143",
"IBM-01142",
"IBM-01141",
"IBM-01140"
});

// Create OK and Cancel buttons using QDialogButtonBox
Expand Down
99 changes: 99 additions & 0 deletions src/encoding/interpret_as_ibm_01140.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
#include "../codeeditor.h"
#include "interpret_as_ibm_01140.h"
#include <QFile>
#include <QDebug>

// Singleton instance
Interpret_As_IBM_01140& Interpret_As_IBM_01140::instance() {
static Interpret_As_IBM_01140 instance;
return instance;
}

// EBCDIC to Unicode mapping for IBM-01140 (Latin-1 with Euro support)
const std::unordered_map<unsigned char, QChar> Interpret_As_IBM_01140::ebcdicTable = {
{0x41, QChar(0x0041)}, // A
{0x42, QChar(0x0042)}, // B
{0x43, QChar(0x0043)}, // C
{0x44, QChar(0x0044)}, // D
{0x45, QChar(0x0045)}, // E
{0x46, QChar(0x0046)}, // F
{0x47, QChar(0x0047)}, // G
{0x48, QChar(0x0048)}, // H
{0x49, QChar(0x0049)}, // I
{0x4A, QChar(0x004A)}, // J
{0x4B, QChar(0x004B)}, // K
{0x4C, QChar(0x004C)}, // L
{0x4D, QChar(0x004D)}, // M
{0x4E, QChar(0x004E)}, // N
{0x4F, QChar(0x004F)}, // O
{0x50, QChar(0x0050)}, // P
{0x51, QChar(0x0051)}, // Q
{0x52, QChar(0x0052)}, // R
{0x53, QChar(0x0053)}, // S
{0x54, QChar(0x0054)}, // T
{0x55, QChar(0x0055)}, // U
{0x56, QChar(0x0056)}, // V
{0x57, QChar(0x0057)}, // W
{0x58, QChar(0x0058)}, // X
{0x59, QChar(0x0059)}, // Y
{0x5A, QChar(0x005A)}, // Z
{0x7B, QChar(0x00E4)}, // ä
{0x81, QChar(0x0061)}, // a
{0x85, QChar(0x0065)}, // e
{0x8C, QChar(0x00F6)}, // ö
{0x90, QChar(0x00FC)}, // ü
{0xA4, QChar(0x20AC)}, //
{0xA6, QChar(0x00E0)}, // à
{0xA8, QChar(0x00E8)}, // è
{0xB2, QChar(0x00E9)}, // é
};

// Constructor
Interpret_As_IBM_01140::Interpret_As_IBM_01140() {}

// Main execution function
void Interpret_As_IBM_01140::execute(QPlainTextEdit* editor) {
if (!editor) {
qWarning() << "[ERROR] No editor instance provided.";
return;
}

CodeEditor* codeEditor = qobject_cast<CodeEditor*>(editor);
if (!codeEditor) {
qWarning() << "[ERROR] Invalid CodeEditor instance.";
return;
}

QString filePath = codeEditor->filePath();
if (filePath.isEmpty()) {
qWarning() << "[ERROR] No file path associated with the editor.";
return;
}

QFile file(filePath);
if (!file.open(QIODevice::ReadOnly)) {
qWarning() << "[ERROR] Cannot open file:" << filePath;
return;
}

QByteArray rawData = file.readAll();
file.close();

QString decodedText = decodeIBM01140(rawData);
editor->setPlainText(decodedText);
qDebug() << "[DEBUG] IBM-01140 Decoding applied for file:" << filePath;
}

// Decode raw data from IBM-01140 encoding
QString Interpret_As_IBM_01140::decodeIBM01140(const QByteArray& rawData) {
QString result;

for (unsigned char byte : rawData) {
if (ebcdicTable.contains(byte)) {
result.append(ebcdicTable.at(byte));
} else {
result.append(QChar(0xFFFD)); // Fallback for unmapped characters
}
}
return result;
}
22 changes: 22 additions & 0 deletions src/encoding/interpret_as_ibm_01140.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#pragma once

#include <QPlainTextEdit>
#include <QString>
#include <QByteArray>
#include <unordered_map>

class Interpret_As_IBM_01140 {
public:
static Interpret_As_IBM_01140& instance();
void execute(QPlainTextEdit* editor);

private:
Interpret_As_IBM_01140();
~Interpret_As_IBM_01140() = default;

Interpret_As_IBM_01140(const Interpret_As_IBM_01140&) = delete;
Interpret_As_IBM_01140& operator=(const Interpret_As_IBM_01140&) = delete;

QString decodeIBM01140(const QByteArray& rawData);
static const std::unordered_map<unsigned char, QChar> ebcdicTable;
};
99 changes: 99 additions & 0 deletions src/encoding/interpret_as_ibm_01141.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
#include "../codeeditor.h"
#include "interpret_as_ibm_01141.h"
#include <QFile>
#include <QDebug>

// Singleton instance
Interpret_As_IBM_01141& Interpret_As_IBM_01141::instance() {
static Interpret_As_IBM_01141 instance;
return instance;
}

// EBCDIC to Unicode mapping for IBM-01141 (Latin-2 with Euro support for Austria/Germany)
const std::unordered_map<unsigned char, QChar> Interpret_As_IBM_01141::ebcdicTable = {
{0x41, QChar(0x0041)}, // A
{0x42, QChar(0x0042)}, // B
{0x43, QChar(0x0043)}, // C
{0x44, QChar(0x0044)}, // D
{0x45, QChar(0x0045)}, // E
{0x46, QChar(0x0046)}, // F
{0x47, QChar(0x0047)}, // G
{0x48, QChar(0x0048)}, // H
{0x49, QChar(0x0049)}, // I
{0x4A, QChar(0x004A)}, // J
{0x4B, QChar(0x004B)}, // K
{0x4C, QChar(0x004C)}, // L
{0x4D, QChar(0x004D)}, // M
{0x4E, QChar(0x004E)}, // N
{0x4F, QChar(0x004F)}, // O
{0x50, QChar(0x0050)}, // P
{0x51, QChar(0x0051)}, // Q
{0x52, QChar(0x0052)}, // R
{0x53, QChar(0x0053)}, // S
{0x54, QChar(0x0054)}, // T
{0x55, QChar(0x0055)}, // U
{0x56, QChar(0x0056)}, // V
{0x57, QChar(0x0057)}, // W
{0x58, QChar(0x0058)}, // X
{0x59, QChar(0x0059)}, // Y
{0x5A, QChar(0x005A)}, // Z
{0x7B, QChar(0x010D)}, // č
{0x81, QChar(0x0061)}, // a
{0x85, QChar(0x0065)}, // e
{0x8C, QChar(0x00F6)}, // ö
{0x90, QChar(0x00FC)}, // ü
{0xA4, QChar(0x20AC)}, //
{0xA6, QChar(0x011B)}, // ě
{0xA8, QChar(0x0161)}, // š
{0xB2, QChar(0x0159)}, // ř
};

// Constructor
Interpret_As_IBM_01141::Interpret_As_IBM_01141() {}

// Main execution function
void Interpret_As_IBM_01141::execute(QPlainTextEdit* editor) {
if (!editor) {
qWarning() << "[ERROR] No editor instance provided.";
return;
}

CodeEditor* codeEditor = qobject_cast<CodeEditor*>(editor);
if (!codeEditor) {
qWarning() << "[ERROR] Invalid CodeEditor instance.";
return;
}

QString filePath = codeEditor->filePath();
if (filePath.isEmpty()) {
qWarning() << "[ERROR] No file path associated with the editor.";
return;
}

QFile file(filePath);
if (!file.open(QIODevice::ReadOnly)) {
qWarning() << "[ERROR] Cannot open file:" << filePath;
return;
}

QByteArray rawData = file.readAll();
file.close();

QString decodedText = decodeIBM01141(rawData);
editor->setPlainText(decodedText);
qDebug() << "[DEBUG] IBM-01141 Decoding applied for file:" << filePath;
}

// Decode raw data from IBM-01141 encoding
QString Interpret_As_IBM_01141::decodeIBM01141(const QByteArray& rawData) {
QString result;

for (unsigned char byte : rawData) {
if (ebcdicTable.contains(byte)) {
result.append(ebcdicTable.at(byte));
} else {
result.append(QChar(0xFFFD)); // Fallback for unmapped characters
}
}
return result;
}
22 changes: 22 additions & 0 deletions src/encoding/interpret_as_ibm_01141.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#pragma once

#include <QPlainTextEdit>
#include <QString>
#include <QByteArray>
#include <unordered_map>

class Interpret_As_IBM_01141 {
public:
static Interpret_As_IBM_01141& instance();
void execute(QPlainTextEdit* editor);

private:
Interpret_As_IBM_01141();
~Interpret_As_IBM_01141() = default;

Interpret_As_IBM_01141(const Interpret_As_IBM_01141&) = delete;
Interpret_As_IBM_01141& operator=(const Interpret_As_IBM_01141&) = delete;

QString decodeIBM01141(const QByteArray& rawData);
static const std::unordered_map<unsigned char, QChar> ebcdicTable;
};
Loading

0 comments on commit 1895071

Please sign in to comment.