content: [build-system]
  build-backend = "setuptools.build_meta"
  
  requires = [ "setuptools>=61.2" ]
  
  [project]
  name = "pyttsx3"
  version = "2.99"
  description = "Text to Speech (TTS) library for Python 3. Works without internet connection or delay. Supports multiple TTS engines, including Sapi5, nsss, and espeak."
  readme = "README.md"
  license = "MPL-2.0"
  keywords = [
    "gtts",
    "ivona",
    "offline text to speech",
    "offline tts",
    "pyttsx",
    "pyttsx for python3",
    "pyttsx3",
    "speech",
    "speech synthesis",
    "text to speech",
    "text to speech for python",
    "tts",
    "TTS for python3",
  ]
  authors = [ { name = "Natesh M Bhat", email = "nateshmbhatofficial@gmail.com" } ]
  classifiers = [
    "Intended Audience :: Developers",
    "Intended Audience :: End Users/Desktop",
    "Intended Audience :: Information Technology",
    "Intended Audience :: System Administrators",
    "Operating System :: MacOS :: MacOS X",
    "Operating System :: Microsoft :: Windows",
    "Operating System :: POSIX",
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
  ]
  dependencies = [
    "comtypes; platform_system=='Windows'",
    "pyobjc>=2.4; platform_system=='Darwin'",
    "pypiwin32; platform_system=='Windows'",
    "pywin32; platform_system=='Windows'",
  ]
  
  urls = { Homepage = "https://github.com/nateshmbhat/pyttsx3" }
  
  [tool.setuptools]
  packages = [ "pyttsx3", "pyttsx3.drivers" ]
  include-package-data = false
  
  [tool.ruff]
  line-length = 100
  target-version = "py310"
  
  [tool.ruff.lint]
  select = [
    "AIR",    # Airflow
    "ASYNC",  # flake8-async
    "B",      # flake8-bugbear
    "BLE",    # flake8-blind-except
    "C4",     # flake8-comprehensions
    "C90",    # McCabe cyclomatic complexity
    "DJ",     # flake8-django
    "DTZ",    # flake8-datetimez
    "E",      # pycodestyle
    "EM",     # flake8-errmsg
    "EXE",    # flake8-executable
    "F",      # Pyflakes
    "FA",     # flake8-future-annotations
    "FLY",    # flynt
    "FURB",   # refurb
    "G",      # flake8-logging-format
    "I",      # isort
    "ICN",    # flake8-import-conventions
    "INP",    # flake8-no-pep420
    "INT",    # flake8-gettext
    "ISC",    # flake8-implicit-str-concat
    "LOG",    # flake8-logging
    "NPY",    # NumPy-specific rules
    "PD",     # pandas-vet
    "PERF",   # Perflint
    "PGH",    # pygrep-hooks
    "PIE",    # flake8-pie
    "PL",     # Pylint
    "PT",     # flake8-pytest-style
    "PTH",    # flake8-use-pathlib
    "PYI",    # flake8-pyi
    "RET",    # flake8-return
    "RSE",    # flake8-raise
    "RUF",    # Ruff-specific rules
    "SIM",    # flake8-simplify
    "SLOT",   # flake8-slots
    "T10",    # flake8-debugger
    "TCH",    # flake8-type-checking
    "TID",    # flake8-tidy-imports
    "UP",     # pyupgrade
    "W",      # pycodestyle
    "YTT",    # flake8-2020
    # "A",    # flake8-builtins
    # "ANN",  # flake8-annotations
    # "ARG",  # flake8-unused-arguments
    # "COM",  # flake8-commas
    # "CPY",  # flake8-copyright
    # "D",    # pydocstyle
    # "DOC",  # pydoclint
    # "ERA",  # eradicate
    # "FAST", # FastAPI
    # "FBT",  # flake8-boolean-trap
    # "FIX",  # flake8-fixme
    # "N",    # pep8-naming
    # "Q",    # flake8-quotes
    # "S",    # flake8-bandit
    # "SLF",  # flake8-self
    # "T20",  # flake8-print
    # "TD",   # flake8-todos
    # "TRY",  # tryceratops
  ]
  ignore = [
    "B904",   #	raise-without-from-inside-except
    "BLE001", # blind-except
    "D212",   # Multi-line docstring summary should start at the first line
    "ISC001", # implicit-str-concat conflicts with ruff format
    "LOG015", # `debug()` call on root logger
    "S101",   #	assert
  ]
  [tool.ruff.lint.per-file-ignores]
  "pyttsx3/drivers/_espeak.py" = ["E101", "E501"]
  
  [tool.ruff.lint.pylint]
  allow-magic-value-types = ["int", "str"]
  