Skip to content

Commit

Permalink
change submodule to static
Browse files Browse the repository at this point in the history
  • Loading branch information
C-Loftus committed Jan 25, 2024
1 parent 04affa5 commit 031f2ae
Show file tree
Hide file tree
Showing 12 changed files with 729 additions and 1 deletion.
1 change: 0 additions & 1 deletion nvda/.addOn/addontemplate
Submodule addontemplate deleted from e3fa6d
8 changes: 8 additions & 0 deletions nvda/.addOn/addontemplate/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Set default behaviour, in case users don't have core.autocrlf set.
* text=auto

# Try to ensure that po files in the repo does not include
# source code line numbers.
# Every person expected to commit po files should change their personal config file as described here:
# https://mail.gnome.org/archives/kupfer-list/2010-June/msg00002.html
*.po filter=cleanpo
7 changes: 7 additions & 0 deletions nvda/.addOn/addontemplate/.pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.3.0
hooks:
- id: check-ast
- id: check-case-conflict
- id: check-yaml
29 changes: 29 additions & 0 deletions nvda/.addOn/addontemplate/_template_addon_release.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"addonId": "easyAddonTech.XYZ",
"addonVersionNumber": {
"major": 21,
"minor": 6,
"patch": 0
},
"addonVersionName": "21.06",
"displayName": "My addon",
"publisher": "easyAddonTech",
"description": "Makes doing XYZ easier",
"homepage": "https://github.com/nvaccess/addon-datastore",
"minNVDAVersion": {
"major": 2019,
"minor": 3,
"patch": 0
},
"lastTestedVersion": {
"major": 2020,
"minor": 4,
"patch": 0
},
"channel": "beta",
"URL": "https://github.com/nvaccess/addon-datastore/releases/download/v0.1.0/myAddon.nvda-addon",
"sha256": "69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82",
"sourceURL": "https://github.com/nvaccess/addon-datastore/",
"license": "GPL v2",
"licenseURL": "https://github.com/nvaccess/addon-datastore/license.MD"
}
79 changes: 79 additions & 0 deletions nvda/.addOn/addontemplate/buildVars.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# -*- coding: UTF-8 -*-

# Build customizations
# Change this file instead of sconstruct or manifest files, whenever possible.


# Since some strings in `addon_info` are translatable,
# we need to include them in the .po files.
# Gettext recognizes only strings given as parameters to the `_` function.
# To avoid initializing translations in this module we simply roll our own "fake" `_` function
# which returns whatever is given to it as an argument.
def _(arg):
return arg


# Add-on information variables
addon_info = {
# add-on Name/identifier, internal for NVDA
"addon_name": "Sight-Free-Talon",
# Add-on summary, usually the user visible name of the addon.
# Translators: Summary for this add-on
# to be shown on installation and add-on information found in Add-ons Manager.
"addon_summary": _("Sight-Free-Talon"),
# Add-on description
# Translators: Long description to be shown for this add-on on add-on information from add-ons manager
"addon_description": _("""Description for the add-on.
It can span multiple lines."""),
# version
"addon_version": "1.0",
# Author(s)
"addon_author": "Colton Loftus <[email protected]>",
# URL for the add-on documentation support
"addon_url": None,
# URL for the add-on repository where the source code can be found
"addon_sourceURL": None,
# Documentation file name
"addon_docFileName": "readme.html",
# Minimum NVDA version supported (e.g. "2018.3.0", minor version is optional)
"addon_minimumNVDAVersion": None,
# Last NVDA version supported/tested (e.g. "2018.4.0", ideally more recent than minimum version)
"addon_lastTestedNVDAVersion": None,
# Add-on update channel (default is None, denoting stable releases,
# and for development releases, use "dev".)
# Do not change unless you know what you are doing!
"addon_updateChannel": None,
# Add-on license such as GPL 2
"addon_license": "GPL 3",
# URL for the license document the ad-on is licensed under
"addon_licenseURL": "https://www.gnu.org/licenses/gpl-3.0.en.html#license-text",
}

# Define the python files that are the sources of your add-on.
# You can either list every file (using ""/") as a path separator,
# or use glob expressions.
# For example to include all files with a ".py" extension from the "globalPlugins" dir of your add-on
# the list can be written as follows:
# pythonSources = ["addon/globalPlugins/*.py"]
# For more information on SCons Glob expressions please take a look at:
# https://scons.org/doc/production/HTML/scons-user/apd.html
pythonSources = []

# Files that contain strings for translation. Usually your python sources
i18nSources = pythonSources + ["buildVars.py"]

# Files that will be ignored when building the nvda-addon file
# Paths are relative to the addon directory, not to the root directory of your addon sources.
excludedFiles = []

# Base language for the NVDA add-on
# If your add-on is written in a language other than english, modify this variable.
# For example, set baseLanguage to "es" if your add-on is primarily written in spanish.
baseLanguage = "en"

# Markdown extensions for add-on documentation
# Most add-ons do not require additional Markdown extensions.
# If you need to add support for markup such as tables, fill out the below list.
# Extensions string must be of the form "markdown.extensions.extensionName"
# e.g. "markdown.extensions.tables" to add tables.
markdownExtensions = []
45 changes: 45 additions & 0 deletions nvda/.addOn/addontemplate/flake8.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Custom Flake8 configuration for community add-on template
# Based on NVDA's Flake8 configuration with modifications for the basic add-on template (edited by Joseph Lee)

[flake8]

# Plugins
use-flake8-tabs = True
# Not all checks are replaced by flake8-tabs, however, pycodestyle is still not compatible with tabs.
use-pycodestyle-indent = False
continuation-style = hanging
## The following are replaced by flake8-tabs plugin, reported as ET codes rather than E codes.
# E121, E122, E123, E126, E127, E128,
## The following (all disabled) are not replaced by flake8-tabs,
# E124 - Requires mixing spaces and tabs: Closing bracket does not match visual indentation.
# E125 - Does not take tabs into consideration: Continuation line with same indent as next logical line.
# E129 - Requires mixing spaces and tabs: Visually indented line with same indent as next logical line
# E131 - Requires mixing spaces and tabs: Continuation line unaligned for hanging indent
# E133 - Our preference handled by ET126: Closing bracket is missing indentation


# Reporting
statistics = True
doctests = True
show-source = True

# Options
max-complexity = 15
max-line-length = 110
# Final bracket should match indentation of the start of the line of the opening bracket
hang-closing = False

ignore =
ET113, # use of alignment as indentation, but option continuation-style=hanging does not permit this
W191, # indentation contains tabs
W503, # line break before binary operator. We want W504(line break after binary operator)

builtins = # inform flake8 about functions we consider built-in.
_, # translation lookup
ngettext, # translation lookup
pgettext, # translation lookup
npgettext, # translation lookup

exclude = # don't bother looking in the following subdirectories / files.
.git,
__pycache__,
2 changes: 2 additions & 0 deletions nvda/.addOn/addontemplate/manifest-translated.ini.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
summary = "{addon_summary}"
description = """{addon_description}"""
10 changes: 10 additions & 0 deletions nvda/.addOn/addontemplate/manifest.ini.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name = {addon_name}
summary = "{addon_summary}"
description = """{addon_description}"""
author = "{addon_author}"
url = {addon_url}
version = {addon_version}
docFileName = {addon_docFileName}
minimumNVDAVersion = {addon_minimumNVDAVersion}
lastTestedNVDAVersion = {addon_lastTestedNVDAVersion}
updateChannel = {addon_updateChannel}
135 changes: 135 additions & 0 deletions nvda/.addOn/addontemplate/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# NVDA Add-on Scons Template #

This package contains a basic template structure for NVDA add-on development, building, distribution and localization.
For details about NVDA add-on development, please see the [NVDA Add-on Development Guide](https://github.com/nvdaaddons/DevGuide/wiki/NVDA-Add-on-Development-Guide).
The NVDA add-on development/discussion list [is here](https://nvda-addons.groups.io/g/nvda-addons)
Information specific to NV Access add-on store [can be found here](https://github.com/nvaccess/addon-datastore).

Copyright (C) 2012-2023 NVDA Add-on team contributors.

This package is distributed under the terms of the GNU General Public License, version 2 or later. Please see the file COPYING.txt for further details.



[alekssamos](https://github.com/alekssamos/) added automatic package of add-ons through Github Actions.

For details about Github Actions please see the [Workflow syntax for GitHub Actions](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions).

Copyright (C) 2022 alekssamos


## Features

This template provides the following features you can use during NVDA add-on development and packaging:

* Automatic add-on package creation, with naming and version loaded from a centralized build variables file (buildVars.py) or command-line interface.
* See packaging section for details on using command-line switches when packaging add-ons with custom version information.
* This process will happen automatically when receiving a pull request, and there is also the possibility of manual launch.
* To let the workflow run automatically when pushing to main or master (development) branch, remove the comment for branches line in GitHub Actions (`.github/workflows/build_addon.yml`).
* If you have created a tag (E.G.: `git tag v1.0 && git push --tag`), then a release will be automatically created and the add-on file will be uploaded as an asset.
* Otherwise, with normal commits or with manual startup, you can download the artifacts from the Actions page of your repository.
* Manifest file creation using a template (manifest.ini.tpl). Build variables are replaced on this template. See below for add-on manifest specification.
* Compilation of gettext mo files before distribution, when needed.
* To generate a gettext pot file, please run `scons pot`. An `addon-name.pot` file will be created with all gettext messages for your add-on. You need to check the `buildVars.i18nSources` variable to comply with your requirements.
* Automatic generation of manifest localization files directly from gettext po files. Please make sure buildVars.py is included in i18nFiles.
* Automatic generation of HTML documents from markdown (.md) files, to manage documentation in different languages.
* Automatic generation of entries for NV Access add-on store (json format).

In addition, this template includes configuration files for the following tools for use in add-on development and testing (see "additional tools" section for details):

* Flake8 (flake8.ini): a base configuration file for Flake8 linting tool based on NVDA's own Flake8 configuration file.
* Configuration for VS Code. It requires NVDA's repo at the same level as the add-on folder containing your actual source files, with prepared source code (`scons source`). preparing the source code is a step in the instructions for building NVDA itself, see [The NVDA Repository](https://github.com/nvaccess/nvda) for details.
* Place the .vscode in this repo within the addon folder, where your add-on source files (will) reside. The settings file within this folder assumes the NVDA repository is within the parent folder of this folder. If your addon folder is within the addonTemplate folder, then your NVDA repository folder needs to also be within the addonTemplate folder, or the source will not be found.
* Open the addon folder in VS Code. This should initialize VS Code with the correct settings and provide you with code completion and other VS Code features.
* Press `control+shift+m` after saving a file to search for problems.
* Use arrow and tab keys for the autocompletion feature.
* Press `control+shift+p` to open the commands palette and search for recommended extensions to install or check if they are installed.

## Requirements

You need the following software to use this code for your NVDA add-on development and packaging:

* a Python distribution (3.7 or later is recommended). Check the [Python Website](https://www.python.org) for Windows Installers. Please note that at present, preparing the NVDA source code requires the 32-bit version of Python 3.7.
* Scons - [Website](https://www.scons.org/) - version 4.3.0 or later. You can install it via PIP.
* GNU Gettext tools, if you want to have localization support for your add-on - Recommended. Any Linux distro or cygwin have those installed. You can find windows builds [here](https://gnuwin32.sourceforge.net/downlinks/gettext.php).
* Markdown 3.3.0 or later, if you want to convert documentation files to HTML documents. You can install it via PIP.

Note, that you may not need these tools in a local build environment, if you are using [Appveyor](https://appveyor.com/) or [GitHub Actions](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions), to build and package your add-ons.

## Usage

### To create a new NVDA add-on using this template:

1. Create an empty folder to hold the files for your add-on.
2. Copy the folder:
```
site_scons
```
and the following files, into your new empty folder:
```
buildVars.py
manifest.ini.tpl
manifest-translated.ini.tpl
sconstruct
.gitignore
.gitattributes
```
3. If you intend to use the provided GitHub workflow, also copy the folder:
```
.github
```
and file:
```
.pre-commit-config.yaml
```
4. Create an `addon` folder inside your new folder. You will put your code in the usual folders for NVDA extensions, under the `addon` folder. For instance: `globalPlugins`, `synthDrivers`, etc.
5. In the `buildVars.py` file, change variable `addon_info` with your add-on's information (name, summary, description, version, author, url, source url, license, and license URL). Also, be sure to carefully set the paths contained in the other variables in that file.
6. Gettext translations must be placed into `addon\locale\<lang>/LC_MESSAGES\nvda.po`.

#### Add-on manifest specification

An add-on manifest generated manually or via `buildVars.py` must include the following information:

* Name (string): a unique identifier for the add-on. It must use camel case (e.g. someModule). This is also used as part of add-on store to identify the add-on uniquely.
* Summary (string): name as shown on NVDA's Add-ons Manager.
* Description (string): a short detailed description about the add-on.
* Version (string), ideally number.number with an optional third number, denoting major.minor.patch.
* Author (string and an email address): one or more add-on author contact information in the form "name <email@address>".
* URL (string): a web address where the add-on information can be found (typically community add-ons website address (https://addons.nvda-project.org) is used).
* docFileName (string): name of the documentation file.
* minimumNVDAVersion (year.major or year.major.minor): the earliest version of NVDA the add-on is compatible with (e.g. 2019.3). Add-ons are expected to use features introduced in this version of NVDA or declare compatibility with it.
* lastTestedNVDAVersion (year.major or year.major.minor): the latest or last tested version of NVDA the add-on is said to be compatible with (e.g. 2020.3). Add-on authors are expected to declare this value after testing add-ons with the version of NVDA specified.
* addon_updateChannel (string or None): the update channel for the add-on release.

In addition, the following information must be filled out (not used in the manifest but used elsewhere such as add-on store):

* sourceURL (string): repository URL for the add-on source code.
* license (string): the license of the add-on and its source code.
* licenseURL: the URL for the license file.

### To manage documentation files for your addon:

1. Copy the `readme.md` file for your add-on to the first created folder, where you copied `buildVars.py`. You can also copy `style.css` to improve the presentation of HTML documents.
2. Documentation files (named `readme.md`) must be placed into `addon\doc\<lang>/`.

### To package the add-on for distribution:

1. Open a command line, change to the folder that has the `sconstruct` file (usually the root of your add-on development folder) and run the `scons` command. The created add-on, if there were no errors, is placed in the current directory.
2. You can further customize variables in the `buildVars.py` file.
3. You can also customize version and update channel information from command line by passing the following switches when running scons:
* version: add-on version string.
* versionNumber: add-on version number of the form major.minor.patch (all integers)
* channel: update channel (do not use this switch unless you know what you are doing).
* dev: suitable for development builds, names the add-on according to current date (yyyymmdd) and sets update channel to "dev".

### Additional tools

The template includes configuration files for use with additional tools such as linters. These include:

* Flake8 (flake8.ini): a Python code linter (3.7.9 or later, can be installed with PIP).

Read the documentation for the tools you wish to use when building and developing add-ons.

Note that this template only provides a basic add-on structure and build infrastructure. You may need to adapt it for your specific needs such as using additional tools.

If you have any issues please use the NVDA addon list mentioned above.
Loading

0 comments on commit 031f2ae

Please sign in to comment.