From c69cc3c2d3684352b26c43be1b0803f846d2c3d9 Mon Sep 17 00:00:00 2001
From: ph1r3754r73r <6174900+ph1r3574r73r@users.noreply.github.com>
Date: Sat, 20 Jun 2026 12:27:35 -0700
Subject: [PATCH] removed fake transform
---
README.md | 9 +-
index.template.html | 4 +-
src/transformers/cipher/n7ax.js | 185 --------------------------------
tests/test_universal.js | 5 -
4 files changed, 6 insertions(+), 197 deletions(-)
delete mode 100644 src/transformers/cipher/n7ax.js
diff --git a/README.md b/README.md
index 07eb13c..dca6541 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# π P4RS3LT0NGV3 4.0 β Universal Text Translator
-A powerful web-based text transformation and steganography tool with **223** built-in text transforms spanning encodings, classical and modern ciphers, Unicode styles, formatting, and niche alphabets. Think of it as a universal translator for ALL alphabets and writing systems!
+A powerful web-based text transformation and steganography tool with **222** built-in text transforms spanning encodings, classical and modern ciphers, Unicode styles, formatting, and niche alphabets. Think of it as a universal translator for ALL alphabets and writing systems!
**Version 4.0** brings a redesigned desktop app shell, seven themes (including WCAG 2.1 AA **Accessible**), mobile utility panels, OpenRouter model curation, and responsive UI polish across all tools.
@@ -34,7 +34,6 @@ Categories match the Transform tab and the folders under `src/transformers/` (ea
- **A1Z26** - A=1 β¦ Z=26 letter numbering
- **AcΓ©rΓ© Cipher** - Solfege / duration encoding for musical steganography
- **ADFGX Cipher** - WWI ADFGVX-style polybius + column transposition
-- **N7AX Cipher** - ADFGX-style polybius with N7AX coordinates + column transposition
- **Affine Cipher** - Affine substitution (ax + b mod 26)
- **Atbash Cipher** - Reverse-alphabet substitution (AβZ)
- **Autokey Cipher** - Key stream mixed with plaintext (autokey)
@@ -263,7 +262,7 @@ Tabs appear in **UI order** below. **OpenRouter** (optional or required per tool
### π€ **Transform**
-- **223 Transforms**: Encodings, ciphers, Unicode styles, formats, and more (full catalog above).
+- **222 Transforms**: Encodings, ciphers, Unicode styles, formats, and more (full catalog above).
- **Categories**: Grouped sections you can **reorder**; quick-jump legend; **randomizer** last.
- **Favorites & last used**: Pin transforms and recall recent picks.
- **Per-transform options**: Gear icon where a transform exposes settings.
@@ -472,7 +471,7 @@ npm run preview # npm run build, then serve dist/
- **Tool System**: Modular tool registry with build-time template injection
- **Encoding**: UTF-8 with proper Unicode handling
- **Steganography**: Variation selectors and Tags Unicode block
-- **Transforms**: Individual transformer modules live under `src/transformers/` (223; the bundle is generated by `npm run build:transforms`)
+- **Transforms**: Individual transformer modules live under `src/transformers/` (222; the bundle is generated by `npm run build:transforms`)
- **Build Process**:
- `npm run build` writes the runnable app under `dist/` (ignored by git in most setups)
- Transformers are bundled from `src/transformers/` to `dist/js/bundles/transforms-bundle.js`
@@ -514,7 +513,7 @@ npm run preview # npm run build, then serve dist/
- π **AI Translation**: Translate to 20+ languages (including dead/exotic) via OpenRouter using TranslateGemma prompt format
- π **PromptCraft Tool**: AI-powered prompt mutation with 9 strategies and 48+ models
- π **OpenRouter Integration**: Unified API key management for all AI-powered features
-- π **223 Transformations**: Full catalog of encodings, ciphers, Unicode styles, symbol alphabets, SignWriting, and technical codes (see README transform list)
+- π **222 Transformations**: Full catalog of encodings, ciphers, Unicode styles, symbol alphabets, SignWriting, and technical codes (see README transform list)
- π **More Encodings/Ciphers**: Base58, Base62, VigenΓ¨re, Rail Fence, Roman Numerals
- π **Category Organization**: Better organized transform categories
- π **Enhanced Styling**: New color schemes for each category
diff --git a/index.template.html b/index.template.html
index 2592e0c..5f341b9 100644
--- a/index.template.html
+++ b/index.template.html
@@ -4,11 +4,11 @@
Parseltongue 4.0 β Text Encoder, Decoder & Steganography Tool
-
+
-
+
diff --git a/src/transformers/cipher/n7ax.js b/src/transformers/cipher/n7ax.js
deleted file mode 100644
index a877102..0000000
--- a/src/transformers/cipher/n7ax.js
+++ /dev/null
@@ -1,185 +0,0 @@
-// N7AX cipher β Polybius + columnar transposition (ADFGX-style with N7AX coordinates)
-import BaseTransformer from '../BaseTransformer.js';
-
-export default new BaseTransformer({
- name: 'N7AX Cipher',
- priority: 60,
- category: 'cipher',
- key: 'N7AX',
- configurableOptions: [
- {
- id: 'key',
- label: 'Transposition keyword',
- type: 'text',
- default: 'N7AX'
- }
- ],
- _transKey: function(options) {
- const k = options && options.key !== undefined && options.key !== null
- ? String(options.key)
- : null;
- return (k || this.key || 'N7AX').toUpperCase().replace(/[^A-Z0-9]/g, '');
- },
- square: [
- ['A', 'B', 'C', 'D', 'E'],
- ['F', 'G', 'H', 'I', 'K'],
- ['L', 'M', 'N', 'O', 'P'],
- ['Q', 'R', 'S', 'T', 'U'],
- ['V', 'W', 'X', 'Y', 'Z']
- ],
- coords: ['N', '7', 'A', 'X', '5'],
- _toCoordText: function(text) {
- let result = '';
- for (const char of text) {
- let found = false;
- for (let row = 0; row < 5; row++) {
- for (let col = 0; col < 5; col++) {
- if (this.square[row][col] === char || (char === 'J' && this.square[row][col] === 'I')) {
- result += this.coords[row] + this.coords[col];
- found = true;
- break;
- }
- }
- if (found) {
- break;
- }
- }
- }
- return result;
- },
- _transposeEncode: function(text, transKey) {
- const keyLength = transKey.length;
- const numCols = keyLength;
- const numRows = Math.ceil(text.length / numCols);
- const grid = [];
- let textIdx = 0;
-
- for (let row = 0; row < numRows; row++) {
- grid[row] = [];
- for (let col = 0; col < numCols; col++) {
- grid[row][col] = textIdx < text.length ? text[textIdx++] : '';
- }
- }
-
- const keyOrder = [];
- for (let i = 0; i < transKey.length; i++) {
- keyOrder.push({ char: transKey[i], index: i });
- }
- keyOrder.sort((a, b) => {
- if (a.char < b.char) return -1;
- if (a.char > b.char) return 1;
- return a.index - b.index;
- });
-
- let result = '';
- for (const keyItem of keyOrder) {
- const col = keyItem.index;
- for (let row = 0; row < numRows; row++) {
- if (grid[row][col]) {
- result += grid[row][col];
- }
- }
- }
- return result;
- },
- _transposeDecode: function(text, transKey) {
- const keyLength = transKey.length;
- const numCols = keyLength;
- const numRows = Math.ceil(text.length / numCols);
- const keyOrder = [];
-
- for (let i = 0; i < transKey.length; i++) {
- keyOrder.push({ char: transKey[i], index: i });
- }
- keyOrder.sort((a, b) => {
- if (a.char < b.char) return -1;
- if (a.char > b.char) return 1;
- return a.index - b.index;
- });
-
- const grid = [];
- for (let row = 0; row < numRows; row++) {
- grid[row] = new Array(numCols);
- }
-
- let textIdx = 0;
- for (const keyItem of keyOrder) {
- const col = keyItem.index;
- const colLength = Math.ceil((text.length - col) / numCols);
- for (let row = 0; row < colLength && textIdx < text.length; row++) {
- grid[row][col] = text[textIdx++];
- }
- }
-
- let result = '';
- for (let row = 0; row < numRows; row++) {
- for (let col = 0; col < numCols; col++) {
- if (grid[row] && grid[row][col]) {
- result += grid[row][col];
- }
- }
- }
- return result;
- },
- _fromCoordText: function(text) {
- let result = '';
- for (let i = 0; i < text.length; i += 2) {
- if (i + 1 >= text.length) {
- break;
- }
- const row = this.coords.indexOf(text[i]);
- const col = this.coords.indexOf(text[i + 1]);
- if (row >= 0 && row < 5 && col >= 0 && col < 5) {
- result += this.square[row][col];
- }
- }
- return result;
- },
- func: function(text, options) {
- options = options || {};
- const transKey = this._transKey(options);
- if (transKey.length === 0) {
- return text;
- }
-
- const cleaned = text.toUpperCase().replace(/[^A-Z]/g, '');
- if (cleaned.length === 0) {
- return text;
- }
-
- const coordText = this._toCoordText(cleaned);
- return this._transposeEncode(coordText, transKey);
- },
- reverse: function(text, options) {
- options = options || {};
- const transKey = this._transKey(options);
- if (transKey.length === 0) {
- return text;
- }
-
- const cleaned = text.toUpperCase().replace(/[^N7AX5]/g, '');
- if (cleaned.length === 0 || cleaned.length % 2 !== 0) {
- return text;
- }
-
- const coordText = this._transposeDecode(cleaned, transKey);
- return this._fromCoordText(coordText);
- },
- preview: function(text, options) {
- if (!text) {
- return '[n7ax]';
- }
- const result = this.func(text.slice(0, 5), options);
- return result.substring(0, 12) + (result.length > 12 ? '...' : '');
- },
- detector: function(text) {
- const cleaned = text.replace(/[\s]/g, '').toUpperCase();
- if (cleaned.length < 10) {
- return false;
- }
- if (!/^[N7AX5]+$/.test(cleaned)) {
- return false;
- }
- return cleaned.length % 2 === 0;
- }
-});
diff --git a/tests/test_universal.js b/tests/test_universal.js
index 66485ef..e848af1 100644
--- a/tests/test_universal.js
+++ b/tests/test_universal.js
@@ -468,11 +468,6 @@ const limitations = {
acceptPartial: true,
normalize: { stripNonLetters: true, stripWhitespace: true }
},
- 'n7ax': {
- issues: 'Requires key, only encodes A-Z, removes spaces and punctuation',
- acceptPartial: true,
- normalize: { stripNonLetters: true, stripWhitespace: true }
- },
'adfgvx': {
issues: 'Only encodes A-Z and 0-9, removes spaces and punctuation',
acceptPartial: true,