Initial commit: Add main application files and setup scripts

This commit is contained in:
2025-08-10 01:15:53 +03:30
commit 3aad8080f4
5 changed files with 181 additions and 0 deletions

BIN
assets/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

19
install.bat Normal file
View File

@@ -0,0 +1,19 @@
@echo off
REM install.bat
REM This script sets up a Python virtual environment and installs required libraries.
REM Make sure to run this script in the project directory.
REM Create Python virtual environment
python -m venv venv
REM Activate the virtual environment
call venv\Scripts\activate.bat
REM Upgrade pip
pip install --upgrade pip
REM Install required libraries from requirements.txt
pip install -r requirements.txt --no-cache-dir
echo Environment setup complete.
pause

4
requirements.txt Normal file
View File

@@ -0,0 +1,4 @@
keyboard==0.13.5
pyperclip==1.9.0
pystray==0.19.5
Pillow==11.3.0

11
run.bat Normal file
View File

@@ -0,0 +1,11 @@
@echo off
REM run.bat
REM Activates the virtual environment and runs your main Python script.
REM Activate the virtual environment
call venv\Scripts\activate.bat
REM Run your main Python script (replace main.py with your script name if different)
start "OopsWrongLang" /B pythonw src\main.pyw
echo application is running in the background. you can close this window.
pause

147
src/main.pyw Normal file
View File

@@ -0,0 +1,147 @@
# oopswronglang/main.py
# This script listens for a keyboard shortcut (Ctrl + Space) and converts the text
# from English characters to Persian characters using the `persian` library.
import keyboard
import pyperclip
import time
import threading
import pystray
from PIL import Image
import re
def convert_en_characters(input_str):
"""
Assumes that characters written with standard persian keyboard
not windows arabic layout
:param input_str: String contains English chars
:return: New string with related characters on Persian standard keyboard
"""
mapping = {
'q': 'ض',
'w': 'ص',
'e': 'ث',
'r': 'ق',
't': 'ف',
'y': 'غ',
'u': 'ع',
'i': 'ه',
'o': 'خ',
'p': 'ح',
'[': 'ج',
']': 'چ',
'a': 'ش',
's': 'س',
'd': 'ی',
'f': 'ب',
'g': 'ل',
'h': 'ا',
'j': 'ت',
'k': 'ن',
'l': 'م',
';': 'ک',
"'": 'گ',
'z': 'ظ',
'x': 'ط',
'c': 'ز',
'v': 'ر',
'b': 'ذ',
'n': 'د',
'm': 'ئ',
',': 'و',
'?': '؟',
'\\':'پ',
'ض': 'q',
'ص': 'w',
'ث': 'e',
'ق': 'r',
'ف': 't',
'غ': 'y',
'ع': 'u',
'ه': 'i',
'خ': 'o',
'ح': 'p',
'ج': '[',
'چ': ']',
'ش': 'a',
'س': 's',
'ی': 'd',
'ب': 'f',
'ل': 'g',
'ا': 'h',
'ت': 'j',
'ن': 'k',
'م': 'l',
'ک': ';',
'گ': "'",
'ظ': 'z',
'ط': 'x',
'ز': 'c',
'ر': 'v',
'ذ': 'b',
'د': 'n',
'ئ': 'm',
'و': ',',
'؟': '?',
'پ': '\\',
'H':'آ',
'آ': 'H',
'C':'ژ',
'ژ': 'C',
'T':'،',
'،': 'T',
'؛':'Y',
'Y':'؛',
}
return _multiple_replace(mapping, input_str)
def _multiple_replace(mapping, text):
"""
Internal function for replace all mapping keys for a input string
:param mapping: replacing mapping keys
:param text: user input string
:return: New string with converted mapping keys to values
"""
pattern = "|".join(map(re.escape, mapping.keys()))
return re.sub(pattern, lambda m: mapping[m.group()], str(text))
# Function to handle the keyboard shortcut
def on_shortcut():
"""This function is called when the shortcut is pressed."""
orginal_text = pyperclip.paste() # Get the current clipboard content
time.sleep(0.1)
keyboard.press_and_release('ctrl+c') # Simulate pressing Ctrl+C to copy selected text
time.sleep(0.1)
text = pyperclip.paste()
# If no text is selected, do nothing
if not text or text== orginal_text:
print("No text was selected.")
return
converted_text = convert_en_characters(text)
pyperclip.copy(converted_text)
print(f"Converted text: {converted_text}")
keyboard.press_and_release('ctrl+v') # Paste the converted text
def quit_app(icon, item):
icon.stop()
import os
os._exit(0)
def setup_tray():
image = Image.open("assets/icon.png") # Make sure icon.png exists in your project folder
menu = pystray.Menu(pystray.MenuItem('Quit', quit_app))
icon = pystray.Icon("oopswronglang", image, "OopsWrongLang", menu)
icon.run()
def main():
# Start the tray icon in a separate thread
tray_thread = threading.Thread(target=setup_tray, daemon=True)
tray_thread.start()
# Register the keyboard shortcut (Ctrl + Space)
keyboard.add_hotkey('ctrl+space', on_shortcut)
print("Press Ctrl + Space to convert text to Persian.")
# Keep the script running
keyboard.wait()
if __name__ == "__main__":
main()