Compare commits
23 commits
7ef55e48e8
...
23c3b771c2
Author | SHA1 | Date | |
---|---|---|---|
23c3b771c2 | |||
041d4f424e | |||
1fc19f6ba3 | |||
07e556da56 | |||
cd6f258720 | |||
1c7e9d627d | |||
e2841c0129 | |||
ca5c7492dc | |||
34cb856dd4 | |||
e9d204daab | |||
a2443d7915 | |||
56a0817960 | |||
c806f09b10 | |||
c32d70e9ed | |||
8cefc56ac7 | |||
850d076268 | |||
95b47effdf | |||
49aa23de92 | |||
4a1b333198 | |||
b5bdbb6294 | |||
309b0fafb0 | |||
f9af0c34dd | |||
937cb07d0b |
27
.gitignore
vendored
|
@ -1,13 +1,19 @@
|
||||||
|
# Building
|
||||||
build/
|
build/
|
||||||
dist/
|
dist/
|
||||||
deb_dist/
|
deb_dist/
|
||||||
linux/flatpak/AppDir
|
assets/linux/flatpak/AppDir
|
||||||
linux/flatpak/repo
|
assets/linux/flatpak/repo
|
||||||
linux/flatpak/build-dir
|
assets/linux/flatpak/build-dir
|
||||||
linux/flatpak/.flatpak-builder
|
assets/linux/flatpak/.flatpak-builder
|
||||||
*.snap
|
*.snap
|
||||||
*.spec
|
*.spec
|
||||||
*.zip
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.spec
|
||||||
|
*.egg-info/
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
**/**.qmlc
|
**/**.qmlc
|
||||||
**/**.jsc
|
**/**.jsc
|
||||||
**/**.pyc
|
**/**.pyc
|
||||||
|
@ -20,16 +26,19 @@ linux/flatpak/.flatpak-builder
|
||||||
.DS_Store
|
.DS_Store
|
||||||
**/.DS_Store
|
**/.DS_Store
|
||||||
**/__pycache__/
|
**/__pycache__/
|
||||||
|
|
||||||
|
# IDE Data
|
||||||
.ropeproject
|
.ropeproject
|
||||||
.vscode
|
.vscode
|
||||||
*.kdev4
|
*.kdev4
|
||||||
.kdev4
|
.kdev4
|
||||||
.coverage
|
|
||||||
build
|
|
||||||
docs/html
|
docs/html
|
||||||
.directory
|
.directory
|
||||||
*.lpf
|
*.lpf
|
||||||
*.lgg
|
*.lgg
|
||||||
*.spec
|
|
||||||
*.egg-info/
|
# npm
|
||||||
*.tar.gz
|
common/node_modules
|
||||||
|
common/coverage/
|
||||||
|
common/.coverage
|
||||||
|
runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/LogarithmPlotter/js/index.mjs*
|
||||||
|
|
4
.gitmodules
vendored
|
@ -1,3 +1,3 @@
|
||||||
[submodule "LogarithmPlotter/qml/eu/ad5001/MixedMenu"]
|
[submodule "runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/MixedMenu"]
|
||||||
path = LogarithmPlotter/qml/eu/ad5001/MixedMenu
|
path = runtime-pyside6/LogarithmPlotter/qml/eu/ad5001/MixedMenu
|
||||||
url = https://git.ad5001.eu/Ad5001/MixedMenu
|
url = https://git.ad5001.eu/Ad5001/MixedMenu
|
||||||
|
|
|
@ -1,130 +0,0 @@
|
||||||
/**
|
|
||||||
* LogarithmPlotter - 2D plotter software to make BODE plots, sequences and distribution functions.
|
|
||||||
* Copyright (C) 2021-2024 Ad5001
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
export const NUMBER = 0
|
|
||||||
export const STRING = "string"
|
|
||||||
export const BOOLEAN = true
|
|
||||||
export const OBJECT = {}
|
|
||||||
export const FUNCTION = () => {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export class Interface {
|
|
||||||
/**
|
|
||||||
* Checks if the class to check implements the given interface.
|
|
||||||
* Throws an error if the implementation does not conform to the interface.
|
|
||||||
* @param {typeof Interface} interface_
|
|
||||||
* @param {object} classToCheck
|
|
||||||
* @return {boolean}
|
|
||||||
*/
|
|
||||||
static check_implementation(interface_, classToCheck) {
|
|
||||||
const properties = new interface_()
|
|
||||||
const interfaceName = interface_.name
|
|
||||||
const toCheckName = classToCheck.constructor.name
|
|
||||||
for(const [property, value] of Object.entries(properties))
|
|
||||||
if(property !== "implement") {
|
|
||||||
console.log(classToCheck[property], value)
|
|
||||||
if(!classToCheck.hasOwnProperty(property))
|
|
||||||
// Check if the property exist
|
|
||||||
throw new Error(`Property '${property}' (${typeof value}) is present in interface ${interfaceName}, but not in implementation ${toCheckName}.`)
|
|
||||||
else if((typeof value) !== (typeof classToCheck[property]))
|
|
||||||
// Compare the types
|
|
||||||
throw new Error(`Property '${property}' of ${interfaceName} implementation ${toCheckName} is a '${typeof classToCheck[property]}' and not a '${typeof value}'.`)
|
|
||||||
else if((typeof value) === "object")
|
|
||||||
// Test type of object.
|
|
||||||
if(value instanceof Interface)
|
|
||||||
Interface.check_implementation(value, classToCheck[property])
|
|
||||||
else if(value.prototype && !(classToCheck[property] instanceof value))
|
|
||||||
throw new Error(`Property '${property}' of ${interfaceName} implementation ${toCheckName} is not '${value.constructor.name}'.`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decorator to automatically check if a class conforms to the current interface.
|
|
||||||
* @param {object} class_
|
|
||||||
*/
|
|
||||||
implement(class_) {
|
|
||||||
Interface.check_implementation(this, class_)
|
|
||||||
return class_
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export class SettingsInterface extends Interface {
|
|
||||||
constructor() {
|
|
||||||
super()
|
|
||||||
this.width = NUMBER
|
|
||||||
this.height = NUMBER
|
|
||||||
this.xmin = NUMBER
|
|
||||||
this.ymax = NUMBER
|
|
||||||
this.xzoom = NUMBER
|
|
||||||
this.yzoom = NUMBER
|
|
||||||
this.xaxisstep = STRING
|
|
||||||
this.yaxisstep = STRING
|
|
||||||
this.xlabel = STRING
|
|
||||||
this.ylabel = STRING
|
|
||||||
this.linewidth = NUMBER
|
|
||||||
this.textsize = NUMBER
|
|
||||||
this.logscalex = BOOLEAN
|
|
||||||
this.showxgrad = BOOLEAN
|
|
||||||
this.showygrad = BOOLEAN
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class CanvasInterface extends SettingsInterface {
|
|
||||||
constructor() {
|
|
||||||
super()
|
|
||||||
this.imageLoaders = OBJECT
|
|
||||||
/** @type {function(string): CanvasRenderingContext2D} */
|
|
||||||
this.getContext = FUNCTION
|
|
||||||
/** @type {function(rect)} */
|
|
||||||
this.markDirty = FUNCTION
|
|
||||||
/** @type {function(string)} */
|
|
||||||
this.loadImage = FUNCTION
|
|
||||||
/** @type {function()} */
|
|
||||||
this.requestPaint = FUNCTION
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class RootInterface extends Interface {
|
|
||||||
constructor() {
|
|
||||||
super()
|
|
||||||
this.width = NUMBER
|
|
||||||
this.height = NUMBER
|
|
||||||
this.updateObjectsLists = FUNCTION
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class DialogInterface extends Interface {
|
|
||||||
constructor() {
|
|
||||||
super()
|
|
||||||
this.show = FUNCTION
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class HistoryInterface extends Interface {
|
|
||||||
constructor() {
|
|
||||||
super()
|
|
||||||
this.undo = FUNCTION
|
|
||||||
this.redo = FUNCTION
|
|
||||||
this.clear = FUNCTION
|
|
||||||
this.addToHistory = FUNCTION
|
|
||||||
this.unserialize = FUNCTION
|
|
||||||
this.serialize = FUNCTION
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,174 +0,0 @@
|
||||||
/**
|
|
||||||
* LogarithmPlotter - 2D plotter software to make BODE plots, sequences and distribution functions.
|
|
||||||
* Copyright (C) 2021-2024 Ad5001
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import * as Polyfill from "../lib/expr-eval/polyfill.mjs"
|
|
||||||
|
|
||||||
export const CONSTANTS = {
|
|
||||||
"π": Math.PI,
|
|
||||||
"pi": Math.PI,
|
|
||||||
"inf": Infinity,
|
|
||||||
"infinity": Infinity,
|
|
||||||
"∞": Infinity,
|
|
||||||
"e": Math.E
|
|
||||||
};
|
|
||||||
export const CONSTANTS_LIST = Object.keys(CONSTANTS);
|
|
||||||
|
|
||||||
export const FUNCTIONS = {
|
|
||||||
// The functions commented are the one either not implemented
|
|
||||||
// in the parser, or not to be used for autocompletion.
|
|
||||||
// Unary operators
|
|
||||||
//'+': Number,
|
|
||||||
//'-': (x) => -x,
|
|
||||||
//'!'
|
|
||||||
// Other operations
|
|
||||||
'length': (s) => Array.isArray(s) ? s.length : String(s).length,
|
|
||||||
// Boolean functions
|
|
||||||
'not': (x) => !x,
|
|
||||||
// Math functions
|
|
||||||
'abs': Math.abs,
|
|
||||||
'acos': Math.acos,
|
|
||||||
'acosh': Math.acosh,
|
|
||||||
'asin': Math.asin,
|
|
||||||
'asinh': Math.asinh,
|
|
||||||
'atan': Math.atan,
|
|
||||||
'atan2': Math.atan2,
|
|
||||||
'atanh': Math.atanh,
|
|
||||||
'cbrt': Math.cbrt,
|
|
||||||
'ceil': Math.ceil,
|
|
||||||
//'clz32': Math.clz32,
|
|
||||||
'cos': Math.cos,
|
|
||||||
'cosh': Math.cosh,
|
|
||||||
'exp': Math.exp,
|
|
||||||
'expm1': Math.expm1,
|
|
||||||
'floor': Math.floor,
|
|
||||||
//'fround': Math.fround,
|
|
||||||
'hypot': Math.hypot,
|
|
||||||
//'imul': Math.imul,
|
|
||||||
'lg': Math.log10,
|
|
||||||
'ln': Math.log,
|
|
||||||
'log': Math.log,
|
|
||||||
'log10': Math.log10,
|
|
||||||
'log1p': Math.log1p,
|
|
||||||
'log2': Math.log2,
|
|
||||||
'max': Math.max,
|
|
||||||
'min': Math.min,
|
|
||||||
'pow': Math.log2,
|
|
||||||
'random': Math.random,
|
|
||||||
'round': Math.round,
|
|
||||||
'sign': Math.sign,
|
|
||||||
'sin': Math.sin,
|
|
||||||
'sinh': Math.sinh,
|
|
||||||
'sqrt': Math.sqrt,
|
|
||||||
'tan': Math.tan,
|
|
||||||
'tanh': Math.tanh,
|
|
||||||
'trunc': Math.trunc,
|
|
||||||
// Functions in expr-eval, ported here.
|
|
||||||
'fac': Polyfill.factorial,
|
|
||||||
'gamma': Polyfill.gamma,
|
|
||||||
'Γ': Polyfill.gamma,
|
|
||||||
'roundTo': (x, exp) => Number(x).toFixed(exp),
|
|
||||||
// 'map': Polyfill.arrayMap,
|
|
||||||
// 'fold': Polyfill.arrayFold,
|
|
||||||
// 'filter': Polyfill.arrayFilter,
|
|
||||||
// 'indexOf': Polyfill.indexOf,
|
|
||||||
// 'join': Polyfill.arrayJoin,
|
|
||||||
// Integral & derivative (only here for autocomplete).
|
|
||||||
'integral': () => 0, // TODO: Implement
|
|
||||||
'derivative': () => 0,
|
|
||||||
}
|
|
||||||
export const FUNCTIONS_LIST = Object.keys(FUNCTIONS);
|
|
||||||
|
|
||||||
export class P {
|
|
||||||
// Parameter class.
|
|
||||||
constructor(type, name = '', optional = false, multipleAllowed = false) {
|
|
||||||
this.name = name
|
|
||||||
this.type = type
|
|
||||||
this.optional = optional
|
|
||||||
this.multipleAllowed = multipleAllowed
|
|
||||||
}
|
|
||||||
|
|
||||||
toString() {
|
|
||||||
let base_string = this.type
|
|
||||||
if(this.name !== '')
|
|
||||||
base_string = `${this.name}: ${base_string}`
|
|
||||||
if(this.multipleAllowed)
|
|
||||||
base_string += '...'
|
|
||||||
if(!this.optional)
|
|
||||||
base_string = `<${base_string}>`
|
|
||||||
else
|
|
||||||
base_string = `[${base_string}]`
|
|
||||||
return base_string
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export let string = new P('string')
|
|
||||||
export let bool = new P('bool')
|
|
||||||
export let number = new P('number')
|
|
||||||
export let array = new P('array')
|
|
||||||
|
|
||||||
export const FUNCTIONS_USAGE = {
|
|
||||||
'length': [string],
|
|
||||||
'not': [bool],
|
|
||||||
// Math functions
|
|
||||||
'abs': [number],
|
|
||||||
'acos': [number],
|
|
||||||
'acosh': [number],
|
|
||||||
'asin': [number],
|
|
||||||
'asinh': [number],
|
|
||||||
'atan': [number],
|
|
||||||
'atan2': [number],
|
|
||||||
'atanh': [number],
|
|
||||||
'cbrt': [number],
|
|
||||||
'ceil': [number],
|
|
||||||
//'clz32': [number],
|
|
||||||
'cos': [number],
|
|
||||||
'cosh': [number],
|
|
||||||
'exp': [number],
|
|
||||||
'expm1': [number],
|
|
||||||
'floor': [number],
|
|
||||||
//'fround': [number],
|
|
||||||
'hypot': [number],
|
|
||||||
//'imul': [number],
|
|
||||||
'lg': [number],
|
|
||||||
'ln': [number],
|
|
||||||
'log': [number],
|
|
||||||
'log10': [number],
|
|
||||||
'log1p': [number],
|
|
||||||
'log2': [number],
|
|
||||||
'max': [number, number, new P('numbers', '', true, true)],
|
|
||||||
'min': [number, number, new P('numbers', '', true, true)],
|
|
||||||
'pow': [number, new P('number', 'exp')],
|
|
||||||
'random': [number, number],
|
|
||||||
'round': [number],
|
|
||||||
'sign': [number],
|
|
||||||
'sin': [number],
|
|
||||||
'sinh': [number],
|
|
||||||
'sqrt': [number],
|
|
||||||
'tan': [number],
|
|
||||||
'tanh': [number],
|
|
||||||
'trunc': [number],
|
|
||||||
// Functions in expr-eval, ported here.
|
|
||||||
'fac': [number],
|
|
||||||
'gamma': [number],
|
|
||||||
'Γ': [number],
|
|
||||||
'roundTo': [number, new P('number')],
|
|
||||||
// Function manipulation
|
|
||||||
'derivative': [new P('f'), new P('string', 'var', true), number],
|
|
||||||
'integral': [new P('from'), new P('to'), new P('f'), new P('string', 'var', true)],
|
|
||||||
}
|
|
||||||
|
|
40
README.md
|
@ -15,9 +15,19 @@
|
||||||
|
|
||||||
You can find more screenshots on the [app's website](https://apps.ad5001.eu/logarithmplotter/).
|
You can find more screenshots on the [app's website](https://apps.ad5001.eu/logarithmplotter/).
|
||||||
|
|
||||||
## Run
|
## Build & Run
|
||||||
|
|
||||||
You can simply run LogarithmPlotter using `python3 run.py`.
|
First, you'll need to install all the required dependencies:
|
||||||
|
|
||||||
|
- [Python 3](https://python.org) with [poetry](https://python-poetry.org/), setup a virtual environment, go to the `runtime-pyside6` directory, and call
|
||||||
|
`poetry install`.
|
||||||
|
- [npm](https://npmjs.com) (or [yarn](https://yarnpkg.com/)), go to the `common` directory, and run `npm install` (or `yarn install`).
|
||||||
|
|
||||||
|
You can simply run LogarithmPlotter using `python3 run.py`. It automatically compiles the language files (requires
|
||||||
|
`lrelease` to be installed and in path), and the JavaScript modules.
|
||||||
|
|
||||||
|
If you do not wish do recompile the files again on every run, you can use the build script (`scripts/build.sh`) and run
|
||||||
|
`python3 build/runtime-pyside6/LogarithmPlotter/logarithmplotter.py`.
|
||||||
|
|
||||||
In order to test translations, you can use the `--lang=<lang code>` commandline option to force the locale.
|
In order to test translations, you can use the `--lang=<lang code>` commandline option to force the locale.
|
||||||
|
|
||||||
|
@ -27,26 +37,20 @@ In order to test translations, you can use the `--lang=<lang code>` commandline
|
||||||
|
|
||||||
All scripts noted here can be found in the `scripts` directory.
|
All scripts noted here can be found in the `scripts` directory.
|
||||||
|
|
||||||
You can generate installers for LogarithmPlotter after installing all the dependencies:
|
You can generate installers for LogarithmPlotter after installing all the dependencies.
|
||||||
For all builds, you will need [Python 3](https://python.org) with [poetry](https://python-poetry.org/), and
|
|
||||||
`poetry install --with packaging`.
|
|
||||||
|
|
||||||
- Windows installer:
|
- Windows installer (crosscompiling from Linux):
|
||||||
- Run the `build-windows.bat` script (or `build-wine.sh` if you're cross-compiling with wine on Linux) to build an
|
- Run `build-wine.sh` (requires wine) to build an exe for LogarithmPlotter in build/runtime-pyside6/dist.
|
||||||
exe for LogarithmPlotter.
|
- You also need [NSIS](https://nsis.sourceforge.io/Main_Page) (the [nsis](https://pkgs.org/download/nsis) package is available on linux).
|
||||||
- You also need [NSIS](https://nsis.sourceforge.io/Main_Page) (Linux users can install
|
- Run the `package-wine.sh` script. You will find a logarithmplotter-setup.exe installer in the build/runtime-pyside6/dist/logarithmplotter/ folder.
|
||||||
the [nsis](https://pkgs.org/download/nsis) package).
|
|
||||||
- Run the `package-windows.bat` script (or `package-wine.sh`if you're cross-compiling on Linux). You will find a
|
|
||||||
logarithmplotter-setup.exe installer in the dist/logarithmplotter/ folder.
|
|
||||||
- MacOS Archive creator installer:
|
- MacOS Archive creator installer:
|
||||||
- Run the `build-macosx.sh` script to build an .app for LogarithmPlotter which can be found in the dist directory.
|
- Run the `build-macosx.sh` script to build an .app for LogarithmPlotter which can be found in the build/runtime-pyside6/dist directory.
|
||||||
- Run the `package-macosx.sh` script. You will find a LogarithmPlotter-v<version>-setup.dmg installer in the
|
- Run the `package-macosx.sh` script. You will find a LogarithmPlotter-v<version>-setup.dmg installer in the
|
||||||
dist/ folder.
|
build/runtime-pyside6/build/pysdist/ folder.
|
||||||
- Linux packages:
|
- Linux packages:
|
||||||
- To build and install the flatpak, you
|
- Run `package-deb.sh`. It will create an DSC and a DEB in build/runtime-pyside6/deb_dist/
|
||||||
need [flatpak-builder](https://docs.flatpak.org/en/latest/flatpak-builder.html) installed.
|
- Run `scripts/build.sh` followed by `snapcraft`. It .snap file in the root directory.
|
||||||
- To build the snap, you need [snapcraft](https://snapcraft.io) installed.
|
- See [the flatpak repo](https://github.com/Ad5001/eu.ad5001.LogarithmPlotter) for instrutions on how to build the flatpak.
|
||||||
- Run `package-linux.sh`.
|
|
||||||
|
|
||||||
## Contribute
|
## Contribute
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
# specificities so that lupdate doesn't cry out in pain.
|
# specificities so that lupdate doesn't cry out in pain.
|
||||||
# See also: https://bugreports.qt.io/browse/QTBUG-123819
|
# See also: https://bugreports.qt.io/browse/QTBUG-123819
|
||||||
#
|
#
|
||||||
|
|
||||||
escape() {
|
escape() {
|
||||||
str="$1"
|
str="$1"
|
||||||
str="${str//\//\\/}" # Escape slashes
|
str="${str//\//\\/}" # Escape slashes
|
||||||
|
@ -19,15 +19,20 @@ replace() {
|
||||||
sed -i "s/${from}/${to}/g" "$file"
|
sed -i "s/${from}/${to}/g" "$file"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rm ../qml/eu/ad5001/LogarithmPlotter/js/index.mjs # Remove index which should not be scanned
|
||||||
|
|
||||||
files=$(find .. -name *.mjs)
|
files=$(find .. -name *.mjs)
|
||||||
for file in $files; do
|
for file in $files; do
|
||||||
echo "Moving '$file' to '${file%.*}.js'..."
|
echo "Moving '$file' to '${file%.*}.js'..."
|
||||||
mv "$file" "${file%.*}.js"
|
mv "$file" "${file%.*}.js"
|
||||||
# Replacements to make it valid js
|
# Replacements to make it valid js
|
||||||
replace "${file%.*}.js" "^import" "/*import"
|
replace "${file%.*}.js" "^import" "/*import"
|
||||||
|
replace "${file%.*}.js" "^export *" "/*export *"
|
||||||
replace "${file%.*}.js" '.mjs"$' '.mjs"*/'
|
replace "${file%.*}.js" '.mjs"$' '.mjs"*/'
|
||||||
replace "${file%.*}.js" "^export default" "/*export default*/"
|
replace "${file%.*}.js" "^export default" "/*export default*/"
|
||||||
replace "${file%.*}.js" "^export" "/*export*/"
|
replace "${file%.*}.js" "^export" "/*export*/"
|
||||||
|
replace "${file%.*}.js" "async " "/*async */"
|
||||||
|
replace "${file%.*}.js" "await" "/*await */"
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "----------------------------"
|
echo "----------------------------"
|
||||||
|
@ -38,7 +43,6 @@ lupdate -extensions js,qs,qml,py -recursive .. -ts lp_*.ts
|
||||||
for lp in *.ts; do
|
for lp in *.ts; do
|
||||||
echo "Replacing locations in $lp..."
|
echo "Replacing locations in $lp..."
|
||||||
for file in $files; do
|
for file in $files; do
|
||||||
echo " > Replacing for file $file..."
|
|
||||||
replace "$lp" "${file%.*}.js" "$file"
|
replace "$lp" "${file%.*}.js" "$file"
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
@ -47,8 +51,11 @@ for file in $files; do
|
||||||
echo "Moving '${file%.*}.js' to '$file'..."
|
echo "Moving '${file%.*}.js' to '$file'..."
|
||||||
mv "${file%.*}.js" "$file"
|
mv "${file%.*}.js" "$file"
|
||||||
# Resetting changes
|
# Resetting changes
|
||||||
replace "$file" "^/*import" "import"
|
replace "$file" "/*await */" "await"
|
||||||
replace "$file" '.mjs"*/$' '.mjs"'
|
replace "$file" "/*async */" "async "
|
||||||
replace "$file" "^/*export default*/" "export default"
|
|
||||||
replace "$file" "^/*export*/" "export"
|
replace "$file" "^/*export*/" "export"
|
||||||
|
replace "$file" "^/*export default*/" "export default"
|
||||||
|
replace "$file" "^/*import" "import"
|
||||||
|
replace "$file" "^/*export" "export"
|
||||||
|
replace "$file" '.mjs"*/$' '.mjs"'
|
||||||
done
|
done
|
Before Width: | Height: | Size: 198 B After Width: | Height: | Size: 198 B |
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 289 B After Width: | Height: | Size: 289 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 620 B After Width: | Height: | Size: 620 B |
Before Width: | Height: | Size: 261 B After Width: | Height: | Size: 261 B |
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 251 B |
Before Width: | Height: | Size: 550 B After Width: | Height: | Size: 550 B |
Before Width: | Height: | Size: 273 B After Width: | Height: | Size: 273 B |
Before Width: | Height: | Size: 696 B After Width: | Height: | Size: 696 B |
Before Width: | Height: | Size: 270 B After Width: | Height: | Size: 270 B |
Before Width: | Height: | Size: 370 B After Width: | Height: | Size: 370 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 675 B After Width: | Height: | Size: 675 B |
Before Width: | Height: | Size: 414 B After Width: | Height: | Size: 414 B |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
1
assets/native/linux/application-x-logarithm-plot.svg
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../../logplotterfile.svg
|
|
@ -3,9 +3,9 @@ Source: logarithmplotter
|
||||||
Version: 0.6.0
|
Version: 0.6.0
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Maintainer: Ad5001 <mail@ad5001.eu>
|
Maintainer: Ad5001 <mail@ad5001.eu>
|
||||||
Depends: python3, python3-pip, python3-pyside6-essentials (>= 6.7.0), python3-pyside6-addons (>= 6.7), texlive-latex-base, dvipng
|
Depends: python3 (>= 3.9), python3-pip, python3-pyside6-essentials (>= 6.7.0), python3-pyside6-addons (>= 6.7), texlive-latex-base, dvipng
|
||||||
|
|
||||||
Build-Depends: debhelper (>=11~), dh-python, dpkg-dev (>= 1.16.1~), python-setuptools, python3-all-dev (>=3.9)
|
Build-Depends: debhelper (>=11~), dh-python, dpkg-dev (>= 1.16.1~), python-setuptools
|
||||||
Section: science
|
Section: science
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Homepage: https://apps.ad5001.eu/logarithmplotter/
|
Homepage: https://apps.ad5001.eu/logarithmplotter/
|
1
assets/native/linux/debian/depends
Normal file
|
@ -0,0 +1 @@
|
||||||
|
python3 (>= 3.9), python3-pip, python3-pyside6-essentials (>= 6.7.0), texlive-latex-base, dvipng
|
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 856 B After Width: | Height: | Size: 856 B |
Before Width: | Height: | Size: 5 KiB After Width: | Height: | Size: 5 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |