| |
| """ |
| Setup script to install Arabic fonts for Hugging Face Spaces |
| This script downloads and installs Arabic fonts that are not available in Debian repositories |
| """ |
|
|
| import os |
| import subprocess |
| import urllib.request |
| import zipfile |
| import tempfile |
| import shutil |
|
|
| def run_command(cmd): |
| """Run a shell command and return the result""" |
| try: |
| result = subprocess.run(cmd, shell=True, check=True, capture_output=True, text=True) |
| return result.stdout |
| except subprocess.CalledProcessError as e: |
| print(f"Error running command '{cmd}': {e}") |
| print(f"Error output: {e.stderr}") |
| return None |
|
|
| def download_and_extract(url, extract_to): |
| """Download a zip file and extract it""" |
| try: |
| with tempfile.NamedTemporaryFile(suffix='.zip', delete=False) as tmp_file: |
| urllib.request.urlretrieve(url, tmp_file.name) |
| |
| with zipfile.ZipFile(tmp_file.name, 'r') as zip_ref: |
| zip_ref.extractall(extract_to) |
| |
| os.unlink(tmp_file.name) |
| return True |
| except Exception as e: |
| print(f"Error downloading/extracting {url}: {e}") |
| return False |
|
|
| def setup_arabic_fonts(): |
| """Setup Arabic fonts for LibreOffice""" |
| print("🔤 Setting up Arabic fonts for RTL support...") |
| |
| |
| fonts_dir = "/usr/share/fonts/truetype/arabic-enhanced" |
| os.makedirs(fonts_dir, exist_ok=True) |
| |
| |
| print("📥 Installing Amiri font...") |
| with tempfile.TemporaryDirectory() as tmp_dir: |
| amiri_url = "https://github.com/aliftype/amiri/releases/download/0.117/Amiri-0.117.zip" |
| if download_and_extract(amiri_url, tmp_dir): |
| amiri_dir = os.path.join(tmp_dir, "Amiri-0.117") |
| if os.path.exists(amiri_dir): |
| for file in os.listdir(amiri_dir): |
| if file.endswith('.ttf'): |
| src = os.path.join(amiri_dir, file) |
| dst = os.path.join(fonts_dir, file) |
| shutil.copy2(src, dst) |
| os.chmod(dst, 0o644) |
| print("✅ Amiri font installed successfully") |
| else: |
| print("❌ Amiri font directory not found") |
| else: |
| print("❌ Failed to download Amiri font") |
| |
| |
| print("📥 Installing Scheherazade New font...") |
| with tempfile.TemporaryDirectory() as tmp_dir: |
| scheherazade_url = "https://github.com/silnrsi/font-scheherazade/releases/download/v3.300/ScheherazadeNew-3.300.zip" |
| if download_and_extract(scheherazade_url, tmp_dir): |
| scheherazade_dir = os.path.join(tmp_dir, "ScheherazadeNew-3.300") |
| if os.path.exists(scheherazade_dir): |
| for file in os.listdir(scheherazade_dir): |
| if file.endswith('.ttf'): |
| src = os.path.join(scheherazade_dir, file) |
| dst = os.path.join(fonts_dir, file) |
| shutil.copy2(src, dst) |
| os.chmod(dst, 0o644) |
| print("✅ Scheherazade New font installed successfully") |
| else: |
| print("❌ Scheherazade New font directory not found") |
| else: |
| print("❌ Failed to download Scheherazade New font") |
| |
| |
| print("🔄 Updating font cache...") |
| run_command("fc-cache -fv") |
| |
| |
| print("✅ Verifying Arabic fonts installation...") |
| result = run_command("fc-list | grep -i 'amiri\\|scheherazade\\|noto.*arabic' | head -10") |
| if result: |
| print("Available Arabic fonts:") |
| print(result) |
| |
| print("🎯 Arabic fonts setup completed!") |
|
|
| if __name__ == "__main__": |
| setup_arabic_fonts() |
|
|