Compare commits
239 Commits
Author | SHA1 | Date |
---|---|---|
|
a84d772193 | |
|
7062f6a576 | |
|
d35100de75 | |
|
ef3409419a | |
|
6aed0296ee | |
|
022e2f1b53 | |
|
27cf5b077a | |
|
c8e0d5042e | |
|
82b352d827 | |
|
e94ebecfa2 | |
|
123fadd7ac | |
|
3fbfb38a53 | |
|
83e34a983c | |
|
53b16c9d35 | |
|
4c940403bd | |
|
f82d767a19 | |
|
d385fdd64c | |
|
ce15113a7a | |
|
23179c0266 | |
|
b8dde0ff52 | |
|
3df126d700 | |
|
e045169d99 | |
|
414681fc0b | |
|
691d140db5 | |
|
96cf7dfe74 | |
|
576470f70a | |
|
625e456e6b | |
|
2a17547da3 | |
|
fb46147547 | |
|
d37c7514f3 | |
|
7fe6187f98 | |
|
0bbb560b48 | |
|
d583c396b1 | |
|
2096022bd4 | |
|
e3c342c07b | |
|
ee6c7c45d8 | |
|
76d5d60c2b | |
|
00dd3283e9 | |
|
b2998ffe80 | |
|
579663c32c | |
|
717284ad14 | |
|
197f0a9dca | |
|
b1e455ca48 | |
|
86bc122c5f | |
|
0ca2e4f01b | |
|
4e14f35021 | |
|
10d94886a5 | |
|
e57ac28cde | |
|
5853fc68c2 | |
|
aa039277a9 | |
|
d759f81905 | |
|
a0b673afb0 | |
|
b9fd45980f | |
|
31aeb66cd4 | |
|
896214d2b7 | |
|
6df4263107 | |
|
373bc98869 | |
|
2a9df20b5c | |
|
0e4afd90d9 | |
|
0dc3a079ee | |
|
898f873cec | |
|
de79106d61 | |
|
543571d66b | |
|
f2acfcc4be | |
|
5a0aa5160c | |
![]() |
abf6d4903f | |
![]() |
5bcb05142c | |
![]() |
b358b56974 | |
![]() |
ef1b7800c6 | |
![]() |
0b2a8e7821 | |
![]() |
9608ce6bfc | |
![]() |
0e21b7187d | |
|
b277bb25b4 | |
|
35416ce12b | |
|
8ccd721c98 | |
|
0f6f24aa95 | |
|
6bdfd5a9ef | |
|
27817c824e | |
|
06c763d862 | |
|
4937e60333 | |
|
6775f5433d | |
|
eeeff8429a | |
|
1d3ca4bf2d | |
|
59e2ccfd63 | |
|
f716c22e76 | |
|
9c86d23d31 | |
|
4e3b49007d | |
|
0a2c8bbdab | |
|
0c1ab111a6 | |
|
8092d608c3 | |
|
c03191c50d | |
|
e966ea673d | |
|
a28bf45899 | |
|
c2abc70e9e | |
|
b1b29206ce | |
|
7ea1d83d32 | |
|
7d912978ce | |
|
d7d01e2216 | |
|
4623c16968 | |
|
452465d525 | |
|
7f13fb5c64 | |
|
500264f869 | |
|
e2bd06111c | |
|
fbb5424135 | |
|
15ec74b3f3 | |
|
0f08c44e11 | |
|
fe1d41e18a | |
|
0b92a1411c | |
|
f20dc0d4f8 | |
|
d9c61a00dd | |
|
cf2742f961 | |
|
7b3f8e2dca | |
|
de6ecbe34c | |
|
1a05af36d6 | |
|
ad3fb3c5c7 | |
|
091ed12f53 | |
|
eace52cc35 | |
|
00e306208b | |
|
7b8af878ab | |
|
e0aed7a1b5 | |
|
59de052531 | |
|
06e6ffa470 | |
|
d0dccbdae3 | |
|
4efb9e49e8 | |
![]() |
5ae1578902 | |
![]() |
3ba9689387 | |
![]() |
2d5b9598f8 | |
|
a154817071 | |
|
d58b319cc8 | |
|
911cca5373 | |
|
2da4dcfd6b | |
|
94f7ed3487 | |
|
ca6ccedb57 | |
|
0430ac3da2 | |
|
6ab330418e | |
|
6fc64a1f23 | |
|
b0fc890af8 | |
|
0a8f3b384f | |
|
4065f19fa9 | |
|
010722bd9b | |
|
6196d4a7a4 | |
|
30c833c6b9 | |
|
f98eae1d70 | |
|
226838f5a7 | |
|
aeb3bb0310 | |
|
a1d87a6365 | |
|
f6aae5ab2b | |
|
0fb2e24047 | |
|
cb23aedbfa | |
|
00a5d148f1 | |
|
c4c4ee8722 | |
|
f30560bd6e | |
|
fc19480aa1 | |
|
8d4da8c4cf | |
|
e7e391600b | |
|
3f756fd680 | |
|
ef0f359fa5 | |
|
1b6b9e61c4 | |
|
ca7ec5e7ad | |
|
a5104f8d03 | |
|
1a2e6e1b8f | |
|
9dd677cff5 | |
|
20517ecdca | |
|
db6cc69be3 | |
|
4862b7c464 | |
|
0802cff1d5 | |
|
1caf7fc577 | |
|
1939b7afa1 | |
|
940014952f | |
|
f3d1a1e932 | |
|
167f286c88 | |
|
d8ddf03094 | |
|
b025cb0095 | |
|
6bd0b0d624 | |
|
810cedb117 | |
|
54df9ae1cb | |
|
41887ef2a2 | |
|
201b46d8b4 | |
|
04a5b76181 | |
|
f41036441c | |
|
8b3a95dbfd | |
|
413a32b453 | |
|
c95112ab09 | |
|
d92b7e7626 | |
|
ffdedddb27 | |
|
271eef3d2a | |
|
9e00e622b7 | |
|
f31ababaa9 | |
|
3f9a3a7b9f | |
|
9aafc85f2f | |
|
b459ee6db0 | |
|
3dfa0f37d1 | |
|
d37c400c08 | |
|
596eaf689f | |
|
2b99554e02 | |
|
37340dd3e9 | |
|
6a22b1c170 | |
|
951f41d57e | |
|
33be2db48f | |
|
1d7bd94908 | |
![]() |
ee49dcb19e | |
|
ea813fcc37 | |
![]() |
2485438303 | |
![]() |
b5e7884913 | |
![]() |
cee4ab77e2 | |
![]() |
efacc353d7 | |
![]() |
144c030036 | |
|
b028bbd8fa | |
|
a5a06377a2 | |
|
041f5bda39 | |
|
ab3693c90a | |
|
a7595ff304 | |
|
777ff39f69 | |
![]() |
ccfdf94342 | |
|
70c687d862 | |
![]() |
07d89f2605 | |
![]() |
501028ea30 | |
|
fed7271ff4 | |
|
34c3cd31d1 | |
|
1357a1be41 | |
|
474babff87 | |
|
daa42d637c | |
|
97b05ea056 | |
|
a9954f611b | |
![]() |
76d850b318 | |
|
120041c2da | |
![]() |
3a617e1bf3 | |
|
107a5c4396 | |
|
56eaff9dfb | |
|
eb67bbd445 | |
|
05eefcfe9b | |
|
531690fa4a | |
|
c00c51e69c | |
|
6e39f85da2 | |
|
98a3d12937 | |
|
e49395a2fa | |
|
8f6bee1346 | |
|
00176f9919 | |
|
8678f122e1 |
|
@ -0,0 +1,26 @@
|
||||||
|
name: Auto Building Wine Runner
|
||||||
|
run-name: ${{ github.actor }} Auto Building Wine Runner 🚀
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
workflow_dispatch:
|
||||||
|
jobs:
|
||||||
|
Explore-GitHub-Actions:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Building DEB
|
||||||
|
run: |
|
||||||
|
# 配置环境
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install git dpkg-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qt5-qmake -y
|
||||||
|
git clone https://github.com/gfdgd-xi/uengine-runner
|
||||||
|
cd uengine-runner
|
||||||
|
make build
|
||||||
|
mv com.gitee.uengine.runner.spark.deb ~
|
||||||
|
- name: upload result
|
||||||
|
uses: actions/upload-artifact@v1
|
||||||
|
with:
|
||||||
|
name: com.gitee.uengine.runner.spark.deb
|
||||||
|
path: /home/runner/com.gitee.uengine.runner.spark.deb
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
__pycache__
|
|
@ -1,3 +0,0 @@
|
||||||
# 默认忽略的文件
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
|
@ -1,6 +0,0 @@
|
||||||
<component name="InspectionProjectProfileManager">
|
|
||||||
<settings>
|
|
||||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
|
||||||
<version value="1.0" />
|
|
||||||
</settings>
|
|
||||||
</component>
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (uengine-runner)" project-jdk-type="Python SDK" />
|
|
||||||
</project>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/uengine-install.iml" filepath="$PROJECT_DIR$/.idea/uengine-install.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="PYTHON_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<content url="file://$MODULE_DIR$" />
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
|
||||||
<mapping directory="$PROJECT_DIR$/Internet/random-questions/Question" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
Before Width: | Height: | Size: 99 KiB |
BIN
1/我好命苦.png
Before Width: | Height: | Size: 513 KiB |
BIN
1/气死我了.png
Before Width: | Height: | Size: 870 KiB |
|
@ -0,0 +1,45 @@
|
||||||
|
#-------------------------------------------------
|
||||||
|
#
|
||||||
|
# Project created by QtCreator 2022-08-03T09:18:28
|
||||||
|
#
|
||||||
|
#-------------------------------------------------
|
||||||
|
|
||||||
|
QT += core gui network
|
||||||
|
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
|
TARGET = AXVM
|
||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
# The following define makes your compiler emit warnings if you use
|
||||||
|
# any feature of Qt which has been marked as deprecated (the exact warnings
|
||||||
|
# depend on your compiler). Please consult the documentation of the
|
||||||
|
# deprecated API in order to know how to port your code away from it.
|
||||||
|
DEFINES += QT_DEPRECATED_WARNINGS
|
||||||
|
|
||||||
|
# You can also make your code fail to compile if you use deprecated APIs.
|
||||||
|
# In order to do so, uncomment the following line.
|
||||||
|
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||||
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
|
CONFIG += c++11
|
||||||
|
CONFIG += console
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
main.cpp \
|
||||||
|
mainwindow.cpp \
|
||||||
|
downloadthread.cpp \
|
||||||
|
getipserver.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
mainwindow.h \
|
||||||
|
downloadthread.h \
|
||||||
|
getipserver.h
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
mainwindow.ui
|
||||||
|
|
||||||
|
# Default rules for deployment.
|
||||||
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
|
@ -0,0 +1,327 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE QtCreatorProject>
|
||||||
|
<!-- Written by QtCreator 4.8.2, 2022-08-03T22:58:44. -->
|
||||||
|
<qtcreator>
|
||||||
|
<data>
|
||||||
|
<variable>EnvironmentId</variable>
|
||||||
|
<value type="QByteArray">{e6fddbe7-fcb3-41be-bb11-3a30892600b9}</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||||
|
<value type="int">0</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||||
|
<value type="QString" key="language">Cpp</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||||
|
<value type="QString" key="language">QmlJS</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||||
|
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||||
|
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
|
||||||
|
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">桌面</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">桌面</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{b6becee2-04dc-4df3-9a41-75e9b60eccc8}</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/uengine-runner/Android X86/build-AXVM-unknown-Debug</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/uengine-runner/Android X86/build-AXVM-unknown-Release</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/gfdgd_xi/Desktop/uengine-runner/Android X86/build-AXVM-unknown-Profile</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">部署</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy Configuration</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
|
||||||
|
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
|
||||||
|
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
|
||||||
|
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="int">0</value>
|
||||||
|
<value type="int">1</value>
|
||||||
|
<value type="int">2</value>
|
||||||
|
<value type="int">3</value>
|
||||||
|
<value type="int">4</value>
|
||||||
|
<value type="int">5</value>
|
||||||
|
<value type="int">6</value>
|
||||||
|
<value type="int">7</value>
|
||||||
|
<value type="int">8</value>
|
||||||
|
<value type="int">9</value>
|
||||||
|
<value type="int">10</value>
|
||||||
|
<value type="int">11</value>
|
||||||
|
<value type="int">12</value>
|
||||||
|
<value type="int">13</value>
|
||||||
|
<value type="int">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||||
|
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">AXVM</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/gfdgd_xi/Desktop/uengine-runner/Android X86/AXVM/AXVM.pro</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">AXVM.pro</value>
|
||||||
|
<value type="QString" key="RunConfiguration.Arguments"></value>
|
||||||
|
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseTerminal">true</value>
|
||||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
|
||||||
|
<value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/gfdgd_xi/Desktop/uengine-runner/Android X86/build-AXVM-unknown-Debug</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||||
|
<value type="int">1</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||||
|
<value type="int">20</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>Version</variable>
|
||||||
|
<value type="int">20</value>
|
||||||
|
</data>
|
||||||
|
</qtcreator>
|
|
@ -0,0 +1,24 @@
|
||||||
|
QMAKE_CXX.QT_COMPILER_STDCXX = 201402L
|
||||||
|
QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 8
|
||||||
|
QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 3
|
||||||
|
QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0
|
||||||
|
QMAKE_CXX.COMPILER_MACROS = \
|
||||||
|
QT_COMPILER_STDCXX \
|
||||||
|
QMAKE_GCC_MAJOR_VERSION \
|
||||||
|
QMAKE_GCC_MINOR_VERSION \
|
||||||
|
QMAKE_GCC_PATCH_VERSION
|
||||||
|
QMAKE_CXX.INCDIRS = \
|
||||||
|
/usr/include/c++/8 \
|
||||||
|
/usr/include/x86_64-linux-gnu/c++/8 \
|
||||||
|
/usr/include/c++/8/backward \
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include \
|
||||||
|
/usr/local/include \
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed \
|
||||||
|
/usr/include/x86_64-linux-gnu \
|
||||||
|
/usr/include
|
||||||
|
QMAKE_CXX.LIBDIRS = \
|
||||||
|
/usr/lib/gcc/x86_64-linux-gnu/8 \
|
||||||
|
/usr/lib/x86_64-linux-gnu \
|
||||||
|
/usr/lib \
|
||||||
|
/lib/x86_64-linux-gnu \
|
||||||
|
/lib
|
|
@ -0,0 +1,516 @@
|
||||||
|
#############################################################################
|
||||||
|
# Makefile for building: AXVM
|
||||||
|
# Generated by qmake (3.1) (Qt 5.15.3)
|
||||||
|
# Project: ../AXVM.pro
|
||||||
|
# Template: app
|
||||||
|
# Command: /usr/lib/qt5/bin/qmake -o Makefile ../AXVM.pro
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
MAKEFILE = Makefile
|
||||||
|
|
||||||
|
EQ = =
|
||||||
|
|
||||||
|
####### Compiler, tools and options
|
||||||
|
|
||||||
|
CC = gcc
|
||||||
|
CXX = g++
|
||||||
|
DEFINES = -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB
|
||||||
|
CFLAGS = -pipe -O2 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES)
|
||||||
|
CXXFLAGS = -pipe -O2 -std=gnu++11 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES)
|
||||||
|
INCPATH = -I../../AXVM -I. -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++
|
||||||
|
QMAKE = /usr/lib/qt5/bin/qmake
|
||||||
|
DEL_FILE = rm -f
|
||||||
|
CHK_DIR_EXISTS= test -d
|
||||||
|
MKDIR = mkdir -p
|
||||||
|
COPY = cp -f
|
||||||
|
COPY_FILE = cp -f
|
||||||
|
COPY_DIR = cp -f -R
|
||||||
|
INSTALL_FILE = install -m 644 -p
|
||||||
|
INSTALL_PROGRAM = install -m 755 -p
|
||||||
|
INSTALL_DIR = cp -f -R
|
||||||
|
QINSTALL = /usr/lib/qt5/bin/qmake -install qinstall
|
||||||
|
QINSTALL_PROGRAM = /usr/lib/qt5/bin/qmake -install qinstall -exe
|
||||||
|
DEL_FILE = rm -f
|
||||||
|
SYMLINK = ln -f -s
|
||||||
|
DEL_DIR = rmdir
|
||||||
|
MOVE = mv -f
|
||||||
|
TAR = tar -cf
|
||||||
|
COMPRESS = gzip -9f
|
||||||
|
DISTNAME = AXVM1.0.0
|
||||||
|
DISTDIR = /home/gfdgd_xi/Desktop/uengine-runner/Android\ X86/AXVM/build/.tmp/AXVM1.0.0
|
||||||
|
LINK = g++
|
||||||
|
LFLAGS = -Wl,-O1
|
||||||
|
LIBS = $(SUBLIBS) /usr/lib/x86_64-linux-gnu/libQt5Widgets.so /usr/lib/x86_64-linux-gnu/libQt5Gui.so /usr/lib/x86_64-linux-gnu/libQt5Network.so /usr/lib/x86_64-linux-gnu/libQt5Core.so -lGL -lpthread
|
||||||
|
AR = ar cqs
|
||||||
|
RANLIB =
|
||||||
|
SED = sed
|
||||||
|
STRIP = strip
|
||||||
|
|
||||||
|
####### Output directory
|
||||||
|
|
||||||
|
OBJECTS_DIR = ./
|
||||||
|
|
||||||
|
####### Files
|
||||||
|
|
||||||
|
SOURCES = ../main.cpp \
|
||||||
|
../mainwindow.cpp \
|
||||||
|
../downloadthread.cpp \
|
||||||
|
../getipserver.cpp moc_mainwindow.cpp
|
||||||
|
OBJECTS = main.o \
|
||||||
|
mainwindow.o \
|
||||||
|
downloadthread.o \
|
||||||
|
getipserver.o \
|
||||||
|
moc_mainwindow.o
|
||||||
|
DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcommon.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwidget.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwm.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_packetprotocol_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmldebug_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmldevtools_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickparticles_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickshapes_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quicktemplates2.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \
|
||||||
|
../.qmake.stash \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources_functions.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \
|
||||||
|
../../AXVM.pro ../mainwindow.h \
|
||||||
|
../downloadthread.h \
|
||||||
|
../getipserver.h ../main.cpp \
|
||||||
|
../mainwindow.cpp \
|
||||||
|
../downloadthread.cpp \
|
||||||
|
../getipserver.cpp
|
||||||
|
QMAKE_TARGET = AXVM
|
||||||
|
DESTDIR =
|
||||||
|
TARGET = AXVM
|
||||||
|
|
||||||
|
|
||||||
|
first: all
|
||||||
|
####### Build rules
|
||||||
|
|
||||||
|
AXVM: ui_mainwindow.h $(OBJECTS)
|
||||||
|
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
|
||||||
|
|
||||||
|
Makefile: ../AXVM.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcommon.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwidget.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwm.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_packetprotocol_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmldebug_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmldevtools_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickparticles_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickshapes_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quicktemplates2.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \
|
||||||
|
.qmake.stash \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources_functions.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \
|
||||||
|
../AXVM.pro
|
||||||
|
$(QMAKE) -o Makefile ../AXVM.pro
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcommon.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkcore.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkgui.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwidget.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dtkwm.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_packetprotocol_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmldebug_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmldevtools_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlmodels_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmlworkerscript_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickcontrols2.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickparticles_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickshapes_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quicktemplates2.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf:
|
||||||
|
.qmake.stash:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources_functions.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf:
|
||||||
|
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf:
|
||||||
|
../AXVM.pro:
|
||||||
|
qmake: FORCE
|
||||||
|
@$(QMAKE) -o Makefile ../AXVM.pro
|
||||||
|
|
||||||
|
qmake_all: FORCE
|
||||||
|
|
||||||
|
|
||||||
|
all: Makefile AXVM
|
||||||
|
|
||||||
|
dist: distdir FORCE
|
||||||
|
(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
|
||||||
|
|
||||||
|
distdir: FORCE
|
||||||
|
@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
|
||||||
|
$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
|
||||||
|
$(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/
|
||||||
|
$(COPY_FILE) --parents ../mainwindow.h ../downloadthread.h ../getipserver.h $(DISTDIR)/
|
||||||
|
$(COPY_FILE) --parents ../main.cpp ../mainwindow.cpp ../downloadthread.cpp ../getipserver.cpp $(DISTDIR)/
|
||||||
|
$(COPY_FILE) --parents ../mainwindow.ui $(DISTDIR)/
|
||||||
|
|
||||||
|
|
||||||
|
clean: compiler_clean
|
||||||
|
-$(DEL_FILE) $(OBJECTS)
|
||||||
|
-$(DEL_FILE) *~ core *.core
|
||||||
|
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
-$(DEL_FILE) $(TARGET)
|
||||||
|
-$(DEL_FILE) .qmake.stash
|
||||||
|
-$(DEL_FILE) Makefile
|
||||||
|
|
||||||
|
|
||||||
|
####### Sub-libraries
|
||||||
|
|
||||||
|
mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean
|
||||||
|
|
||||||
|
mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all
|
||||||
|
|
||||||
|
check: first
|
||||||
|
|
||||||
|
benchmark: first
|
||||||
|
|
||||||
|
compiler_rcc_make_all:
|
||||||
|
compiler_rcc_clean:
|
||||||
|
compiler_moc_predefs_make_all: moc_predefs.h
|
||||||
|
compiler_moc_predefs_clean:
|
||||||
|
-$(DEL_FILE) moc_predefs.h
|
||||||
|
moc_predefs.h: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp
|
||||||
|
g++ -pipe -O2 -std=gnu++11 -Wall -Wextra -dM -E -o moc_predefs.h /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp
|
||||||
|
|
||||||
|
compiler_moc_header_make_all: moc_mainwindow.cpp
|
||||||
|
compiler_moc_header_clean:
|
||||||
|
-$(DEL_FILE) moc_mainwindow.cpp
|
||||||
|
moc_mainwindow.cpp: ../mainwindow.h \
|
||||||
|
../downloadthread.h \
|
||||||
|
moc_predefs.h \
|
||||||
|
/usr/lib/qt5/bin/moc
|
||||||
|
/usr/lib/qt5/bin/moc $(DEFINES) --include '/home/gfdgd_xi/Desktop/uengine-runner/Android X86/AXVM/build/moc_predefs.h' -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I'/home/gfdgd_xi/Desktop/uengine-runner/Android X86/AXVM' -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -I/usr/include/c++/8/backward -I/usr/lib/gcc/x86_64-linux-gnu/8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include ../mainwindow.h -o moc_mainwindow.cpp
|
||||||
|
|
||||||
|
compiler_moc_objc_header_make_all:
|
||||||
|
compiler_moc_objc_header_clean:
|
||||||
|
compiler_moc_source_make_all:
|
||||||
|
compiler_moc_source_clean:
|
||||||
|
compiler_uic_make_all: ui_mainwindow.h
|
||||||
|
compiler_uic_clean:
|
||||||
|
-$(DEL_FILE) ui_mainwindow.h
|
||||||
|
ui_mainwindow.h: ../mainwindow.ui \
|
||||||
|
/usr/lib/qt5/bin/uic
|
||||||
|
/usr/lib/qt5/bin/uic ../mainwindow.ui -o ui_mainwindow.h
|
||||||
|
|
||||||
|
compiler_yacc_decl_make_all:
|
||||||
|
compiler_yacc_decl_clean:
|
||||||
|
compiler_yacc_impl_make_all:
|
||||||
|
compiler_yacc_impl_clean:
|
||||||
|
compiler_lex_make_all:
|
||||||
|
compiler_lex_clean:
|
||||||
|
compiler_clean: compiler_moc_predefs_clean compiler_moc_header_clean compiler_uic_clean
|
||||||
|
|
||||||
|
####### Compile
|
||||||
|
|
||||||
|
main.o: ../main.cpp ../mainwindow.h \
|
||||||
|
../downloadthread.h
|
||||||
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../main.cpp
|
||||||
|
|
||||||
|
mainwindow.o: ../mainwindow.cpp ../mainwindow.h \
|
||||||
|
../downloadthread.h \
|
||||||
|
ui_mainwindow.h \
|
||||||
|
../getipserver.h
|
||||||
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o ../mainwindow.cpp
|
||||||
|
|
||||||
|
downloadthread.o: ../downloadthread.cpp ../downloadthread.h
|
||||||
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o downloadthread.o ../downloadthread.cpp
|
||||||
|
|
||||||
|
getipserver.o: ../getipserver.cpp ../getipserver.h \
|
||||||
|
../mainwindow.h \
|
||||||
|
../downloadthread.h
|
||||||
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o getipserver.o ../getipserver.cpp
|
||||||
|
|
||||||
|
moc_mainwindow.o: moc_mainwindow.cpp
|
||||||
|
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp
|
||||||
|
|
||||||
|
####### Install
|
||||||
|
|
||||||
|
install_target: first FORCE
|
||||||
|
@test -d $(INSTALL_ROOT)/opt/AXVM/bin || mkdir -p $(INSTALL_ROOT)/opt/AXVM/bin
|
||||||
|
$(QINSTALL_PROGRAM) $(QMAKE_TARGET) $(INSTALL_ROOT)/opt/AXVM/bin/$(QMAKE_TARGET)
|
||||||
|
-$(STRIP) $(INSTALL_ROOT)/opt/AXVM/bin/$(QMAKE_TARGET)
|
||||||
|
|
||||||
|
uninstall_target: FORCE
|
||||||
|
-$(DEL_FILE) $(INSTALL_ROOT)/opt/AXVM/bin/$(QMAKE_TARGET)
|
||||||
|
-$(DEL_DIR) $(INSTALL_ROOT)/opt/AXVM/bin/
|
||||||
|
|
||||||
|
|
||||||
|
install: install_target FORCE
|
||||||
|
|
||||||
|
uninstall: uninstall_target FORCE
|
||||||
|
|
||||||
|
FORCE:
|
||||||
|
|
|
@ -0,0 +1,124 @@
|
||||||
|
/****************************************************************************
|
||||||
|
** Meta object code from reading C++ file 'mainwindow.h'
|
||||||
|
**
|
||||||
|
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.3)
|
||||||
|
**
|
||||||
|
** WARNING! All changes made in this file will be lost!
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include "../mainwindow.h"
|
||||||
|
#include <QtCore/qbytearray.h>
|
||||||
|
#include <QtCore/qmetatype.h>
|
||||||
|
#if !defined(Q_MOC_OUTPUT_REVISION)
|
||||||
|
#error "The header file 'mainwindow.h' doesn't include <QObject>."
|
||||||
|
#elif Q_MOC_OUTPUT_REVISION != 67
|
||||||
|
#error "This file was generated using the moc from 5.15.3. It"
|
||||||
|
#error "cannot be used with the include files from this version of Qt."
|
||||||
|
#error "(The moc has changed too much.)"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QT_BEGIN_MOC_NAMESPACE
|
||||||
|
QT_WARNING_PUSH
|
||||||
|
QT_WARNING_DISABLE_DEPRECATED
|
||||||
|
struct qt_meta_stringdata_MainWindow_t {
|
||||||
|
QByteArrayData data[4];
|
||||||
|
char stringdata0[48];
|
||||||
|
};
|
||||||
|
#define QT_MOC_LITERAL(idx, ofs, len) \
|
||||||
|
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
|
||||||
|
qptrdiff(offsetof(qt_meta_stringdata_MainWindow_t, stringdata0) + ofs \
|
||||||
|
- idx * sizeof(QByteArrayData)) \
|
||||||
|
)
|
||||||
|
static const qt_meta_stringdata_MainWindow_t qt_meta_stringdata_MainWindow = {
|
||||||
|
{
|
||||||
|
QT_MOC_LITERAL(0, 0, 10), // "MainWindow"
|
||||||
|
QT_MOC_LITERAL(1, 11, 23), // "on_pushButton_2_clicked"
|
||||||
|
QT_MOC_LITERAL(2, 35, 0), // ""
|
||||||
|
QT_MOC_LITERAL(3, 36, 11) // "ChangeValue"
|
||||||
|
|
||||||
|
},
|
||||||
|
"MainWindow\0on_pushButton_2_clicked\0\0"
|
||||||
|
"ChangeValue"
|
||||||
|
};
|
||||||
|
#undef QT_MOC_LITERAL
|
||||||
|
|
||||||
|
static const uint qt_meta_data_MainWindow[] = {
|
||||||
|
|
||||||
|
// content:
|
||||||
|
8, // revision
|
||||||
|
0, // classname
|
||||||
|
0, 0, // classinfo
|
||||||
|
2, 14, // methods
|
||||||
|
0, 0, // properties
|
||||||
|
0, 0, // enums/sets
|
||||||
|
0, 0, // constructors
|
||||||
|
0, // flags
|
||||||
|
0, // signalCount
|
||||||
|
|
||||||
|
// slots: name, argc, parameters, tag, flags
|
||||||
|
1, 0, 24, 2, 0x08 /* Private */,
|
||||||
|
3, 0, 25, 2, 0x08 /* Private */,
|
||||||
|
|
||||||
|
// slots: parameters
|
||||||
|
QMetaType::Void,
|
||||||
|
QMetaType::Void,
|
||||||
|
|
||||||
|
0 // eod
|
||||||
|
};
|
||||||
|
|
||||||
|
void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
|
||||||
|
{
|
||||||
|
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||||
|
auto *_t = static_cast<MainWindow *>(_o);
|
||||||
|
(void)_t;
|
||||||
|
switch (_id) {
|
||||||
|
case 0: _t->on_pushButton_2_clicked(); break;
|
||||||
|
case 1: _t->ChangeValue(); break;
|
||||||
|
default: ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(void)_a;
|
||||||
|
}
|
||||||
|
|
||||||
|
QT_INIT_METAOBJECT const QMetaObject MainWindow::staticMetaObject = { {
|
||||||
|
QMetaObject::SuperData::link<QMainWindow::staticMetaObject>(),
|
||||||
|
qt_meta_stringdata_MainWindow.data,
|
||||||
|
qt_meta_data_MainWindow,
|
||||||
|
qt_static_metacall,
|
||||||
|
nullptr,
|
||||||
|
nullptr
|
||||||
|
} };
|
||||||
|
|
||||||
|
|
||||||
|
const QMetaObject *MainWindow::metaObject() const
|
||||||
|
{
|
||||||
|
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *MainWindow::qt_metacast(const char *_clname)
|
||||||
|
{
|
||||||
|
if (!_clname) return nullptr;
|
||||||
|
if (!strcmp(_clname, qt_meta_stringdata_MainWindow.stringdata0))
|
||||||
|
return static_cast<void*>(this);
|
||||||
|
return QMainWindow::qt_metacast(_clname);
|
||||||
|
}
|
||||||
|
|
||||||
|
int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
||||||
|
{
|
||||||
|
_id = QMainWindow::qt_metacall(_c, _id, _a);
|
||||||
|
if (_id < 0)
|
||||||
|
return _id;
|
||||||
|
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||||
|
if (_id < 2)
|
||||||
|
qt_static_metacall(this, _c, _id, _a);
|
||||||
|
_id -= 2;
|
||||||
|
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
|
||||||
|
if (_id < 2)
|
||||||
|
*reinterpret_cast<int*>(_a[0]) = -1;
|
||||||
|
_id -= 2;
|
||||||
|
}
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
QT_WARNING_POP
|
||||||
|
QT_END_MOC_NAMESPACE
|
|
@ -0,0 +1,375 @@
|
||||||
|
#define __DBL_MIN_EXP__ (-1021)
|
||||||
|
#define __FLT32X_MAX_EXP__ 1024
|
||||||
|
#define __cpp_attributes 200809
|
||||||
|
#define __UINT_LEAST16_MAX__ 0xffff
|
||||||
|
#define __ATOMIC_ACQUIRE 2
|
||||||
|
#define __FLT128_MAX_10_EXP__ 4932
|
||||||
|
#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
|
||||||
|
#define __GCC_IEC_559_COMPLEX 2
|
||||||
|
#define __UINT_LEAST8_TYPE__ unsigned char
|
||||||
|
#define __SIZEOF_FLOAT80__ 16
|
||||||
|
#define __INTMAX_C(c) c ## L
|
||||||
|
#define __CHAR_BIT__ 8
|
||||||
|
#define __UINT8_MAX__ 0xff
|
||||||
|
#define __WINT_MAX__ 0xffffffffU
|
||||||
|
#define __FLT32_MIN_EXP__ (-125)
|
||||||
|
#define __cpp_static_assert 200410
|
||||||
|
#define __ORDER_LITTLE_ENDIAN__ 1234
|
||||||
|
#define __SIZE_MAX__ 0xffffffffffffffffUL
|
||||||
|
#define __WCHAR_MAX__ 0x7fffffff
|
||||||
|
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
|
||||||
|
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
|
||||||
|
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
|
||||||
|
#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L)
|
||||||
|
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
|
||||||
|
#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
|
||||||
|
#define __GCC_IEC_559 2
|
||||||
|
#define __FLT32X_DECIMAL_DIG__ 17
|
||||||
|
#define __FLT_EVAL_METHOD__ 0
|
||||||
|
#define __unix__ 1
|
||||||
|
#define __cpp_binary_literals 201304
|
||||||
|
#define __FLT64_DECIMAL_DIG__ 17
|
||||||
|
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
|
||||||
|
#define __x86_64 1
|
||||||
|
#define __cpp_variadic_templates 200704
|
||||||
|
#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL
|
||||||
|
#define __SIG_ATOMIC_TYPE__ int
|
||||||
|
#define __DBL_MIN_10_EXP__ (-307)
|
||||||
|
#define __FINITE_MATH_ONLY__ 0
|
||||||
|
#define __GNUC_PATCHLEVEL__ 0
|
||||||
|
#define __FLT32_HAS_DENORM__ 1
|
||||||
|
#define __UINT_FAST8_MAX__ 0xff
|
||||||
|
#define __has_include(STR) __has_include__(STR)
|
||||||
|
#define __DEC64_MAX_EXP__ 385
|
||||||
|
#define __INT8_C(c) c
|
||||||
|
#define __INT_LEAST8_WIDTH__ 8
|
||||||
|
#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL
|
||||||
|
#define __SHRT_MAX__ 0x7fff
|
||||||
|
#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L
|
||||||
|
#define __FLT64X_MAX_10_EXP__ 4932
|
||||||
|
#define __UINT_LEAST8_MAX__ 0xff
|
||||||
|
#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
|
||||||
|
#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128
|
||||||
|
#define __UINTMAX_TYPE__ long unsigned int
|
||||||
|
#define __linux 1
|
||||||
|
#define __DEC32_EPSILON__ 1E-6DF
|
||||||
|
#define __FLT_EVAL_METHOD_TS_18661_3__ 0
|
||||||
|
#define __OPTIMIZE__ 1
|
||||||
|
#define __unix 1
|
||||||
|
#define __UINT32_MAX__ 0xffffffffU
|
||||||
|
#define __GXX_EXPERIMENTAL_CXX0X__ 1
|
||||||
|
#define __LDBL_MAX_EXP__ 16384
|
||||||
|
#define __FLT128_MIN_EXP__ (-16381)
|
||||||
|
#define __WINT_MIN__ 0U
|
||||||
|
#define __linux__ 1
|
||||||
|
#define __FLT128_MIN_10_EXP__ (-4931)
|
||||||
|
#define __INT_LEAST16_WIDTH__ 16
|
||||||
|
#define __SCHAR_MAX__ 0x7f
|
||||||
|
#define __FLT128_MANT_DIG__ 113
|
||||||
|
#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1)
|
||||||
|
#define __INT64_C(c) c ## L
|
||||||
|
#define __DBL_DIG__ 15
|
||||||
|
#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
#define __FLT64X_MANT_DIG__ 64
|
||||||
|
#define __SIZEOF_INT__ 4
|
||||||
|
#define __SIZEOF_POINTER__ 8
|
||||||
|
#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
|
||||||
|
#define __USER_LABEL_PREFIX__
|
||||||
|
#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x
|
||||||
|
#define __STDC_HOSTED__ 1
|
||||||
|
#define __LDBL_HAS_INFINITY__ 1
|
||||||
|
#define __FLT32_DIG__ 6
|
||||||
|
#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F
|
||||||
|
#define __GXX_WEAK__ 1
|
||||||
|
#define __SHRT_WIDTH__ 16
|
||||||
|
#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L
|
||||||
|
#define __DEC32_MAX__ 9.999999E96DF
|
||||||
|
#define __cpp_threadsafe_static_init 200806
|
||||||
|
#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x
|
||||||
|
#define __FLT32X_HAS_INFINITY__ 1
|
||||||
|
#define __INT32_MAX__ 0x7fffffff
|
||||||
|
#define __INT_WIDTH__ 32
|
||||||
|
#define __SIZEOF_LONG__ 8
|
||||||
|
#define __STDC_IEC_559__ 1
|
||||||
|
#define __STDC_ISO_10646__ 201706L
|
||||||
|
#define __UINT16_C(c) c
|
||||||
|
#define __PTRDIFF_WIDTH__ 64
|
||||||
|
#define __DECIMAL_DIG__ 21
|
||||||
|
#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64
|
||||||
|
#define __gnu_linux__ 1
|
||||||
|
#define __INTMAX_WIDTH__ 64
|
||||||
|
#define __FLT64_MIN_EXP__ (-1021)
|
||||||
|
#define __has_include_next(STR) __has_include_next__(STR)
|
||||||
|
#define __FLT64X_MIN_10_EXP__ (-4931)
|
||||||
|
#define __LDBL_HAS_QUIET_NAN__ 1
|
||||||
|
#define __FLT64_MANT_DIG__ 53
|
||||||
|
#define __GNUC__ 8
|
||||||
|
#define __GXX_RTTI 1
|
||||||
|
#define __MMX__ 1
|
||||||
|
#define __cpp_delegating_constructors 200604
|
||||||
|
#define __FLT_HAS_DENORM__ 1
|
||||||
|
#define __SIZEOF_LONG_DOUBLE__ 16
|
||||||
|
#define __BIGGEST_ALIGNMENT__ 16
|
||||||
|
#define __STDC_UTF_16__ 1
|
||||||
|
#define __FLT64_MAX_10_EXP__ 308
|
||||||
|
#define __FLT32_HAS_INFINITY__ 1
|
||||||
|
#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L)
|
||||||
|
#define __cpp_raw_strings 200710
|
||||||
|
#define __INT_FAST32_MAX__ 0x7fffffffffffffffL
|
||||||
|
#define __DBL_HAS_INFINITY__ 1
|
||||||
|
#define __DEC32_MIN_EXP__ (-94)
|
||||||
|
#define __INTPTR_WIDTH__ 64
|
||||||
|
#define __FLT32X_HAS_DENORM__ 1
|
||||||
|
#define __INT_FAST16_TYPE__ long int
|
||||||
|
#define __LDBL_HAS_DENORM__ 1
|
||||||
|
#define __cplusplus 201103L
|
||||||
|
#define __cpp_ref_qualifiers 200710
|
||||||
|
#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
|
||||||
|
#define __INT_LEAST32_MAX__ 0x7fffffff
|
||||||
|
#define __DEC32_MIN__ 1E-95DF
|
||||||
|
#define __DEPRECATED 1
|
||||||
|
#define __cpp_rvalue_references 200610
|
||||||
|
#define __DBL_MAX_EXP__ 1024
|
||||||
|
#define __WCHAR_WIDTH__ 32
|
||||||
|
#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32
|
||||||
|
#define __DEC128_EPSILON__ 1E-33DL
|
||||||
|
#define __SSE2_MATH__ 1
|
||||||
|
#define __ATOMIC_HLE_RELEASE 131072
|
||||||
|
#define __PTRDIFF_MAX__ 0x7fffffffffffffffL
|
||||||
|
#define __amd64 1
|
||||||
|
#define __ATOMIC_HLE_ACQUIRE 65536
|
||||||
|
#define __FLT32_HAS_QUIET_NAN__ 1
|
||||||
|
#define __GNUG__ 8
|
||||||
|
#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
|
||||||
|
#define __SIZEOF_SIZE_T__ 8
|
||||||
|
#define __cpp_rvalue_reference 200610
|
||||||
|
#define __cpp_nsdmi 200809
|
||||||
|
#define __FLT64X_MIN_EXP__ (-16381)
|
||||||
|
#define __SIZEOF_WINT_T__ 4
|
||||||
|
#define __LONG_LONG_WIDTH__ 64
|
||||||
|
#define __cpp_initializer_lists 200806
|
||||||
|
#define __FLT32_MAX_EXP__ 128
|
||||||
|
#define __cpp_hex_float 201603
|
||||||
|
#define __GCC_HAVE_DWARF2_CFI_ASM 1
|
||||||
|
#define __GXX_ABI_VERSION 1013
|
||||||
|
#define __FLT128_HAS_INFINITY__ 1
|
||||||
|
#define __FLT_MIN_EXP__ (-125)
|
||||||
|
#define __cpp_lambdas 200907
|
||||||
|
#define __FLT64X_HAS_QUIET_NAN__ 1
|
||||||
|
#define __INT_FAST64_TYPE__ long int
|
||||||
|
#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64
|
||||||
|
#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L)
|
||||||
|
#define __LP64__ 1
|
||||||
|
#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x
|
||||||
|
#define __DECIMAL_BID_FORMAT__ 1
|
||||||
|
#define __FLT64_MIN_10_EXP__ (-307)
|
||||||
|
#define __FLT64X_DECIMAL_DIG__ 21
|
||||||
|
#define __DEC128_MIN__ 1E-6143DL
|
||||||
|
#define __REGISTER_PREFIX__
|
||||||
|
#define __UINT16_MAX__ 0xffff
|
||||||
|
#define __DBL_HAS_DENORM__ 1
|
||||||
|
#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32
|
||||||
|
#define __UINT8_TYPE__ unsigned char
|
||||||
|
#define __FLT_MANT_DIG__ 24
|
||||||
|
#define __LDBL_DECIMAL_DIG__ 21
|
||||||
|
#define __VERSION__ "8.3.0"
|
||||||
|
#define __UINT64_C(c) c ## UL
|
||||||
|
#define __cpp_unicode_characters 200704
|
||||||
|
#define _STDC_PREDEF_H 1
|
||||||
|
#define __GCC_ATOMIC_INT_LOCK_FREE 2
|
||||||
|
#define __FLT128_MAX_EXP__ 16384
|
||||||
|
#define __FLT32_MANT_DIG__ 24
|
||||||
|
#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
|
||||||
|
#define __STDC_IEC_559_COMPLEX__ 1
|
||||||
|
#define __FLT128_HAS_DENORM__ 1
|
||||||
|
#define __FLT128_DIG__ 33
|
||||||
|
#define __SCHAR_WIDTH__ 8
|
||||||
|
#define __INT32_C(c) c
|
||||||
|
#define __DEC64_EPSILON__ 1E-15DD
|
||||||
|
#define __ORDER_PDP_ENDIAN__ 3412
|
||||||
|
#define __DEC128_MIN_EXP__ (-6142)
|
||||||
|
#define __FLT32_MAX_10_EXP__ 38
|
||||||
|
#define __INT_FAST32_TYPE__ long int
|
||||||
|
#define __UINT_LEAST16_TYPE__ short unsigned int
|
||||||
|
#define __FLT64X_HAS_INFINITY__ 1
|
||||||
|
#define unix 1
|
||||||
|
#define __INT16_MAX__ 0x7fff
|
||||||
|
#define __cpp_rtti 199711
|
||||||
|
#define __SIZE_TYPE__ long unsigned int
|
||||||
|
#define __UINT64_MAX__ 0xffffffffffffffffUL
|
||||||
|
#define __FLT64X_DIG__ 18
|
||||||
|
#define __INT8_TYPE__ signed char
|
||||||
|
#define __ELF__ 1
|
||||||
|
#define __GCC_ASM_FLAG_OUTPUTS__ 1
|
||||||
|
#define __FLT_RADIX__ 2
|
||||||
|
#define __INT_LEAST16_TYPE__ short int
|
||||||
|
#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L
|
||||||
|
#define __UINTMAX_C(c) c ## UL
|
||||||
|
#define __GLIBCXX_BITSIZE_INT_N_0 128
|
||||||
|
#define __k8 1
|
||||||
|
#define __SIG_ATOMIC_MAX__ 0x7fffffff
|
||||||
|
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
|
||||||
|
#define __SIZEOF_PTRDIFF_T__ 8
|
||||||
|
#define __FLT32X_MANT_DIG__ 53
|
||||||
|
#define __x86_64__ 1
|
||||||
|
#define __FLT32X_MIN_EXP__ (-1021)
|
||||||
|
#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
|
||||||
|
#define __INT_FAST16_MAX__ 0x7fffffffffffffffL
|
||||||
|
#define __FLT64_DIG__ 15
|
||||||
|
#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL
|
||||||
|
#define __UINT_LEAST64_TYPE__ long unsigned int
|
||||||
|
#define __FLT_HAS_QUIET_NAN__ 1
|
||||||
|
#define __FLT_MAX_10_EXP__ 38
|
||||||
|
#define __LONG_MAX__ 0x7fffffffffffffffL
|
||||||
|
#define __FLT64X_HAS_DENORM__ 1
|
||||||
|
#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
|
||||||
|
#define __FLT_HAS_INFINITY__ 1
|
||||||
|
#define __cpp_unicode_literals 200710
|
||||||
|
#define __UINT_FAST16_TYPE__ long unsigned int
|
||||||
|
#define __DEC64_MAX__ 9.999999999999999E384DD
|
||||||
|
#define __INT_FAST32_WIDTH__ 64
|
||||||
|
#define __CHAR16_TYPE__ short unsigned int
|
||||||
|
#define __PRAGMA_REDEFINE_EXTNAME 1
|
||||||
|
#define __SIZE_WIDTH__ 64
|
||||||
|
#define __SEG_FS 1
|
||||||
|
#define __INT_LEAST16_MAX__ 0x7fff
|
||||||
|
#define __DEC64_MANT_DIG__ 16
|
||||||
|
#define __INT64_MAX__ 0x7fffffffffffffffL
|
||||||
|
#define __UINT_LEAST32_MAX__ 0xffffffffU
|
||||||
|
#define __SEG_GS 1
|
||||||
|
#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32
|
||||||
|
#define __GCC_ATOMIC_LONG_LOCK_FREE 2
|
||||||
|
#define __SIG_ATOMIC_WIDTH__ 32
|
||||||
|
#define __INT_LEAST64_TYPE__ long int
|
||||||
|
#define __INT16_TYPE__ short int
|
||||||
|
#define __INT_LEAST8_TYPE__ signed char
|
||||||
|
#define __DEC32_MAX_EXP__ 97
|
||||||
|
#define __INT_FAST8_MAX__ 0x7f
|
||||||
|
#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128
|
||||||
|
#define __INTPTR_MAX__ 0x7fffffffffffffffL
|
||||||
|
#define linux 1
|
||||||
|
#define __cpp_range_based_for 200907
|
||||||
|
#define __FLT64_HAS_QUIET_NAN__ 1
|
||||||
|
#define __FLT32_MIN_10_EXP__ (-37)
|
||||||
|
#define __SSE2__ 1
|
||||||
|
#define __EXCEPTIONS 1
|
||||||
|
#define __LDBL_MANT_DIG__ 64
|
||||||
|
#define __DBL_HAS_QUIET_NAN__ 1
|
||||||
|
#define __FLT64_HAS_INFINITY__ 1
|
||||||
|
#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x
|
||||||
|
#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
|
||||||
|
#define __code_model_small__ 1
|
||||||
|
#define __k8__ 1
|
||||||
|
#define __INTPTR_TYPE__ long int
|
||||||
|
#define __UINT16_TYPE__ short unsigned int
|
||||||
|
#define __WCHAR_TYPE__ int
|
||||||
|
#define __SIZEOF_FLOAT__ 4
|
||||||
|
#define __UINTPTR_MAX__ 0xffffffffffffffffUL
|
||||||
|
#define __INT_FAST64_WIDTH__ 64
|
||||||
|
#define __DEC64_MIN_EXP__ (-382)
|
||||||
|
#define __cpp_decltype 200707
|
||||||
|
#define __FLT32_DECIMAL_DIG__ 9
|
||||||
|
#define __INT_FAST64_MAX__ 0x7fffffffffffffffL
|
||||||
|
#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
|
||||||
|
#define __FLT_DIG__ 6
|
||||||
|
#define __FLT64X_MAX_EXP__ 16384
|
||||||
|
#define __UINT_FAST64_TYPE__ long unsigned int
|
||||||
|
#define __INT_MAX__ 0x7fffffff
|
||||||
|
#define __amd64__ 1
|
||||||
|
#define __INT64_TYPE__ long int
|
||||||
|
#define __FLT_MAX_EXP__ 128
|
||||||
|
#define __ORDER_BIG_ENDIAN__ 4321
|
||||||
|
#define __DBL_MANT_DIG__ 53
|
||||||
|
#define __cpp_inheriting_constructors 201511
|
||||||
|
#define __SIZEOF_FLOAT128__ 16
|
||||||
|
#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL
|
||||||
|
#define __DEC64_MIN__ 1E-383DD
|
||||||
|
#define __WINT_TYPE__ unsigned int
|
||||||
|
#define __UINT_LEAST32_TYPE__ unsigned int
|
||||||
|
#define __SIZEOF_SHORT__ 2
|
||||||
|
#define __SSE__ 1
|
||||||
|
#define __LDBL_MIN_EXP__ (-16381)
|
||||||
|
#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64
|
||||||
|
#define __WINT_WIDTH__ 32
|
||||||
|
#define __INT_LEAST8_MAX__ 0x7f
|
||||||
|
#define __FLT32X_MAX_10_EXP__ 308
|
||||||
|
#define __SIZEOF_INT128__ 16
|
||||||
|
#define __LDBL_MAX_10_EXP__ 4932
|
||||||
|
#define __ATOMIC_RELAXED 0
|
||||||
|
#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L)
|
||||||
|
#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128
|
||||||
|
#define _LP64 1
|
||||||
|
#define __UINT8_C(c) c
|
||||||
|
#define __FLT64_MAX_EXP__ 1024
|
||||||
|
#define __INT_LEAST32_TYPE__ int
|
||||||
|
#define __SIZEOF_WCHAR_T__ 4
|
||||||
|
#define __FLT128_HAS_QUIET_NAN__ 1
|
||||||
|
#define __INT_FAST8_TYPE__ signed char
|
||||||
|
#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x
|
||||||
|
#define __GNUC_STDC_INLINE__ 1
|
||||||
|
#define __FLT64_HAS_DENORM__ 1
|
||||||
|
#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32
|
||||||
|
#define __DBL_DECIMAL_DIG__ 17
|
||||||
|
#define __STDC_UTF_32__ 1
|
||||||
|
#define __INT_FAST8_WIDTH__ 8
|
||||||
|
#define __FXSR__ 1
|
||||||
|
#define __DEC_EVAL_METHOD__ 2
|
||||||
|
#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x
|
||||||
|
#define __cpp_runtime_arrays 198712
|
||||||
|
#define __UINT64_TYPE__ long unsigned int
|
||||||
|
#define __UINT32_C(c) c ## U
|
||||||
|
#define __INTMAX_MAX__ 0x7fffffffffffffffL
|
||||||
|
#define __cpp_alias_templates 200704
|
||||||
|
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
|
||||||
|
#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F
|
||||||
|
#define __INT8_MAX__ 0x7f
|
||||||
|
#define __LONG_WIDTH__ 64
|
||||||
|
#define __UINT_FAST32_TYPE__ long unsigned int
|
||||||
|
#define __CHAR32_TYPE__ unsigned int
|
||||||
|
#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F
|
||||||
|
#define __cpp_constexpr 200704
|
||||||
|
#define __INT32_TYPE__ int
|
||||||
|
#define __SIZEOF_DOUBLE__ 8
|
||||||
|
#define __cpp_exceptions 199711
|
||||||
|
#define __FLT_MIN_10_EXP__ (-37)
|
||||||
|
#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64
|
||||||
|
#define __INT_LEAST32_WIDTH__ 32
|
||||||
|
#define __INTMAX_TYPE__ long int
|
||||||
|
#define __DEC128_MAX_EXP__ 6145
|
||||||
|
#define __FLT32X_HAS_QUIET_NAN__ 1
|
||||||
|
#define __ATOMIC_CONSUME 1
|
||||||
|
#define __GNUC_MINOR__ 3
|
||||||
|
#define __GLIBCXX_TYPE_INT_N_0 __int128
|
||||||
|
#define __INT_FAST16_WIDTH__ 64
|
||||||
|
#define __UINTMAX_MAX__ 0xffffffffffffffffUL
|
||||||
|
#define __DEC32_MANT_DIG__ 7
|
||||||
|
#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x
|
||||||
|
#define __DBL_MAX_10_EXP__ 308
|
||||||
|
#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L
|
||||||
|
#define __INT16_C(c) c
|
||||||
|
#define __STDC__ 1
|
||||||
|
#define __FLT32X_DIG__ 15
|
||||||
|
#define __PTRDIFF_TYPE__ long int
|
||||||
|
#define __ATOMIC_SEQ_CST 5
|
||||||
|
#define __UINT32_TYPE__ unsigned int
|
||||||
|
#define __FLT32X_MIN_10_EXP__ (-307)
|
||||||
|
#define __UINTPTR_TYPE__ long unsigned int
|
||||||
|
#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
|
||||||
|
#define __DEC128_MANT_DIG__ 34
|
||||||
|
#define __LDBL_MIN_10_EXP__ (-4931)
|
||||||
|
#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128
|
||||||
|
#define __SSE_MATH__ 1
|
||||||
|
#define __SIZEOF_LONG_LONG__ 8
|
||||||
|
#define __cpp_user_defined_literals 200809
|
||||||
|
#define __FLT128_DECIMAL_DIG__ 36
|
||||||
|
#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
|
||||||
|
#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x
|
||||||
|
#define __LDBL_DIG__ 18
|
||||||
|
#define __FLT_DECIMAL_DIG__ 9
|
||||||
|
#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL
|
||||||
|
#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
|
||||||
|
#define __INT_LEAST64_WIDTH__ 64
|
||||||
|
#define __UINT_FAST8_TYPE__ unsigned char
|
||||||
|
#define _GNU_SOURCE 1
|
||||||
|
#define __ATOMIC_ACQ_REL 4
|
||||||
|
#define __ATOMIC_RELEASE 3
|
|
@ -0,0 +1,195 @@
|
||||||
|
/********************************************************************************
|
||||||
|
** Form generated from reading UI file 'mainwindow.ui'
|
||||||
|
**
|
||||||
|
** Created by: Qt User Interface Compiler version 5.15.3
|
||||||
|
**
|
||||||
|
** WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||||
|
********************************************************************************/
|
||||||
|
|
||||||
|
#ifndef UI_MAINWINDOW_H
|
||||||
|
#define UI_MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QtCore/QVariant>
|
||||||
|
#include <QtWidgets/QApplication>
|
||||||
|
#include <QtWidgets/QGridLayout>
|
||||||
|
#include <QtWidgets/QHBoxLayout>
|
||||||
|
#include <QtWidgets/QLabel>
|
||||||
|
#include <QtWidgets/QLineEdit>
|
||||||
|
#include <QtWidgets/QListView>
|
||||||
|
#include <QtWidgets/QMainWindow>
|
||||||
|
#include <QtWidgets/QPushButton>
|
||||||
|
#include <QtWidgets/QSpacerItem>
|
||||||
|
#include <QtWidgets/QStatusBar>
|
||||||
|
#include <QtWidgets/QTabWidget>
|
||||||
|
#include <QtWidgets/QVBoxLayout>
|
||||||
|
#include <QtWidgets/QWidget>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class Ui_MainWindow
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QWidget *centralWidget;
|
||||||
|
QVBoxLayout *verticalLayout_2;
|
||||||
|
QTabWidget *tabWidget;
|
||||||
|
QWidget *tab;
|
||||||
|
QGridLayout *gridLayout;
|
||||||
|
QHBoxLayout *horizontalLayout_2;
|
||||||
|
QLabel *label_2;
|
||||||
|
QHBoxLayout *horizontalLayout_3;
|
||||||
|
QLabel *label;
|
||||||
|
QLineEdit *lineEdit;
|
||||||
|
QPushButton *pushButton_3;
|
||||||
|
QSpacerItem *verticalSpacer;
|
||||||
|
QWidget *tab_2;
|
||||||
|
QHBoxLayout *horizontalLayout;
|
||||||
|
QListView *listView;
|
||||||
|
QVBoxLayout *verticalLayout;
|
||||||
|
QSpacerItem *verticalSpacer_3;
|
||||||
|
QPushButton *pushButton_2;
|
||||||
|
QPushButton *pushButton;
|
||||||
|
QSpacerItem *verticalSpacer_2;
|
||||||
|
QListView *urlImageList;
|
||||||
|
QWidget *tab_3;
|
||||||
|
QStatusBar *statusBar;
|
||||||
|
|
||||||
|
void setupUi(QMainWindow *MainWindow)
|
||||||
|
{
|
||||||
|
if (MainWindow->objectName().isEmpty())
|
||||||
|
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
|
||||||
|
MainWindow->resize(683, 416);
|
||||||
|
centralWidget = new QWidget(MainWindow);
|
||||||
|
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
|
||||||
|
verticalLayout_2 = new QVBoxLayout(centralWidget);
|
||||||
|
verticalLayout_2->setSpacing(6);
|
||||||
|
verticalLayout_2->setContentsMargins(11, 11, 11, 11);
|
||||||
|
verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
|
||||||
|
tabWidget = new QTabWidget(centralWidget);
|
||||||
|
tabWidget->setObjectName(QString::fromUtf8("tabWidget"));
|
||||||
|
tabWidget->setTabPosition(QTabWidget::West);
|
||||||
|
tabWidget->setElideMode(Qt::ElideNone);
|
||||||
|
tab = new QWidget();
|
||||||
|
tab->setObjectName(QString::fromUtf8("tab"));
|
||||||
|
gridLayout = new QGridLayout(tab);
|
||||||
|
gridLayout->setSpacing(6);
|
||||||
|
gridLayout->setContentsMargins(11, 11, 11, 11);
|
||||||
|
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
|
||||||
|
horizontalLayout_2 = new QHBoxLayout();
|
||||||
|
horizontalLayout_2->setSpacing(6);
|
||||||
|
horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
|
||||||
|
label_2 = new QLabel(tab);
|
||||||
|
label_2->setObjectName(QString::fromUtf8("label_2"));
|
||||||
|
|
||||||
|
horizontalLayout_2->addWidget(label_2);
|
||||||
|
|
||||||
|
|
||||||
|
gridLayout->addLayout(horizontalLayout_2, 1, 0, 1, 1);
|
||||||
|
|
||||||
|
horizontalLayout_3 = new QHBoxLayout();
|
||||||
|
horizontalLayout_3->setSpacing(6);
|
||||||
|
horizontalLayout_3->setObjectName(QString::fromUtf8("horizontalLayout_3"));
|
||||||
|
label = new QLabel(tab);
|
||||||
|
label->setObjectName(QString::fromUtf8("label"));
|
||||||
|
|
||||||
|
horizontalLayout_3->addWidget(label);
|
||||||
|
|
||||||
|
lineEdit = new QLineEdit(tab);
|
||||||
|
lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
|
||||||
|
|
||||||
|
horizontalLayout_3->addWidget(lineEdit);
|
||||||
|
|
||||||
|
pushButton_3 = new QPushButton(tab);
|
||||||
|
pushButton_3->setObjectName(QString::fromUtf8("pushButton_3"));
|
||||||
|
|
||||||
|
horizontalLayout_3->addWidget(pushButton_3);
|
||||||
|
|
||||||
|
|
||||||
|
gridLayout->addLayout(horizontalLayout_3, 0, 0, 1, 1);
|
||||||
|
|
||||||
|
verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
|
||||||
|
|
||||||
|
gridLayout->addItem(verticalSpacer, 2, 0, 1, 1);
|
||||||
|
|
||||||
|
tabWidget->addTab(tab, QString());
|
||||||
|
tab_2 = new QWidget();
|
||||||
|
tab_2->setObjectName(QString::fromUtf8("tab_2"));
|
||||||
|
horizontalLayout = new QHBoxLayout(tab_2);
|
||||||
|
horizontalLayout->setSpacing(6);
|
||||||
|
horizontalLayout->setContentsMargins(11, 11, 11, 11);
|
||||||
|
horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
|
||||||
|
listView = new QListView(tab_2);
|
||||||
|
listView->setObjectName(QString::fromUtf8("listView"));
|
||||||
|
|
||||||
|
horizontalLayout->addWidget(listView);
|
||||||
|
|
||||||
|
verticalLayout = new QVBoxLayout();
|
||||||
|
verticalLayout->setSpacing(6);
|
||||||
|
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
|
||||||
|
verticalSpacer_3 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
|
||||||
|
|
||||||
|
verticalLayout->addItem(verticalSpacer_3);
|
||||||
|
|
||||||
|
pushButton_2 = new QPushButton(tab_2);
|
||||||
|
pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
|
||||||
|
|
||||||
|
verticalLayout->addWidget(pushButton_2);
|
||||||
|
|
||||||
|
pushButton = new QPushButton(tab_2);
|
||||||
|
pushButton->setObjectName(QString::fromUtf8("pushButton"));
|
||||||
|
|
||||||
|
verticalLayout->addWidget(pushButton);
|
||||||
|
|
||||||
|
verticalSpacer_2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
|
||||||
|
|
||||||
|
verticalLayout->addItem(verticalSpacer_2);
|
||||||
|
|
||||||
|
|
||||||
|
horizontalLayout->addLayout(verticalLayout);
|
||||||
|
|
||||||
|
urlImageList = new QListView(tab_2);
|
||||||
|
urlImageList->setObjectName(QString::fromUtf8("urlImageList"));
|
||||||
|
|
||||||
|
horizontalLayout->addWidget(urlImageList);
|
||||||
|
|
||||||
|
tabWidget->addTab(tab_2, QString());
|
||||||
|
tab_3 = new QWidget();
|
||||||
|
tab_3->setObjectName(QString::fromUtf8("tab_3"));
|
||||||
|
tabWidget->addTab(tab_3, QString());
|
||||||
|
|
||||||
|
verticalLayout_2->addWidget(tabWidget);
|
||||||
|
|
||||||
|
MainWindow->setCentralWidget(centralWidget);
|
||||||
|
statusBar = new QStatusBar(MainWindow);
|
||||||
|
statusBar->setObjectName(QString::fromUtf8("statusBar"));
|
||||||
|
MainWindow->setStatusBar(statusBar);
|
||||||
|
|
||||||
|
retranslateUi(MainWindow);
|
||||||
|
|
||||||
|
tabWidget->setCurrentIndex(1);
|
||||||
|
|
||||||
|
|
||||||
|
QMetaObject::connectSlotsByName(MainWindow);
|
||||||
|
} // setupUi
|
||||||
|
|
||||||
|
void retranslateUi(QMainWindow *MainWindow)
|
||||||
|
{
|
||||||
|
MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr));
|
||||||
|
label_2->setText(QCoreApplication::translate("MainWindow", "TextLabel", nullptr));
|
||||||
|
label->setText(QCoreApplication::translate("MainWindow", "TextLabel", nullptr));
|
||||||
|
pushButton_3->setText(QCoreApplication::translate("MainWindow", "PushButton", nullptr));
|
||||||
|
tabWidget->setTabText(tabWidget->indexOf(tab), QCoreApplication::translate("MainWindow", "\346\223\215\344\275\234", nullptr));
|
||||||
|
pushButton_2->setText(QCoreApplication::translate("MainWindow", "<<", nullptr));
|
||||||
|
pushButton->setText(QCoreApplication::translate("MainWindow", ">>", nullptr));
|
||||||
|
tabWidget->setTabText(tabWidget->indexOf(tab_2), QCoreApplication::translate("MainWindow", "\346\226\260\345\273\272\346\250\241\346\213\237\345\231\250", nullptr));
|
||||||
|
tabWidget->setTabText(tabWidget->indexOf(tab_3), QCoreApplication::translate("MainWindow", "\345\205\263\344\272\216", nullptr));
|
||||||
|
} // retranslateUi
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class MainWindow: public Ui_MainWindow {};
|
||||||
|
} // namespace Ui
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif // UI_MAINWINDOW_H
|
|
@ -0,0 +1,196 @@
|
||||||
|
#define SETTINGSTEP 6
|
||||||
|
#include "downloadthread.h"
|
||||||
|
#include <QProgressDialog>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
|
#include <QNetworkRequest>
|
||||||
|
#include <QEventLoop>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QNetworkReply>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
// 文件操作
|
||||||
|
#include <QDir>
|
||||||
|
// 命令执行
|
||||||
|
#include <QProcess>
|
||||||
|
// 获取内存总量
|
||||||
|
#if defined(Q_OS_LINUX) // 区分系统平台
|
||||||
|
#include "sys/statfs.h" // Linux 上
|
||||||
|
#else // Windows 上
|
||||||
|
#pragma comment(lib, "Kernel32.lib")
|
||||||
|
#pragma comment(lib, "Psapi.lib")
|
||||||
|
#include <windows.h>
|
||||||
|
#include <tlhelp32.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
DownloadThread::DownloadThread(QProgressDialog *progressDialog, QString url, QString name, QString mouse, bool NotDownload){
|
||||||
|
dialog = progressDialog;
|
||||||
|
fileUrl = url;
|
||||||
|
vmName = name;
|
||||||
|
setMouse = mouse;
|
||||||
|
notDownload = NotDownload;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 文件下载
|
||||||
|
void DownloadThread::run(){
|
||||||
|
// 创建文件夹
|
||||||
|
QDir dir;
|
||||||
|
QString configDir = QCoreApplication::applicationDirPath() + "/VM";
|
||||||
|
if(!dir.exists(configDir)){
|
||||||
|
// 文件不存在
|
||||||
|
dir.mkpath(configDir);
|
||||||
|
}
|
||||||
|
configDir = QCoreApplication::applicationDirPath() + "/VM/" + vmName;
|
||||||
|
if(!dir.exists(configDir)){
|
||||||
|
// 文件不存在
|
||||||
|
dir.mkpath(configDir);
|
||||||
|
}
|
||||||
|
QString savePath = configDir + "/vm.ova";
|
||||||
|
// 文件下载
|
||||||
|
int timeout = 0;
|
||||||
|
QFile f(savePath);
|
||||||
|
if(!f.open(QIODevice::WriteOnly)){
|
||||||
|
emit MessageBoxError("文件无法写入");
|
||||||
|
f.close();
|
||||||
|
delete dialog;
|
||||||
|
dialog->close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(notDownload){
|
||||||
|
qDebug() << "b";
|
||||||
|
SettingVirtualMachine(savePath);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QNetworkAccessManager m;
|
||||||
|
QNetworkRequest req;
|
||||||
|
// 响应 https(就是不行)
|
||||||
|
//QSslConfiguration conf = req.sslConfiguration();
|
||||||
|
//conf.setPeerVerifyMode(QSslSocket::VerifyNone);
|
||||||
|
//conf.setProtocol(QSsl::TlsV1_1);
|
||||||
|
//req.setSslConfiguration(conf);
|
||||||
|
req.setUrl(QUrl("https://code.gitlink.org.cn/gfdgd_xi/wine-mirrors/raw/branch/master/spark-wine7-devel-7.14.7z"));
|
||||||
|
// 下载文件
|
||||||
|
QNetworkReply *reply = m.get(req);
|
||||||
|
QEventLoop loop;
|
||||||
|
QTimer t;
|
||||||
|
qDebug() << reply->rawHeader(QString("Content-Length").toUtf8());
|
||||||
|
connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
|
||||||
|
connect(reply, &QNetworkReply::downloadProgress, [=, &f, &t](qint64 bytesRead, qint64 totalBytes){
|
||||||
|
f.write(reply->readAll());
|
||||||
|
dialog->setValue((float)bytesRead / totalBytes * 100);
|
||||||
|
dialog->setLabelText(QString::number(bytesRead / 1024 / 1024) + "MB/" + QString::number(totalBytes / 1024 / 1024) + "MB");
|
||||||
|
if(t.isActive()){
|
||||||
|
t.start(timeout);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if(timeout > 0){
|
||||||
|
connect(&t, &QTimer::timeout, &loop, &QEventLoop::quit);
|
||||||
|
t.start(timeout);
|
||||||
|
}
|
||||||
|
loop.exec();
|
||||||
|
if(reply->error() != QNetworkReply::NoError){
|
||||||
|
emit MessageBoxError("下载失败");
|
||||||
|
f.close();
|
||||||
|
delete reply;
|
||||||
|
delete dialog;
|
||||||
|
dialog->close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
f.close();
|
||||||
|
delete reply;
|
||||||
|
SettingVirtualMachine(savePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadThread::SettingVirtualMachine(QString savePath){
|
||||||
|
// 设置虚拟机
|
||||||
|
dialog->setLabelText("设置虚拟机");
|
||||||
|
dialog->setWindowTitle("正在设置“" + vmName + "”");
|
||||||
|
dialog->setValue(100 / SETTINGSTEP * 0);
|
||||||
|
dialog->show();
|
||||||
|
// 拷贝 OVA 文件
|
||||||
|
if(notDownload){
|
||||||
|
if(QFile::exists(savePath)){
|
||||||
|
QFile::remove(savePath);
|
||||||
|
}
|
||||||
|
if(!QFile::copy(fileUrl, savePath)){
|
||||||
|
emit MessageBoxError("文件复制错误,无法继续");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 导入 OVA 镜像
|
||||||
|
QProcess progress;
|
||||||
|
QStringList command;
|
||||||
|
dialog->setValue(100 / SETTINGSTEP * 1);
|
||||||
|
command << "import" << savePath;
|
||||||
|
progress.start("VBoxManage", command);
|
||||||
|
progress.waitForFinished();
|
||||||
|
qDebug() << "正常信息:\n";
|
||||||
|
qDebug() << progress.readAllStandardOutput();
|
||||||
|
qDebug() << "错误信息:\n";
|
||||||
|
qDebug() << progress.readAllStandardError();
|
||||||
|
// 获取内存
|
||||||
|
dialog->setValue(100 / SETTINGSTEP * 2);
|
||||||
|
int memtotal = 0;
|
||||||
|
#if defined (Q_OS_LINUX) // 在 Linux 下读取总内存
|
||||||
|
progress.start("free -m");
|
||||||
|
progress.waitForFinished();
|
||||||
|
progress.readLine(); // 忽略第一行
|
||||||
|
QString memoryInfo = progress.readLine(); // 只读取第 2 行
|
||||||
|
qDebug() << memoryInfo;
|
||||||
|
memoryInfo.replace("\n", ""); // 忽略换行符
|
||||||
|
memoryInfo.replace(QRegExp("( ){1,}"), " "); // 将连续的空格换为单个空格
|
||||||
|
auto memoryList = memoryInfo.split(" "); // 根据空格切割内容
|
||||||
|
qDebug() << memoryList;
|
||||||
|
if(memoryList.size() >= 2){ // 保证至少有两个
|
||||||
|
// 理论上列表应该出现的是如下的内容
|
||||||
|
// ["Mem:", "13998", "9622", "197", "803", "4179", "3331"]
|
||||||
|
// 因此要读[1]
|
||||||
|
memtotal = memoryList[1].toDouble();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
emit MessageBoxError("内存读取错误,请自行打开 VirtualBox 设置内存");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
// 设置内存
|
||||||
|
// 示例命令:VBoxManage modifyvm [name] --memory 4096
|
||||||
|
command.clear(); // 清空参数列表
|
||||||
|
command << "modifyvm" << vmName << "--memory" << QString::number(memtotal / 2);
|
||||||
|
progress.start("VBoxManage", command);
|
||||||
|
progress.waitForFinished();
|
||||||
|
// 设置显卡,默认的 VMSVGA 在 Android X86 上运行有很多问题,应设为 VBoxVGA
|
||||||
|
// 示例命令:VBoxManage modifyvm [name] --graphicscontroller vboxvga
|
||||||
|
dialog->setValue(100 / SETTINGSTEP * 3);
|
||||||
|
command.clear(); // 清空参数列表
|
||||||
|
command << "modifyvm" << vmName << "--graphicscontroller" << "vboxvga";
|
||||||
|
qDebug() << command;
|
||||||
|
progress.start("VBoxManage", command);
|
||||||
|
progress.waitForFinished();
|
||||||
|
// 设置声卡
|
||||||
|
// VBoxManage modifyvm [name] --audio pulse --audiocontroller hda --audioin on --audioout on
|
||||||
|
dialog->setValue(100 / SETTINGSTEP * 4);
|
||||||
|
command.clear(); // 清空参数列表
|
||||||
|
command << "modifyvm" << vmName << "--audio" << "pulse" << "--audiocontroller" << "hda" << "--audioin" << "on" << "--audioout" << "on";
|
||||||
|
progress.start("VBoxManage", command);
|
||||||
|
progress.waitForFinished();
|
||||||
|
// 设置显存
|
||||||
|
// VBoxManage modifyvm [name] --vram 128
|
||||||
|
dialog->setValue(100 / SETTINGSTEP * 5);
|
||||||
|
command.clear(); // 清空参数列表
|
||||||
|
command << "modifyvm" << vmName << "--vram" << "128";
|
||||||
|
progress.start("VBoxManage", command);
|
||||||
|
progress.waitForFinished();
|
||||||
|
// 设置鼠标
|
||||||
|
// VBoxManage modifyvm [name] --mouse ps2
|
||||||
|
dialog->setValue(100 / SETTINGSTEP * 6);
|
||||||
|
if(setMouse == "ps2"){
|
||||||
|
command.clear(); // 清空参数列表
|
||||||
|
command << "modifyvm" << vmName << "--mouse" << "ps2";
|
||||||
|
progress.start("VBoxManage", command);
|
||||||
|
progress.waitForFinished();
|
||||||
|
}
|
||||||
|
// 结束
|
||||||
|
dialog->setValue(100);
|
||||||
|
emit MessageBoxOpenVM(vmName);
|
||||||
|
dialog->close();
|
||||||
|
delete dialog;
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* 重写 QThread 以实现多线程下载功能
|
||||||
|
*/
|
||||||
|
#ifndef DOWNLOADTHREAD_H
|
||||||
|
#define DOWNLOADTHREAD_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QThread>
|
||||||
|
#include <QProgressDialog>
|
||||||
|
|
||||||
|
class DownloadThread : public QThread // 继承 QThread
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DownloadThread(QProgressDialog *dialog, QString url, QString save, QString mouse, bool NotDownload);
|
||||||
|
void SettingVirtualMachine(QString savePath);
|
||||||
|
QProgressDialog *dialog;
|
||||||
|
QString fileUrl;
|
||||||
|
QString vmName;
|
||||||
|
QString setMouse;
|
||||||
|
bool notDownload;
|
||||||
|
QString notDownloadPath;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void run(); // 核心
|
||||||
|
|
||||||
|
signals:
|
||||||
|
// 防止非主线程刷新控件导致程序退出
|
||||||
|
void MessageBoxInfo(QString info);
|
||||||
|
void MessageBoxError(QString info);
|
||||||
|
void MessageBoxOpenVM(QString vmName);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DOWNLOADTHREAD_H
|
|
@ -0,0 +1,44 @@
|
||||||
|
#include "getipserver.h"
|
||||||
|
#include <QTcpServer>
|
||||||
|
#include <mainwindow.h>
|
||||||
|
#include <QtNetwork>
|
||||||
|
#include <QHostAddress>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
GetIPServer::GetIPServer(QLabel *localIp)
|
||||||
|
{
|
||||||
|
lock = false;
|
||||||
|
tcp = new QTcpServer();
|
||||||
|
QHostAddress ip("0.0.0.0");
|
||||||
|
tcp->listen(QHostAddress::Any, 30201);
|
||||||
|
// 获取 IP 地址
|
||||||
|
QString IpAddress;
|
||||||
|
foreach (QHostAddress address, QNetworkInterface::allAddresses())
|
||||||
|
{
|
||||||
|
if(address.protocol() == QAbstractSocket::IPv4Protocol && address.toString() != "127.0.0.1" && address.toString() != "192.168.250.1"){
|
||||||
|
IpAddress = address.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qDebug() << "服务器IP:" << IpAddress;
|
||||||
|
qDebug() << "服务器端口:" << tcp->serverPort();
|
||||||
|
localIp->setText("访问:http://" + IpAddress + ":" + QString::number(tcp->serverPort()) + " 连接");
|
||||||
|
connect(tcp, &QTcpServer::newConnection, this, [this](){
|
||||||
|
|
||||||
|
tcpSocket = tcp->nextPendingConnection();
|
||||||
|
QString ipAddress = QHostAddress(tcpSocket->peerAddress().toIPv4Address()).toString();
|
||||||
|
qDebug() << ipAddress;
|
||||||
|
qDebug() << tcpSocket->peerPort();
|
||||||
|
tcpSocket->write("HTTP/1.1 200 OK"\
|
||||||
|
"Content-Type: text/html;charset=utf-8"\
|
||||||
|
"\n\n");
|
||||||
|
tcpSocket->write(QString("<html><body><p>IP Address: " + ipAddress + "</p><p>Get Port: " + QString::number(tcpSocket->peerPort()) + "</p></body></html>").toLocal8Bit());
|
||||||
|
tcpSocket->close();
|
||||||
|
if(lock){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
lock = true;
|
||||||
|
QMessageBox::question(NULL, "提示", "IP地址为“" + ipAddress + "”想要连接,是否连接?");
|
||||||
|
lock = false;
|
||||||
|
});
|
||||||
|
qDebug() << "a";
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef GETIPSERVER_H
|
||||||
|
#define GETIPSERVER_H
|
||||||
|
|
||||||
|
#include <mainwindow.h>
|
||||||
|
#include <QTcpServer>
|
||||||
|
#include <QLabel>
|
||||||
|
|
||||||
|
class GetIPServer : public QMainWindow
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GetIPServer(QLabel *localIp);
|
||||||
|
void ConnectClient();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool lock;
|
||||||
|
QTcpServer *tcp;
|
||||||
|
QTcpSocket *tcpSocket;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GETIPSERVER_H
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
MainWindow w;
|
||||||
|
w.show();
|
||||||
|
|
||||||
|
return a.exec();
|
||||||
|
}
|
|
@ -0,0 +1,149 @@
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QStringListModel>
|
||||||
|
#include <QStandardItem>
|
||||||
|
#include <QThread>
|
||||||
|
#include <QInputDialog>
|
||||||
|
#include <QFileDialog>
|
||||||
|
// 用于镜像信息获取
|
||||||
|
#include <QNetworkReply>
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
|
#include <QNetworkRequest>
|
||||||
|
// 用于解析 JSON 数据
|
||||||
|
#include <QJsonObject>
|
||||||
|
#include <QJsonDocument>
|
||||||
|
#include <QJsonArray>
|
||||||
|
// 用于下载文件
|
||||||
|
#include <QProgressDialog>
|
||||||
|
#include "downloadthread.h"
|
||||||
|
#include <QLoggingCategory>
|
||||||
|
// 用于执行命令
|
||||||
|
#include <QProcess>
|
||||||
|
// 用于 Mini HTTP 服务器搭建
|
||||||
|
#include <getipserver.h>
|
||||||
|
|
||||||
|
MainWindow::MainWindow(QWidget *parent) :
|
||||||
|
QMainWindow(parent),
|
||||||
|
ui(new Ui::MainWindow)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
QLoggingCategory::defaultCategory()->setEnabled(QtDebugMsg, true);
|
||||||
|
// 获取网络镜像列表
|
||||||
|
QEventLoop loop;
|
||||||
|
QNetworkAccessManager manager;
|
||||||
|
QNetworkReply *reply = manager.get(QNetworkRequest(QUrl("http://120.25.153.144/AXVM/list.json")));
|
||||||
|
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
|
||||||
|
loop.exec();
|
||||||
|
// 解析获取数据并显示
|
||||||
|
QString imageJsonList = reply->readAll();
|
||||||
|
QJsonDocument imageList = QJsonDocument::fromJson(imageJsonList.toUtf8());
|
||||||
|
name = imageList.array();
|
||||||
|
QStringList nameList;
|
||||||
|
QStandardItemModel *nameListModel = new QStandardItemModel(this);
|
||||||
|
int size = name.size();
|
||||||
|
qDebug() << size;
|
||||||
|
for (int i = 0; i < size; ++i) {
|
||||||
|
QJsonValue value = name.at(i);
|
||||||
|
QJsonArray obj = value.toArray();
|
||||||
|
QStandardItem *item = new QStandardItem(obj.at(0).toString());
|
||||||
|
nameListModel->appendRow(item);
|
||||||
|
}
|
||||||
|
ui->urlImageList->setModel(nameListModel);
|
||||||
|
// 允许 qDebug() 输出
|
||||||
|
QLoggingCategory::defaultCategory()->setEnabled(QtDebugMsg, true);
|
||||||
|
GetIPServer *ip = new GetIPServer(ui->localIP);
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
// 安装事件
|
||||||
|
void MainWindow::on_pushButton_2_clicked()
|
||||||
|
{
|
||||||
|
if(ui->urlImageList->selectionModel()->currentIndex().row() == -1){ // 未选择任何选项
|
||||||
|
QMessageBox::information(this, "提示", "您未选择任何项");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
downloadDialog = new QProgressDialog("", "无用的按钮", 0, 100, this);
|
||||||
|
downloadDialog->setWindowTitle("正在下载“" + name.at(ui->urlImageList->selectionModel()->currentIndex().row()).toArray().at(0).toString() + "”");
|
||||||
|
downloadDialog->show();
|
||||||
|
if(name.at(ui->urlImageList->selectionModel()->currentIndex().row()).toArray().at(3).isArray()){
|
||||||
|
if(QMessageBox::question(this, "提示", "推荐您手动下载格式包,是否手动获取链接并下载?") == QMessageBox::Yes){
|
||||||
|
QJsonArray urlList = name.at(ui->urlImageList->selectionModel()->currentIndex().row()).toArray().at(3).toArray();
|
||||||
|
QString urlThings = "";
|
||||||
|
for(int i = 0; i < urlList.size(); i=i+2){
|
||||||
|
urlThings += urlList.at(i).toString() + ":" + urlList.at(i + 1).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString choose = QInputDialog::getMultiLineText(this,
|
||||||
|
"“" + name.at(ui->urlImageList->selectionModel()->currentIndex().row()).toArray().at(0).toString() + "”下载链接",
|
||||||
|
"请在下面任选一个链接复制到浏览器地址栏进行下载,下载完成后按下“OK”按钮选择下载的 OVA 文件,如果想要取消操作请按“Cancal”",
|
||||||
|
urlThings);
|
||||||
|
if(choose == ""){ // 忽略取消
|
||||||
|
downloadDialog->close();
|
||||||
|
delete downloadDialog;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QString path = QFileDialog::getOpenFileName(this, "浏览 OVA 文件", "~", "OVA文件(*.ova);;全部文件(*.*)");
|
||||||
|
if(path == ""){ // 忽略取消
|
||||||
|
downloadDialog->close();
|
||||||
|
delete downloadDialog;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
thread = new DownloadThread(downloadDialog,
|
||||||
|
path,
|
||||||
|
name.at(ui->urlImageList->selectionModel()->currentIndex().row()).toArray().at(0).toString(),
|
||||||
|
name.at(ui->urlImageList->selectionModel()->currentIndex().row()).toArray().at(2).toString(),
|
||||||
|
true);
|
||||||
|
//connect(thread, &DownloadThread::MessageBoxInfo, this, [this](QString info){QMessageBox::information(this, "提示", info);});
|
||||||
|
//connect(thread, &DownloadThread::MessageBoxError, this, [this](QString info){QMessageBox::critical(this, "错误", info);});
|
||||||
|
/*connect(thread, &DownloadThread::MessageBoxOpenVM, this, [this](QString vmName){
|
||||||
|
if(QMessageBox::question(this, "提示", "安装成功!是否现在马上启动虚拟机?") == QMessageBox::Yes){
|
||||||
|
QProcess process;
|
||||||
|
QStringList command;
|
||||||
|
command << "startvm" << vmName;
|
||||||
|
process.start("VBoxManage", command);
|
||||||
|
process.waitForFinished();
|
||||||
|
qDebug() << process.readAllStandardError();
|
||||||
|
qDebug() << process.readAllStandardOutput();
|
||||||
|
}});*/
|
||||||
|
thread->start();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
thread = new DownloadThread(downloadDialog,
|
||||||
|
name.at(ui->urlImageList->selectionModel()->currentIndex().row()).toArray().at(1).toString(),
|
||||||
|
name.at(ui->urlImageList->selectionModel()->currentIndex().row()).toArray().at(0).toString(),
|
||||||
|
name.at(ui->urlImageList->selectionModel()->currentIndex().row()).toArray().at(2).toString(),
|
||||||
|
false);
|
||||||
|
//connect(thread, &DownloadThread::MessageBoxInfo, this, &MainWindow::MessageBoxInfo);
|
||||||
|
//connect(thread, &DownloadThread::MessageBoxError, this, &MainWindow::MessageBoxError);
|
||||||
|
|
||||||
|
//connect(thread, &DownloadThread::MessageBoxOpenVM, this, &MainWindow::OpenVM);
|
||||||
|
thread->start();
|
||||||
|
}
|
||||||
|
void DownloadThread::MessageBoxInfo(QString info){
|
||||||
|
QMessageBox::information(NULL, "提示", info);
|
||||||
|
}
|
||||||
|
void DownloadThread::MessageBoxError(QString info){
|
||||||
|
QMessageBox::critical(NULL, "错误", info);
|
||||||
|
}
|
||||||
|
void DownloadThread::MessageBoxOpenVM(QString vmName)
|
||||||
|
{
|
||||||
|
if(QMessageBox::question(NULL, "提示", "安装成功!是否现在马上启动虚拟机?") == QMessageBox::Yes){
|
||||||
|
QProcess process;
|
||||||
|
QStringList command;
|
||||||
|
command << "startvm" << vmName;
|
||||||
|
process.start("VBoxManage", command);
|
||||||
|
process.waitForFinished();
|
||||||
|
qDebug() << process.readAllStandardError();
|
||||||
|
qDebug() << process.readAllStandardOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_centralWidget_destroyed()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include "downloadthread.h"
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <QNetworkReply>
|
||||||
|
#include <QProgressDialog>
|
||||||
|
#include <QJsonArray>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class MainWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit MainWindow(QWidget *parent = nullptr);
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void on_pushButton_2_clicked();
|
||||||
|
//void OpenVM(QString vmName);
|
||||||
|
//void MessageBoxInfo(QString info);
|
||||||
|
//void MessageBoxError(QString info);
|
||||||
|
|
||||||
|
void on_centralWidget_destroyed();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::MainWindow *ui;
|
||||||
|
DownloadThread *thread;
|
||||||
|
QProgressDialog *downloadDialog;
|
||||||
|
QJsonArray name;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAINWINDOW_H
|
|
@ -0,0 +1,279 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>683</width>
|
||||||
|
<height>416</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>MainWindow</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralWidget">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
|
<property name="tabPosition">
|
||||||
|
<enum>QTabWidget::West</enum>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="elideMode">
|
||||||
|
<enum>Qt::ElideNone</enum>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="tab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>操作</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout" columnstretch="0">
|
||||||
|
<item row="3" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>选择虚拟机:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="comboBox"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_7">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>PushButton</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>IP地址:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEdit"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>连接</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
|
<item row="0" column="4">
|
||||||
|
<widget class="QPushButton" name="pushButton_11">
|
||||||
|
<property name="text">
|
||||||
|
<string>重置虚拟机</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QPushButton" name="pushButton_8">
|
||||||
|
<property name="text">
|
||||||
|
<string>开启虚拟机</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QPushButton" name="pushButton_10">
|
||||||
|
<property name="text">
|
||||||
|
<string>设置虚拟机</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="5">
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QPushButton" name="pushButton_9">
|
||||||
|
<property name="text">
|
||||||
|
<string>关闭虚拟机</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="3">
|
||||||
|
<widget class="QPushButton" name="pushButton_12">
|
||||||
|
<property name="text">
|
||||||
|
<string>重置虚拟机配置</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>安装/卸载应用:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEdit_2"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>安装</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>浏览</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>卸载</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="localIP">
|
||||||
|
<property name="text">
|
||||||
|
<string>访问:http://127.0.0.1:30201 连接</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_2">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>新建模拟器</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QListView" name="listView"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton_2">
|
||||||
|
<property name="text">
|
||||||
|
<string><<</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>>></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QListView" name="urlImageList"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_3">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>关于</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>©2022~Now,gfdgd xi</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusBar"/>
|
||||||
|
</widget>
|
||||||
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -0,0 +1,606 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 使用系统默认的 python3 运行
|
||||||
|
###########################################################################################
|
||||||
|
# 作者:gfdgd xi
|
||||||
|
# 版本:2.4.0
|
||||||
|
# 更新时间:2022年10月25日
|
||||||
|
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
|
||||||
|
# 基于 Python3 构建
|
||||||
|
###########################################################################################
|
||||||
|
#################
|
||||||
|
# 引入所需的库
|
||||||
|
#################
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import base64
|
||||||
|
import json
|
||||||
|
import traceback
|
||||||
|
import urllib.request
|
||||||
|
import requests
|
||||||
|
import updatekiller
|
||||||
|
import PyQt5.QtWidgets as QtWidgets
|
||||||
|
from UI.AutoConfig import *
|
||||||
|
from Model import *
|
||||||
|
try:
|
||||||
|
import PyQt5.QtWebEngineWidgets as QtWebEngineWidgets
|
||||||
|
webeng = True
|
||||||
|
except:
|
||||||
|
print("未安装 QtWebEngine") #这样更容易排查问题
|
||||||
|
webeng = False
|
||||||
|
print("""太常引·建康中秋夜为吕叔潜赋
|
||||||
|
一轮秋影转金波,飞镜又重磨。把酒问姮娥:被白发、欺人奈何?
|
||||||
|
乘风好去,长空万里,直下看山河。斫去桂婆娑,人道是、清光更多。""")
|
||||||
|
print("")
|
||||||
|
print("""译文:一轮缓缓移动的秋月洒下万里金波,就像那刚磨亮的铜镜又飞上了天廓。我举起酒杯问那月中的嫦娥:怎么办呢?白发日增,好像故意欺负我。
|
||||||
|
我要乘风飞上万里长空,俯视祖国的大好山河。还要砍去月中摇曳的桂树枝柯,人们说,这将使月亮洒下人间的光辉更多。""")
|
||||||
|
print("================================")
|
||||||
|
urlSourcesList = [
|
||||||
|
"http://config.uengine-runner.gfdgdxi.top/", # Github 源
|
||||||
|
"https://gitee.com/gfdgd-xi/uengine-wine-runner-auto-configuration-script/raw/master/", # Gitee 源
|
||||||
|
"https://code.gitlink.org.cn/gfdgd_xi/uengine-runner-list/raw/branch/master/auto", # Gitlink 源
|
||||||
|
"http://gfdgdxi.msns.cn/uengine-runner-list/auto/", # 备用源1,纯 IPv6 源
|
||||||
|
"http://gfdgdxi.free.idcfengye.com/uengine-runner-auto-configuration-script/", # 备用源2
|
||||||
|
"http://gfdgdxi.free.idcfengye.com/uengine-runner-list/auto/", # 备用源 3
|
||||||
|
"http://127.0.0.1/uengine-runner-list/auto/" # 本地测试源
|
||||||
|
]
|
||||||
|
urlSourcesIndex = 0
|
||||||
|
urlSources = urlSourcesList[0]
|
||||||
|
lists = []
|
||||||
|
|
||||||
|
class ProgramRunStatusUpload():
|
||||||
|
msgWindow = None
|
||||||
|
starLayout = None
|
||||||
|
fen = None
|
||||||
|
starList = []
|
||||||
|
sha1Value = ""
|
||||||
|
programName = None
|
||||||
|
def ChangeStar():
|
||||||
|
if ProgramRunStatusUpload.fen.currentIndex() > 5:
|
||||||
|
for i in ProgramRunStatusUpload.starList:
|
||||||
|
i.setText(f"<img src='{programPath}/Icon/BadStar.svg' width=25>")
|
||||||
|
return
|
||||||
|
for i in range(ProgramRunStatusUpload.fen.currentIndex()):
|
||||||
|
ProgramRunStatusUpload.starList[i].setText(f"<img src='{programPath}/Icon/Star.svg' width=25>")
|
||||||
|
head = ProgramRunStatusUpload.fen.currentIndex()
|
||||||
|
end = len(ProgramRunStatusUpload.starList)
|
||||||
|
for i in range(head, end):
|
||||||
|
ProgramRunStatusUpload.starList[i].setText(f"<img src='{programPath}/Icon/UnStar.svg' width=25>")
|
||||||
|
|
||||||
|
def ShowWindow(sha="", title=""):
|
||||||
|
ProgramRunStatusUpload.starList = []
|
||||||
|
ProgramRunStatusUpload.sha1Value = sha
|
||||||
|
ProgramRunStatusUpload.msgWindow = QtWidgets.QMainWindow()
|
||||||
|
msgWidget = QtWidgets.QWidget()
|
||||||
|
msgWidgetLayout = QtWidgets.QGridLayout()
|
||||||
|
ProgramRunStatusUpload.programName = QtWidgets.QLineEdit()
|
||||||
|
ProgramRunStatusUpload.fen = QtWidgets.QComboBox()
|
||||||
|
ProgramRunStatusUpload.starLayout = QtWidgets.QHBoxLayout()
|
||||||
|
upload = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "上传"))
|
||||||
|
upload.clicked.connect(ProgramRunStatusUpload.Upload)
|
||||||
|
if title != "":
|
||||||
|
ProgramRunStatusUpload.programName.setText(title)
|
||||||
|
ProgramRunStatusUpload.programName.setDisabled(True)
|
||||||
|
# 生成星星列表
|
||||||
|
for i in [1, 1, 1, 1, 0]:
|
||||||
|
ProgramRunStatusUpload.starList.append(QtWidgets.QLabel(f"<img src='{programPath}/Icon/{['Un', ''][i]}Star.svg' width=25>"))
|
||||||
|
ProgramRunStatusUpload.starLayout.addWidget(ProgramRunStatusUpload.starList[-1])
|
||||||
|
ProgramRunStatusUpload.starLayout.addItem(QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum))
|
||||||
|
ProgramRunStatusUpload.programName.setPlaceholderText(QtCore.QCoreApplication.translate("U", "如果这个程序和程序名确实是合法还是检测到敏感词,改为“NULL”即可"))
|
||||||
|
ProgramRunStatusUpload.fen.addItems(["0分", "1分", "2分", "3分", "4分", "5分"])
|
||||||
|
ProgramRunStatusUpload.fen.setCurrentIndex(4)
|
||||||
|
ProgramRunStatusUpload.fen.currentIndexChanged.connect(ProgramRunStatusUpload.ChangeStar)
|
||||||
|
msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "程序名:")), 0, 0)
|
||||||
|
msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "评分:")), 1, 0)
|
||||||
|
msgWidgetLayout.addWidget(ProgramRunStatusUpload.programName, 0, 1)
|
||||||
|
msgWidgetLayout.addWidget(ProgramRunStatusUpload.fen, 1, 1)
|
||||||
|
msgWidgetLayout.addLayout(ProgramRunStatusUpload.starLayout, 2, 1)
|
||||||
|
msgWidgetLayout.addWidget(upload, 3, 1)
|
||||||
|
msgWidget.setLayout(msgWidgetLayout)
|
||||||
|
ProgramRunStatusUpload.msgWindow.setCentralWidget(msgWidget)
|
||||||
|
ProgramRunStatusUpload.msgWindow.setWindowTitle(QtCore.QCoreApplication.translate("U", "上传程序运行情况"))
|
||||||
|
ProgramRunStatusUpload.msgWindow.setWindowIcon(QtGui.QIcon(iconPath))
|
||||||
|
ProgramRunStatusUpload.msgWindow.show()
|
||||||
|
|
||||||
|
def Upload():
|
||||||
|
try:
|
||||||
|
#if ProgramRunStatusUpload.sha1Value == "":
|
||||||
|
#ProgramRunStatusUpload.sha1Value = ProgramRunStatusUpload.GetSHA1(e2.currentText())
|
||||||
|
QtWidgets.QMessageBox.information(None, QtCore.QCoreApplication.translate("U", "提示"), requests.post(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUwL2Jhc2g=").decode("utf-8"), {
|
||||||
|
"BashName": ProgramRunStatusUpload.sha1Value,
|
||||||
|
"Fen": ProgramRunStatusUpload.fen.currentIndex()
|
||||||
|
}).json()["Error"])
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
QtWidgets.QMessageBox.critical(None, QtCore.QCoreApplication.translate("U", "错误"), QtCore.QCoreApplication.translate("U", "数据上传失败!"))
|
||||||
|
|
||||||
|
class InformationWindow():
|
||||||
|
def ShowWindow():
|
||||||
|
#webeng = False
|
||||||
|
# 获取选中项
|
||||||
|
try:
|
||||||
|
choose = ui.searchList.selectionModel().selectedIndexes()[0].data()
|
||||||
|
except:
|
||||||
|
QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件")
|
||||||
|
return
|
||||||
|
fileName = ""
|
||||||
|
for i in lists:
|
||||||
|
print(i)
|
||||||
|
if i[0] == choose:
|
||||||
|
fileName = i[1]
|
||||||
|
break
|
||||||
|
aboutHtml = ""
|
||||||
|
try:
|
||||||
|
get = requests.get(f"{urlSources}/information/{fileName}.txt")
|
||||||
|
if get.status_code / 100 != 2 and get.status_code / 100 != 3:
|
||||||
|
int("Bad")
|
||||||
|
about = get.text
|
||||||
|
aboutHtml = str(about)
|
||||||
|
if not "<" in about:
|
||||||
|
# 非 Html 标签
|
||||||
|
for i in about.splitlines():
|
||||||
|
about += f"<p>{i}</p>\n"
|
||||||
|
#about = f"<pre>{about}</pre>"
|
||||||
|
about = f"<h1>关于“{choose}”的介绍</h1>\n{about}"
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
about = f"<h1>关于“{choose}”的介绍</h1>\n<p>暂无此程序的介绍</p>"
|
||||||
|
try:
|
||||||
|
import requests as r
|
||||||
|
fenlists = requests.get("http://data.download.gfdgdxi.top/BashAppFen/" + urllib.request.quote(fileName) + base64.b64decode("L2FsbC5qc29u").decode("utf-8"), timeout=1000).json()
|
||||||
|
tipsInfo = ""
|
||||||
|
except:
|
||||||
|
fenlists = [0, 0, 0, 0, 0]
|
||||||
|
tipsInfo = "暂时无人提交此脚本运行情况,是否立即提交?"
|
||||||
|
maxHead = fenlists.index(max(fenlists))
|
||||||
|
allNumber = 0
|
||||||
|
for i in fenlists:
|
||||||
|
allNumber += i
|
||||||
|
try:
|
||||||
|
maxNumber = max(fenlists) / allNumber * 100
|
||||||
|
if tipsInfo == "":
|
||||||
|
tipsInfo = f"有{maxNumber}%的用户选择了这个评分"
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
end = 5
|
||||||
|
starHtml = ""
|
||||||
|
if maxHead > 5:
|
||||||
|
for i in range(end):
|
||||||
|
if webeng:
|
||||||
|
starHtml += f"<img src='http://wine-runner.gfdgdxi.top/Icon/BadStar.svg' width=50>\n"
|
||||||
|
else:
|
||||||
|
starHtml += f"<img src='{programPath}/Icon/BadStar.svg' width=50>\n"
|
||||||
|
else:
|
||||||
|
for i in range(maxHead):
|
||||||
|
if webeng:
|
||||||
|
starHtml += f"<img src='http://wine-runner.gfdgdxi.top/Icon/Star.svg' width=50>\n"
|
||||||
|
else:
|
||||||
|
starHtml += f"<img src='{programPath}/Icon/Star.svg' width=50>\n"
|
||||||
|
head = maxHead
|
||||||
|
for i in range(head, end):
|
||||||
|
if webeng:
|
||||||
|
starHtml += f"<img src='http://wine-runner.gfdgdxi.top/Icon/UnStar.svg' width=50>"
|
||||||
|
else:
|
||||||
|
starHtml += f"<img src='{programPath}/Icon/UnStar.svg' width=50>"
|
||||||
|
about += f"\n<hr/><h1>评分情况</h1>\n<p align='center'>{starHtml}</p>\n<p align='center'>{tipsInfo}</p>"
|
||||||
|
message = QtWidgets.QDialog()
|
||||||
|
messageLayout = QtWidgets.QVBoxLayout()
|
||||||
|
if webeng:
|
||||||
|
informationText = QtWebEngineWidgets.QWebEngineView()
|
||||||
|
print(aboutHtml)
|
||||||
|
if aboutHtml[:7] == "Visit: ":
|
||||||
|
url = aboutHtml[7:].splitlines()[0]
|
||||||
|
print(url)
|
||||||
|
informationText.setUrl(QtCore.QUrl(url.strip()))
|
||||||
|
else:
|
||||||
|
#informationText.linkClicked.connect(lambda: print("a"))
|
||||||
|
try:
|
||||||
|
with open("/tmp/deepin-wine-runner-information.html", "w") as file:
|
||||||
|
file.write(about)
|
||||||
|
informationText.setUrl(QtCore.QUrl("file:///tmp/deepin-wine-runner-information.html"))
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
informationText.setHtml(about)
|
||||||
|
#informationText.urlChanged.connect(lambda: informationText.setUrl(QtCore.QUrl("https://gfdgd-xi.github.io")))
|
||||||
|
else:
|
||||||
|
informationText = QtWidgets.QTextBrowser()
|
||||||
|
informationText.setHtml(about)
|
||||||
|
uploadFen = QtWidgets.QPushButton("提交评分")
|
||||||
|
uploadFen.clicked.connect(lambda: ProgramRunStatusUpload.ShowWindow(fileName, choose))
|
||||||
|
|
||||||
|
#informationText.setUrl(QtCore.QUrl("https://gfdgd-xi.github.io"))
|
||||||
|
messageLayout.addWidget(informationText)
|
||||||
|
messageLayout.addWidget(uploadFen)
|
||||||
|
message.setWindowTitle(f"关于“{choose}”的介绍")
|
||||||
|
message.resize(int(message.frameSize().width() * 1.5), int(message.frameSize().height()))
|
||||||
|
message.setLayout(messageLayout)
|
||||||
|
#message.setWindowModality(ApplicationModal);
|
||||||
|
message.show()
|
||||||
|
message.exec_()
|
||||||
|
|
||||||
|
def Add(lists: list):
|
||||||
|
global pinLunLayout
|
||||||
|
pinLunLayout1 = QtWidgets.QVBoxLayout()
|
||||||
|
pinLunLayout = QtWidgets.QWidget()
|
||||||
|
pinLunLayout.setLayout(pinLunLayout1)
|
||||||
|
for i in range(pinLunLayout1.count()):
|
||||||
|
pinLunLayout1.removeItem(pinLunLayout1.itemAt(i))
|
||||||
|
for i in lists:
|
||||||
|
widget = QtWidgets.QWidget()
|
||||||
|
inLayout = QtWidgets.QGridLayout()
|
||||||
|
inLayout.addWidget(QtWidgets.QLabel("<hr>"), 0, 0, 1, 3)
|
||||||
|
inLayout.addWidget(QtWidgets.QLabel(f"<b>{i[0]}</b>"), 1, 0)
|
||||||
|
inLayout.addWidget(QtWidgets.QLabel(f"<p align='right'><b>第{i[1]}层</b></p>"), 1, 2)
|
||||||
|
inLayout.addWidget(QtWidgets.QLabel(i[2]), 2, 0, 1, 3)
|
||||||
|
widget.setLayout(inLayout)
|
||||||
|
pinLunLayout1.addWidget(widget)
|
||||||
|
#pinLunLayout.addWidget(QtWidgets.QLabel("<hr/>"))
|
||||||
|
# pinLunLayout = widget
|
||||||
|
|
||||||
|
all = 0
|
||||||
|
now = 0
|
||||||
|
class ProgramRunStatusShow():
|
||||||
|
msgWindow = None
|
||||||
|
pingLunLayout = None
|
||||||
|
def ShowWindow():
|
||||||
|
global lists
|
||||||
|
global all
|
||||||
|
global now
|
||||||
|
global leftButton
|
||||||
|
global rightButton
|
||||||
|
# 获取选中项
|
||||||
|
try:
|
||||||
|
choose = ui.searchList.selectionModel().selectedIndexes()[0].data()
|
||||||
|
except:
|
||||||
|
QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件")
|
||||||
|
return
|
||||||
|
fileName = ""
|
||||||
|
for i in lists:
|
||||||
|
print(i)
|
||||||
|
if i[0] == choose:
|
||||||
|
fileName = i[1]
|
||||||
|
break
|
||||||
|
try:
|
||||||
|
fenlists = requests.get("http://data.download.gfdgdxi.top/BashAppFen/" + urllib.request.quote(fileName) + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).json()
|
||||||
|
tipsInfo = ""
|
||||||
|
except:
|
||||||
|
#traceback.print_exc()
|
||||||
|
fenlists = [0, 0, 0, 0, 0]
|
||||||
|
tipsInfo = "暂时无人提交此脚本评分,是否立即提交?"
|
||||||
|
|
||||||
|
maxHead = fenlists.index(max(fenlists))
|
||||||
|
allNumber = 0
|
||||||
|
for i in fenlists:
|
||||||
|
allNumber += i
|
||||||
|
try:
|
||||||
|
maxNumber = max(fenlists) / allNumber * 100
|
||||||
|
if tipsInfo == "":
|
||||||
|
tipsInfo = f"有{maxNumber}%的用户选择了这个评分"
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
ProgramRunStatusShow.msgWindow = QtWidgets.QMainWindow()
|
||||||
|
msgWidget = QtWidgets.QWidget()
|
||||||
|
msgWidgetLayout = QtWidgets.QGridLayout()
|
||||||
|
starLayout = QtWidgets.QHBoxLayout()
|
||||||
|
uploadButton = QtWidgets.QPushButton(QtCore.QCoreApplication.translate("U", "点此提交评分"))
|
||||||
|
uploadButton.clicked.connect(lambda: ProgramRunStatusUpload.ShowWindow(fileName, choose))
|
||||||
|
msgWidgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "综合评价:")), 0, 0, 2, 1)
|
||||||
|
msgWidgetLayout.addLayout(starLayout, 0, 1, 2, 1)
|
||||||
|
msgWidgetLayout.addWidget(QtWidgets.QLabel(tipsInfo), 0, 2)
|
||||||
|
#msgWidgetLayout.addWidget(QtWidgets.QLabel("" if dateVersion == "" else f"数据版本:{dateVersion}"), 2, 0, 1, 2)
|
||||||
|
msgWidgetLayout.addWidget(uploadButton, 1, 2)
|
||||||
|
end = 5
|
||||||
|
if maxHead > 5:
|
||||||
|
for i in range(end):
|
||||||
|
starLayout.addWidget(QtWidgets.QLabel(f"<img src='{programPath}/Icon/BadStar.svg' width=50>"))
|
||||||
|
else:
|
||||||
|
for i in range(maxHead):
|
||||||
|
starLayout.addWidget(QtWidgets.QLabel(f"<img src='{programPath}/Icon/Star.svg' width=50>"))
|
||||||
|
head = maxHead
|
||||||
|
for i in range(head, end):
|
||||||
|
starLayout.addWidget(QtWidgets.QLabel(f"<img src='{programPath}/Icon/UnStar.svg' width=50>"))
|
||||||
|
pingLun = QtWidgets.QWidget()
|
||||||
|
msgWidgetLayout.addWidget(pingLun, 4, 0, 1, 3)
|
||||||
|
pingLunLayout = QtWidgets.QGridLayout()
|
||||||
|
pingLunInfo = QtWidgets.QTextEdit()
|
||||||
|
#pingLunInfo.document().setMaximumBlockCount(5)
|
||||||
|
uploadButton = QtWidgets.QPushButton("评论")
|
||||||
|
pingLunLayout.addWidget(pingLunInfo, 0, 0, 1, 3)
|
||||||
|
pingLunLayout.addWidget(uploadButton, 1, 2)
|
||||||
|
pingLunInfo.setPlaceholderText("""在此输入评论,须知:
|
||||||
|
※1、不得含有色情、暴力、侮辱等违法内容以及不得有广告推广等内容
|
||||||
|
※2、字数至少 15 字,但不得超过 250 字,评论内容最多 5 行,且评论内容将会进行审核,意味着评论不会实时生效显示
|
||||||
|
※3、如果审核不通过将会被屏蔽并拉入黑名单,以及公开发布 IP 地址,评论前请三思!""")
|
||||||
|
leftButton = QtWidgets.QPushButton("上一页")
|
||||||
|
rightButton = QtWidgets.QPushButton("下一页")
|
||||||
|
if maxHead == 0:
|
||||||
|
#pingLun.setDisabled(True)
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
# 显示最新的3条评论
|
||||||
|
try:
|
||||||
|
all = int(requests.get(f"http://bashpinlun.gfdgdxi.top/{urllib.request.quote(fileName)}/data.txt").text)
|
||||||
|
now = all - 3
|
||||||
|
print(all)
|
||||||
|
if all < 3:
|
||||||
|
start = 0
|
||||||
|
rightButton.setDisabled(True)
|
||||||
|
else:
|
||||||
|
start = all - 3
|
||||||
|
uploadList = []
|
||||||
|
for i in range(all - 1, start - 1, -1):
|
||||||
|
print(f"第 {i + 1} 条评论:")
|
||||||
|
info = requests.get(f"http://bashpinlun.gfdgdxi.top/{urllib.request.quote(fileName)}/pf-{i}.txt").text.strip()
|
||||||
|
print(info)
|
||||||
|
uploadList.append([f"用户{i + 1}", i + 1, info])
|
||||||
|
Add(uploadList)
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
try:
|
||||||
|
ProgramRunStatusShow.pingLunLayout = pingLunLayout
|
||||||
|
pingLunLayout.addWidget(pinLunLayout, 2, 0, 1, 3)
|
||||||
|
except:
|
||||||
|
leftButton.setDisabled(True)
|
||||||
|
rightButton.setDisabled(True)
|
||||||
|
leftButton.clicked.connect(Left)
|
||||||
|
rightButton.clicked.connect(Right)
|
||||||
|
pingLunLayout.addWidget(leftButton, 3, 0)
|
||||||
|
pingLunLayout.addWidget(rightButton, 3, 2)
|
||||||
|
leftButton.setDisabled(True)
|
||||||
|
pingLun.setLayout(pingLunLayout)
|
||||||
|
msgWidget.setLayout(msgWidgetLayout)
|
||||||
|
uploadButton.clicked.connect(lambda: ProgramRunStatusShow.Upload(pingLunInfo.toPlainText(), fileName))
|
||||||
|
ProgramRunStatusShow.msgWindow.setCentralWidget(msgWidget)
|
||||||
|
ProgramRunStatusShow.msgWindow.setWindowIcon(QtGui.QIcon(iconPath))
|
||||||
|
ProgramRunStatusShow.msgWindow.setWindowTitle(f"脚本“{choose}”运行情况")
|
||||||
|
ProgramRunStatusShow.msgWindow.show()
|
||||||
|
|
||||||
|
def Upload(info, name):
|
||||||
|
print(f"脚本:{name}")
|
||||||
|
print(f"评论:{info}")
|
||||||
|
try:
|
||||||
|
res = requests.post(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUwL1BpbmdMdW4=").decode("utf-8"), {"PinLun": info, "Version": name}).json()
|
||||||
|
print(res)
|
||||||
|
if res["ExitCode"]:
|
||||||
|
QtWidgets.QMessageBox.critical(ProgramRunStatusShow.msgWindow, "错误", res["Error"])
|
||||||
|
return
|
||||||
|
QtWidgets.QMessageBox.information(ProgramRunStatusShow.msgWindow, "提示", res["Error"])
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
QtWidgets.QMessageBox.critical(ProgramRunStatusShow.msgWindow, "错误", "提交失败")
|
||||||
|
|
||||||
|
|
||||||
|
def UpdateFen():
|
||||||
|
global now
|
||||||
|
fileName = ""
|
||||||
|
# 获取选中项
|
||||||
|
try:
|
||||||
|
choose = ui.searchList.selectionModel().selectedIndexes()[0].data()
|
||||||
|
except:
|
||||||
|
QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件")
|
||||||
|
return
|
||||||
|
for i in lists:
|
||||||
|
print(i)
|
||||||
|
if i[0] == choose:
|
||||||
|
fileName = i[1]
|
||||||
|
break
|
||||||
|
uploadList = []
|
||||||
|
for i in range(now + 2, now - 1, -1):
|
||||||
|
print(f"第 {i + 1} 条评论:")
|
||||||
|
info = requests.get(f"http://bashpinlun.gfdgdxi.top/{urllib.request.quote(fileName)}/pf-{i}.txt").text.strip()
|
||||||
|
print(info)
|
||||||
|
uploadList.append([f"用户{i + 1}", i + 1, info])
|
||||||
|
#ProgramRunStatusShow.pingLunLayout.removeItem(ProgramRunStatusShow.pingLunLayout.itemAt(2))
|
||||||
|
ProgramRunStatusShow.pingLunLayout.removeWidget(pinLunLayout)
|
||||||
|
pinLunLayout.hide()
|
||||||
|
#pinLunLayout.
|
||||||
|
Add(uploadList)
|
||||||
|
#l = QtWidgets.QGridLayout()
|
||||||
|
#l.removeWidget(pinLunLayout)
|
||||||
|
ProgramRunStatusShow.pingLunLayout.addWidget(pinLunLayout, 2, 0, 1, 3)
|
||||||
|
|
||||||
|
def Left():
|
||||||
|
global now
|
||||||
|
global all
|
||||||
|
|
||||||
|
if now + 6 >= all:
|
||||||
|
now = all - 3
|
||||||
|
leftButton.setDisabled(True)
|
||||||
|
rightButton.setEnabled(True)
|
||||||
|
else:
|
||||||
|
now += 3
|
||||||
|
leftButton.setEnabled(True)
|
||||||
|
rightButton.setEnabled(True)
|
||||||
|
UpdateFen()
|
||||||
|
print(all)
|
||||||
|
print(now)
|
||||||
|
|
||||||
|
def Right():
|
||||||
|
global now
|
||||||
|
if now - 3 < 0:
|
||||||
|
now = 0
|
||||||
|
rightButton.setDisabled(True)
|
||||||
|
leftButton.setEnabled(True)
|
||||||
|
else:
|
||||||
|
now -= 3
|
||||||
|
leftButton.setEnabled(True)
|
||||||
|
rightButton.setEnabled(True)
|
||||||
|
UpdateFen()
|
||||||
|
|
||||||
|
def UploadFen():
|
||||||
|
global lists
|
||||||
|
# 获取选中项
|
||||||
|
try:
|
||||||
|
choose = ui.searchList.selectionModel().selectedIndexes()[0].data()
|
||||||
|
except:
|
||||||
|
QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件")
|
||||||
|
return
|
||||||
|
fileName = ""
|
||||||
|
for i in lists:
|
||||||
|
print(i)
|
||||||
|
if i[0] == choose:
|
||||||
|
fileName = i[1]
|
||||||
|
break
|
||||||
|
ProgramRunStatusUpload.ShowWindow(fileName, choose)
|
||||||
|
|
||||||
|
class Connect:
|
||||||
|
def SearchBotton_Clicked():
|
||||||
|
nmodel = QtGui.QStandardItemModel(window)
|
||||||
|
if ui.searchThings.text() == "":
|
||||||
|
# 显示全部内容
|
||||||
|
for i in lists:
|
||||||
|
nmodel.appendRow(QtGui.QStandardItem(i[0]))
|
||||||
|
ui.searchList.setModel(nmodel)
|
||||||
|
return
|
||||||
|
for i in lists:
|
||||||
|
# 显示筛选的内容
|
||||||
|
if ui.searchThings.text().upper() in i[0].upper():
|
||||||
|
nmodel.appendRow(QtGui.QStandardItem(i[0]))
|
||||||
|
ui.searchList.setModel(nmodel)
|
||||||
|
|
||||||
|
def RunBotton_Clicked():
|
||||||
|
# 获取选中项
|
||||||
|
try:
|
||||||
|
choose = ui.searchList.selectionModel().selectedIndexes()[0].data()
|
||||||
|
except:
|
||||||
|
QtWidgets.QMessageBox.critical(window, "错误", "您未选择任何配置文件")
|
||||||
|
return
|
||||||
|
fileName = ""
|
||||||
|
for i in lists:
|
||||||
|
print(i)
|
||||||
|
if i[0] == choose:
|
||||||
|
fileName = i[1]
|
||||||
|
break
|
||||||
|
# 下载脚本
|
||||||
|
things = ""
|
||||||
|
try:
|
||||||
|
print(f"{urlSources}/{fileName}")
|
||||||
|
file = open("/tmp/wine-runner-auto-config.wsh", "w")
|
||||||
|
things = requests.get(f"{urlSources}/{fileName}").text
|
||||||
|
file.write(things)
|
||||||
|
file.close()
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
QtWidgets.QMessageBox.critical(window, "错误", "无法获取配置文件")
|
||||||
|
return
|
||||||
|
# 判断版本以启动对应的解释器
|
||||||
|
# 做到新旧兼容
|
||||||
|
if "($" in things:
|
||||||
|
print("a")
|
||||||
|
OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '/tmp/wine-runner-auto-config.wsh' --system")
|
||||||
|
print(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '/tmp/wine-runner-auto-config.wsh' --system")
|
||||||
|
# 执行脚本
|
||||||
|
print(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/AutoShell/main.py' '/tmp/wine-runner-auto-config.wsh'")
|
||||||
|
OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/AutoShell/main.py' '/tmp/wine-runner-auto-config.wsh'")
|
||||||
|
#process = QtCore.QProcess()
|
||||||
|
#process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", "/tmp/wine-runner-auto-config.wsh", "--system"])
|
||||||
|
#process.waitForFinished()
|
||||||
|
|
||||||
|
def OpenFile_Triggered():
|
||||||
|
path = QtWidgets.QFileDialog.getOpenFileName(window, "提示", homePath, "配置文件(*.sh *.wsh);;全部文件(*.*)")
|
||||||
|
if path[0] == "":
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
things = ""
|
||||||
|
with open(path) as file:
|
||||||
|
things = file.read()
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
# 判断版本以启动对应的解释器
|
||||||
|
# 做到新旧兼容
|
||||||
|
if "($" in things:
|
||||||
|
OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '{path[0]}' --system")
|
||||||
|
# 执行脚本
|
||||||
|
OpenTerminal(f"env WINEARCH='{os.getenv('WINEARCH')}' WINEDEBUG='{os.getenv('WINEDEBUG')}' WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/AutoShell/main.py' '{path[0]}'")
|
||||||
|
#process = QtCore.QProcess()
|
||||||
|
#process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", path[0], "--system"])
|
||||||
|
#process.waitForFinished()
|
||||||
|
|
||||||
|
# 读取文本文档
|
||||||
|
def readtxt(path):
|
||||||
|
f = open(path, "r") # 设置文件对象
|
||||||
|
str = f.read() # 获取内容
|
||||||
|
f.close() # 关闭文本对象
|
||||||
|
return str # 返回结果
|
||||||
|
|
||||||
|
def ChangeSources():
|
||||||
|
global urlSources
|
||||||
|
global urlSourcesIndex
|
||||||
|
sources = [ui.actionGithub, ui.actionGitee, ui.actionGitlink, ui.action_IPv6, ui.action_2, ui.action_3, ui.action]
|
||||||
|
for i in range(0, len(sources)):
|
||||||
|
if sources[i].isChecked():
|
||||||
|
old_urlSources = urlSources #先备份
|
||||||
|
urlSources = urlSourcesList[i] #然后切换尝试
|
||||||
|
# 解析云列表
|
||||||
|
try:
|
||||||
|
# 获取列表
|
||||||
|
lists = json.loads(requests.get(f"{urlSources}/list.json").text)
|
||||||
|
# 解释列表并显示在 GUI 上
|
||||||
|
nmodel = QtGui.QStandardItemModel(window)
|
||||||
|
for i in lists:
|
||||||
|
nmodel.appendRow(QtGui.QStandardItem(i[0]))
|
||||||
|
ui.searchList.setModel(nmodel)
|
||||||
|
urlSourcesIndex = i
|
||||||
|
except:
|
||||||
|
#[ui.actionGitlink, ui.actionGitee, ui.actionGithub, ui.action_IPv6, ui.action_2, ui.action_3, ui.action][urlSourcesIndex].setChecked(True)
|
||||||
|
traceback.print_exc()
|
||||||
|
QtWidgets.QMessageBox.critical(window, "提示", "无法连接服务器")
|
||||||
|
urlSources = old_urlSources #如果源不可用则换回来
|
||||||
|
break
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
homePath = os.path.expanduser('~')
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
information = json.loads(readtxt(f"{programPath}/information.json"))
|
||||||
|
version = information["Version"]
|
||||||
|
wine = "deepin-wine6-stable"
|
||||||
|
wineprefix = f"{homePath}/.wine"
|
||||||
|
try:
|
||||||
|
wine = sys.argv[1]
|
||||||
|
wineprefix = sys.argv[2]
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
window = QtWidgets.QMainWindow()
|
||||||
|
ui = Ui_MainWindow()
|
||||||
|
pinLunLayout = QtWidgets.QHBoxLayout()
|
||||||
|
ui.setupUi(window)
|
||||||
|
window.setWindowTitle(f"UEngine 运行器 {version}——微型应用商店")
|
||||||
|
window.setWindowIcon(QtGui.QIcon(f"{programPath}/deepin-wine-runner.svg"))
|
||||||
|
iconPath = "{}/runner.svg".format(programPath)
|
||||||
|
window.show()
|
||||||
|
#ui.actionGitlink.setExclusive(True)
|
||||||
|
sourcesGroup = QtWidgets.QActionGroup(window)
|
||||||
|
sourcesGroup.addAction(ui.actionGitlink)
|
||||||
|
sourcesGroup.addAction(ui.actionGitee)
|
||||||
|
sourcesGroup.addAction(ui.actionGithub)
|
||||||
|
sourcesGroup.addAction(ui.action_IPv6)
|
||||||
|
sourcesGroup.addAction(ui.action_2)
|
||||||
|
sourcesGroup.addAction(ui.action_3)
|
||||||
|
sourcesGroup.addAction(ui.action)
|
||||||
|
sourcesGroup.triggered.connect(ChangeSources)
|
||||||
|
sourcesGroup.setExclusive(True)
|
||||||
|
#for i in [ui.actionGitlink, ui.actionGitee, ui.actionGithub, ui.action_IPv6, ui.action]:
|
||||||
|
#i.triggered.connect(ChangeSources)
|
||||||
|
#pass
|
||||||
|
# 连接信号和槽
|
||||||
|
ui.saerchBotton.clicked.connect(Connect.SearchBotton_Clicked)
|
||||||
|
#ui.uploadFen.clicked.connect(UploadFen)
|
||||||
|
ui.getInfoButton.clicked.connect(InformationWindow.ShowWindow)
|
||||||
|
ui.runBotton.clicked.connect(Connect.RunBotton_Clicked)
|
||||||
|
ui.openFile.triggered.connect(Connect.OpenFile_Triggered)
|
||||||
|
ui.exitProgram.triggered.connect(window.close)
|
||||||
|
ui.getFen.clicked.connect(ProgramRunStatusShow.ShowWindow)
|
||||||
|
# 解析云列表
|
||||||
|
try:
|
||||||
|
# 获取列表
|
||||||
|
lists = json.loads(requests.get(f"{urlSources}/list.json").text)
|
||||||
|
# 解释列表并显示在 GUI 上
|
||||||
|
nmodel = QtGui.QStandardItemModel(window)
|
||||||
|
for i in lists:
|
||||||
|
nmodel.appendRow(QtGui.QStandardItem(i[0]))
|
||||||
|
ui.searchList.setModel(nmodel)
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
QtWidgets.QMessageBox.critical(window, "提示", "无法连接服务器")
|
||||||
|
|
||||||
|
app.exec_()
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 加入路径
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
sys.path.append(f"{programPath}/../../")
|
||||||
|
import ConfigLanguareRunner
|
||||||
|
# 符号转移
|
||||||
|
argv = []
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
argv.append(i.replace(" ", "\\ "))
|
||||||
|
com = ConfigLanguareRunner.Command(f"{os.path.basename(sys.argv[0])} {' '.join(argv)}")
|
||||||
|
com.Run(com.GetCommandList(), os.getenv("WINEPREFIX"), os.getenv("WINE"))
|
||||||
|
sys.exit(int(ConfigLanguareRunner.programEnv[9][1]))
|
|
@ -0,0 +1,75 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import json
|
||||||
|
import platform
|
||||||
|
|
||||||
|
# 读取文本文档
|
||||||
|
def readtxt(path):
|
||||||
|
f = open(path, "r") # 设置文件对象
|
||||||
|
str = f.read() # 获取内容
|
||||||
|
f.close() # 关闭文本对象
|
||||||
|
return str # 返回结果
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
information = json.loads(readtxt(f"{programPath}/../information.json"))
|
||||||
|
version = information["Version"]
|
||||||
|
thankText = ""
|
||||||
|
for i in information["Contribute"]:
|
||||||
|
thankText += f"{i}\n"
|
||||||
|
programEnv = [
|
||||||
|
["WINEPREFIX", f"{os.path.expanduser('~')}/.wine"],
|
||||||
|
["WINE", "deepin-wine6-stable"],
|
||||||
|
["DANGER", "0"],
|
||||||
|
["PROGRAMPATH", programPath],
|
||||||
|
["VERSION", version],
|
||||||
|
["THANK", thankText.replace("\n", "\\n")],
|
||||||
|
["MAKER", "gfdgd xi"],
|
||||||
|
["COPYRIGHT", f"©2020~{time.strftime('%Y')} gfdgd xi"],
|
||||||
|
["PLATFORM", platform.system()],
|
||||||
|
["DEBUG", str(int("--debug" in sys.argv))]
|
||||||
|
]
|
||||||
|
'''programEnv = [
|
||||||
|
["($WINEPREFIX)", f"{os.path.expanduser('~')}/.wine"],
|
||||||
|
["($WINE)", "deepin-wine6-stable"],
|
||||||
|
["($DANGER)", "0"],
|
||||||
|
["($HOME)", os.path.expanduser('~')],
|
||||||
|
["($PROGRAMPATH)", programPath],
|
||||||
|
["($VERSION)", version],
|
||||||
|
["($THANK)", thankText],
|
||||||
|
["($MAKER)", "gfdgd xi"],
|
||||||
|
["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} gfdgd xi"],
|
||||||
|
["?", "0"],
|
||||||
|
["PLATFORM)", platform.system()],
|
||||||
|
["DEBUG)", str(int("--debug" in sys.argv))]
|
||||||
|
]'''
|
||||||
|
optionAll = 0
|
||||||
|
if "--debug" in sys.argv:
|
||||||
|
optionAll += 1
|
||||||
|
if "--system" in sys.argv:
|
||||||
|
programEnv.append(["DANGER", "1"])
|
||||||
|
optionAll += 1
|
||||||
|
if os.getenv("WINE") != None:
|
||||||
|
programEnv.append(["WINE", os.getenv("WINE")])
|
||||||
|
if os.getenv("WINEPREFIX") != None:
|
||||||
|
programEnv.append(["WINEPREFIX", os.getenv("WINEPREFIX")])
|
||||||
|
# 生成可以使用的参数
|
||||||
|
commandEnv = ""
|
||||||
|
for i in programEnv:
|
||||||
|
commandEnv += f"{i[0]}=\"{i[1]}\" "
|
||||||
|
commandEnv += f"PATH=\"{programPath}/command:$PATH\" "
|
||||||
|
if len(sys.argv) - optionAll < 2:
|
||||||
|
print("Wine 运行器自动配置文件解析器交互环境(基于 Bash)")
|
||||||
|
print(f"版本:{version}")
|
||||||
|
print(f"©2020~{time.strftime('%Y')} gfdgd xi")
|
||||||
|
print("--------------------------------------------------------------")
|
||||||
|
os.system(f"{commandEnv} bash ")
|
||||||
|
exit()
|
||||||
|
command = ""
|
||||||
|
for i in sys.argv[1:]:
|
||||||
|
command += f"\"{i}\" "
|
||||||
|
print("UEngine 运行器自动配置文件解析器(基于 Bash)")
|
||||||
|
print(f"版本:{version}")
|
||||||
|
print(f"©2020~{time.strftime('%Y')} gfdgd xi")
|
||||||
|
print("--------------------------------------------------------------")
|
||||||
|
os.system(f"{commandEnv} bash {command}")
|
|
@ -0,0 +1,26 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import sys
|
||||||
|
if len(sys.argv) <= 2:
|
||||||
|
print("参数不足")
|
||||||
|
exit()
|
||||||
|
# 忽略 - (别问为什么)
|
||||||
|
if "-" in sys.argv[1]:
|
||||||
|
sys.argv[1] = sys.argv[1][:sys.argv[1].index("-")]
|
||||||
|
if "-" in sys.argv[2]:
|
||||||
|
sys.argv[2] = sys.argv[2][:sys.argv[2].index("-")]
|
||||||
|
firstVersion = sys.argv[1].split(".")
|
||||||
|
secondVersion = sys.argv[2].split(".")
|
||||||
|
for i in range(len(firstVersion)):
|
||||||
|
first = int(firstVersion[i])
|
||||||
|
try:
|
||||||
|
second = int(secondVersion[i])
|
||||||
|
except:
|
||||||
|
second = 0
|
||||||
|
if first > second:
|
||||||
|
print(f"{sys.argv[1]} > {sys.argv[2]}")
|
||||||
|
sys.exit(0)
|
||||||
|
if first < second:
|
||||||
|
print(f"{sys.argv[1]} < {sys.argv[2]}")
|
||||||
|
sys.exit(2)
|
||||||
|
print(f"{sys.argv[1]} = {sys.argv[2]}")
|
||||||
|
sys.exit(1)
|
|
@ -0,0 +1,47 @@
|
||||||
|
{
|
||||||
|
"installdll": "安装指定 dll 在指定容器\n参数数量:1\n参数介绍:dll名称或在从互联网获取DLL工具的编号,如 7012 xolehlp.dll 平台:2003 架构:64 的 7012",
|
||||||
|
"stopdll": "不允许指定 dll/exe 运行\n参数数量:1\n参数介绍:dll/exe 名称,如 example.exe",
|
||||||
|
"installfont": "安装指定字体到指定容器\n参数数量:1\n在字体商店的编号,如 5 msyhbd.ttc 的 5",
|
||||||
|
"installsparkcorefont": "安装星火应用商店的“微软核心字体”\n参数数量:0\n参数介绍:无",
|
||||||
|
"installmono": "安装最新版本的 mono 到指定容器\n参数数量:0\n参数介绍:无",
|
||||||
|
"installgecko": "安装最新版本的 gecko 到指定容器\n参数数量:0\n参数介绍:无",
|
||||||
|
"installvcpp": "安装指定的 VCPP 运行库到指定容器\n参数数量:1\n参数介绍:在安装 Visual Studio C++ 工具的编号,如 10 Visual Studio C++ 2015、2017、2019 和 2022 X64 的 10",
|
||||||
|
"installnet": "安装指定的 .net framework 运行库到指定容器\n参数数量:1\n参数介绍:在安装 .net framework 工具的编号,如 3 .net framework 4.5.1 Offline Installer 的 3",
|
||||||
|
"installmsxml": "安装指定的 MSXML 运行库到指定容器\n参数数量:1\n参数介绍:在安装 MSXML 工具的编号,如 1、MSXML 4.0 SP3 的 1",
|
||||||
|
"echo": "显示内容\n参数数量:≥1\n参数介绍:接要显示的内容",
|
||||||
|
"info": "显示提示对话框\n参数数量:2\n参数介绍:标题+显示内容",
|
||||||
|
"error": "显示错误对话框\n参数数量:2\n参数介绍:标题+显示内容",
|
||||||
|
"warning": "显示警告对话框\n参数数量:2\n参数介绍:标题+显示内容",
|
||||||
|
"exit": "退出程序\n参数数量:0\n参数介绍:无",
|
||||||
|
"bat": "执行 cmd 命令在 Wine 容器内(在 Windows 将在系统执行命令)\n参数数量:≥1\n参数介绍:接要执行的命令",
|
||||||
|
"bash": "执行 bash 命令(在 Windows 系统将执行 cmd 命令)\n参数数量:≥1\n参数介绍:接要执行的命令",
|
||||||
|
"version": "显示解释器版本(Wine 运行器版本)\n参数数量:0\n参数介绍:无",
|
||||||
|
"thank": "显示谢明列表\n参数数量:0\n参数介绍:无",
|
||||||
|
"pause": "按回车键后继续\n参数数量:0\n参数介绍:无",
|
||||||
|
"download": "使用 aria2 下载文件\n参数数量:≥1 && ≤3\n参数介绍:下载URL+保存在的文件夹+保存的文件名",
|
||||||
|
"installdxvk": "安装 dxvk 到指定容器\n参数数量:0\n参数介绍:无",
|
||||||
|
"createbotton": "在指定目录创建容器\n参数数量:0\n参数介绍:无",
|
||||||
|
"reg": "导入 .reg 文件\n参数数量:0\n参数介绍:reg 文件路径",
|
||||||
|
"enabledopengl": "开启 OpenGL\n参数数量:0\n参数介绍:无",
|
||||||
|
"disbledopengl": "关闭 OpenGL\n参数数量:0\n参数介绍:无",
|
||||||
|
"winecfg": "显示“Wine 设置”\n参数数量:0\n参数介绍:无",
|
||||||
|
"winver": "显示“关于 Wine”\n参数数量:0\n参数介绍:无",
|
||||||
|
"changeversion": "更改 Wine 容器系统版本(未实现)\n参数数量:无\n参数介绍:无",
|
||||||
|
"cat": "显示指定文件(只支持显示编码为UTF-8的文件)\n参数数量:1\n参数介绍:无",
|
||||||
|
"enabledhttpproxy": "设置指定容器代理\n参数数量:2\n参数介绍:代理服务器地址+端口",
|
||||||
|
"disbledhttpproxy": "禁用指定容器代理\n参数数量:0\n参数介绍:无",
|
||||||
|
"enabledwinecrashdialog": "启用 Wine 容器程序崩溃提示窗口\n参数数量:0\n参数介绍:无",
|
||||||
|
"disbledwinecrashdialog": "禁用 Wine 容器程序崩溃提示窗口\n参数数量:0\n参数介绍:无",
|
||||||
|
"disbledWinebottlecreatelink": "禁止 Wine 容器生成快捷方式\n参数数量:0\n参数介绍:无",
|
||||||
|
"enabledWinebottlecreatelink": "允许 Wine 容器生成快捷方式\n参数数量:0\n参数介绍:无",
|
||||||
|
"killall": "杀死指定进程\n参数数量:1\n参数介绍:进程名",
|
||||||
|
"control": "打开控制面板\n参数数量:0\n参数介绍:无",
|
||||||
|
"taskmgr": "打开任务管理器\n参数数量:0\n参数介绍:无",
|
||||||
|
"killallwineserver": "杀死所有 Wine 程序\n参数数量:0\n参数介绍:无",
|
||||||
|
"installvb": "安装指定的 VB 运行库到指定容器\n参数数量:1\n参数介绍:在安装 Visual Basic Runtime 工具的编号,如 4 Visual Basic Runtime Visual Basic 6",
|
||||||
|
"installother": "安装未归类的运行库到指定容器\n参数数量:1\n参数介绍:在安装其它运行库工具的编号,如 2 MFC运行库",
|
||||||
|
"decompressionbottle": "解压用 wine 打包的 deb 包内的容器到指定路径\n参数数量:2\n参数介绍:deb 包路径+要解压到的路径",
|
||||||
|
"programforum": "打开程序论坛\n参数数量:0\n参数介绍:无",
|
||||||
|
"installmsi": "安装 MSI 文件到指定容器\n参数数量:1\n参数介绍:msi 文件路径",
|
||||||
|
"installapk": "安装 APK 文件到 UEngine\n参数数量:1\n参数介绍:apk 文件路径"
|
||||||
|
}
|
|
@ -0,0 +1,673 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# 使用系统默认的 python3 运行
|
||||||
|
###########################################################################################
|
||||||
|
# 作者:gfdgd xi
|
||||||
|
# 版本:3.0.1
|
||||||
|
# 更新时间:2022年10月05日
|
||||||
|
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
|
||||||
|
# 基于 Python3 构建
|
||||||
|
###########################################################################################
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import json
|
||||||
|
import random
|
||||||
|
import api as uengineapi
|
||||||
|
import platform
|
||||||
|
import traceback
|
||||||
|
import webbrowser
|
||||||
|
import subprocess
|
||||||
|
import PyQt5.QtWidgets as QtWidgets
|
||||||
|
# 读取文本文档
|
||||||
|
def readtxt(path):
|
||||||
|
f = open(path, "r") # 设置文件对象
|
||||||
|
str = f.read() # 获取内容
|
||||||
|
f.close() # 关闭文本对象
|
||||||
|
return str # 返回结果
|
||||||
|
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
information = json.loads(readtxt(f"{programPath}/information.json"))
|
||||||
|
version = information["Version"]
|
||||||
|
thankText = ""
|
||||||
|
helpList = json.loads(readtxt(f"{programPath}/ConfigLanguareRunner-help.json"))
|
||||||
|
for i in information["Contribute"]:
|
||||||
|
thankText += f"{i}\n"
|
||||||
|
programEnv = [
|
||||||
|
["($WINEPREFIX)", f"{os.path.expanduser('~')}/.wine"],
|
||||||
|
["($WINE)", "deepin-wine6-stable"],
|
||||||
|
#["($DANGER)", "0"],
|
||||||
|
["($DANGER)", "1"],
|
||||||
|
["($HOME)", os.path.expanduser('~')],
|
||||||
|
["($PROGRAMPATH)", programPath],
|
||||||
|
["($VERSION)", version],
|
||||||
|
["($THANK)", thankText],
|
||||||
|
["($MAKER)", "gfdgd xi"],
|
||||||
|
["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} gfdgd xi"],
|
||||||
|
["($?)", "0"],
|
||||||
|
["($PLATFORM)", platform.system()],
|
||||||
|
["($DEBUG)", "1"]
|
||||||
|
#["($DEBUG)", str(int("--debug" in sys.argv))]
|
||||||
|
]
|
||||||
|
readOnlyEnv = [
|
||||||
|
"($DANGER)",
|
||||||
|
"($HOME)",
|
||||||
|
"($PROGRAMPATH)",
|
||||||
|
"($VERSION)",
|
||||||
|
"($THANK)",
|
||||||
|
"($MAKER)",
|
||||||
|
"($COPYRIGHT)",
|
||||||
|
"($?)",
|
||||||
|
"($SYSTEM)",
|
||||||
|
"($DEBUG)"
|
||||||
|
]
|
||||||
|
|
||||||
|
def FindFile(file, name):
|
||||||
|
for i in os.listdir(file):
|
||||||
|
path = f"{file}/{i}"
|
||||||
|
if os.path.isdir(path):
|
||||||
|
returnPath = FindFile(path, name)
|
||||||
|
if returnPath != None:
|
||||||
|
return returnPath.replace("//", "/")
|
||||||
|
if os.path.isfile(path):
|
||||||
|
if i == name:
|
||||||
|
return path
|
||||||
|
return None
|
||||||
|
|
||||||
|
def Debug():
|
||||||
|
if "--debug" in sys.argv:
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
class Command():
|
||||||
|
# 有风险的命令
|
||||||
|
dangerCommand = [
|
||||||
|
"bash",
|
||||||
|
"bat",
|
||||||
|
"download",
|
||||||
|
"reg"
|
||||||
|
]
|
||||||
|
# 可以被使用的命令
|
||||||
|
commandList = [
|
||||||
|
"installdll",
|
||||||
|
"installfont",
|
||||||
|
"installsparkcorefont",
|
||||||
|
"installmono",
|
||||||
|
"installgecko",
|
||||||
|
"installvcpp",
|
||||||
|
"installnet",
|
||||||
|
"installmsxml",
|
||||||
|
"echo",
|
||||||
|
"info",
|
||||||
|
"error",
|
||||||
|
"warning",
|
||||||
|
"exit",
|
||||||
|
"bash",
|
||||||
|
"bat",
|
||||||
|
"version",
|
||||||
|
"thank",
|
||||||
|
"pause",
|
||||||
|
"download",
|
||||||
|
"installdxvk",
|
||||||
|
"createbotton",
|
||||||
|
"reg",
|
||||||
|
"enabledopengl",
|
||||||
|
"disbledopengl",
|
||||||
|
"winecfg",
|
||||||
|
"winver",
|
||||||
|
"changeversion",
|
||||||
|
"stopdll",
|
||||||
|
"cat",
|
||||||
|
"taskmgr",
|
||||||
|
"control",
|
||||||
|
"killall",
|
||||||
|
"killallwineserver",
|
||||||
|
"enabledhttpproxy",
|
||||||
|
"disbledhttpproxy",
|
||||||
|
"enabledwinecrashdialog",
|
||||||
|
"disbledwinecrashdialog",
|
||||||
|
"disbledWinebottlecreatelink",
|
||||||
|
"enabledWinebottlecreatelink",
|
||||||
|
"installvb",
|
||||||
|
"installother",
|
||||||
|
"decompressionbottle",
|
||||||
|
"programforum",
|
||||||
|
"installmsi",
|
||||||
|
"installapk"
|
||||||
|
]
|
||||||
|
|
||||||
|
def __init__(self, commandString: str) -> None:
|
||||||
|
self.commandString = commandString
|
||||||
|
|
||||||
|
# 解析器
|
||||||
|
# 命令字符串转可供解析的列表
|
||||||
|
def GetCommandList(self) -> list:
|
||||||
|
shellList = []
|
||||||
|
shellFirstShell = self.commandString.split("\n")
|
||||||
|
# 转换成可以执行的数组
|
||||||
|
for l in range(0, len(shellFirstShell)):
|
||||||
|
i = shellFirstShell[l]
|
||||||
|
# 判断有没有注释
|
||||||
|
if "#" in i:
|
||||||
|
# 忽略注释
|
||||||
|
i = i[:i.index("#")]
|
||||||
|
# 删除前后空格
|
||||||
|
i = i.strip()
|
||||||
|
# 如果是空行
|
||||||
|
if i == "":
|
||||||
|
# 忽略此行,此行不做处理
|
||||||
|
continue
|
||||||
|
# 空格转义
|
||||||
|
i = i.replace("\\ ", "@Space@")
|
||||||
|
# 解析
|
||||||
|
i = i.split()
|
||||||
|
# 判断是否为合法的参数,否则提示并忽略
|
||||||
|
if not i[0] in self.commandList and i[0][0] != "(":
|
||||||
|
print(f"行{l + 1}命令{i[0]}不存在,忽略")
|
||||||
|
programEnv[9][1] = "-2"
|
||||||
|
continue
|
||||||
|
if programEnv[2][1] == "0" and i[0] in self.dangerCommand:
|
||||||
|
print(f"行{l + 1}命令{i[0]}目前解析器不允许运行,忽略")
|
||||||
|
print("如果需要运行,可以在配置面板开启“允许修改系统”选项(针对GUI用户)")
|
||||||
|
print("或添加参数 --system(终端调用运行用户)")
|
||||||
|
programEnv[9][1] = "-1"
|
||||||
|
continue
|
||||||
|
rightList = []
|
||||||
|
for k in i:
|
||||||
|
# 处理符号转义
|
||||||
|
rightList.append(k.replace("@Space@", " ").replace("\\n", "\n").replace("\\r", "\r"))
|
||||||
|
shellList.append(rightList)
|
||||||
|
return shellList
|
||||||
|
|
||||||
|
# 运行器
|
||||||
|
class Run():
|
||||||
|
close = False
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
def Exit(self):
|
||||||
|
self.close = True
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def InstallDll(self) -> int:
|
||||||
|
import InstallDll
|
||||||
|
# 如果是数字
|
||||||
|
number = False
|
||||||
|
try:
|
||||||
|
int(self.command[1])
|
||||||
|
number = True
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
if number:
|
||||||
|
return InstallDll.Download(self.wineBottonPath, InstallDll.GetNameByNumber(int(self.command[1])), InstallDll.GetUrlByNumber(int(self.command[1])), self.wine)
|
||||||
|
return InstallDll.Download(self.wineBottonPath, self.command[1], InstallDll.GetUrlByName(self.command[1]), self.wine)
|
||||||
|
|
||||||
|
def InstallDxvk(self):
|
||||||
|
if not os.path.exists(f"{programPath}/dxvk"):
|
||||||
|
if os.system(f"7z x \"{programPath}/dxvk.7z\" -o\"{programPath}\""):
|
||||||
|
print("错误:无法解压资源")
|
||||||
|
return 1
|
||||||
|
os.remove(f"{programPath}/dxvk.7z")
|
||||||
|
return os.system(f"env 'WINE={self.wine}' 'WINE64={self.wine}' 'WINEPREFIX={self.wineBottonPath}' bash '{programPath}/dxvk/auto.sh' install")
|
||||||
|
|
||||||
|
def Thank(self) -> int:
|
||||||
|
for i in information["Contribute"]:
|
||||||
|
print(i)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def InstallFont(self) -> int:
|
||||||
|
import InstallFont
|
||||||
|
return InstallFont.Download(self.wineBottonPath, int(self.command[1]))
|
||||||
|
|
||||||
|
def InstallMono(self) -> int:
|
||||||
|
return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' mono")
|
||||||
|
|
||||||
|
def InstallGecko(self) -> int:
|
||||||
|
return os.system(f"ENTERNOTSHOW=0 '{self.programPath}/InstallMono.py' '{self.wineBottonPath}' '{self.wine}' gecko")
|
||||||
|
|
||||||
|
def InstallVCPP(self) -> int:
|
||||||
|
import InstallVisualCPlusPlus
|
||||||
|
return InstallVisualCPlusPlus.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||||
|
|
||||||
|
def InstallNet(self) -> int:
|
||||||
|
import InstallNetFramework
|
||||||
|
return InstallNetFramework.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||||
|
|
||||||
|
def InstallMsxml(self) -> int:
|
||||||
|
import InstallMsxml
|
||||||
|
return InstallMsxml.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||||
|
|
||||||
|
def Info(self) -> int:
|
||||||
|
QtWidgets.QMessageBox.information(None, self.command[1], self.command[2])
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def StopDll(self) -> int:
|
||||||
|
return os.system(f"WINEPREFIX='{self.wineBottonPath}' '{self.wine}' reg add 'HKEY_CURRENT_USER\Software\Wine\DllOverrides' /v {os.path.splitext(self.command[1])[0]} /f")
|
||||||
|
|
||||||
|
def CreateBotton(self):
|
||||||
|
self.command = ["bat", "exit"]
|
||||||
|
self.Bat()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def InstallSparkCoreFont(self):
|
||||||
|
if not os.system("which aptss"):
|
||||||
|
# 最新版本星火应用商店处理
|
||||||
|
os.system("pkexec bash aptss ssupdate")
|
||||||
|
return os.system("pkexec bash aptss install ms-core-fonts")
|
||||||
|
if not os.system("which ss-apt-fast"):
|
||||||
|
# 稍久的版本
|
||||||
|
os.system("pkexec ss-apt-fast update")
|
||||||
|
return os.system("pkexec bash ss-apt-fast install ms-core-fonts")
|
||||||
|
# 不知道什么版本的处理方法
|
||||||
|
if not os.system("which apt-fast"):
|
||||||
|
# 稍久的版本
|
||||||
|
os.system("pkexec apt-fast update")
|
||||||
|
return os.system("pkexec apt-fast install ms-core-fonts")
|
||||||
|
os.system("pkexec apt update")
|
||||||
|
return os.system("pkexec apt install ms-core-fonts")
|
||||||
|
|
||||||
|
def Echo(self) -> int:
|
||||||
|
del self.command[0]
|
||||||
|
print(" ".join(self.command))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def Warning(self):
|
||||||
|
QtWidgets.QMessageBox.warning(None, self.command[1], self.command[2])
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def Error(self):
|
||||||
|
QtWidgets.QMessageBox.critical(None, self.command[1], self.command[2])
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def Bash(self):
|
||||||
|
command = ""
|
||||||
|
for i in self.command[1:]:
|
||||||
|
command += f"'{i}' "
|
||||||
|
return os.system(command)
|
||||||
|
|
||||||
|
def Bat(self) -> int:
|
||||||
|
# Windows 直接转换为以 cmd 运行
|
||||||
|
if platform.system() == "Windows":
|
||||||
|
# 直接调用 Bash 函数
|
||||||
|
return self.Bash()
|
||||||
|
command = ["WINEPREFIX='($WINEPREFIX)'", "($WINE)"]
|
||||||
|
for i in programEnv:
|
||||||
|
for k in range(len(command)):
|
||||||
|
command[k] = command[k].replace(i[0], i[1])
|
||||||
|
for i in self.command[1:]:
|
||||||
|
command.append(i)
|
||||||
|
commandStr = command[0] + " "
|
||||||
|
for i in command[1:]:
|
||||||
|
commandStr += f"'{i}' "
|
||||||
|
return os.system(commandStr)
|
||||||
|
|
||||||
|
def Version(self):
|
||||||
|
print(f"版本:{version}")
|
||||||
|
print(f"©2020~{time.strftime('%Y')} RacoonGX 团队,By gfdgd xi")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def Pause(self) -> int:
|
||||||
|
input("按回车键继续……")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def Download(self) -> int:
|
||||||
|
command = f"aria2c -x 16 -s 16 -c '{self.command[1]}' "
|
||||||
|
try:
|
||||||
|
command += f"-d '{self.command[2]}' "
|
||||||
|
command += f"-o '{self.command[3]}' "
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return os.system(command)
|
||||||
|
|
||||||
|
def Reg(self) -> int:
|
||||||
|
self.command = ["bat", "regedit", "/s", self.command[1]]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def EnabledOpenGl(self) -> int:
|
||||||
|
self.command = ["reg", f"z:{programPath}/EnabledOpengl.reg"]
|
||||||
|
return self.Reg()
|
||||||
|
|
||||||
|
def DisbledOpenGl(self) -> int:
|
||||||
|
self.command = ["reg", f"z:{programPath}/DisabledOpengl.reg"]
|
||||||
|
return self.Reg()
|
||||||
|
|
||||||
|
def Winver(self):
|
||||||
|
self.command = ["bat", "winver"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def Winecfg(self):
|
||||||
|
self.command = ["bat", "winecfg"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def ChangeVersion(self):
|
||||||
|
# 判断是否为正确的版本
|
||||||
|
if not os.path.exists(f"{programPath}/ChangeWineBottonVersion/{self.command[1]}.reg"):
|
||||||
|
print("错误:您选择的版本错误,目前只支持以下版本")
|
||||||
|
for i in os.listdir(f"{programPath}/ChangeWineBottonVersion"):
|
||||||
|
print(i.replace(".reg", ""), end=" ")
|
||||||
|
print()
|
||||||
|
return 1
|
||||||
|
self.command = ["reg", f"z:/{programPath}/ChangeWineBottonVersion/{self.command[1]}.reg"]
|
||||||
|
return self.Reg()
|
||||||
|
|
||||||
|
def Cat(self):
|
||||||
|
try:
|
||||||
|
file = open(self.command[1], "r")
|
||||||
|
print(file.read())
|
||||||
|
file.close()
|
||||||
|
return 0
|
||||||
|
except:
|
||||||
|
print("文件读取错误")
|
||||||
|
Debug()
|
||||||
|
return 1
|
||||||
|
|
||||||
|
def Taskmgr(self):
|
||||||
|
self.command = ["bat", "taskmgr"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def Control(self):
|
||||||
|
self.command = ["bat", "control"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def Killall(self):
|
||||||
|
return os.system(f"killall -9 {self.command[1]}")
|
||||||
|
|
||||||
|
def KillallWineServer(self):
|
||||||
|
command = ["WINEPREFIX='($WINEPREFIX)'", "($WINE)", "-k"]
|
||||||
|
for i in programEnv:
|
||||||
|
for k in range(len(command)):
|
||||||
|
command[k] = command[k].replace(i[0], i[1])
|
||||||
|
if "box86" in command[1] or "exagear" in command[1] or "box64" in command[1]:
|
||||||
|
print("不支持此 Wine")
|
||||||
|
return 1
|
||||||
|
if os.path.exists(command[1]):
|
||||||
|
# 文件存在
|
||||||
|
command[1] = f"{os.path.dirname(command[1])}/wineserver"
|
||||||
|
else:
|
||||||
|
# 读 which
|
||||||
|
command[1] = f"{os.path.dirname(subprocess.getoutput(f'which {command[1]}').strip())}/wineserver"
|
||||||
|
commandStr = command[0] + " "
|
||||||
|
for i in command[1:]:
|
||||||
|
commandStr += f"'{i}' "
|
||||||
|
return os.system(commandStr)
|
||||||
|
|
||||||
|
def EnabledWineBottleCreateLink(self):
|
||||||
|
self.command = ["bat", "reg", "delete", "HKEY_CURRENT_USER\Software\Wine\DllOverrides", "/v", "winemenubuilder.exe", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def DisbledWineBottleCreateLink(self):
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\DllOverrides", "/v", "winemenubuilder.exe", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def DisbledWineCrashDialog(self):
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\WineDbg", "/v", "ShowCrashDialog", "/t", "REG_DWORD", "/d", "00000000", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def EnabledWineCrashDialog(self):
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Wine\WineDbg", "/v", "ShowCrashDialog", "/t", "REG_DWORD", "/d", "00000001", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def EnabledHttpProxy(self):
|
||||||
|
proxyServerAddress = self.command[1]
|
||||||
|
port = self.command[2]
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "00000001", "/f"]
|
||||||
|
self.Bat()
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyServer", "/d", f"{proxyServerAddress}:{port}", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def DecompressionBottle(self):
|
||||||
|
tempDebDir = f"/tmp/wine-runner-unpack-deb-{random.randint(0, 1000)}"
|
||||||
|
if os.system(f"dpkg -x '{self.command[1]}' '{tempDebDir}'"):
|
||||||
|
return 1
|
||||||
|
zippath = FindFile(tempDebDir, "files.7z")
|
||||||
|
if zippath == None:
|
||||||
|
return 2
|
||||||
|
# 解压文件
|
||||||
|
os.system(f"mkdir -p '{self.command[2]}'")
|
||||||
|
fi = os.system(f"7z x -y '{zippath}' -o'{self.command[2]}'")
|
||||||
|
os.system(f"rm -rfv '{tempDebDir}'")
|
||||||
|
return fi
|
||||||
|
|
||||||
|
|
||||||
|
def DisbledHttpProxy(self):
|
||||||
|
self.command = ["bat", "reg", "add", "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "00000000", "/f"]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def InstallVB(self):
|
||||||
|
import InstallVisualBasicRuntime
|
||||||
|
return InstallVisualBasicRuntime.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||||
|
|
||||||
|
def InstallOther(self):
|
||||||
|
import InstallOther
|
||||||
|
return InstallOther.Download(self.wineBottonPath, int(self.command[1]), self.wine)
|
||||||
|
|
||||||
|
def ProgramForum(self):
|
||||||
|
webbrowser.open_new_tab("https://gfdgdxi.flarum.cloud/")
|
||||||
|
return
|
||||||
|
|
||||||
|
def InstallMSI(self):
|
||||||
|
self.command = ["bat", "msiexec", "/i", self.command[1]]
|
||||||
|
return self.Bat()
|
||||||
|
|
||||||
|
def InstallApk(self):
|
||||||
|
if os.system("which uengine > /dev/null"):
|
||||||
|
print("未安装 UEngine,无法使用该命令")
|
||||||
|
return 1
|
||||||
|
apk = uengineapi.APK(self.command[1])
|
||||||
|
result = apk.install()
|
||||||
|
homePath = os.getenv("HOME")
|
||||||
|
if not os.path.exists(f"{homePath}/.local/share/applications/uengine"):
|
||||||
|
os.makedirs(f"{homePath}/.local/share/applications/uengine")
|
||||||
|
if not os.path.exists(f"{homePath}/.local/share/icons/hicolor/apps"):
|
||||||
|
os.makedirs(f"{homePath}/.local/share/icons/hicolor/apps")
|
||||||
|
package = apk.packageName()
|
||||||
|
apk.saveApkIcon(f"{homePath}/.local/share/icons/hicolor/apps/{package}.png")
|
||||||
|
apk.saveDesktopFile(f"{homePath}/.local/share/applications/uengine/{package}.desktop", f"{homePath}/.local/share/icons/hicolor/apps/{package}.png")
|
||||||
|
return result
|
||||||
|
|
||||||
|
# 可以运行的命令的映射关系
|
||||||
|
# 可以被使用的命令的映射
|
||||||
|
commandList = {
|
||||||
|
"installdll": InstallDll,
|
||||||
|
"installfont": InstallFont,
|
||||||
|
"installsparkcorefont": InstallSparkCoreFont,
|
||||||
|
"installmono": InstallMono,
|
||||||
|
"installgecko": InstallGecko,
|
||||||
|
"installvcpp": InstallVCPP,
|
||||||
|
"installnet": InstallNet,
|
||||||
|
"installmsxml": InstallMsxml,
|
||||||
|
"echo": Echo,
|
||||||
|
"info": Info,
|
||||||
|
"warning": Warning,
|
||||||
|
"error": Error,
|
||||||
|
"exit": Exit,
|
||||||
|
"bash": Bash,
|
||||||
|
"bat": Bat,
|
||||||
|
"version": Version,
|
||||||
|
"thank": Thank,
|
||||||
|
"pause": Pause,
|
||||||
|
"download": Download,
|
||||||
|
"installdxvk": InstallDxvk,
|
||||||
|
"createbotton": CreateBotton,
|
||||||
|
"reg": Reg,
|
||||||
|
"enabledopengl": EnabledOpenGl,
|
||||||
|
"disbledopengl": DisbledOpenGl,
|
||||||
|
"winecfg": Winecfg,
|
||||||
|
"winver": Winver,
|
||||||
|
"changeversion": ChangeVersion,
|
||||||
|
"stopdll": StopDll,
|
||||||
|
"cat": Cat,
|
||||||
|
"taskmgr": Taskmgr,
|
||||||
|
"control": Control,
|
||||||
|
"killallwineserver": KillallWineServer,
|
||||||
|
"enabledhttpproxy": EnabledHttpProxy,
|
||||||
|
"disbledhttpproxy": DisbledHttpProxy,
|
||||||
|
"enabledwinecrashdialog": EnabledWineCrashDialog,
|
||||||
|
"disbledwinecrashdialog": DisbledWineCrashDialog,
|
||||||
|
"disbledWinebottlecreatelink": DisbledWineBottleCreateLink,
|
||||||
|
"enabledWinebottlecreatelink": EnabledWineBottleCreateLink,
|
||||||
|
"installvb": InstallVB,
|
||||||
|
"installother": InstallOther,
|
||||||
|
"decompressionbottle": DecompressionBottle,
|
||||||
|
"programforum": ProgramForum,
|
||||||
|
"installmsi": InstallMSI,
|
||||||
|
"installapk": InstallApk
|
||||||
|
}
|
||||||
|
|
||||||
|
# 参数数列表
|
||||||
|
commandInfo = {
|
||||||
|
"killall": [1],
|
||||||
|
"installdll": [1],
|
||||||
|
"installfont": [1],
|
||||||
|
"installsparkcorefont": [0],
|
||||||
|
"installmono": [0],
|
||||||
|
"installgecko": [0],
|
||||||
|
"installvcpp": [1],
|
||||||
|
"installnet": [1],
|
||||||
|
"installmsxml": [1],
|
||||||
|
"echo": [1],
|
||||||
|
"info": [2],
|
||||||
|
"warning": [2],
|
||||||
|
"error": [2],
|
||||||
|
"exit": [0],
|
||||||
|
"bash": [1],
|
||||||
|
"bat": [1],
|
||||||
|
"version": [0],
|
||||||
|
"thank": [0],
|
||||||
|
"pause": [0],
|
||||||
|
"download": [1],
|
||||||
|
"installdxvk": [0],
|
||||||
|
"createbotton": [0],
|
||||||
|
"reg": [1],
|
||||||
|
"enabledopengl": [0],
|
||||||
|
"disbledopengl": [0],
|
||||||
|
"winecfg": [0],
|
||||||
|
"winver": [0],
|
||||||
|
"changeversion": [1],
|
||||||
|
"stopdll": [1],
|
||||||
|
"cat": [1],
|
||||||
|
"taskmgr": [0],
|
||||||
|
"control": [0],
|
||||||
|
"killallwineserver": [0],
|
||||||
|
"enabledhttpproxy": [2],
|
||||||
|
"disbledhttpproxy": [0],
|
||||||
|
"enabledwinecrashdialog": [0],
|
||||||
|
"disbledwinecrashdialog": [0],
|
||||||
|
"disbledWinebottlecreatelink": [0],
|
||||||
|
"enabledWinebottlecreatelink": [0],
|
||||||
|
"installvb": [1],
|
||||||
|
"installother": [1],
|
||||||
|
"decompressionbottle": [2],
|
||||||
|
"programforum": [0],
|
||||||
|
"installmsi": [1],
|
||||||
|
"installapk": [1]
|
||||||
|
}
|
||||||
|
windowsUnrun = [
|
||||||
|
"createbotton",
|
||||||
|
"installdll",
|
||||||
|
"installmono",
|
||||||
|
"installgecko",
|
||||||
|
"winecfg",
|
||||||
|
"stopdll",
|
||||||
|
"changeversion",
|
||||||
|
"enabledopengl",
|
||||||
|
"disbledopengl",
|
||||||
|
"installdxvk",
|
||||||
|
"installfont",
|
||||||
|
"installsparkcorefont",
|
||||||
|
"decompressionbottle",
|
||||||
|
"installapk"
|
||||||
|
]
|
||||||
|
# 解析
|
||||||
|
def __init__(self, command: list, wineBottonPath: str, wine: str) -> int:
|
||||||
|
self.wineBottonPath = wineBottonPath
|
||||||
|
self.wine = wine
|
||||||
|
for i in command:
|
||||||
|
self.command = i
|
||||||
|
# 变量解析
|
||||||
|
if self.command[0][0] == "(" and "=" in self.command[0]:
|
||||||
|
env = i[0][: i[0].index("=")]
|
||||||
|
value = i[0][i[0].index("=") + 1:]
|
||||||
|
# 判断是不是只读变量
|
||||||
|
if env in readOnlyEnv:
|
||||||
|
print(f"运行命令{' '.join(self.command)}出现错误")
|
||||||
|
print(f"变量 {env} 只读,无法修改,忽略")
|
||||||
|
continue
|
||||||
|
change = False
|
||||||
|
for k in range(len(programEnv)):
|
||||||
|
# 修改变量
|
||||||
|
if env == programEnv[k][0]:
|
||||||
|
programEnv[k][1] = value
|
||||||
|
change = True
|
||||||
|
break
|
||||||
|
if not change:
|
||||||
|
# 添加变量
|
||||||
|
programEnv.append([f"{env}", value])
|
||||||
|
continue
|
||||||
|
# 解析命令是否可以在 Windows 使用(只限在 Windows 系统时)
|
||||||
|
if platform.system() == "Windows" and i[0] in self.windowsUnrun:
|
||||||
|
print("此命令不支持在 Windows 上运行")
|
||||||
|
programEnv[9][1] = "-5"
|
||||||
|
continue
|
||||||
|
# 获取程序帮助信息
|
||||||
|
try:
|
||||||
|
if i[1] == "--help":
|
||||||
|
print(helpList[i[0]].replace("\\n", "\n"))
|
||||||
|
continue
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
# 正常命令解析
|
||||||
|
if len(i) -1 < self.commandInfo[i[0]][0]:
|
||||||
|
print("参数不足")
|
||||||
|
programEnv[9][1] = "-3"
|
||||||
|
continue
|
||||||
|
# 替换环境变量
|
||||||
|
for a in range(1, len(i)):
|
||||||
|
for b in programEnv:
|
||||||
|
if b[0] in i[a]:
|
||||||
|
i[a] = i[a].replace(b[0], b[1])
|
||||||
|
try:
|
||||||
|
commandReturn = self.commandList[i[0]](self)
|
||||||
|
except:
|
||||||
|
traceback.print_exc()
|
||||||
|
commandReturn = 1
|
||||||
|
if commandReturn:
|
||||||
|
print(f"运行命令{' '.join(self.command)}出现错误,返回值:", commandReturn)
|
||||||
|
programEnv[9][1] = str(commandReturn)
|
||||||
|
if self.close:
|
||||||
|
break
|
||||||
|
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
if os.getenv("WINE") != None:
|
||||||
|
programEnv[1][1] = os.getenv("WINE")
|
||||||
|
if os.getenv("WINEPREFIX") != None:
|
||||||
|
programEnv[0][1] = os.getenv("WINEPREFIX")
|
||||||
|
if __name__ == "__main__":
|
||||||
|
optionAll = 0
|
||||||
|
if "--debug" in sys.argv:
|
||||||
|
optionAll += 1
|
||||||
|
if "--system" in sys.argv:
|
||||||
|
programEnv[2][1] = "1"
|
||||||
|
optionAll += 1
|
||||||
|
if len(sys.argv) - optionAll < 2:
|
||||||
|
print("Wine 运行器自动配置文件解析器交互环境")
|
||||||
|
print(f"版本:{version}")
|
||||||
|
print(f"©2020~{time.strftime('%Y')} RacoonGX 团队,By gfdgd xi")
|
||||||
|
print("--------------------------------------------------------------")
|
||||||
|
while True:
|
||||||
|
commandLine = input(">")
|
||||||
|
if commandLine == "exit":
|
||||||
|
break
|
||||||
|
com = Command(commandLine)
|
||||||
|
com.Run(com.GetCommandList(), programEnv[0][1], programEnv[1][1])
|
||||||
|
sys.exit(int(programEnv[9][1]))
|
||||||
|
# 读取文件
|
||||||
|
try:
|
||||||
|
file = open(sys.argv[1], "r")
|
||||||
|
com = Command(file.read())
|
||||||
|
file.close()
|
||||||
|
except:
|
||||||
|
print("错误:无法读取该文件,无法继续")
|
||||||
|
sys.exit(1)
|
||||||
|
print("UEngine 运行器自动配置文件解析器")
|
||||||
|
print(f"版本:{version}")
|
||||||
|
print(f"©2020~{time.strftime('%Y')} gfdgd xi")
|
||||||
|
print("--------------------------------------------------------------")
|
||||||
|
com.Run(com.GetCommandList(), programEnv[0][1], programEnv[1][1])
|
||||||
|
sys.exit(int(programEnv[9][1]))
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
import base64
|
||||||
|
import requests
|
||||||
|
print("""浣溪沙
|
||||||
|
一曲新词酒一杯,去年天气旧亭台。夕阳西下几时回?
|
||||||
|
无可奈何花落去,似曾相识燕归来。小园香径独徘徊。""")
|
||||||
|
print("")
|
||||||
|
print("听一支新曲喝一杯美酒,还是去年的天气旧日的亭台,西落的夕阳何时再回来?那花儿落去我也无可奈何,那归来的燕子似曾相识,在小园的花径上独自徘徊。")
|
||||||
|
print("================================")
|
||||||
|
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||||||
|
with open(f"{programPath}/information.json") as file:
|
||||||
|
version = json.loads(file.read())["Version"]
|
||||||
|
print(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3VlbmdpbmUtcnVubmVyL0luc3RhbGwucGhwP1ZlcnNpb249").decode("utf-8") + version).text)
|
BIN
Help/1-1-1.png
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 28 KiB |
BIN
Help/1-1-2.png
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
BIN
Help/1-1-4.png
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
BIN
Help/1-3-1.png
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
BIN
Help/1-5-1.png
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 72 KiB |
BIN
Help/1-5-2.png
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 8.5 KiB |
BIN
Help/1-6-1.png
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
BIN
Help/1-7-1.png
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
BIN
Help/1-9-2.png
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 26 KiB |
BIN
Help/1-9-3.png
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
BIN
Help/1-9-5.png
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 56 KiB |
|
@ -0,0 +1 @@
|
||||||
|
.sass-cache/
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"esnext": true,
|
||||||
|
"indent": 2,
|
||||||
|
"maxlen": 80,
|
||||||
|
"freeze": true,
|
||||||
|
"camelcase": true,
|
||||||
|
"unused": true,
|
||||||
|
"eqnull": true,
|
||||||
|
"proto": true,
|
||||||
|
"supernew": true,
|
||||||
|
"noyield": true,
|
||||||
|
"evil": true,
|
||||||
|
"node": true,
|
||||||
|
"boss": true,
|
||||||
|
"expr": true,
|
||||||
|
"loopfunc": true,
|
||||||
|
"white": true,
|
||||||
|
"maxdepth": 4
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
# Contributing
|
||||||
|
Changes and improvements are more than welcome! Feel free to fork and open a pull request.
|
||||||
|
|
||||||
|
Please follow the house rules to have a bigger chance of your contribution being merged.
|
||||||
|
|
||||||
|
## House rules
|
||||||
|
|
||||||
|
### How to make changes
|
||||||
|
- To make changes, create a new branch based on `master` (do not create one from `gh-pages` unless strictly necessary) and make them there, then create a Pull Request to master.
|
||||||
|
`gh-pages` is different from master in that it contains sharing features, analytics and other things that have no direct bearing with the game. `master` is the "pure" version of the game.
|
||||||
|
- If you want to modify the CSS, please edit the SCSS files present in `style/`: `main.scss` and others. Don't edit the `main.css`, because it's supposed to be generated.
|
||||||
|
In order to compile your SCSS modifications, you need to use the `sass` gem (install it by running `gem install sass` once Ruby is installed).
|
||||||
|
To run SASS, simply use the following command:
|
||||||
|
`sass --unix-newlines --watch style/main.scss`
|
||||||
|
SASS will automatically recompile your css when changed.
|
||||||
|
- `Rakefile` contains some tasks that help during development. Feel free to add useful tasks if needed.
|
||||||
|
- Please use 2-space indentation when editing the JavaScript. A `.jshintrc` file is present, which will help your code to follow the guidelines if you install and run `jshint`.
|
||||||
|
- Please test your modification thoroughly before submitting your Pull Request.
|
||||||
|
|
||||||
|
### Changes that might not be accepted
|
||||||
|
We have to be conservative with the core game. This means that some modifications won't be merged, or will have to be evaluated carefully before being merged:
|
||||||
|
|
||||||
|
- Undo/redo features
|
||||||
|
- Save/reload features
|
||||||
|
- Changes to how the tiles look or their contents
|
||||||
|
- Changes to the layout
|
||||||
|
- Changes to the grid size
|
||||||
|
|
||||||
|
### Changes that are welcome
|
||||||
|
- Bug fixes
|
||||||
|
- Compatibility improvements
|
||||||
|
- "Under the hood" enhancements
|
||||||
|
- Small changes that don't have an impact on the core gameplay
|
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Gabriele Cirulli
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
|
@ -0,0 +1,38 @@
|
||||||
|
# 2048
|
||||||
|
A small clone of [1024](https://play.google.com/store/apps/details?id=com.veewo.a1024), based on [Saming's 2048](http://saming.fr/p/2048/) (also a clone).
|
||||||
|
|
||||||
|
Made just for fun. [Play it here!](http://gabrielecirulli.github.io/2048/)
|
||||||
|
|
||||||
|
The official app can also be found on the [Play Store](https://play.google.com/store/apps/details?id=com.gabrielecirulli.app2048) and [App Store!](https://itunes.apple.com/us/app/2048-by-gabriele-cirulli/id868076805)
|
||||||
|
|
||||||
|
### Contributions
|
||||||
|
|
||||||
|
[Anna Harren](https://github.com/iirelu/) and [sigod](https://github.com/sigod) are maintainers for this repository.
|
||||||
|
|
||||||
|
Other notable contributors:
|
||||||
|
|
||||||
|
- [TimPetricola](https://github.com/TimPetricola) added best score storage
|
||||||
|
- [chrisprice](https://github.com/chrisprice) added custom code for swipe handling on mobile
|
||||||
|
- [marcingajda](https://github.com/marcingajda) made swipes work on Windows Phone
|
||||||
|
- [mgarciaisaia](https://github.com/mgarciaisaia) added support for Android 2.3
|
||||||
|
|
||||||
|
Many thanks to [rayhaanj](https://github.com/rayhaanj), [Mechazawa](https://github.com/Mechazawa), [grant](https://github.com/grant), [remram44](https://github.com/remram44) and [ghoullier](https://github.com/ghoullier) for the many other good contributions.
|
||||||
|
|
||||||
|
### Screenshot
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://cloud.githubusercontent.com/assets/1175750/8614312/280e5dc2-26f1-11e5-9f1f-5891c3ca8b26.png" alt="Screenshot"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
That screenshot is fake, by the way. I never reached 2048 :smile:
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
Changes and improvements are more than welcome! Feel free to fork and open a pull request. Please make your changes in a specific branch and request to pull into `master`! If you can, please make sure the game fully works before sending the PR, as that will help speed up the process.
|
||||||
|
|
||||||
|
You can find the same information in the [contributing guide.](https://github.com/gabrielecirulli/2048/blob/master/CONTRIBUTING.md)
|
||||||
|
|
||||||
|
## License
|
||||||
|
2048 is licensed under the [MIT license.](https://github.com/gabrielecirulli/2048/blob/master/LICENSE.txt)
|
||||||
|
|
||||||
|
## Donations
|
||||||
|
I made this in my spare time, and it's hosted on GitHub (which means I don't have any hosting costs), but if you enjoyed the game and feel like buying me coffee, you can donate at my BTC address: `1Ec6onfsQmoP9kkL3zkpB6c5sA4PVcXU2i`. Thank you very much!
|
|
@ -0,0 +1,11 @@
|
||||||
|
require "date"
|
||||||
|
|
||||||
|
namespace :appcache do
|
||||||
|
desc "update the date in the appcache file (in the gh-pages branch)"
|
||||||
|
task :update do
|
||||||
|
appcache = File.read("cache.appcache")
|
||||||
|
updated = "# Updated: #{DateTime.now}"
|
||||||
|
|
||||||
|
File.write("cache.appcache", appcache.sub(/^# Updated:.*$/, updated))
|
||||||
|
end
|
||||||
|
end
|
After Width: | Height: | Size: 4.2 KiB |
|
@ -0,0 +1,99 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>2048</title>
|
||||||
|
|
||||||
|
<link href="style/main.css" rel="stylesheet" type="text/css">
|
||||||
|
<link rel="shortcut icon" href="favicon.ico">
|
||||||
|
<link rel="apple-touch-icon" href="meta/apple-touch-icon.png">
|
||||||
|
<link rel="apple-touch-startup-image" href="meta/apple-touch-startup-image-640x1096.png" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)"> <!-- iPhone 5+ -->
|
||||||
|
<link rel="apple-touch-startup-image" href="meta/apple-touch-startup-image-640x920.png" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)"> <!-- iPhone, retina -->
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
|
||||||
|
<meta name="HandheldFriendly" content="True">
|
||||||
|
<meta name="MobileOptimized" content="320">
|
||||||
|
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0, maximum-scale=1, user-scalable=no, minimal-ui">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="heading">
|
||||||
|
<h1 class="title">2048</h1>
|
||||||
|
<div class="scores-container">
|
||||||
|
<div class="score-container">0</div>
|
||||||
|
<div class="best-container">0</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="above-game">
|
||||||
|
<p class="game-intro">Join the numbers and get to the <strong>2048 tile!</strong></p>
|
||||||
|
<a class="restart-button">New Game</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="game-container">
|
||||||
|
<div class="game-message">
|
||||||
|
<p></p>
|
||||||
|
<div class="lower">
|
||||||
|
<a class="keep-playing-button">Keep going</a>
|
||||||
|
<a class="retry-button">Try again</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid-container">
|
||||||
|
<div class="grid-row">
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
</div>
|
||||||
|
<div class="grid-row">
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
</div>
|
||||||
|
<div class="grid-row">
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
</div>
|
||||||
|
<div class="grid-row">
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
<div class="grid-cell"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tile-container">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="game-explanation">
|
||||||
|
<strong class="important">How to play:</strong> Use your <strong>arrow keys</strong> to move the tiles. When two tiles with the same number touch, they <strong>merge into one!</strong>
|
||||||
|
</p>
|
||||||
|
<hr>
|
||||||
|
<p>
|
||||||
|
<strong class="important">Note:</strong> This site is the official version of 2048. You can play it on your phone via <a href="http://git.io/2048">http://git.io/2048.</a> All other apps or sites are derivatives or fakes, and should be used with caution.
|
||||||
|
</p>
|
||||||
|
<hr>
|
||||||
|
<p>
|
||||||
|
Created by <a href="http://gabrielecirulli.com" target="_blank">Gabriele Cirulli.</a> Based on <a href="https://itunes.apple.com/us/app/1024!/id823499224" target="_blank">1024 by Veewo Studio</a> and conceptually similar to <a href="http://asherv.com/threes/" target="_blank">Threes by Asher Vollmer.</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="js/bind_polyfill.js"></script>
|
||||||
|
<script src="js/classlist_polyfill.js"></script>
|
||||||
|
<script src="js/animframe_polyfill.js"></script>
|
||||||
|
<script src="js/keyboard_input_manager.js"></script>
|
||||||
|
<script src="js/html_actuator.js"></script>
|
||||||
|
<script src="js/grid.js"></script>
|
||||||
|
<script src="js/tile.js"></script>
|
||||||
|
<script src="js/local_storage_manager.js"></script>
|
||||||
|
<script src="js/game_manager.js"></script>
|
||||||
|
<script src="js/application.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,28 @@
|
||||||
|
(function () {
|
||||||
|
var lastTime = 0;
|
||||||
|
var vendors = ['webkit', 'moz'];
|
||||||
|
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
|
||||||
|
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
|
||||||
|
window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] ||
|
||||||
|
window[vendors[x] + 'CancelRequestAnimationFrame'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window.requestAnimationFrame) {
|
||||||
|
window.requestAnimationFrame = function (callback) {
|
||||||
|
var currTime = new Date().getTime();
|
||||||
|
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
|
||||||
|
var id = window.setTimeout(function () {
|
||||||
|
callback(currTime + timeToCall);
|
||||||
|
},
|
||||||
|
timeToCall);
|
||||||
|
lastTime = currTime + timeToCall;
|
||||||
|
return id;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!window.cancelAnimationFrame) {
|
||||||
|
window.cancelAnimationFrame = function (id) {
|
||||||
|
clearTimeout(id);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}());
|
|
@ -0,0 +1,4 @@
|
||||||
|
// Wait till the browser is ready to render the game (avoids glitches)
|
||||||
|
window.requestAnimationFrame(function () {
|
||||||
|
new GameManager(4, KeyboardInputManager, HTMLActuator, LocalStorageManager);
|
||||||
|
});
|
|
@ -0,0 +1,9 @@
|
||||||
|
Function.prototype.bind = Function.prototype.bind || function (target) {
|
||||||
|
var self = this;
|
||||||
|
return function (args) {
|
||||||
|
if (!(args instanceof Array)) {
|
||||||
|
args = [args];
|
||||||
|
}
|
||||||
|
self.apply(target, args);
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,71 @@
|
||||||
|
(function () {
|
||||||
|
if (typeof window.Element === "undefined" ||
|
||||||
|
"classList" in document.documentElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var prototype = Array.prototype,
|
||||||
|
push = prototype.push,
|
||||||
|
splice = prototype.splice,
|
||||||
|
join = prototype.join;
|
||||||
|
|
||||||
|
function DOMTokenList(el) {
|
||||||
|
this.el = el;
|
||||||
|
// The className needs to be trimmed and split on whitespace
|
||||||
|
// to retrieve a list of classes.
|
||||||
|
var classes = el.className.replace(/^\s+|\s+$/g, '').split(/\s+/);
|
||||||
|
for (var i = 0; i < classes.length; i++) {
|
||||||
|
push.call(this, classes[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DOMTokenList.prototype = {
|
||||||
|
add: function (token) {
|
||||||
|
if (this.contains(token)) return;
|
||||||
|
push.call(this, token);
|
||||||
|
this.el.className = this.toString();
|
||||||
|
},
|
||||||
|
contains: function (token) {
|
||||||
|
return this.el.className.indexOf(token) != -1;
|
||||||
|
},
|
||||||
|
item: function (index) {
|
||||||
|
return this[index] || null;
|
||||||
|
},
|
||||||
|
remove: function (token) {
|
||||||
|
if (!this.contains(token)) return;
|
||||||
|
for (var i = 0; i < this.length; i++) {
|
||||||
|
if (this[i] == token) break;
|
||||||
|
}
|
||||||
|
splice.call(this, i, 1);
|
||||||
|
this.el.className = this.toString();
|
||||||
|
},
|
||||||
|
toString: function () {
|
||||||
|
return join.call(this, ' ');
|
||||||
|
},
|
||||||
|
toggle: function (token) {
|
||||||
|
if (!this.contains(token)) {
|
||||||
|
this.add(token);
|
||||||
|
} else {
|
||||||
|
this.remove(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.contains(token);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.DOMTokenList = DOMTokenList;
|
||||||
|
|
||||||
|
function defineElementGetter(obj, prop, getter) {
|
||||||
|
if (Object.defineProperty) {
|
||||||
|
Object.defineProperty(obj, prop, {
|
||||||
|
get: getter
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
obj.__defineGetter__(prop, getter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defineElementGetter(HTMLElement.prototype, 'classList', function () {
|
||||||
|
return new DOMTokenList(this);
|
||||||
|
});
|
||||||
|
})();
|
|
@ -0,0 +1,272 @@
|
||||||
|
function GameManager(size, InputManager, Actuator, StorageManager) {
|
||||||
|
this.size = size; // Size of the grid
|
||||||
|
this.inputManager = new InputManager;
|
||||||
|
this.storageManager = new StorageManager;
|
||||||
|
this.actuator = new Actuator;
|
||||||
|
|
||||||
|
this.startTiles = 2;
|
||||||
|
|
||||||
|
this.inputManager.on("move", this.move.bind(this));
|
||||||
|
this.inputManager.on("restart", this.restart.bind(this));
|
||||||
|
this.inputManager.on("keepPlaying", this.keepPlaying.bind(this));
|
||||||
|
|
||||||
|
this.setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restart the game
|
||||||
|
GameManager.prototype.restart = function () {
|
||||||
|
this.storageManager.clearGameState();
|
||||||
|
this.actuator.continueGame(); // Clear the game won/lost message
|
||||||
|
this.setup();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Keep playing after winning (allows going over 2048)
|
||||||
|
GameManager.prototype.keepPlaying = function () {
|
||||||
|
this.keepPlaying = true;
|
||||||
|
this.actuator.continueGame(); // Clear the game won/lost message
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return true if the game is lost, or has won and the user hasn't kept playing
|
||||||
|
GameManager.prototype.isGameTerminated = function () {
|
||||||
|
return this.over || (this.won && !this.keepPlaying);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Set up the game
|
||||||
|
GameManager.prototype.setup = function () {
|
||||||
|
var previousState = this.storageManager.getGameState();
|
||||||
|
|
||||||
|
// Reload the game from a previous game if present
|
||||||
|
if (previousState) {
|
||||||
|
this.grid = new Grid(previousState.grid.size,
|
||||||
|
previousState.grid.cells); // Reload grid
|
||||||
|
this.score = previousState.score;
|
||||||
|
this.over = previousState.over;
|
||||||
|
this.won = previousState.won;
|
||||||
|
this.keepPlaying = previousState.keepPlaying;
|
||||||
|
} else {
|
||||||
|
this.grid = new Grid(this.size);
|
||||||
|
this.score = 0;
|
||||||
|
this.over = false;
|
||||||
|
this.won = false;
|
||||||
|
this.keepPlaying = false;
|
||||||
|
|
||||||
|
// Add the initial tiles
|
||||||
|
this.addStartTiles();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the actuator
|
||||||
|
this.actuate();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Set up the initial tiles to start the game with
|
||||||
|
GameManager.prototype.addStartTiles = function () {
|
||||||
|
for (var i = 0; i < this.startTiles; i++) {
|
||||||
|
this.addRandomTile();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Adds a tile in a random position
|
||||||
|
GameManager.prototype.addRandomTile = function () {
|
||||||
|
if (this.grid.cellsAvailable()) {
|
||||||
|
var value = Math.random() < 0.9 ? 2 : 4;
|
||||||
|
var tile = new Tile(this.grid.randomAvailableCell(), value);
|
||||||
|
|
||||||
|
this.grid.insertTile(tile);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Sends the updated grid to the actuator
|
||||||
|
GameManager.prototype.actuate = function () {
|
||||||
|
if (this.storageManager.getBestScore() < this.score) {
|
||||||
|
this.storageManager.setBestScore(this.score);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear the state when the game is over (game over only, not win)
|
||||||
|
if (this.over) {
|
||||||
|
this.storageManager.clearGameState();
|
||||||
|
} else {
|
||||||
|
this.storageManager.setGameState(this.serialize());
|
||||||
|
}
|
||||||
|
|
||||||
|
this.actuator.actuate(this.grid, {
|
||||||
|
score: this.score,
|
||||||
|
over: this.over,
|
||||||
|
won: this.won,
|
||||||
|
bestScore: this.storageManager.getBestScore(),
|
||||||
|
terminated: this.isGameTerminated()
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Represent the current game as an object
|
||||||
|
GameManager.prototype.serialize = function () {
|
||||||
|
return {
|
||||||
|
grid: this.grid.serialize(),
|
||||||
|
score: this.score,
|
||||||
|
over: this.over,
|
||||||
|
won: this.won,
|
||||||
|
keepPlaying: this.keepPlaying
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Save all tile positions and remove merger info
|
||||||
|
GameManager.prototype.prepareTiles = function () {
|
||||||
|
this.grid.eachCell(function (x, y, tile) {
|
||||||
|
if (tile) {
|
||||||
|
tile.mergedFrom = null;
|
||||||
|
tile.savePosition();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Move a tile and its representation
|
||||||
|
GameManager.prototype.moveTile = function (tile, cell) {
|
||||||
|
this.grid.cells[tile.x][tile.y] = null;
|
||||||
|
this.grid.cells[cell.x][cell.y] = tile;
|
||||||
|
tile.updatePosition(cell);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Move tiles on the grid in the specified direction
|
||||||
|
GameManager.prototype.move = function (direction) {
|
||||||
|
// 0: up, 1: right, 2: down, 3: left
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
if (this.isGameTerminated()) return; // Don't do anything if the game's over
|
||||||
|
|
||||||
|
var cell, tile;
|
||||||
|
|
||||||
|
var vector = this.getVector(direction);
|
||||||
|
var traversals = this.buildTraversals(vector);
|
||||||
|
var moved = false;
|
||||||
|
|
||||||
|
// Save the current tile positions and remove merger information
|
||||||
|
this.prepareTiles();
|
||||||
|
|
||||||
|
// Traverse the grid in the right direction and move tiles
|
||||||
|
traversals.x.forEach(function (x) {
|
||||||
|
traversals.y.forEach(function (y) {
|
||||||
|
cell = { x: x, y: y };
|
||||||
|
tile = self.grid.cellContent(cell);
|
||||||
|
|
||||||
|
if (tile) {
|
||||||
|
var positions = self.findFarthestPosition(cell, vector);
|
||||||
|
var next = self.grid.cellContent(positions.next);
|
||||||
|
|
||||||
|
// Only one merger per row traversal?
|
||||||
|
if (next && next.value === tile.value && !next.mergedFrom) {
|
||||||
|
var merged = new Tile(positions.next, tile.value * 2);
|
||||||
|
merged.mergedFrom = [tile, next];
|
||||||
|
|
||||||
|
self.grid.insertTile(merged);
|
||||||
|
self.grid.removeTile(tile);
|
||||||
|
|
||||||
|
// Converge the two tiles' positions
|
||||||
|
tile.updatePosition(positions.next);
|
||||||
|
|
||||||
|
// Update the score
|
||||||
|
self.score += merged.value;
|
||||||
|
|
||||||
|
// The mighty 2048 tile
|
||||||
|
if (merged.value === 2048) self.won = true;
|
||||||
|
} else {
|
||||||
|
self.moveTile(tile, positions.farthest);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!self.positionsEqual(cell, tile)) {
|
||||||
|
moved = true; // The tile moved from its original cell!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
if (moved) {
|
||||||
|
this.addRandomTile();
|
||||||
|
|
||||||
|
if (!this.movesAvailable()) {
|
||||||
|
this.over = true; // Game over!
|
||||||
|
}
|
||||||
|
|
||||||
|
this.actuate();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Get the vector representing the chosen direction
|
||||||
|
GameManager.prototype.getVector = function (direction) {
|
||||||
|
// Vectors representing tile movement
|
||||||
|
var map = {
|
||||||
|
0: { x: 0, y: -1 }, // Up
|
||||||
|
1: { x: 1, y: 0 }, // Right
|
||||||
|
2: { x: 0, y: 1 }, // Down
|
||||||
|
3: { x: -1, y: 0 } // Left
|
||||||
|
};
|
||||||
|
|
||||||
|
return map[direction];
|
||||||
|
};
|
||||||
|
|
||||||
|
// Build a list of positions to traverse in the right order
|
||||||
|
GameManager.prototype.buildTraversals = function (vector) {
|
||||||
|
var traversals = { x: [], y: [] };
|
||||||
|
|
||||||
|
for (var pos = 0; pos < this.size; pos++) {
|
||||||
|
traversals.x.push(pos);
|
||||||
|
traversals.y.push(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always traverse from the farthest cell in the chosen direction
|
||||||
|
if (vector.x === 1) traversals.x = traversals.x.reverse();
|
||||||
|
if (vector.y === 1) traversals.y = traversals.y.reverse();
|
||||||
|
|
||||||
|
return traversals;
|
||||||
|
};
|
||||||
|
|
||||||
|
GameManager.prototype.findFarthestPosition = function (cell, vector) {
|
||||||
|
var previous;
|
||||||
|
|
||||||
|
// Progress towards the vector direction until an obstacle is found
|
||||||
|
do {
|
||||||
|
previous = cell;
|
||||||
|
cell = { x: previous.x + vector.x, y: previous.y + vector.y };
|
||||||
|
} while (this.grid.withinBounds(cell) &&
|
||||||
|
this.grid.cellAvailable(cell));
|
||||||
|
|
||||||
|
return {
|
||||||
|
farthest: previous,
|
||||||
|
next: cell // Used to check if a merge is required
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
GameManager.prototype.movesAvailable = function () {
|
||||||
|
return this.grid.cellsAvailable() || this.tileMatchesAvailable();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Check for available matches between tiles (more expensive check)
|
||||||
|
GameManager.prototype.tileMatchesAvailable = function () {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var tile;
|
||||||
|
|
||||||
|
for (var x = 0; x < this.size; x++) {
|
||||||
|
for (var y = 0; y < this.size; y++) {
|
||||||
|
tile = this.grid.cellContent({ x: x, y: y });
|
||||||
|
|
||||||
|
if (tile) {
|
||||||
|
for (var direction = 0; direction < 4; direction++) {
|
||||||
|
var vector = self.getVector(direction);
|
||||||
|
var cell = { x: x + vector.x, y: y + vector.y };
|
||||||
|
|
||||||
|
var other = self.grid.cellContent(cell);
|
||||||
|
|
||||||
|
if (other && other.value === tile.value) {
|
||||||
|
return true; // These two tiles can be merged
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
GameManager.prototype.positionsEqual = function (first, second) {
|
||||||
|
return first.x === second.x && first.y === second.y;
|
||||||
|
};
|
|
@ -0,0 +1,117 @@
|
||||||
|
function Grid(size, previousState) {
|
||||||
|
this.size = size;
|
||||||
|
this.cells = previousState ? this.fromState(previousState) : this.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build a grid of the specified size
|
||||||
|
Grid.prototype.empty = function () {
|
||||||
|
var cells = [];
|
||||||
|
|
||||||
|
for (var x = 0; x < this.size; x++) {
|
||||||
|
var row = cells[x] = [];
|
||||||
|
|
||||||
|
for (var y = 0; y < this.size; y++) {
|
||||||
|
row.push(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cells;
|
||||||
|
};
|
||||||
|
|
||||||
|
Grid.prototype.fromState = function (state) {
|
||||||
|
var cells = [];
|
||||||
|
|
||||||
|
for (var x = 0; x < this.size; x++) {
|
||||||
|
var row = cells[x] = [];
|
||||||
|
|
||||||
|
for (var y = 0; y < this.size; y++) {
|
||||||
|
var tile = state[x][y];
|
||||||
|
row.push(tile ? new Tile(tile.position, tile.value) : null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cells;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Find the first available random position
|
||||||
|
Grid.prototype.randomAvailableCell = function () {
|
||||||
|
var cells = this.availableCells();
|
||||||
|
|
||||||
|
if (cells.length) {
|
||||||
|
return cells[Math.floor(Math.random() * cells.length)];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Grid.prototype.availableCells = function () {
|
||||||
|
var cells = [];
|
||||||
|
|
||||||
|
this.eachCell(function (x, y, tile) {
|
||||||
|
if (!tile) {
|
||||||
|
cells.push({ x: x, y: y });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return cells;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Call callback for every cell
|
||||||
|
Grid.prototype.eachCell = function (callback) {
|
||||||
|
for (var x = 0; x < this.size; x++) {
|
||||||
|
for (var y = 0; y < this.size; y++) {
|
||||||
|
callback(x, y, this.cells[x][y]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Check if there are any cells available
|
||||||
|
Grid.prototype.cellsAvailable = function () {
|
||||||
|
return !!this.availableCells().length;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Check if the specified cell is taken
|
||||||
|
Grid.prototype.cellAvailable = function (cell) {
|
||||||
|
return !this.cellOccupied(cell);
|
||||||
|
};
|
||||||
|
|
||||||
|
Grid.prototype.cellOccupied = function (cell) {
|
||||||
|
return !!this.cellContent(cell);
|
||||||
|
};
|
||||||
|
|
||||||
|
Grid.prototype.cellContent = function (cell) {
|
||||||
|
if (this.withinBounds(cell)) {
|
||||||
|
return this.cells[cell.x][cell.y];
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Inserts a tile at its position
|
||||||
|
Grid.prototype.insertTile = function (tile) {
|
||||||
|
this.cells[tile.x][tile.y] = tile;
|
||||||
|
};
|
||||||
|
|
||||||
|
Grid.prototype.removeTile = function (tile) {
|
||||||
|
this.cells[tile.x][tile.y] = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
Grid.prototype.withinBounds = function (position) {
|
||||||
|
return position.x >= 0 && position.x < this.size &&
|
||||||
|
position.y >= 0 && position.y < this.size;
|
||||||
|
};
|
||||||
|
|
||||||
|
Grid.prototype.serialize = function () {
|
||||||
|
var cellState = [];
|
||||||
|
|
||||||
|
for (var x = 0; x < this.size; x++) {
|
||||||
|
var row = cellState[x] = [];
|
||||||
|
|
||||||
|
for (var y = 0; y < this.size; y++) {
|
||||||
|
row.push(this.cells[x][y] ? this.cells[x][y].serialize() : null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
size: this.size,
|
||||||
|
cells: cellState
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,139 @@
|
||||||
|
function HTMLActuator() {
|
||||||
|
this.tileContainer = document.querySelector(".tile-container");
|
||||||
|
this.scoreContainer = document.querySelector(".score-container");
|
||||||
|
this.bestContainer = document.querySelector(".best-container");
|
||||||
|
this.messageContainer = document.querySelector(".game-message");
|
||||||
|
|
||||||
|
this.score = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
HTMLActuator.prototype.actuate = function (grid, metadata) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
window.requestAnimationFrame(function () {
|
||||||
|
self.clearContainer(self.tileContainer);
|
||||||
|
|
||||||
|
grid.cells.forEach(function (column) {
|
||||||
|
column.forEach(function (cell) {
|
||||||
|
if (cell) {
|
||||||
|
self.addTile(cell);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
self.updateScore(metadata.score);
|
||||||
|
self.updateBestScore(metadata.bestScore);
|
||||||
|
|
||||||
|
if (metadata.terminated) {
|
||||||
|
if (metadata.over) {
|
||||||
|
self.message(false); // You lose
|
||||||
|
} else if (metadata.won) {
|
||||||
|
self.message(true); // You win!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Continues the game (both restart and keep playing)
|
||||||
|
HTMLActuator.prototype.continueGame = function () {
|
||||||
|
this.clearMessage();
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLActuator.prototype.clearContainer = function (container) {
|
||||||
|
while (container.firstChild) {
|
||||||
|
container.removeChild(container.firstChild);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLActuator.prototype.addTile = function (tile) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var wrapper = document.createElement("div");
|
||||||
|
var inner = document.createElement("div");
|
||||||
|
var position = tile.previousPosition || { x: tile.x, y: tile.y };
|
||||||
|
var positionClass = this.positionClass(position);
|
||||||
|
|
||||||
|
// We can't use classlist because it somehow glitches when replacing classes
|
||||||
|
var classes = ["tile", "tile-" + tile.value, positionClass];
|
||||||
|
|
||||||
|
if (tile.value > 2048) classes.push("tile-super");
|
||||||
|
|
||||||
|
this.applyClasses(wrapper, classes);
|
||||||
|
|
||||||
|
inner.classList.add("tile-inner");
|
||||||
|
inner.textContent = tile.value;
|
||||||
|
|
||||||
|
if (tile.previousPosition) {
|
||||||
|
// Make sure that the tile gets rendered in the previous position first
|
||||||
|
window.requestAnimationFrame(function () {
|
||||||
|
classes[2] = self.positionClass({ x: tile.x, y: tile.y });
|
||||||
|
self.applyClasses(wrapper, classes); // Update the position
|
||||||
|
});
|
||||||
|
} else if (tile.mergedFrom) {
|
||||||
|
classes.push("tile-merged");
|
||||||
|
this.applyClasses(wrapper, classes);
|
||||||
|
|
||||||
|
// Render the tiles that merged
|
||||||
|
tile.mergedFrom.forEach(function (merged) {
|
||||||
|
self.addTile(merged);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
classes.push("tile-new");
|
||||||
|
this.applyClasses(wrapper, classes);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the inner part of the tile to the wrapper
|
||||||
|
wrapper.appendChild(inner);
|
||||||
|
|
||||||
|
// Put the tile on the board
|
||||||
|
this.tileContainer.appendChild(wrapper);
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLActuator.prototype.applyClasses = function (element, classes) {
|
||||||
|
element.setAttribute("class", classes.join(" "));
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLActuator.prototype.normalizePosition = function (position) {
|
||||||
|
return { x: position.x + 1, y: position.y + 1 };
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLActuator.prototype.positionClass = function (position) {
|
||||||
|
position = this.normalizePosition(position);
|
||||||
|
return "tile-position-" + position.x + "-" + position.y;
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLActuator.prototype.updateScore = function (score) {
|
||||||
|
this.clearContainer(this.scoreContainer);
|
||||||
|
|
||||||
|
var difference = score - this.score;
|
||||||
|
this.score = score;
|
||||||
|
|
||||||
|
this.scoreContainer.textContent = this.score;
|
||||||
|
|
||||||
|
if (difference > 0) {
|
||||||
|
var addition = document.createElement("div");
|
||||||
|
addition.classList.add("score-addition");
|
||||||
|
addition.textContent = "+" + difference;
|
||||||
|
|
||||||
|
this.scoreContainer.appendChild(addition);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLActuator.prototype.updateBestScore = function (bestScore) {
|
||||||
|
this.bestContainer.textContent = bestScore;
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLActuator.prototype.message = function (won) {
|
||||||
|
var type = won ? "game-won" : "game-over";
|
||||||
|
var message = won ? "You win!" : "Game over!";
|
||||||
|
|
||||||
|
this.messageContainer.classList.add(type);
|
||||||
|
this.messageContainer.getElementsByTagName("p")[0].textContent = message;
|
||||||
|
};
|
||||||
|
|
||||||
|
HTMLActuator.prototype.clearMessage = function () {
|
||||||
|
// IE only takes one value to remove at a time.
|
||||||
|
this.messageContainer.classList.remove("game-won");
|
||||||
|
this.messageContainer.classList.remove("game-over");
|
||||||
|
};
|
|
@ -0,0 +1,144 @@
|
||||||
|
function KeyboardInputManager() {
|
||||||
|
this.events = {};
|
||||||
|
|
||||||
|
if (window.navigator.msPointerEnabled) {
|
||||||
|
//Internet Explorer 10 style
|
||||||
|
this.eventTouchstart = "MSPointerDown";
|
||||||
|
this.eventTouchmove = "MSPointerMove";
|
||||||
|
this.eventTouchend = "MSPointerUp";
|
||||||
|
} else {
|
||||||
|
this.eventTouchstart = "touchstart";
|
||||||
|
this.eventTouchmove = "touchmove";
|
||||||
|
this.eventTouchend = "touchend";
|
||||||
|
}
|
||||||
|
|
||||||
|
this.listen();
|
||||||
|
}
|
||||||
|
|
||||||
|
KeyboardInputManager.prototype.on = function (event, callback) {
|
||||||
|
if (!this.events[event]) {
|
||||||
|
this.events[event] = [];
|
||||||
|
}
|
||||||
|
this.events[event].push(callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
KeyboardInputManager.prototype.emit = function (event, data) {
|
||||||
|
var callbacks = this.events[event];
|
||||||
|
if (callbacks) {
|
||||||
|
callbacks.forEach(function (callback) {
|
||||||
|
callback(data);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
KeyboardInputManager.prototype.listen = function () {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
var map = {
|
||||||
|
38: 0, // Up
|
||||||
|
39: 1, // Right
|
||||||
|
40: 2, // Down
|
||||||
|
37: 3, // Left
|
||||||
|
75: 0, // Vim up
|
||||||
|
76: 1, // Vim right
|
||||||
|
74: 2, // Vim down
|
||||||
|
72: 3, // Vim left
|
||||||
|
87: 0, // W
|
||||||
|
68: 1, // D
|
||||||
|
83: 2, // S
|
||||||
|
65: 3 // A
|
||||||
|
};
|
||||||
|
|
||||||
|
// Respond to direction keys
|
||||||
|
document.addEventListener("keydown", function (event) {
|
||||||
|
var modifiers = event.altKey || event.ctrlKey || event.metaKey ||
|
||||||
|
event.shiftKey;
|
||||||
|
var mapped = map[event.which];
|
||||||
|
|
||||||
|
if (!modifiers) {
|
||||||
|
if (mapped !== undefined) {
|
||||||
|
event.preventDefault();
|
||||||
|
self.emit("move", mapped);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// R key restarts the game
|
||||||
|
if (!modifiers && event.which === 82) {
|
||||||
|
self.restart.call(self, event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Respond to button presses
|
||||||
|
this.bindButtonPress(".retry-button", this.restart);
|
||||||
|
this.bindButtonPress(".restart-button", this.restart);
|
||||||
|
this.bindButtonPress(".keep-playing-button", this.keepPlaying);
|
||||||
|
|
||||||
|
// Respond to swipe events
|
||||||
|
var touchStartClientX, touchStartClientY;
|
||||||
|
var gameContainer = document.getElementsByClassName("game-container")[0];
|
||||||
|
|
||||||
|
gameContainer.addEventListener(this.eventTouchstart, function (event) {
|
||||||
|
if ((!window.navigator.msPointerEnabled && event.touches.length > 1) ||
|
||||||
|
event.targetTouches.length > 1) {
|
||||||
|
return; // Ignore if touching with more than 1 finger
|
||||||
|
}
|
||||||
|
|
||||||
|
if (window.navigator.msPointerEnabled) {
|
||||||
|
touchStartClientX = event.pageX;
|
||||||
|
touchStartClientY = event.pageY;
|
||||||
|
} else {
|
||||||
|
touchStartClientX = event.touches[0].clientX;
|
||||||
|
touchStartClientY = event.touches[0].clientY;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
});
|
||||||
|
|
||||||
|
gameContainer.addEventListener(this.eventTouchmove, function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
});
|
||||||
|
|
||||||
|
gameContainer.addEventListener(this.eventTouchend, function (event) {
|
||||||
|
if ((!window.navigator.msPointerEnabled && event.touches.length > 0) ||
|
||||||
|
event.targetTouches.length > 0) {
|
||||||
|
return; // Ignore if still touching with one or more fingers
|
||||||
|
}
|
||||||
|
|
||||||
|
var touchEndClientX, touchEndClientY;
|
||||||
|
|
||||||
|
if (window.navigator.msPointerEnabled) {
|
||||||
|
touchEndClientX = event.pageX;
|
||||||
|
touchEndClientY = event.pageY;
|
||||||
|
} else {
|
||||||
|
touchEndClientX = event.changedTouches[0].clientX;
|
||||||
|
touchEndClientY = event.changedTouches[0].clientY;
|
||||||
|
}
|
||||||
|
|
||||||
|
var dx = touchEndClientX - touchStartClientX;
|
||||||
|
var absDx = Math.abs(dx);
|
||||||
|
|
||||||
|
var dy = touchEndClientY - touchStartClientY;
|
||||||
|
var absDy = Math.abs(dy);
|
||||||
|
|
||||||
|
if (Math.max(absDx, absDy) > 10) {
|
||||||
|
// (right : left) : (down : up)
|
||||||
|
self.emit("move", absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
KeyboardInputManager.prototype.restart = function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
this.emit("restart");
|
||||||
|
};
|
||||||
|
|
||||||
|
KeyboardInputManager.prototype.keepPlaying = function (event) {
|
||||||
|
event.preventDefault();
|
||||||
|
this.emit("keepPlaying");
|
||||||
|
};
|
||||||
|
|
||||||
|
KeyboardInputManager.prototype.bindButtonPress = function (selector, fn) {
|
||||||
|
var button = document.querySelector(selector);
|
||||||
|
button.addEventListener("click", fn.bind(this));
|
||||||
|
button.addEventListener(this.eventTouchend, fn.bind(this));
|
||||||
|
};
|
|
@ -0,0 +1,63 @@
|
||||||
|
window.fakeStorage = {
|
||||||
|
_data: {},
|
||||||
|
|
||||||
|
setItem: function (id, val) {
|
||||||
|
return this._data[id] = String(val);
|
||||||
|
},
|
||||||
|
|
||||||
|
getItem: function (id) {
|
||||||
|
return this._data.hasOwnProperty(id) ? this._data[id] : undefined;
|
||||||
|
},
|
||||||
|
|
||||||
|
removeItem: function (id) {
|
||||||
|
return delete this._data[id];
|
||||||
|
},
|
||||||
|
|
||||||
|
clear: function () {
|
||||||
|
return this._data = {};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function LocalStorageManager() {
|
||||||
|
this.bestScoreKey = "bestScore";
|
||||||
|
this.gameStateKey = "gameState";
|
||||||
|
|
||||||
|
var supported = this.localStorageSupported();
|
||||||
|
this.storage = supported ? window.localStorage : window.fakeStorage;
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalStorageManager.prototype.localStorageSupported = function () {
|
||||||
|
var testKey = "test";
|
||||||
|
|
||||||
|
try {
|
||||||
|
var storage = window.localStorage;
|
||||||
|
storage.setItem(testKey, "1");
|
||||||
|
storage.removeItem(testKey);
|
||||||
|
return true;
|
||||||
|
} catch (error) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Best score getters/setters
|
||||||
|
LocalStorageManager.prototype.getBestScore = function () {
|
||||||
|
return this.storage.getItem(this.bestScoreKey) || 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
LocalStorageManager.prototype.setBestScore = function (score) {
|
||||||
|
this.storage.setItem(this.bestScoreKey, score);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Game state getters/setters and clearing
|
||||||
|
LocalStorageManager.prototype.getGameState = function () {
|
||||||
|
var stateJSON = this.storage.getItem(this.gameStateKey);
|
||||||
|
return stateJSON ? JSON.parse(stateJSON) : null;
|
||||||
|
};
|
||||||
|
|
||||||
|
LocalStorageManager.prototype.setGameState = function (gameState) {
|
||||||
|
this.storage.setItem(this.gameStateKey, JSON.stringify(gameState));
|
||||||
|
};
|
||||||
|
|
||||||
|
LocalStorageManager.prototype.clearGameState = function () {
|
||||||
|
this.storage.removeItem(this.gameStateKey);
|
||||||
|
};
|
|
@ -0,0 +1,27 @@
|
||||||
|
function Tile(position, value) {
|
||||||
|
this.x = position.x;
|
||||||
|
this.y = position.y;
|
||||||
|
this.value = value || 2;
|
||||||
|
|
||||||
|
this.previousPosition = null;
|
||||||
|
this.mergedFrom = null; // Tracks tiles that merged together
|
||||||
|
}
|
||||||
|
|
||||||
|
Tile.prototype.savePosition = function () {
|
||||||
|
this.previousPosition = { x: this.x, y: this.y };
|
||||||
|
};
|
||||||
|
|
||||||
|
Tile.prototype.updatePosition = function (position) {
|
||||||
|
this.x = position.x;
|
||||||
|
this.y = position.y;
|
||||||
|
};
|
||||||
|
|
||||||
|
Tile.prototype.serialize = function () {
|
||||||
|
return {
|
||||||
|
position: {
|
||||||
|
x: this.x,
|
||||||
|
y: this.y
|
||||||
|
},
|
||||||
|
value: this.value
|
||||||
|
};
|
||||||
|
};
|
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 41 KiB |
|
@ -0,0 +1,640 @@
|
||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<metadata></metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="clear_sansbold" horiz-adv-x="1217" >
|
||||||
|
<font-face units-per-em="2048" ascent="1489" descent="-559" />
|
||||||
|
<missing-glyph horiz-adv-x="492" />
|
||||||
|
<glyph unicode="fi" horiz-adv-x="1208" d="M35 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM790 1335q0 70 32 100.5t109 30.5q78 0 112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34 t-29.5 97zM804 0v1049h258v-1049h-258z" />
|
||||||
|
<glyph unicode="fl" horiz-adv-x="1208" d="M35 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM804 0v1489h258v-1489h-258z" />
|
||||||
|
<glyph unicode="ffi" horiz-adv-x="1868" d="M35 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM694 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5 t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM1450 1335q0 70 32 100.5t109 30.5q78 0 112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97zM1464 0v1049h258v-1049h-258z" />
|
||||||
|
<glyph unicode="ffl" horiz-adv-x="1868" d="M35 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM694 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5 t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133zM1464 0v1489h258v-1489h-258z" />
|
||||||
|
<glyph horiz-adv-x="0" />
|
||||||
|
<glyph unicode="
" horiz-adv-x="492" />
|
||||||
|
<glyph horiz-adv-x="0" />
|
||||||
|
<glyph horiz-adv-x="0" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="492" />
|
||||||
|
<glyph unicode="	" horiz-adv-x="492" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="492" />
|
||||||
|
<glyph unicode="!" horiz-adv-x="584" d="M129 139q0 82 36 118t126 36q92 0 128 -35t36 -119q0 -86 -39 -119.5t-125 -33.5q-94 0 -128 37.5t-34 115.5zM152 1384h280l-31 -944h-215z" />
|
||||||
|
<glyph unicode=""" horiz-adv-x="977" d="M137 1384h275l-45 -612h-185zM565 1384h275l-45 -612h-185z" />
|
||||||
|
<glyph unicode="#" horiz-adv-x="1405" d="M72 383v180h280l70 258h-234v180h283l104 385h193l-104 -385h247l105 385h192l-104 -385h229v-180h-278l-70 -258h232v-180h-279l-104 -383h-193l104 383h-247l-105 -383h-192l104 383h-233zM545 563h248l69 258h-248z" />
|
||||||
|
<glyph unicode="$" horiz-adv-x="1280" d="M123 291l205 139q37 -49 99 -94t134 -53v315q-164 41 -246.5 86.5t-125 112.5t-42.5 159q0 160 111 247t303 104v106h180v-106q144 -11 247.5 -69t162.5 -155l-193 -137q-34 47 -90.5 87t-126.5 50v-280q191 -50 269 -96t118.5 -112.5t40.5 -164.5q0 -166 -111.5 -258 t-316.5 -109v-196h-180v192q-310 32 -438 232zM414 971q0 -39 30.5 -68t116.5 -53v237q-65 -4 -106 -32.5t-41 -83.5zM741 281q74 8 118 41.5t44 85.5q0 51 -34.5 83.5t-127.5 61.5v-272z" />
|
||||||
|
<glyph unicode="%" horiz-adv-x="2163" d="M88 963q0 221 101.5 335.5t289.5 114.5q192 0 292.5 -116t100.5 -334q0 -216 -101 -330.5t-292 -114.5q-185 0 -288 114.5t-103 330.5zM334 963q0 -152 37 -208.5t108 -56.5q80 0 114 63.5t34 201.5q0 136 -32 203t-116 67q-78 0 -111.5 -64.5t-33.5 -205.5zM590 -51 l747 1487h238l-750 -1487h-235zM1290 414q0 219 100 334.5t291 115.5q193 0 293.5 -116t100.5 -334q0 -216 -102.5 -330.5t-291.5 -114.5q-185 0 -288 114.5t-103 330.5zM1536 414q0 -152 37 -208t108 -56q81 0 114.5 63.5t33.5 200.5q0 97 -16 158t-45 86.5t-87 25.5 q-78 0 -111.5 -64.5t-33.5 -205.5z" />
|
||||||
|
<glyph unicode="&" horiz-adv-x="1417" d="M92 373q0 131 57.5 217t231.5 194q-59 72 -101 148t-42 153q0 160 106 244t303 84q165 0 271 -74t106 -209q0 -72 -31 -136t-85 -120t-165 -129l263 -309q64 87 102 230l227 -52q-51 -211 -176 -356l217 -258h-327l-72 86q-72 -49 -158 -82t-215 -33q-237 0 -374.5 109 t-137.5 293zM358 371q0 -90 67 -140.5t183 -50.5q129 0 226 76l-308 356q-94 -59 -131 -114.5t-37 -126.5zM500 1096q0 -41 23.5 -81t70.5 -93q65 43 103.5 77.5t52.5 61t14 67.5t-34 68t-89 27q-70 0 -105.5 -34t-35.5 -93z" />
|
||||||
|
<glyph unicode="'" horiz-adv-x="549" d="M137 1384h275l-45 -612h-185z" />
|
||||||
|
<glyph unicode="(" horiz-adv-x="856" d="M113 561q0 528 409 961h293q-217 -205 -337 -438.5t-120 -522.5t120 -520t337 -436h-293q-409 433 -409 956z" />
|
||||||
|
<glyph unicode=")" horiz-adv-x="856" d="M41 -395q217 205 337 436t120 520t-120 522.5t-337 438.5h293q409 -433 409 -961q0 -523 -409 -956h-293z" />
|
||||||
|
<glyph unicode="*" horiz-adv-x="911" d="M31 983l282 141l-282 146l90 149l258 -159l-10 260h174l-13 -260l261 159l90 -151l-283 -142l283 -143l-90 -149l-259 159l11 -260h-174l12 260l-260 -159z" />
|
||||||
|
<glyph unicode="+" horiz-adv-x="1427" d="M133 479v205h479v479h205v-479h477v-205h-477v-477h-205v477h-479z" />
|
||||||
|
<glyph unicode="," horiz-adv-x="584" d="M129 145q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-177q41 69 72.5 151t36.5 132q-66 4 -95.5 42t-29.5 113z" />
|
||||||
|
<glyph unicode="-" horiz-adv-x="786" d="M82 399v254h623v-254h-623z" />
|
||||||
|
<glyph unicode="." horiz-adv-x="584" d="M129 145q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118z" />
|
||||||
|
<glyph unicode="/" horiz-adv-x="1036" d="M-12 -299l690 1819h256l-692 -1819h-254z" />
|
||||||
|
<glyph unicode="0" horiz-adv-x="1280" d="M100 690q0 371 131 547t408 176q279 0 410 -175t131 -546q0 -373 -131 -548t-410 -175q-277 0 -408 175t-131 546zM391 690q0 -248 59.5 -363.5t188.5 -115.5t189.5 116.5t60.5 364.5t-60.5 363.5t-189.5 115.5t-188.5 -116.5t-59.5 -364.5z" />
|
||||||
|
<glyph unicode="1" horiz-adv-x="1280" d="M248 928v190q144 9 217.5 34.5t117 79.5t68.5 152h215v-1384h-282v928h-336z" />
|
||||||
|
<glyph unicode="2" horiz-adv-x="1204" d="M102 1178q85 127 201.5 181t290.5 54q214 0 337.5 -100t123.5 -281q0 -133 -48.5 -233.5t-138 -195t-223 -208.5t-164.5 -137h619v-258h-994v236q163 137 297 262t207 207.5t113.5 158t40.5 158.5q0 65 -49 103t-135 38q-93 0 -152 -43t-98 -102z" />
|
||||||
|
<glyph unicode="3" horiz-adv-x="1204" d="M66 195l227 155q37 -57 92 -92t150 -35q120 0 174.5 46t54.5 141q0 192 -254 192h-123v242h107q127 0 185 50t58 130q0 59 -42 98t-138 39t-153.5 -30.5t-98.5 -92.5l-225 158q82 111 198.5 164t299.5 53q139 0 242.5 -43.5t156.5 -120.5t53 -176q0 -271 -280 -340 q137 -9 221 -103.5t84 -240.5q0 -213 -139.5 -315.5t-383.5 -102.5q-174 0 -294.5 63.5t-171.5 160.5z" />
|
||||||
|
<glyph unicode="4" horiz-adv-x="1280" d="M63 229v260l676 895h289v-913h170v-242h-170v-229h-270v229h-695zM338 471h420v543z" />
|
||||||
|
<glyph unicode="5" horiz-adv-x="1204" d="M49 199l225 159q77 -135 261 -135q276 0 276 238q0 100 -72.5 157.5t-201.5 57.5q-138 0 -209 -74h-197l82 782h809v-258h-584l-28 -243q95 39 211 39q222 0 350.5 -119t128.5 -348q0 -226 -144.5 -355t-416.5 -129q-339 0 -490 228z" />
|
||||||
|
<glyph unicode="6" horiz-adv-x="1204" d="M100 608q0 392 147 598.5t429 206.5q267 0 395 -113l-160 -217q-49 43 -104 65.5t-131 22.5q-135 0 -196.5 -92t-78.5 -262q80 54 143.5 75t151.5 21q195 0 309.5 -119.5t114.5 -344.5q0 -222 -134 -350t-363 -128q-250 0 -386.5 165.5t-136.5 471.5zM393 598 q0 -153 23 -225t73 -116t136 -44q94 0 153.5 50t59.5 179q0 106 -59 169t-158 63q-78 0 -137.5 -25.5t-90.5 -50.5z" />
|
||||||
|
<glyph unicode="7" horiz-adv-x="1280" d="M113 1126v258h1038v-172l-520 -1212h-316l510 1126h-712z" />
|
||||||
|
<glyph unicode="8" horiz-adv-x="1204" d="M84 375q0 123 69.5 215t186.5 145q-112 55 -167.5 133.5t-55.5 169.5q0 183 128 279t357 96q223 0 353 -93t130 -280q0 -62 -29.5 -115t-76.5 -96t-143 -96q115 -56 170 -105t83.5 -112t28.5 -141q0 -192 -133.5 -298t-382.5 -106q-246 0 -382 101.5t-136 302.5zM367 373 q0 -78 56 -128t179 -50t178.5 52t55.5 128q0 86 -57.5 143t-176.5 113q-127 -56 -181 -113t-54 -145zM393 1042q0 -45 20 -76t66.5 -65.5t122.5 -64.5q117 51 162 100t45 100q0 66 -48 111t-159 45q-119 0 -164 -45t-45 -105z" />
|
||||||
|
<glyph unicode="9" horiz-adv-x="1204" d="M84 936q0 216 133.5 346.5t353.5 130.5q271 0 402 -169t131 -468q0 -386 -146.5 -595.5t-427.5 -209.5q-278 0 -413 115l157 215q101 -88 256 -88q233 0 273 354q-60 -41 -122.5 -68.5t-150.5 -27.5q-213 0 -329.5 120t-116.5 345zM365 942q0 -105 58.5 -168t160.5 -63 q78 0 137 25.5t90 49.5q0 211 -55.5 298t-180.5 87q-98 0 -154 -60.5t-56 -168.5z" />
|
||||||
|
<glyph unicode=":" horiz-adv-x="584" d="M129 145q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118zM129 889q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -123t-125 -37q-94 0 -128 41t-34 119z" />
|
||||||
|
<glyph unicode=";" horiz-adv-x="584" d="M129 145q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-177q41 69 72.5 151t36.5 132q-66 4 -95.5 42t-29.5 113zM129 889q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -123t-125 -37q-94 0 -128 41t-34 119z" />
|
||||||
|
<glyph unicode="<" horiz-adv-x="1427" d="M131 481v203l1163 479v-225l-866 -354l866 -355v-225z" />
|
||||||
|
<glyph unicode="=" horiz-adv-x="1427" d="M133 233v205h1161v-205h-1161zM133 725v205h1161v-205h-1161z" />
|
||||||
|
<glyph unicode=">" horiz-adv-x="1427" d="M131 4v225l866 355l-866 354v225l1163 -479v-203z" />
|
||||||
|
<glyph unicode="?" horiz-adv-x="1071" d="M35 1165q69 123 184 185.5t291 62.5q238 0 363.5 -98.5t125.5 -276.5q0 -99 -40.5 -176t-114.5 -140t-240 -144v-179h-272v301q163 68 235 112t107 93t35 113q0 153 -197 153q-90 0 -144.5 -35.5t-99.5 -109.5zM309 139q0 82 36 118t126 36q92 0 128 -36t36 -118 q0 -86 -39 -119.5t-125 -33.5q-94 0 -128 37.5t-34 115.5z" />
|
||||||
|
<glyph unicode="@" horiz-adv-x="1950" d="M104 553q0 239 114 436.5t319 310.5t452 113q402 0 629 -223t227 -621q0 -169 -45 -292t-135.5 -192t-224.5 -69q-99 0 -164.5 27t-93.5 98q-141 -98 -283 -98q-127 0 -215 59t-134 166.5t-46 249.5q0 231 113 367.5t315 136.5q113 0 231 -70v41h215v-696q0 -66 22.5 -81 t51.5 -15q64 0 106 46t64.5 128t22.5 186q0 328 -168.5 499t-485.5 171q-195 0 -353 -88t-245.5 -244.5t-87.5 -347.5q0 -207 84.5 -361t238 -235.5t359.5 -81.5q123 0 228.5 9t220.5 36l39 -180q-190 -47 -490 -47q-260 0 -460 104.5t-310.5 302t-110.5 455.5zM725 520 q0 -143 55 -209.5t158 -66.5q89 0 223 92v422q-114 69 -198 69q-117 0 -177.5 -72.5t-60.5 -234.5z" />
|
||||||
|
<glyph unicode="A" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM477 528h373l-186 572z" />
|
||||||
|
<glyph unicode="B" horiz-adv-x="1298" d="M150 0v1384h489q266 0 381 -77.5t115 -245.5q0 -129 -62.5 -209t-195.5 -107q174 -24 253.5 -110t79.5 -234q0 -208 -143 -304.5t-397 -96.5h-520zM432 250h143q165 0 227.5 16t91 54t28.5 106q0 93 -63 131.5t-236 38.5h-191v-346zM432 842h172q125 0 185.5 35t60.5 122 q0 79 -58 109.5t-180 30.5h-180v-297z" />
|
||||||
|
<glyph unicode="C" horiz-adv-x="1333" d="M96 692q0 369 163 545t470 176q203 0 331 -68.5t195 -179.5l-219 -170q-48 72 -88 104t-91 48t-122 16q-170 0 -259 -108.5t-89 -362.5q0 -237 83.5 -354t266.5 -117q123 0 191.5 47t124.5 125l223 -164q-89 -133 -218.5 -195.5t-318.5 -62.5q-643 0 -643 721z" />
|
||||||
|
<glyph unicode="D" horiz-adv-x="1313" d="M137 0v1384h418q245 0 389.5 -71t213.5 -221.5t69 -399.5q0 -250 -69 -402t-208 -221t-391 -69h-422zM420 258h108q167 0 251.5 38.5t120.5 128.5t36 269q0 181 -35.5 268.5t-120.5 125.5t-252 38h-108v-868z" />
|
||||||
|
<glyph unicode="E" horiz-adv-x="1149" d="M150 0v1384h899v-249h-617v-295h520v-250h-520v-332h617v-258h-899z" />
|
||||||
|
<glyph unicode="F" horiz-adv-x="1104" d="M150 0v1384h890v-258h-608v-299h510v-249h-510v-578h-282z" />
|
||||||
|
<glyph unicode="G" horiz-adv-x="1415" d="M96 680q0 733 645 733q188 0 328 -63t213 -185l-217 -170q-53 86 -129 127t-191 41q-189 0 -273.5 -121.5t-84.5 -361.5q0 -238 83.5 -348.5t268.5 -110.5q140 0 258 58v215h-270v249h553v-612q-96 -72 -238.5 -116t-293.5 -44q-324 0 -488 169t-164 540z" />
|
||||||
|
<glyph unicode="H" horiz-adv-x="1409" d="M150 0v1384h282v-538h545v538h283v-1384h-283v588h-545v-588h-282z" />
|
||||||
|
<glyph unicode="I" horiz-adv-x="872" d="M102 0v217h193v950h-193v217h668v-217h-192v-950h192v-217h-668z" />
|
||||||
|
<glyph unicode="J" horiz-adv-x="924" d="M20 23l86 251q32 -17 102.5 -36t110.5 -19q74 0 107 20t47 70t14 144v931h283v-1007q0 -219 -110.5 -313.5t-346.5 -94.5q-51 0 -142 15t-151 39z" />
|
||||||
|
<glyph unicode="K" horiz-adv-x="1280" d="M150 0v1384h282v-540l453 540h329l-516 -596l553 -788h-352l-383 578l-84 -97v-481h-282z" />
|
||||||
|
<glyph unicode="L" horiz-adv-x="1038" d="M150 0v1384h282v-1126h582v-258h-864z" />
|
||||||
|
<glyph unicode="M" horiz-adv-x="1667" d="M150 0v1384h325l361 -657l364 657h318v-1384h-273v930l-332 -578h-163l-328 578v-930h-272z" />
|
||||||
|
<glyph unicode="N" horiz-adv-x="1411" d="M150 0v1384h366l469 -933v933h277v-1384h-332l-504 989v-989h-276z" />
|
||||||
|
<glyph unicode="O" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM377 692q0 -246 70.5 -358.5t234.5 -112.5q166 0 235.5 112.5t69.5 358.5t-69.5 358.5t-235.5 112.5t-235.5 -112.5 t-69.5 -358.5z" />
|
||||||
|
<glyph unicode="P" horiz-adv-x="1239" d="M150 0v1384h520q235 0 363 -109.5t128 -354.5q0 -250 -117.5 -371t-381.5 -121h-230v-428h-282zM432 674h115q155 0 214.5 21.5t84 72.5t24.5 150q0 117 -64.5 169t-232.5 52h-141v-465z" />
|
||||||
|
<glyph unicode="Q" horiz-adv-x="1364" d="M86 692q0 346 144.5 533.5t453.5 187.5q307 0 450.5 -188.5t143.5 -532.5q0 -611 -428 -706q10 -54 43 -78.5t119 -24.5q45 0 104.5 9.5t100.5 21.5l65 -227q-34 -11 -118 -23t-160 -12q-399 0 -461 330q-213 32 -335 205t-122 505zM377 692q0 -246 69.5 -358.5 t237.5 -112.5t235.5 114t67.5 357q0 246 -69.5 358.5t-233.5 112.5q-170 0 -238.5 -112.5t-68.5 -358.5z" />
|
||||||
|
<glyph unicode="R" horiz-adv-x="1284" d="M150 0v1384h503q267 0 390.5 -96t123.5 -315q0 -177 -74.5 -282t-211.5 -134l370 -557h-323l-353 524h-143v-524h-282zM432 770h207q95 0 146 18t73.5 56t22.5 117q0 106 -53.5 142t-176.5 36h-219v-369z" />
|
||||||
|
<glyph unicode="S" horiz-adv-x="1229" d="M66 229l217 166q48 -68 91 -102t102 -53t136 -19q115 0 179.5 39.5t64.5 120.5q0 46 -22.5 77t-67.5 53.5t-156 51.5q-108 29 -203.5 58.5t-165 76.5t-109.5 118t-40 179q0 197 133 307.5t381 110.5q359 0 508 -246l-215 -168q-57 88 -128 126t-169 38t-159.5 -35.5 t-61.5 -111.5q0 -67 64 -102.5t223 -71.5q88 -23 174 -49.5t153.5 -73.5t108.5 -123t41 -195q0 -208 -136.5 -319t-402.5 -111q-184 0 -319.5 61t-220.5 197z" />
|
||||||
|
<glyph unicode="T" horiz-adv-x="1204" d="M35 1126v258h1134v-258h-426v-1126h-282v1126h-426z" />
|
||||||
|
<glyph unicode="U" horiz-adv-x="1438" d="M150 578v806h282v-786q0 -141 27 -222t86 -119t172 -38q161 0 225 85.5t64 289.5v790h282v-806q0 -325 -132 -467t-437 -142q-302 0 -435.5 140.5t-133.5 468.5z" />
|
||||||
|
<glyph unicode="V" horiz-adv-x="1243" d="M27 1384h286l312 -1032l311 1032h281l-431 -1384h-333z" />
|
||||||
|
<glyph unicode="W" horiz-adv-x="1833" d="M43 1384h281l221 -903l229 903h279l231 -909l227 909h279l-358 -1384h-289l-232 915l-233 -915h-285z" />
|
||||||
|
<glyph unicode="X" horiz-adv-x="1286" d="M29 0l463 694l-451 690h321l287 -466l297 466h311l-454 -684l452 -700h-317l-297 477l-301 -477h-311z" />
|
||||||
|
<glyph unicode="Y" horiz-adv-x="1188" d="M18 1384h308l270 -579l276 579h297l-434 -856v-528h-284v522z" />
|
||||||
|
<glyph unicode="Z" horiz-adv-x="1147" d="M72 0v238l635 888h-605v258h942v-227l-641 -899h658v-258h-989z" />
|
||||||
|
<glyph unicode="[" horiz-adv-x="764" d="M154 -395v1884h548v-207h-309v-1470h309v-207h-548z" />
|
||||||
|
<glyph unicode="\" horiz-adv-x="1036" d="M102 1520h256l691 -1819h-254z" />
|
||||||
|
<glyph unicode="]" horiz-adv-x="764" d="M61 -188h310v1470h-310v207h549v-1884h-549v207z" />
|
||||||
|
<glyph unicode="^" horiz-adv-x="1300" d="M123 594l434 790h186l435 -790h-220l-307 557l-309 -557h-219z" />
|
||||||
|
<glyph unicode="_" horiz-adv-x="1024" d="M-10 -154h1044v-102h-1044v102z" />
|
||||||
|
<glyph unicode="`" horiz-adv-x="1044" d="M195 1569h315l188 -361h-204z" />
|
||||||
|
<glyph unicode="a" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM350 299 q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123z" />
|
||||||
|
<glyph unicode="b" d="M145 0v1489h258v-524q142 114 314 114q211 0 309 -145.5t98 -401.5q0 -261 -109.5 -412t-312.5 -151q-80 0 -174.5 36.5t-150.5 92.5l-35 -98h-197zM403 291q43 -37 104.5 -65.5t119.5 -28.5q111 0 171 84.5t60 246.5t-51 243t-164 81q-63 0 -127.5 -29.5t-112.5 -72.5 v-459z" />
|
||||||
|
<glyph unicode="c" horiz-adv-x="1059" d="M92 518q0 265 126 413t378 148q135 0 240.5 -44t160.5 -136l-192 -137q-35 47 -82 69.5t-121 22.5q-132 0 -188 -81t-56 -251t57.5 -248.5t196.5 -78.5q60 0 110 17t95 75l195 -137q-60 -89 -158 -135t-248 -46q-254 0 -384 138.5t-130 410.5z" />
|
||||||
|
<glyph unicode="d" d="M92 516q0 267 115.5 415t324.5 148q74 0 152 -30.5t129 -77.5v518h258v-1489h-237v102q-72 -61 -152 -97t-182 -36q-198 0 -303 143t-105 404zM358 520q0 -151 51.5 -237t159.5 -86q64 0 130.5 29.5t113.5 72.5v459q-41 37 -101.5 65.5t-123.5 28.5q-104 0 -167 -89.5 t-63 -242.5z" />
|
||||||
|
<glyph unicode="e" horiz-adv-x="1143" d="M92 516q0 563 504 563q224 0 341.5 -126.5t117.5 -368.5v-127h-697q7 -140 68 -201t192 -61q76 0 133.5 19t100.5 73l192 -137q-63 -91 -163.5 -136t-274.5 -45q-259 0 -386.5 136t-127.5 411zM365 635h434q0 239 -209 239q-69 0 -113 -23.5t-70.5 -70t-41.5 -145.5z" />
|
||||||
|
<glyph unicode="f" horiz-adv-x="659" d="M35 844v205h133v102q0 195 96.5 282t290.5 87q91 0 193 -25l-50 -225q-72 24 -139 24q-76 0 -104.5 -31.5t-28.5 -111.5v-102h213v-205h-213v-844h-258v844h-133z" />
|
||||||
|
<glyph unicode="g" d="M92 535q0 162 51.5 285.5t151 191t240.5 67.5q83 0 166 -36.5t139 -92.5l34 99h197v-1029q0 -210 -129 -312.5t-414 -102.5q-235 0 -411 90l76 211q163 -76 335 -76q160 0 222.5 46t62.5 155v86q-128 -117 -309 -117q-192 0 -302 138t-110 397zM358 539q0 -160 57.5 -236 t149.5 -76q128 0 248 103v428q-106 94 -231 94q-94 0 -159 -86t-65 -227z" />
|
||||||
|
<glyph unicode="h" d="M145 0v1489h258v-576q82 82 175 124t182 42q176 0 247.5 -99t71.5 -280v-700h-258v578q0 166 -31 220t-110 54q-115 0 -277 -152v-700h-258z" />
|
||||||
|
<glyph unicode="i" horiz-adv-x="549" d="M131 1335q0 70 32 100.5t109 30.5q78 0 112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97zM145 0v1049h258v-1049h-258z" />
|
||||||
|
<glyph unicode="j" horiz-adv-x="563" d="M-162 -365l56 224q73 -29 151 -29t96.5 48t18.5 159v1012h258v-1094q0 -188 -84 -269t-275 -81q-43 0 -113 9.5t-108 20.5zM145 1335q0 70 32 100.5t110 30.5t111.5 -29.5t33.5 -101.5q0 -73 -36 -102t-109 -29q-82 0 -112 34t-30 97z" />
|
||||||
|
<glyph unicode="k" horiz-adv-x="1100" d="M145 0v1489h258v-852l353 412h299l-396 -441l418 -608h-293l-280 434l-101 -108v-326h-258z" />
|
||||||
|
<glyph unicode="l" horiz-adv-x="549" d="M145 0v1489h258v-1489h-258z" />
|
||||||
|
<glyph unicode="m" horiz-adv-x="1790" d="M145 0v1049h258v-136q72 78 151 122t175 44q131 0 193.5 -45t85.5 -133q90 90 168.5 134t183.5 44q153 0 223 -87t70 -292v-700h-258v618q0 93 -11 145t-33.5 70.5t-74.5 18.5q-59 0 -125 -44t-123 -108v-700h-258v618q0 102 -9 147.5t-32 66t-78 20.5q-48 0 -111 -36.5 t-137 -115.5v-700h-258z" />
|
||||||
|
<glyph unicode="n" d="M145 0v1049h258v-136q82 82 175 124t182 42q161 0 240 -88t79 -291v-700h-258v578q0 164 -29.5 219t-111.5 55q-115 0 -277 -152v-700h-258z" />
|
||||||
|
<glyph unicode="o" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM358 522q0 -168 55.5 -247.5t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5t-181 79.5q-126 0 -182 -81.5t-56 -250.5z" />
|
||||||
|
<glyph unicode="p" d="M145 -395v1444h238v-103q72 62 151.5 97.5t182.5 35.5q199 0 303 -140t104 -407q0 -169 -51 -298t-146 -197t-227 -68q-174 0 -297 109v-473h-258zM403 291q41 -37 101.5 -65.5t124.5 -28.5q106 0 167.5 90.5t61.5 240.5q0 153 -53 238.5t-158 85.5q-63 0 -129.5 -29.5 t-114.5 -72.5v-459z" />
|
||||||
|
<glyph unicode="q" d="M92 516q0 266 114 414.5t324 148.5q95 0 178 -40t132 -89l34 99h197v-1444h-258v479q-141 -115 -313 -115q-198 0 -303 140t-105 407zM358 520q0 -153 50 -238t161 -85q64 0 130.5 29.5t113.5 72.5v459q-47 43 -107.5 68.5t-117.5 25.5q-104 0 -167 -89.5t-63 -242.5z " />
|
||||||
|
<glyph unicode="r" horiz-adv-x="840" d="M145 0v1049h258v-150q66 72 142 119t170 47q80 0 114 -21l-51 -247q-40 20 -106 20q-72 0 -136.5 -34.5t-132.5 -100.5v-682h-258z" />
|
||||||
|
<glyph unicode="s" horiz-adv-x="1026" d="M76 152l192 135q47 -64 108.5 -85.5t131.5 -21.5q184 0 184 107q0 47 -52 72.5t-163 52.5q-209 46 -294 130t-85 218q0 139 106.5 229t313.5 90q141 0 248.5 -45t165.5 -135l-193 -137q-69 106 -225 106q-80 0 -121 -27.5t-41 -70.5q0 -41 37 -65.5t146 -51.5 q179 -44 255.5 -87.5t116 -108t39.5 -158.5q0 -104 -52.5 -178t-149 -113t-220.5 -39q-329 0 -448 183z" />
|
||||||
|
<glyph unicode="t" horiz-adv-x="739" d="M31 844v205h133v292h258v-292h244v-205h-244v-494q0 -98 30.5 -133t86.5 -35q71 0 141 29l45 -211q-104 -31 -219 -31q-182 0 -262 82t-80 266v527h-133z" />
|
||||||
|
<glyph unicode="u" d="M137 348v701h258v-578q0 -111 13 -170t42.5 -81.5t86.5 -22.5q115 0 276 151v701h258v-1049h-258v135q-68 -73 -166.5 -119.5t-189.5 -46.5q-178 0 -249 98.5t-71 280.5z" />
|
||||||
|
<glyph unicode="v" horiz-adv-x="1040" d="M27 1049h264l233 -691l232 691h258l-377 -1049h-238z" />
|
||||||
|
<glyph unicode="w" horiz-adv-x="1565" d="M27 1049h268l162 -676l235 676h195l237 -670l156 670h258l-281 -1049h-235l-236 668l-237 -668h-236z" />
|
||||||
|
<glyph unicode="x" horiz-adv-x="1079" d="M31 0l362 518l-356 531h301l209 -332l215 332h285l-361 -517l363 -532h-306l-208 334l-218 -334h-286z" />
|
||||||
|
<glyph unicode="y" horiz-adv-x="1085" d="M-20 -365l55 224q84 -29 151 -29q58 0 102 35t91 145l27 62l-379 977h268l248 -670l254 670h262l-451 -1121q-55 -135 -107 -200t-121.5 -94t-174.5 -29q-114 0 -225 30z" />
|
||||||
|
<glyph unicode="z" horiz-adv-x="930" d="M57 0v188l490 656h-477v205h786v-187l-491 -657h507v-205h-815z" />
|
||||||
|
<glyph unicode="{" horiz-adv-x="915" d="M102 453v221h39q111 0 170.5 77.5t59.5 223.5v139q0 197 95 301.5t318 104.5h70v-207h-41q-117 0 -160 -48t-43 -165v-166q0 -137 -64.5 -231.5t-174.5 -141.5q108 -39 173.5 -137t65.5 -234v-165q0 -117 43 -165t160 -48h41v-207h-70q-221 0 -317 103.5t-96 301.5v142 q0 141 -59.5 221t-170.5 80h-39z" />
|
||||||
|
<glyph unicode="|" horiz-adv-x="801" d="M281 -395v1915h239v-1915h-239z" />
|
||||||
|
<glyph unicode="}" horiz-adv-x="915" d="M61 -188h41q117 0 160 48t43 165v165q0 136 65.5 234t174.5 137q-111 47 -175.5 141.5t-64.5 231.5v166q0 117 -43 165t-160 48h-41v207h70q223 0 318.5 -104.5t95.5 -301.5v-139q0 -146 59.5 -223.5t169.5 -77.5h39v-221h-39q-110 0 -169.5 -80t-59.5 -221v-142 q0 -198 -96.5 -301.5t-317.5 -103.5h-70v207z" />
|
||||||
|
<glyph unicode="~" horiz-adv-x="1386" d="M143 580v229q56 47 106 73t95 38t117 12q65 0 128.5 -24.5t122 -54.5t114 -54.5t106.5 -24.5q80 0 154.5 38t156.5 110v-222q-67 -53 -141 -92t-166 -39q-72 0 -137.5 24.5t-126 54.5t-114.5 54.5t-101 24.5q-92 0 -170 -45t-144 -102z" />
|
||||||
|
<glyph unicode="¡" horiz-adv-x="584" d="M129 954q0 78 34 116t128 38q86 0 125 -34t39 -120q0 -82 -36 -117.5t-128 -35.5q-90 0 -126 35.5t-36 117.5zM152 -395l34 1059h215l31 -1059h-280z" />
|
||||||
|
<glyph unicode="¢" horiz-adv-x="1059" d="M92 518q0 265 126 413t378 148h18l48 209h180l-54 -237q145 -49 209 -152l-192 -137q-27 35 -66 61l-139 -628h12q60 0 110 17t95 75l195 -137q-60 -89 -158 -135t-248 -46l-55 2l-51 -231h-183l60 266q-152 57 -218.5 189.5t-66.5 322.5zM358 522q0 -196 74 -270 l133 600q-107 -9 -157 -86t-50 -244z" />
|
||||||
|
<glyph unicode="£" horiz-adv-x="1280" d="M100 0v213q65 13 103 58.5t55.5 110t17.5 183.5h-151v189h137l-11 44q-42 128 -42 228q0 187 135 287t367 100q176 0 296.5 -61.5t184.5 -167.5l-217 -131q-41 65 -111.5 104t-152.5 39q-119 0 -176.5 -54.5t-57.5 -144.5q0 -73 44 -202l11 -41h379v-189h-370 q0 -224 -117 -325h784v-240h-1108z" />
|
||||||
|
<glyph unicode="¤" horiz-adv-x="1280" d="M139 281l142 135q-72 115 -72 231q0 125 72 232l-142 137l123 125l141 -140q105 72 236 72q57 0 119.5 -17.5t115.5 -54.5l142 140l125 -125l-144 -137q72 -109 72 -232q0 -122 -72 -231l144 -135l-125 -125l-142 139q-103 -72 -235 -72q-131 0 -236 72l-141 -139z M385 649q0 -102 75 -177t179 -75q65 0 124.5 33.5t94.5 93t35 125.5q0 104 -76.5 177t-175.5 73q-102 0 -179 -72t-77 -178z" />
|
||||||
|
<glyph unicode="¥" horiz-adv-x="1280" d="M45 1384h307l291 -538l295 538h297l-307 -538h211v-178h-314l-45 -80v-31h359v-176h-359v-381h-282v381h-361v176h361v27l-47 84h-314v178h213z" />
|
||||||
|
<glyph unicode="¦" horiz-adv-x="801" d="M281 283h239v-678h-239v678zM281 842v678h239v-678h-239z" />
|
||||||
|
<glyph unicode="§" horiz-adv-x="1110" d="M92 545q0 188 211 307q-72 53 -110.5 110.5t-38.5 129.5q0 149 105.5 235t322.5 86q282 0 407 -160l-176 -131q-84 84 -227 84q-92 0 -133 -27.5t-41 -68.5q0 -31 45 -69.5t252 -166.5q128 -79 186.5 -133t90.5 -112.5t32 -126.5q0 -191 -211 -307q78 -60 113.5 -117.5 t35.5 -120.5q0 -162 -112.5 -243t-308.5 -81q-160 0 -257.5 43t-156.5 117l176 131q75 -84 233 -84q72 0 120 23.5t48 68.5t-74.5 97.5t-222.5 142.5q-153 92 -231 176t-78 197zM336 549q0 -41 67.5 -94.5t208.5 -139.5q68 41 115 89t47 90q0 24 -15.5 46.5t-48 49t-85 59.5 t-127.5 80q-80 -49 -121 -91t-41 -89z" />
|
||||||
|
<glyph unicode="¨" horiz-adv-x="1044" d="M152 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM596 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="©" horiz-adv-x="1802" d="M96 610q0 217 106 402.5t293.5 293t405.5 107.5q217 0 403 -106.5t293 -292.5t107 -404q0 -217 -105.5 -403t-292.5 -295t-405 -109q-219 0 -406 108.5t-293 295t-106 403.5zM258 610q0 -176 87.5 -328t235 -237.5t320.5 -85.5t320.5 85.5t235 237t87.5 328.5 q0 173 -86 323.5t-235.5 237t-321.5 86.5q-174 0 -323 -87t-234.5 -237.5t-85.5 -322.5zM504 612q0 217 100.5 331t317.5 114q133 0 209.5 -51.5t134.5 -143.5l-176 -100q-33 47 -67 78.5t-103 31.5q-109 0 -155 -59t-46 -201q0 -143 48 -200.5t155 -57.5q65 0 104 29t76 78 l180 -96q-71 -88 -118.5 -123.5t-106 -53.5t-131.5 -18q-422 0 -422 442z" />
|
||||||
|
<glyph unicode="ª" horiz-adv-x="834" d="M92 1014q0 105 65 164t222 73l129 13v20q0 49 -27.5 67.5t-93.5 18.5q-65 0 -95 -21.5t-46 -50.5l-148 93q31 53 100.5 91t192.5 38q146 0 224.5 -50.5t78.5 -191.5v-461h-174v57q-95 -75 -196 -75q-117 0 -174.5 59.5t-57.5 155.5zM285 1018q0 -39 19.5 -54.5 t57.5 -15.5q64 0 146 66v110l-68 -6q-90 -8 -122.5 -31.5t-32.5 -68.5z" />
|
||||||
|
<glyph unicode="«" horiz-adv-x="1436" d="M61 524l420 471h299l-420 -471l420 -471h-299zM635 524l420 471h299l-420 -471l420 -471h-299z" />
|
||||||
|
<glyph unicode="¬" horiz-adv-x="1427" d="M133 801v205h1161v-682h-207v477h-954z" />
|
||||||
|
<glyph unicode="­" horiz-adv-x="786" d="M82 399v254h623v-254h-623z" />
|
||||||
|
<glyph unicode="®" horiz-adv-x="1802" d="M96 610q0 217 106 402.5t293.5 293t405.5 107.5q217 0 403 -106.5t293 -292.5t107 -404q0 -217 -105.5 -403t-292.5 -295t-405 -109q-219 0 -406 108.5t-293 295t-106 403.5zM258 610q0 -176 87.5 -328t235 -237.5t320.5 -85.5t320.5 85.5t235 237t87.5 328.5 q0 173 -86 323.5t-235.5 237t-321.5 86.5q-174 0 -323 -87t-234.5 -237.5t-85.5 -322.5zM588 201v850h305q178 0 260 -63t82 -197q0 -185 -145 -246l239 -344h-250l-211 307h-75v-307h-205zM793 682h96q54 0 81 7t39.5 25.5t12.5 65.5t-21.5 70.5t-103.5 23.5h-104v-192z " />
|
||||||
|
<glyph unicode="¯" horiz-adv-x="1044" d="M186 1255v185h672v-185h-672z" />
|
||||||
|
<glyph unicode="°" horiz-adv-x="868" d="M123 1241q0 130 91.5 219.5t219.5 89.5q129 0 220 -90.5t91 -218.5q0 -83 -40.5 -154.5t-114 -115t-154.5 -43.5q-83 0 -157 42.5t-115 114t-41 156.5zM303 1241q0 -55 38 -94t95 -39q53 0 91 39t38 92q0 55 -38 93t-91 38q-59 0 -96 -39t-37 -90z" />
|
||||||
|
<glyph unicode="±" horiz-adv-x="1427" d="M133 0v205h1161v-205h-1161zM133 829v205h479v479h205v-479h477v-205h-477v-477h-205v477h-479z" />
|
||||||
|
<glyph unicode="²" horiz-adv-x="938" d="M76 1348q133 172 377 172q180 0 262 -71t82 -179q0 -60 -16 -107.5t-52.5 -92.5t-130.5 -115t-166 -111h397v-197h-737v182l108 78q228 160 283.5 217t55.5 113q0 78 -97 78q-101 0 -170 -88z" />
|
||||||
|
<glyph unicode="³" horiz-adv-x="938" d="M59 801l199 102q64 -88 164 -88q72 0 98.5 32t26.5 66q0 91 -141 91h-115v176h102q92 0 124 22.5t32 63.5q0 28 -27.5 48.5t-85.5 20.5q-103 0 -168 -78l-182 107q61 74 143 115t224 41q172 0 255 -67t83 -159q0 -71 -38 -116t-124 -74q92 -23 134 -77t42 -126 q0 -137 -102.5 -203.5t-282.5 -66.5q-127 0 -221.5 49t-139.5 121z" />
|
||||||
|
<glyph unicode="´" horiz-adv-x="1044" d="M348 1208l189 361h315l-299 -361h-205z" />
|
||||||
|
<glyph unicode="µ" horiz-adv-x="1202" d="M131 -395v1444h258v-750q29 -39 83 -69.5t114 -30.5q131 0 227 120v730h256v-1049h-238l-4 111q-49 -70 -104 -106t-133 -36q-62 0 -109 17.5t-92 52.5v-434h-258z" />
|
||||||
|
<glyph unicode="¶" horiz-adv-x="1321" d="M41 1047q0 206 134 324t378 118h727v-207h-188v-1677h-234v1677h-162v-1677h-233v1001q-204 22 -313 138t-109 303z" />
|
||||||
|
<glyph unicode="·" horiz-adv-x="584" d="M129 743q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118z" />
|
||||||
|
<glyph unicode="¸" horiz-adv-x="1044" d="M199 -350l69 145q106 -45 193 -45q53 0 74.5 11.5t21.5 35.5q0 63 -180 72l88 170h170l-31 -62q62 -14 104 -61t42 -121q0 -190 -287 -190q-174 0 -264 45z" />
|
||||||
|
<glyph unicode="¹" horiz-adv-x="938" d="M170 1200v152q97 3 150 17t82 43t49 91h200v-856h-252v553h-229z" />
|
||||||
|
<glyph unicode="º" horiz-adv-x="842" d="M92 1157q0 172 80 267.5t250 95.5q168 0 248 -95.5t80 -267.5q0 -170 -80 -264t-248 -94q-172 0 -251 95t-79 263zM285 1157q0 -100 31.5 -148t105.5 -48q72 0 103.5 47.5t31.5 148.5q0 119 -39 160t-96 41q-60 0 -98.5 -41t-38.5 -160z" />
|
||||||
|
<glyph unicode="»" horiz-adv-x="1436" d="M82 53l420 471l-420 471h299l420 -471l-420 -471h-299zM655 53l420 471l-420 471h299l420 -471l-420 -471h-299z" />
|
||||||
|
<glyph unicode="¼" horiz-adv-x="2095" d="M45 1085v152q97 3 150 17t82 43t49 91h200v-856h-252v553h-229zM469 -51l747 1489h238l-750 -1489h-235zM1155 160v166l492 530h227v-524h115v-172h-115v-160h-232v160h-487zM1386 332h256v276z" />
|
||||||
|
<glyph unicode="½" horiz-adv-x="2095" d="M43 1085v152q97 3 150 17t82 43t49 91h200v-856h-252v553h-229zM406 -51l747 1489h238l-750 -1489h-235zM1213 701q133 172 377 172q180 0 262 -71t82 -179q0 -60 -16 -107.5t-52.5 -92.5t-130.5 -115t-166 -111h397v-197h-737v182l108 78q228 160 283.5 217t55.5 113 q0 78 -97 78q-101 0 -170 -88z" />
|
||||||
|
<glyph unicode="¾" horiz-adv-x="2095" d="M59 686l199 102q64 -88 164 -88q72 0 98.5 32t26.5 66q0 91 -141 91h-115v176h102q92 0 124 22.5t32 63.5q0 28 -27.5 48.5t-85.5 20.5q-103 0 -168 -78l-182 107q61 74 143 115t224 41q172 0 255 -67t83 -159q0 -71 -38 -116t-124 -74q92 -23 134 -77t42 -126 q0 -137 -102.5 -203.5t-282.5 -66.5q-127 0 -221.5 49t-139.5 121zM592 -51l747 1489h238l-750 -1489h-235zM1202 160v166l492 530h227v-524h115v-172h-115v-160h-232v160h-487zM1433 332h256v276z" />
|
||||||
|
<glyph unicode="¿" horiz-adv-x="1071" d="M72 0q0 105 39 185t112.5 145.5t243.5 154.5v179h272v-302q-55 -28 -120.5 -61t-122 -75t-95.5 -94t-39 -120q0 -78 44.5 -122t152.5 -44q90 0 144.5 37t99.5 111l233 -139q-69 -123 -184 -186.5t-291 -63.5q-237 0 -363 103.5t-126 291.5zM436 954q0 86 39 120t125 34 q94 0 128 -38t34 -116q0 -82 -36 -117.5t-126 -35.5q-92 0 -128 35.5t-36 117.5z" />
|
||||||
|
<glyph unicode="À" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM373 1905h315l188 -361h-204zM477 528h373l-186 572z" />
|
||||||
|
<glyph unicode="Á" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM477 528h373l-186 572zM491 1544l189 361h315l-299 -361h-205z" />
|
||||||
|
<glyph unicode="Â" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM305 1544l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM477 528h373l-186 572z" />
|
||||||
|
<glyph unicode="Ã" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM254 1567q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5 q-67 0 -67 -127h-182zM477 528h373l-186 572z" />
|
||||||
|
<glyph unicode="Ä" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM293 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM477 528h373l-186 572zM737 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5 t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="Å" horiz-adv-x="1337" d="M27 0l458 1384h367l459 -1384h-289l-92 281h-533l-90 -281h-280zM434 1716q0 107 57.5 166.5t171.5 59.5q119 0 175.5 -60.5t56.5 -165.5q0 -110 -59.5 -167.5t-172.5 -57.5q-117 0 -173 60.5t-56 164.5zM477 528h373l-186 572zM577 1716q0 -90 86 -90q88 0 88 90t-88 90 q-86 0 -86 -90z" />
|
||||||
|
<glyph unicode="Æ" horiz-adv-x="1810" d="M20 0l555 1384h1135v-249h-567v-301h469v-250h-469v-326h567v-258h-850v360h-409l-144 -360h-287zM547 608h313v527h-104z" />
|
||||||
|
<glyph unicode="Ç" horiz-adv-x="1333" d="M96 692q0 369 163 545t470 176q203 0 331 -68.5t195 -179.5l-219 -170q-48 72 -88 104t-91 48t-122 16q-170 0 -259 -108.5t-89 -362.5q0 -237 83.5 -354t266.5 -117q123 0 191.5 47t124.5 125l223 -164q-66 -96 -165 -164.5t-263 -87.5q61 -14 103 -61t42 -121 q0 -190 -286 -190q-172 0 -265 45l70 145q106 -45 193 -45q53 0 74.5 11.5t21.5 35.5q0 63 -180 72l53 104q-578 37 -578 719z" />
|
||||||
|
<glyph unicode="È" horiz-adv-x="1149" d="M150 0v1384h899v-249h-617v-295h520v-250h-520v-332h617v-258h-899zM267 1905h315l188 -361h-204z" />
|
||||||
|
<glyph unicode="É" horiz-adv-x="1149" d="M150 0v1384h899v-249h-617v-295h520v-250h-520v-332h617v-258h-899zM426 1544l189 361h315l-299 -361h-205z" />
|
||||||
|
<glyph unicode="Ê" horiz-adv-x="1149" d="M150 0v1384h899v-249h-617v-295h520v-250h-520v-332h617v-258h-899zM236 1544l235 361h244l236 -361h-211l-146 174l-149 -174h-209z" />
|
||||||
|
<glyph unicode="Ë" horiz-adv-x="1149" d="M150 0v1384h899v-249h-617v-295h520v-250h-520v-332h617v-258h-899zM228 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM672 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102 t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="Ì" horiz-adv-x="872" d="M80 1905h315l188 -361h-204zM102 0v217h193v950h-193v217h668v-217h-192v-950h192v-217h-668z" />
|
||||||
|
<glyph unicode="Í" horiz-adv-x="872" d="M102 0v217h193v950h-193v217h668v-217h-192v-950h192v-217h-668zM270 1544l189 361h315l-299 -361h-205z" />
|
||||||
|
<glyph unicode="Î" horiz-adv-x="872" d="M78 1544l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM102 0v217h193v950h-193v217h668v-217h-192v-950h192v-217h-668z" />
|
||||||
|
<glyph unicode="Ï" horiz-adv-x="872" d="M72 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM102 0v217h193v950h-193v217h668v-217h-192v-950h192v-217h-668zM516 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102 t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="Ð" horiz-adv-x="1399" d="M2 580v225h148v579h434q263 0 416.5 -70.5t228 -222.5t74.5 -399q0 -250 -74.5 -402t-224.5 -221t-418 -69h-436v580h-148zM432 258h127q184 0 278 40t134.5 130t40.5 266t-39 264.5t-132 128t-282 39.5h-127v-321h322v-225h-322v-322z" />
|
||||||
|
<glyph unicode="Ñ" horiz-adv-x="1411" d="M150 0v1384h366l469 -933v933h277v-1384h-332l-504 989v-989h-276zM285 1526q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5 q-67 0 -67 -127h-182z" />
|
||||||
|
<glyph unicode="Ò" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM371 1905h315l188 -361h-204zM377 692q0 -246 70.5 -358.5t234.5 -112.5q166 0 235.5 112.5t69.5 358.5t-69.5 358.5 t-235.5 112.5t-235.5 -112.5t-69.5 -358.5z" />
|
||||||
|
<glyph unicode="Ó" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM377 692q0 -246 70.5 -358.5t234.5 -112.5q166 0 235.5 112.5t69.5 358.5t-69.5 358.5t-235.5 112.5t-235.5 -112.5 t-69.5 -358.5zM530 1544l189 361h315l-299 -361h-205z" />
|
||||||
|
<glyph unicode="Ô" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM334 1544l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM377 692q0 -246 70.5 -358.5t234.5 -112.5 q166 0 235.5 112.5t69.5 358.5t-69.5 358.5t-235.5 112.5t-235.5 -112.5t-69.5 -358.5z" />
|
||||||
|
<glyph unicode="Õ" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM283 1567q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182 q-10 -165 -75.5 -243.5t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5q-67 0 -67 -127h-182zM377 692q0 -246 70.5 -358.5t234.5 -112.5q166 0 235.5 112.5t69.5 358.5t-69.5 358.5t-235.5 112.5t-235.5 -112.5t-69.5 -358.5z" />
|
||||||
|
<glyph unicode="Ö" horiz-adv-x="1364" d="M86 692q0 344 144.5 532.5t451.5 188.5q309 0 452.5 -188.5t143.5 -532.5q0 -361 -152.5 -541t-443.5 -180q-307 0 -451.5 189.5t-144.5 531.5zM332 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97z M377 692q0 -246 70.5 -358.5t234.5 -112.5q166 0 235.5 112.5t69.5 358.5t-69.5 358.5t-235.5 112.5t-235.5 -112.5t-69.5 -358.5zM776 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="×" horiz-adv-x="1427" d="M129 145l438 437l-438 436l145 145l439 -436l438 436l145 -145l-438 -436l438 -437l-145 -145l-438 438l-439 -438z" />
|
||||||
|
<glyph unicode="Ø" horiz-adv-x="1364" d="M27 -115l194 285q-135 180 -135 522q0 344 144.5 532.5t451.5 188.5q201 0 334 -84l108 160h199l-184 -270q139 -182 139 -527q0 -361 -152.5 -541t-443.5 -180q-207 0 -338 86l-117 -172h-200zM377 692q0 -157 26 -256l461 674q-69 53 -182 53q-166 0 -235.5 -112.5 t-69.5 -358.5zM496 276q67 -55 186 -55q166 0 235.5 112.5t69.5 358.5q0 158 -29 262z" />
|
||||||
|
<glyph unicode="Ù" horiz-adv-x="1438" d="M150 578v806h282v-786q0 -141 27 -222t86 -119t172 -38q161 0 225 85.5t64 289.5v790h282v-806q0 -325 -132 -467t-437 -142q-302 0 -435.5 140.5t-133.5 468.5zM392 1905h315l188 -361h-204z" />
|
||||||
|
<glyph unicode="Ú" horiz-adv-x="1438" d="M150 578v806h282v-786q0 -141 27 -222t86 -119t172 -38q161 0 225 85.5t64 289.5v790h282v-806q0 -325 -132 -467t-437 -142q-302 0 -435.5 140.5t-133.5 468.5zM551 1544l189 361h315l-299 -361h-205z" />
|
||||||
|
<glyph unicode="Û" horiz-adv-x="1438" d="M150 578v806h282v-786q0 -141 27 -222t86 -119t172 -38q161 0 225 85.5t64 289.5v790h282v-806q0 -325 -132 -467t-437 -142q-302 0 -435.5 140.5t-133.5 468.5zM365 1544l235 361h244l236 -361h-211l-146 174l-149 -174h-209z" />
|
||||||
|
<glyph unicode="Ü" horiz-adv-x="1438" d="M150 578v806h282v-786q0 -141 27 -222t86 -119t172 -38q161 0 225 85.5t64 289.5v790h282v-806q0 -325 -132 -467t-437 -142q-302 0 -435.5 140.5t-133.5 468.5zM353 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29 q-82 0 -111.5 34t-29.5 97zM797 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="Ý" horiz-adv-x="1188" d="M18 1384h308l270 -579l276 579h297l-434 -856v-528h-284v522zM424 1544l189 361h315l-299 -361h-205z" />
|
||||||
|
<glyph unicode="Þ" horiz-adv-x="1239" d="M150 0v1384h282v-200h238q235 0 363 -109.5t128 -355.5q0 -250 -117.5 -371t-381.5 -121h-230v-227h-282zM432 473h115q155 0 214 21.5t84 71.5t25 151q0 81 -30 129.5t-91 70t-176 21.5h-141v-465z" />
|
||||||
|
<glyph unicode="ß" d="M145 0v1020q0 252 117.5 376t355.5 124q203 0 313.5 -91t110.5 -255q0 -123 -53 -196t-129 -106q122 -27 193 -136.5t71 -262.5q0 -250 -93 -377t-312 -127q-47 0 -103.5 10.5t-89.5 20.5v227q86 -30 154 -30q88 0 131 63.5t43 220.5q0 108 -28.5 160.5t-92.5 74 t-190 21.5v224q93 0 143 18.5t72 57t22 118.5q0 70 -43 106.5t-123 36.5q-104 0 -157.5 -59t-53.5 -211v-1028h-258z" />
|
||||||
|
<glyph unicode="à" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM207 1569h315 l188 -361h-204zM350 299q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123z" />
|
||||||
|
<glyph unicode="á" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM350 299 q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123zM366 1208l189 361h315l-299 -361h-205z" />
|
||||||
|
<glyph unicode="â" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM195 1208l235 361 h244l236 -361h-211l-146 174l-149 -174h-209zM350 299q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123z" />
|
||||||
|
<glyph unicode="ã" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM150 1231 q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5q-67 0 -67 -127h-182zM350 299q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200 l-131 -12q-139 -12 -200.5 -53t-61.5 -123z" />
|
||||||
|
<glyph unicode="ä" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM168 1335 q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM350 299q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123zM612 1335q0 70 31.5 100.5t109.5 30.5 t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="å" horiz-adv-x="1139" d="M84 295q0 112 45.5 185t135 114.5t257.5 58.5l221 21v47q0 88 -53 120.5t-155 32.5q-84 0 -144.5 -28t-89.5 -80l-201 129q53 89 166 136.5t273 47.5q245 0 353.5 -85.5t108.5 -280.5v-713h-237v109q-153 -140 -328 -140q-174 0 -263 91.5t-89 234.5zM309 1378 q0 107 57.5 166.5t171.5 59.5q119 0 175.5 -60.5t56.5 -165.5q0 -110 -59.5 -167.5t-172.5 -57.5q-117 0 -173 60.5t-56 164.5zM350 299q0 -72 40 -98.5t106 -26.5q47 0 114.5 29.5t132.5 83.5v200l-131 -12q-139 -12 -200.5 -53t-61.5 -123zM452 1378q0 -90 86 -90 q88 0 88 90t-88 90q-86 0 -86 -90z" />
|
||||||
|
<glyph unicode="æ" horiz-adv-x="1786" d="M84 303q0 157 105.5 244t332.5 106l221 21v47q0 86 -52 119.5t-148 33.5q-109 0 -162 -32.5t-80 -75.5l-201 129q53 89 164.5 136.5t276.5 47.5q254 0 356 -123q121 123 350 123q220 0 335.5 -127.5t115.5 -367.5v-127h-697q7 -140 67 -201t196 -61q73 0 130.5 19 t100.5 73l193 -137q-64 -91 -162.5 -136t-257.5 -45q-299 0 -428 168q-97 -82 -196 -125t-212 -43q-170 0 -259 91.5t-89 242.5zM350 299q0 -125 139 -125q64 0 140 25.5t141 76.5q-13 40 -20 113t-7 98l-131 -12q-139 -12 -200.5 -53t-61.5 -123zM1008 635h434 q0 239 -211 239q-113 0 -160 -64.5t-63 -174.5z" />
|
||||||
|
<glyph unicode="ç" horiz-adv-x="1059" d="M92 518q0 265 126 413t378 148q135 0 240.5 -44t160.5 -136l-192 -137q-35 47 -82 69.5t-121 22.5q-132 0 -188 -81t-56 -251t57.5 -248.5t196.5 -78.5q60 0 110 17t95 75l195 -137q-105 -153 -318 -177q56 -16 93.5 -62t37.5 -116q0 -190 -286 -190q-172 0 -265 45 l70 145q106 -45 193 -45q53 0 74.5 11.5t21.5 35.5q0 63 -180 72l55 106q-416 56 -416 543z" />
|
||||||
|
<glyph unicode="è" horiz-adv-x="1143" d="M92 516q0 563 504 563q224 0 341.5 -126.5t117.5 -368.5v-127h-697q7 -140 68 -201t192 -61q76 0 133.5 19t100.5 73l192 -137q-63 -91 -163.5 -136t-274.5 -45q-259 0 -386.5 136t-127.5 411zM248 1569h315l188 -361h-204zM365 635h434q0 239 -209 239q-69 0 -113 -23.5 t-70.5 -70t-41.5 -145.5z" />
|
||||||
|
<glyph unicode="é" horiz-adv-x="1143" d="M92 516q0 563 504 563q224 0 341.5 -126.5t117.5 -368.5v-127h-697q7 -140 68 -201t192 -61q76 0 133.5 19t100.5 73l192 -137q-63 -91 -163.5 -136t-274.5 -45q-259 0 -386.5 136t-127.5 411zM365 635h434q0 239 -209 239q-69 0 -113 -23.5t-70.5 -70t-41.5 -145.5z M407 1208l189 361h315l-299 -361h-205z" />
|
||||||
|
<glyph unicode="ê" horiz-adv-x="1143" d="M92 516q0 563 504 563q224 0 341.5 -126.5t117.5 -368.5v-127h-697q7 -140 68 -201t192 -61q76 0 133.5 19t100.5 73l192 -137q-63 -91 -163.5 -136t-274.5 -45q-259 0 -386.5 136t-127.5 411zM232 1208l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM365 635h434 q0 239 -209 239q-69 0 -113 -23.5t-70.5 -70t-41.5 -145.5z" />
|
||||||
|
<glyph unicode="ë" horiz-adv-x="1143" d="M92 516q0 563 504 563q224 0 341.5 -126.5t117.5 -368.5v-127h-697q7 -140 68 -201t192 -61q76 0 133.5 19t100.5 73l192 -137q-63 -91 -163.5 -136t-274.5 -45q-259 0 -386.5 136t-127.5 411zM220 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5 q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM365 635h434q0 239 -209 239q-69 0 -113 -23.5t-70.5 -70t-41.5 -145.5zM664 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="ì" horiz-adv-x="549" d="M-53 1569h315l188 -361h-204zM145 0v1049h258v-1049h-258z" />
|
||||||
|
<glyph unicode="í" horiz-adv-x="549" d="M127 1208l189 361h315l-299 -361h-205zM145 0v1049h258v-1049h-258z" />
|
||||||
|
<glyph unicode="î" horiz-adv-x="549" d="M-80 1208l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM145 0v1049h258v-1049h-258z" />
|
||||||
|
<glyph unicode="ï" horiz-adv-x="549" d="M-92 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM145 0v1049h258v-1049h-258zM352 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="ð" horiz-adv-x="1190" d="M92 520q0 156 55 278t158 186.5t238 64.5q41 0 94 -18.5t94 -49.5q-15 39 -65.5 122t-90.5 130l-225 -94l-67 149l180 76q-34 48 -184 156h274q49 -29 98 -78l187 78l69 -148l-131 -55q142 -147 232 -360t90 -435q0 -267 -126.5 -410t-375.5 -143q-247 0 -375.5 138 t-128.5 413zM358 520q0 -158 54.5 -241.5t183.5 -83.5t182 83.5t53 243.5q0 303 -237 303q-116 0 -176 -77.5t-60 -227.5z" />
|
||||||
|
<glyph unicode="ñ" d="M145 0v1049h258v-136q82 82 175 124t182 42q161 0 240 -88t79 -291v-700h-258v578q0 164 -29.5 219t-111.5 55q-115 0 -277 -152v-700h-258zM197 1231q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5 t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5q-67 0 -67 -127h-182z" />
|
||||||
|
<glyph unicode="ò" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM269 1569h315l188 -361h-204zM358 522q0 -168 55.5 -247.5t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5t-181 79.5q-126 0 -182 -81.5 t-56 -250.5z" />
|
||||||
|
<glyph unicode="ó" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM358 522q0 -168 55.5 -247.5t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5t-181 79.5q-126 0 -182 -81.5t-56 -250.5zM428 1208l189 361h315 l-299 -361h-205z" />
|
||||||
|
<glyph unicode="ô" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM242 1208l235 361h244l236 -361h-211l-146 174l-149 -174h-209zM358 522q0 -168 55.5 -247.5t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5 t-181 79.5q-126 0 -182 -81.5t-56 -250.5z" />
|
||||||
|
<glyph unicode="õ" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM191 1231q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5t-188.5 -78.5 q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5q-67 0 -67 -127h-182zM358 522q0 -168 55.5 -247.5t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5t-181 79.5q-126 0 -182 -81.5t-56 -250.5z" />
|
||||||
|
<glyph unicode="ö" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q260 0 381 -145.5t121 -411.5q0 -262 -121 -407.5t-381 -145.5q-504 0 -504 553zM230 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM358 522q0 -168 55.5 -247.5 t182.5 -79.5q125 0 180 78.5t55 248.5q0 173 -54 252.5t-181 79.5q-126 0 -182 -81.5t-56 -250.5zM674 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="÷" horiz-adv-x="1427" d="M133 479v205h1161v-205h-1161zM592 2v252h246v-252h-246zM592 911v252h246v-252h-246z" />
|
||||||
|
<glyph unicode="ø" horiz-adv-x="1190" d="M92 522q0 266 121 411.5t383 145.5q141 0 246 -47l61 92h182l-118 -180q131 -145 131 -422q0 -262 -121 -407.5t-381 -145.5q-144 0 -248 45l-59 -90h-183l117 176q-131 141 -131 422zM358 522q0 -103 23 -184l328 493q-45 23 -113 23q-126 0 -182 -81.5t-56 -250.5z M483 215q47 -20 113 -20q125 0 180 78.5t55 248.5q0 108 -22 185z" />
|
||||||
|
<glyph unicode="ù" d="M137 348v701h258v-578q0 -111 13 -170t42.5 -81.5t86.5 -22.5q115 0 276 151v701h258v-1049h-258v135q-68 -73 -166.5 -119.5t-189.5 -46.5q-178 0 -249 98.5t-71 280.5zM281 1569h315l188 -361h-204z" />
|
||||||
|
<glyph unicode="ú" d="M137 348v701h258v-578q0 -111 13 -170t42.5 -81.5t86.5 -22.5q115 0 276 151v701h258v-1049h-258v135q-68 -73 -166.5 -119.5t-189.5 -46.5q-178 0 -249 98.5t-71 280.5zM440 1208l189 361h315l-299 -361h-205z" />
|
||||||
|
<glyph unicode="û" d="M137 348v701h258v-578q0 -111 13 -170t42.5 -81.5t86.5 -22.5q115 0 276 151v701h258v-1049h-258v135q-68 -73 -166.5 -119.5t-189.5 -46.5q-178 0 -249 98.5t-71 280.5zM244 1208l235 361h244l236 -361h-211l-146 174l-149 -174h-209z" />
|
||||||
|
<glyph unicode="ü" d="M137 348v701h258v-578q0 -111 13 -170t42.5 -81.5t86.5 -22.5q115 0 276 151v701h258v-1049h-258v135q-68 -73 -166.5 -119.5t-189.5 -46.5q-178 0 -249 98.5t-71 280.5zM232 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29 q-82 0 -111.5 34t-29.5 97zM676 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="ý" horiz-adv-x="1085" d="M-20 -365l55 224q84 -29 151 -29q58 0 102 35t91 145l27 62l-379 977h268l248 -670l254 670h262l-451 -1121q-55 -135 -107 -200t-121.5 -94t-174.5 -29q-114 0 -225 30zM368 1208l189 361h315l-299 -361h-205z" />
|
||||||
|
<glyph unicode="þ" d="M145 -395v1884h258v-533q127 123 316 123q198 0 301.5 -141.5t103.5 -405.5q0 -169 -51 -298t-146 -197t-227 -68q-174 0 -297 109v-473h-258zM403 291q41 -37 101.5 -65.5t124.5 -28.5q106 0 167.5 90.5t61.5 240.5q0 153 -53 238.5t-158 85.5q-63 0 -129.5 -29.5 t-114.5 -72.5v-459z" />
|
||||||
|
<glyph unicode="ÿ" horiz-adv-x="1085" d="M-20 -365l55 224q84 -29 151 -29q58 0 102 35t91 145l27 62l-379 977h268l248 -670l254 670h262l-451 -1121q-55 -135 -107 -200t-121.5 -94t-174.5 -29q-114 0 -225 30zM179 1335q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29 q-82 0 -111.5 34t-29.5 97zM623 1335q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="Œ" horiz-adv-x="1919" d="M96 692q0 344 151.5 532.5t459.5 188.5q121 0 247 -29h865v-249h-568v-301h467v-250h-467v-326h568v-258h-861q-106 -29 -251 -29q-312 0 -461.5 189.5t-149.5 531.5zM387 692q0 -246 78 -358.5t264 -112.5q78 0 130 14.5t108 49.5v813q-100 65 -238 65q-182 0 -262 -110 t-80 -361z" />
|
||||||
|
<glyph unicode="œ" horiz-adv-x="1874" d="M92 522q0 269 121 413t373 144q244 0 377 -149q57 63 144 106t230 43q219 0 334 -128.5t115 -366.5v-127h-696q6 -140 66.5 -201t193.5 -61q73 0 131.5 19t101.5 73l193 -137q-64 -91 -162 -136t-260 -45q-264 0 -391 152q-139 -152 -367 -152q-264 0 -384 146.5 t-120 406.5zM358 522q0 -168 55.5 -247.5t182.5 -79.5q117 0 176 74.5t59 252.5q0 184 -58 258t-177 74q-126 0 -182 -81.5t-56 -250.5zM1096 635h434q0 239 -209 239q-68 0 -113 -23.5t-71 -70.5t-41 -145z" />
|
||||||
|
<glyph unicode="Ÿ" horiz-adv-x="1188" d="M18 1384h308l270 -579l276 579h297l-434 -856v-528h-284v522zM226 1671q0 70 31.5 100.5t109.5 30.5t111.5 -29.5t33.5 -101.5q0 -73 -35.5 -102t-109.5 -29q-82 0 -111.5 34t-29.5 97zM670 1671q0 70 31.5 100.5t109.5 30.5t112 -29.5t34 -101.5q0 -73 -36 -102 t-110 -29q-82 0 -111.5 34t-29.5 97z" />
|
||||||
|
<glyph unicode="ˆ" horiz-adv-x="1044" d="M164 1208l235 361h244l236 -361h-211l-146 174l-149 -174h-209z" />
|
||||||
|
<glyph unicode="˜" horiz-adv-x="1044" d="M113 1231q5 155 73 236t189 81q61 0 104 -22.5t77 -48t62.5 -48t61.5 -22.5q35 0 51.5 35t16.5 92h182q-10 -165 -75.5 -243.5t-188.5 -78.5q-66 0 -109 22.5t-75.5 50.5t-59.5 50.5t-60 22.5q-67 0 -67 -127h-182z" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="971" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="1942" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="971" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="1942" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="647" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="485" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="323" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="323" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="242" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="388" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="107" />
|
||||||
|
<glyph unicode="‐" horiz-adv-x="786" d="M82 399v254h623v-254h-623z" />
|
||||||
|
<glyph unicode="‑" horiz-adv-x="786" d="M82 399v254h623v-254h-623z" />
|
||||||
|
<glyph unicode="‒" horiz-adv-x="786" d="M82 399v254h623v-254h-623z" />
|
||||||
|
<glyph unicode="–" horiz-adv-x="1044" d="M31 424v205h983v-205h-983z" />
|
||||||
|
<glyph unicode="—" horiz-adv-x="2068" d="M31 424v205h2007v-205h-2007z" />
|
||||||
|
<glyph unicode="‘" horiz-adv-x="584" d="M129 967q0 123 42 234.5t91 182.5h193q-62 -86 -91.5 -164.5t-33.5 -117.5q65 -4 95 -42t30 -114q0 -74 -35 -117t-131 -43q-160 0 -160 181z" />
|
||||||
|
<glyph unicode="’" horiz-adv-x="584" d="M129 815q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-193z" />
|
||||||
|
<glyph unicode="‚" horiz-adv-x="584" d="M129 145q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-193q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113z" />
|
||||||
|
<glyph unicode="“" horiz-adv-x="1047" d="M129 967q0 123 42 234.5t91 182.5h193q-62 -86 -91.5 -164.5t-33.5 -117.5q65 -4 95 -42t30 -114q0 -74 -35 -117t-131 -43q-160 0 -160 181zM592 967q0 123 42 234.5t91 182.5h193q-62 -86 -91.5 -164.5t-33.5 -117.5q65 -4 95 -42t30 -114q0 -74 -35 -117t-131 -43 q-160 0 -160 181z" />
|
||||||
|
<glyph unicode="”" horiz-adv-x="1047" d="M129 815q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-193zM592 815q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-92 -183.5h-192z" />
|
||||||
|
<glyph unicode="„" horiz-adv-x="1047" d="M129 145q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-91 -183.5h-193q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113zM592 145q0 74 35 117t131 43q160 0 160 -180q0 -123 -42 -234.5t-92 -183.5h-192q61 86 91 165t34 118q-66 4 -95.5 42t-29.5 113z" />
|
||||||
|
<glyph unicode="•" horiz-adv-x="760" d="M92 745q0 78 38.5 145t106.5 105.5t144 38.5q115 0 201 -83t86 -206q0 -118 -84 -202t-203 -84q-76 0 -143 37.5t-106.5 104.5t-39.5 144z" />
|
||||||
|
<glyph unicode="…" horiz-adv-x="2068" d="M188 145q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118zM870 145q0 82 36 121t126 39q92 0 128 -38t36 -122q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118zM1552 145q0 82 36 121t126 39q92 0 128 -38t36 -122 q0 -86 -39 -122.5t-125 -36.5q-94 0 -128 41t-34 118z" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="388" />
|
||||||
|
<glyph unicode="‹" horiz-adv-x="862" d="M61 524l420 471h299l-420 -471l420 -471h-299z" />
|
||||||
|
<glyph unicode="›" horiz-adv-x="862" d="M82 53l420 471l-420 471h299l420 -471l-420 -471h-299z" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="485" />
|
||||||
|
<glyph unicode="€" horiz-adv-x="1280" d="M20 444l39 191h58v119h-97l43 190h76q96 469 592 469q197 0 321 -68.5t189 -179.5l-201 -161q-53 78 -90.5 107.5t-85.5 44.5t-116 15q-132 0 -206.5 -55t-107.5 -172h522l-43 -190h-505v-119h487l-39 -191h-424q35 -127 110.5 -179t205.5 -52q92 0 162 40t143 146 l209 -149q-80 -118 -149 -174t-157 -80.5t-215 -24.5q-505 0 -602 473h-119z" />
|
||||||
|
<glyph unicode="™" horiz-adv-x="1692" d="M43 1208v176h639v-176h-219v-538h-199v538h-221zM836 670v714h215l149 -303l152 303h215v-714h-193v391l-117 -232h-110l-119 234v-393h-192z" />
|
||||||
|
<glyph unicode="◼" horiz-adv-x="1050" d="M0 0v1050h1050v-1050h-1050z" />
|
||||||
|
<hkern u1="(" u2="j" k="-164" />
|
||||||
|
<hkern u1="*" u2="Å" k="123" />
|
||||||
|
<hkern u1="*" u2="Ä" k="123" />
|
||||||
|
<hkern u1="*" u2="Ã" k="123" />
|
||||||
|
<hkern u1="*" u2="Â" k="123" />
|
||||||
|
<hkern u1="*" u2="Á" k="123" />
|
||||||
|
<hkern u1="*" u2="À" k="123" />
|
||||||
|
<hkern u1="*" u2="T" k="-92" />
|
||||||
|
<hkern u1="*" u2="J" k="174" />
|
||||||
|
<hkern u1="*" u2="A" k="123" />
|
||||||
|
<hkern u1="A" u2="?" k="102" />
|
||||||
|
<hkern u1="A" u2="*" k="123" />
|
||||||
|
<hkern u1="F" u2="ï" k="-61" />
|
||||||
|
<hkern u1="F" u2="î" k="-20" />
|
||||||
|
<hkern u1="K" u2="ï" k="-10" />
|
||||||
|
<hkern u1="K" u2="î" k="41" />
|
||||||
|
<hkern u1="L" u2="Ø" k="10" />
|
||||||
|
<hkern u1="L" u2="?" k="102" />
|
||||||
|
<hkern u1="L" u2="*" k="205" />
|
||||||
|
<hkern u1="T" u2="ï" k="-123" />
|
||||||
|
<hkern u1="T" u2="î" k="-61" />
|
||||||
|
<hkern u1="T" u2="ä" k="123" />
|
||||||
|
<hkern u1="T" u2="ã" k="123" />
|
||||||
|
<hkern u1="T" u2="â" k="164" />
|
||||||
|
<hkern u1="T" u2="?" k="-82" />
|
||||||
|
<hkern u1="T" u2="*" k="-92" />
|
||||||
|
<hkern u1="V" u2="ï" k="-72" />
|
||||||
|
<hkern u1="V" u2="î" k="-10" />
|
||||||
|
<hkern u1="W" u2="ï" k="-72" />
|
||||||
|
<hkern u1="W" u2="î" k="-10" />
|
||||||
|
<hkern u1="X" u2="ï" k="-82" />
|
||||||
|
<hkern u1="X" u2="î" k="-41" />
|
||||||
|
<hkern u1="Y" u2="ï" k="-102" />
|
||||||
|
<hkern u1="Y" u2="î" k="-20" />
|
||||||
|
<hkern u1="[" u2="j" k="-164" />
|
||||||
|
<hkern u1="f" u2="ï" k="-225" />
|
||||||
|
<hkern u1="f" u2="î" k="-102" />
|
||||||
|
<hkern u1="f" u2="ì" k="-82" />
|
||||||
|
<hkern u1="f" u2="?" k="-123" />
|
||||||
|
<hkern u1="f" u2="*" k="-143" />
|
||||||
|
<hkern u1="f" u2="!" k="-61" />
|
||||||
|
<hkern u1="j" u2="ÿ" k="-41" />
|
||||||
|
<hkern u1="j" u2="ý" k="-41" />
|
||||||
|
<hkern u1="j" u2="y" k="-41" />
|
||||||
|
<hkern u1="{" u2="j" k="-164" />
|
||||||
|
<hkern u1="¡" u2="Ÿ" k="102" />
|
||||||
|
<hkern u1="¡" u2="Ý" k="102" />
|
||||||
|
<hkern u1="¡" u2="Y" k="102" />
|
||||||
|
<hkern u1="¡" u2="W" k="61" />
|
||||||
|
<hkern u1="¡" u2="V" k="61" />
|
||||||
|
<hkern u1="¿" u2="Ÿ" k="184" />
|
||||||
|
<hkern u1="¿" u2="Ý" k="184" />
|
||||||
|
<hkern u1="¿" u2="Y" k="184" />
|
||||||
|
<hkern u1="¿" u2="W" k="123" />
|
||||||
|
<hkern u1="¿" u2="V" k="123" />
|
||||||
|
<hkern u1="¿" u2="T" k="184" />
|
||||||
|
<hkern u1="À" u2="?" k="102" />
|
||||||
|
<hkern u1="À" u2="*" k="123" />
|
||||||
|
<hkern u1="Á" u2="?" k="102" />
|
||||||
|
<hkern u1="Á" u2="*" k="123" />
|
||||||
|
<hkern u1="Â" u2="?" k="102" />
|
||||||
|
<hkern u1="Â" u2="*" k="123" />
|
||||||
|
<hkern u1="Ã" u2="?" k="102" />
|
||||||
|
<hkern u1="Ã" u2="*" k="123" />
|
||||||
|
<hkern u1="Ä" u2="?" k="102" />
|
||||||
|
<hkern u1="Ä" u2="*" k="123" />
|
||||||
|
<hkern u1="Å" u2="?" k="102" />
|
||||||
|
<hkern u1="Å" u2="*" k="123" />
|
||||||
|
<hkern u1="Ý" u2="ï" k="-102" />
|
||||||
|
<hkern u1="Ý" u2="î" k="-20" />
|
||||||
|
<hkern u1="Þ" u2="X" k="123" />
|
||||||
|
<hkern u1="Þ" u2="W" k="31" />
|
||||||
|
<hkern u1="Þ" u2="V" k="31" />
|
||||||
|
<hkern u1="Þ" u2="T" k="82" />
|
||||||
|
<hkern u1="Ÿ" u2="ï" k="-102" />
|
||||||
|
<hkern u1="Ÿ" u2="î" k="-20" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="T" k="164" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="V" k="82" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="W" k="61" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="Y,Yacute,Ydieresis" k="113" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quotedbl,quotesingle" k="123" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="-41" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="colon,semicolon" k="-41" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="41" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="t" k="31" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="z" k="-31" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="trademark" k="164" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quoteleft,quotedblleft" k="184" />
|
||||||
|
<hkern g1="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" g2="quoteright,quotedblright" k="164" />
|
||||||
|
<hkern g1="B" g2="J" k="61" />
|
||||||
|
<hkern g1="B" g2="T" k="41" />
|
||||||
|
<hkern g1="B" g2="V" k="41" />
|
||||||
|
<hkern g1="B" g2="W" k="41" />
|
||||||
|
<hkern g1="B" g2="Y,Yacute,Ydieresis" k="51" />
|
||||||
|
<hkern g1="C,Ccedilla" g2="J" k="20" />
|
||||||
|
<hkern g1="C,Ccedilla" g2="V" k="31" />
|
||||||
|
<hkern g1="C,Ccedilla" g2="W" k="31" />
|
||||||
|
<hkern g1="C,Ccedilla" g2="X" k="31" />
|
||||||
|
<hkern g1="C,Ccedilla" g2="Y,Yacute,Ydieresis" k="41" />
|
||||||
|
<hkern g1="F" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="102" />
|
||||||
|
<hkern g1="F" g2="J" k="246" />
|
||||||
|
<hkern g1="F" g2="X" k="41" />
|
||||||
|
<hkern g1="F" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="231" />
|
||||||
|
<hkern g1="F" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20" />
|
||||||
|
<hkern g1="F" g2="t" k="20" />
|
||||||
|
<hkern g1="F" g2="z" k="61" />
|
||||||
|
<hkern g1="F" g2="S" k="20" />
|
||||||
|
<hkern g1="F" g2="Z" k="41" />
|
||||||
|
<hkern g1="F" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="41" />
|
||||||
|
<hkern g1="F" g2="i,j,igrave,iacute,icircumflex,idieresis" k="41" />
|
||||||
|
<hkern g1="F" g2="m,n,p,r,ntilde" k="72" />
|
||||||
|
<hkern g1="F" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
|
||||||
|
<hkern g1="F" g2="s" k="82" />
|
||||||
|
<hkern g1="F" g2="u,ugrave,uacute,ucircumflex,udieresis" k="41" />
|
||||||
|
<hkern g1="F" g2="v" k="41" />
|
||||||
|
<hkern g1="F" g2="w" k="41" />
|
||||||
|
<hkern g1="F" g2="x" k="82" />
|
||||||
|
<hkern g1="F" g2="y,yacute,ydieresis" k="61" />
|
||||||
|
<hkern g1="G" g2="J" k="51" />
|
||||||
|
<hkern g1="G" g2="T" k="41" />
|
||||||
|
<hkern g1="G" g2="V" k="41" />
|
||||||
|
<hkern g1="G" g2="W" k="41" />
|
||||||
|
<hkern g1="G" g2="X" k="31" />
|
||||||
|
<hkern g1="G" g2="Y,Yacute,Ydieresis" k="61" />
|
||||||
|
<hkern g1="J" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="41" />
|
||||||
|
<hkern g1="J" g2="J" k="61" />
|
||||||
|
<hkern g1="J" g2="X" k="20" />
|
||||||
|
<hkern g1="J" g2="AE" k="61" />
|
||||||
|
<hkern g1="K" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="41" />
|
||||||
|
<hkern g1="K" g2="T" k="31" />
|
||||||
|
<hkern g1="K" g2="V" k="51" />
|
||||||
|
<hkern g1="K" g2="W" k="51" />
|
||||||
|
<hkern g1="K" g2="X" k="41" />
|
||||||
|
<hkern g1="K" g2="Y,Yacute,Ydieresis" k="82" />
|
||||||
|
<hkern g1="K" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
|
||||||
|
<hkern g1="K" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="41" />
|
||||||
|
<hkern g1="K" g2="t" k="61" />
|
||||||
|
<hkern g1="K" g2="S" k="51" />
|
||||||
|
<hkern g1="K" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="61" />
|
||||||
|
<hkern g1="K" g2="i,j,igrave,iacute,icircumflex,idieresis" k="41" />
|
||||||
|
<hkern g1="K" g2="m,n,p,r,ntilde" k="41" />
|
||||||
|
<hkern g1="K" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41" />
|
||||||
|
<hkern g1="K" g2="s" k="61" />
|
||||||
|
<hkern g1="K" g2="u,ugrave,uacute,ucircumflex,udieresis" k="61" />
|
||||||
|
<hkern g1="K" g2="v" k="51" />
|
||||||
|
<hkern g1="K" g2="w" k="51" />
|
||||||
|
<hkern g1="K" g2="y,yacute,ydieresis" k="102" />
|
||||||
|
<hkern g1="K" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="20" />
|
||||||
|
<hkern g1="L" g2="T" k="143" />
|
||||||
|
<hkern g1="L" g2="V" k="102" />
|
||||||
|
<hkern g1="L" g2="W" k="102" />
|
||||||
|
<hkern g1="L" g2="Y,Yacute,Ydieresis" k="143" />
|
||||||
|
<hkern g1="L" g2="quotedbl,quotesingle" k="287" />
|
||||||
|
<hkern g1="L" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="-20" />
|
||||||
|
<hkern g1="L" g2="colon,semicolon" k="-41" />
|
||||||
|
<hkern g1="L" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20" />
|
||||||
|
<hkern g1="L" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="41" />
|
||||||
|
<hkern g1="L" g2="t" k="31" />
|
||||||
|
<hkern g1="L" g2="trademark" k="287" />
|
||||||
|
<hkern g1="L" g2="quoteleft,quotedblleft" k="328" />
|
||||||
|
<hkern g1="L" g2="quoteright,quotedblright" k="328" />
|
||||||
|
<hkern g1="L" g2="S" k="10" />
|
||||||
|
<hkern g1="L" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
|
||||||
|
<hkern g1="L" g2="v" k="61" />
|
||||||
|
<hkern g1="L" g2="w" k="61" />
|
||||||
|
<hkern g1="L" g2="y,yacute,ydieresis" k="102" />
|
||||||
|
<hkern g1="L" g2="copyright,registered" k="61" />
|
||||||
|
<hkern g1="P,Thorn" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="102" />
|
||||||
|
<hkern g1="P,Thorn" g2="J" k="164" />
|
||||||
|
<hkern g1="P,Thorn" g2="T" k="20" />
|
||||||
|
<hkern g1="P,Thorn" g2="V" k="-10" />
|
||||||
|
<hkern g1="P,Thorn" g2="W" k="-10" />
|
||||||
|
<hkern g1="P,Thorn" g2="X" k="20" />
|
||||||
|
<hkern g1="P,Thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="266" />
|
||||||
|
<hkern g1="P,Thorn" g2="S" k="-20" />
|
||||||
|
<hkern g1="P,Thorn" g2="Z" k="41" />
|
||||||
|
<hkern g1="P,Thorn" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20" />
|
||||||
|
<hkern g1="P,Thorn" g2="AE" k="82" />
|
||||||
|
<hkern g1="P,Thorn" g2="I,Igrave,Iacute,Icircumflex,Idieresis" k="41" />
|
||||||
|
<hkern g1="R" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="41" />
|
||||||
|
<hkern g1="R" g2="T" k="20" />
|
||||||
|
<hkern g1="R" g2="V" k="41" />
|
||||||
|
<hkern g1="R" g2="W" k="41" />
|
||||||
|
<hkern g1="R" g2="Y,Yacute,Ydieresis" k="41" />
|
||||||
|
<hkern g1="S" g2="J" k="41" />
|
||||||
|
<hkern g1="S" g2="T" k="41" />
|
||||||
|
<hkern g1="S" g2="V" k="31" />
|
||||||
|
<hkern g1="S" g2="W" k="31" />
|
||||||
|
<hkern g1="S" g2="X" k="20" />
|
||||||
|
<hkern g1="S" g2="Y,Yacute,Ydieresis" k="61" />
|
||||||
|
<hkern g1="T" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="164" />
|
||||||
|
<hkern g1="T" g2="J" k="143" />
|
||||||
|
<hkern g1="T" g2="X" k="20" />
|
||||||
|
<hkern g1="T" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="184" />
|
||||||
|
<hkern g1="T" g2="colon,semicolon" k="82" />
|
||||||
|
<hkern g1="T" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="51" />
|
||||||
|
<hkern g1="T" g2="t" k="20" />
|
||||||
|
<hkern g1="T" g2="z" k="156" />
|
||||||
|
<hkern g1="T" g2="trademark" k="-82" />
|
||||||
|
<hkern g1="T" g2="quoteleft,quotedblleft" k="-41" />
|
||||||
|
<hkern g1="T" g2="quoteright,quotedblright" k="-41" />
|
||||||
|
<hkern g1="T" g2="S" k="41" />
|
||||||
|
<hkern g1="T" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="205" />
|
||||||
|
<hkern g1="T" g2="i,j,igrave,iacute,icircumflex,idieresis" k="41" />
|
||||||
|
<hkern g1="T" g2="m,n,p,r,ntilde" k="184" />
|
||||||
|
<hkern g1="T" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="205" />
|
||||||
|
<hkern g1="T" g2="s" k="205" />
|
||||||
|
<hkern g1="T" g2="u,ugrave,uacute,ucircumflex,udieresis" k="143" />
|
||||||
|
<hkern g1="T" g2="v" k="184" />
|
||||||
|
<hkern g1="T" g2="w" k="184" />
|
||||||
|
<hkern g1="T" g2="x" k="205" />
|
||||||
|
<hkern g1="T" g2="y,yacute,ydieresis" k="143" />
|
||||||
|
<hkern g1="T" g2="AE" k="184" />
|
||||||
|
<hkern g1="T" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="20" />
|
||||||
|
<hkern g1="T" g2="copyright,registered" k="102" />
|
||||||
|
<hkern g1="T" g2="hyphen,endash,emdash" k="102" />
|
||||||
|
<hkern g1="T" g2="guillemotleft,guilsinglleft" k="143" />
|
||||||
|
<hkern g1="T" g2="guillemotright,guilsinglright" k="61" />
|
||||||
|
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="41" />
|
||||||
|
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="J" k="51" />
|
||||||
|
<hkern g1="U,Ugrave,Uacute,Ucircumflex,Udieresis" g2="X" k="41" />
|
||||||
|
<hkern g1="W" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="61" />
|
||||||
|
<hkern g1="W" g2="J" k="143" />
|
||||||
|
<hkern g1="W" g2="X" k="20" />
|
||||||
|
<hkern g1="W" g2="Y,Yacute,Ydieresis" k="41" />
|
||||||
|
<hkern g1="W" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="143" />
|
||||||
|
<hkern g1="W" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20" />
|
||||||
|
<hkern g1="W" g2="t" k="20" />
|
||||||
|
<hkern g1="W" g2="z" k="41" />
|
||||||
|
<hkern g1="W" g2="S" k="10" />
|
||||||
|
<hkern g1="W" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="61" />
|
||||||
|
<hkern g1="W" g2="m,n,p,r,ntilde" k="61" />
|
||||||
|
<hkern g1="W" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
|
||||||
|
<hkern g1="W" g2="s" k="61" />
|
||||||
|
<hkern g1="W" g2="u,ugrave,uacute,ucircumflex,udieresis" k="61" />
|
||||||
|
<hkern g1="W" g2="x" k="31" />
|
||||||
|
<hkern g1="W" g2="y,yacute,ydieresis" k="20" />
|
||||||
|
<hkern g1="W" g2="AE" k="41" />
|
||||||
|
<hkern g1="W" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="20" />
|
||||||
|
<hkern g1="W" g2="b,h,k,l,germandbls,thorn" k="31" />
|
||||||
|
<hkern g1="X" g2="T" k="20" />
|
||||||
|
<hkern g1="X" g2="V" k="20" />
|
||||||
|
<hkern g1="X" g2="W" k="20" />
|
||||||
|
<hkern g1="X" g2="Y,Yacute,Ydieresis" k="41" />
|
||||||
|
<hkern g1="X" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="41" />
|
||||||
|
<hkern g1="X" g2="U,Ugrave,Uacute,Ucircumflex,Udieresis" k="41" />
|
||||||
|
<hkern g1="X" g2="S" k="20" />
|
||||||
|
<hkern g1="X" g2="m,n,p,r,ntilde" k="31" />
|
||||||
|
<hkern g1="X" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
|
||||||
|
<hkern g1="X" g2="u,ugrave,uacute,ucircumflex,udieresis" k="82" />
|
||||||
|
<hkern g1="X" g2="v" k="41" />
|
||||||
|
<hkern g1="X" g2="w" k="41" />
|
||||||
|
<hkern g1="X" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="31" />
|
||||||
|
<hkern g1="X" g2="copyright,registered" k="61" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="113" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="J" k="184" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="V" k="41" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="W" k="41" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="X" k="41" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="205" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="colon,semicolon" k="41" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="61" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="t" k="31" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="z" k="102" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="S" k="61" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="Z" k="20" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="123" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="i,j,igrave,iacute,icircumflex,idieresis" k="41" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="m,n,p,r,ntilde" k="133" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="143" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="s" k="123" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="u,ugrave,uacute,ucircumflex,udieresis" k="102" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="v" k="82" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="w" k="82" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="x" k="82" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="AE" k="143" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="20" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="copyright,registered" k="82" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="guillemotleft,guilsinglleft" k="102" />
|
||||||
|
<hkern g1="Y,Yacute,Ydieresis" g2="b,h,k,l,germandbls,thorn" k="41" />
|
||||||
|
<hkern g1="Z" g2="Y,Yacute,Ydieresis" k="31" />
|
||||||
|
<hkern g1="a,agrave,aacute,acircumflex,atilde,adieresis,aring" g2="t" k="20" />
|
||||||
|
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="20" />
|
||||||
|
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="quoteleft,quotedblleft" k="61" />
|
||||||
|
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="quoteright,quotedblright" k="61" />
|
||||||
|
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="v" k="20" />
|
||||||
|
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="x" k="31" />
|
||||||
|
<hkern g1="b,o,p,germandbls,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,thorn" g2="y,yacute,ydieresis" k="10" />
|
||||||
|
<hkern g1="h,m,n,ntilde" g2="v" k="10" />
|
||||||
|
<hkern g1="h,m,n,ntilde" g2="w" k="10" />
|
||||||
|
<hkern g1="f" g2="quotedbl,quotesingle" k="-123" />
|
||||||
|
<hkern g1="f" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="41" />
|
||||||
|
<hkern g1="f" g2="trademark" k="-164" />
|
||||||
|
<hkern g1="f" g2="quoteleft,quotedblleft" k="-102" />
|
||||||
|
<hkern g1="f" g2="quoteright,quotedblright" k="-123" />
|
||||||
|
<hkern g1="f" g2="parenright,bracketright,braceright" k="-164" />
|
||||||
|
<hkern g1="k" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31" />
|
||||||
|
<hkern g1="k" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41" />
|
||||||
|
<hkern g1="k" g2="s" k="20" />
|
||||||
|
<hkern g1="k" g2="v" k="20" />
|
||||||
|
<hkern g1="k" g2="w" k="20" />
|
||||||
|
<hkern g1="r" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="266" />
|
||||||
|
<hkern g1="r" g2="quoteleft,quotedblleft" k="-41" />
|
||||||
|
<hkern g1="r" g2="quoteright,quotedblright" k="-41" />
|
||||||
|
<hkern g1="r" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20" />
|
||||||
|
<hkern g1="r" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41" />
|
||||||
|
<hkern g1="r" g2="s" k="20" />
|
||||||
|
<hkern g1="r" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="-20" />
|
||||||
|
<hkern g1="r" g2="guillemotright,guilsinglright" k="-41" />
|
||||||
|
<hkern g1="s" g2="t" k="20" />
|
||||||
|
<hkern g1="s" g2="v" k="41" />
|
||||||
|
<hkern g1="s" g2="w" k="41" />
|
||||||
|
<hkern g1="s" g2="x" k="20" />
|
||||||
|
<hkern g1="t" g2="z" k="-31" />
|
||||||
|
<hkern g1="t" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="-20" />
|
||||||
|
<hkern g1="t" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
|
||||||
|
<hkern g1="t" g2="u,ugrave,uacute,ucircumflex,udieresis" k="10" />
|
||||||
|
<hkern g1="t" g2="v" k="10" />
|
||||||
|
<hkern g1="t" g2="w" k="10" />
|
||||||
|
<hkern g1="t" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="10" />
|
||||||
|
<hkern g1="w" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="61" />
|
||||||
|
<hkern g1="w" g2="s" k="20" />
|
||||||
|
<hkern g1="w" g2="y,yacute,ydieresis" k="10" />
|
||||||
|
<hkern g1="x" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="31" />
|
||||||
|
<hkern g1="y,yacute,ydieresis" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="143" />
|
||||||
|
<hkern g1="y,yacute,ydieresis" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="31" />
|
||||||
|
<hkern g1="y,yacute,ydieresis" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="41" />
|
||||||
|
<hkern g1="y,yacute,ydieresis" g2="s" k="31" />
|
||||||
|
<hkern g1="y,yacute,ydieresis" g2="v" k="20" />
|
||||||
|
<hkern g1="y,yacute,ydieresis" g2="w" k="20" />
|
||||||
|
<hkern g1="y,yacute,ydieresis" g2="x" k="31" />
|
||||||
|
<hkern g1="y,yacute,ydieresis" g2="parenright,bracketright,braceright" k="61" />
|
||||||
|
<hkern g1="z" g2="z" k="-31" />
|
||||||
|
<hkern g1="colon,semicolon" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="-41" />
|
||||||
|
<hkern g1="colon,semicolon" g2="J" k="-41" />
|
||||||
|
<hkern g1="colon,semicolon" g2="T" k="82" />
|
||||||
|
<hkern g1="colon,semicolon" g2="Y,Yacute,Ydieresis" k="41" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="-41" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="J" k="-41" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="T" k="184" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="V" k="143" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="W" k="143" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="Y,Yacute,Ydieresis" k="205" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="quoteleft,quotedblleft" k="174" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="quoteright,quotedblright" k="174" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="v" k="61" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="w" k="61" />
|
||||||
|
<hkern g1="comma,period,quotesinglbase,quotedblbase,ellipsis" g2="AE" k="-61" />
|
||||||
|
<hkern g1="guillemotleft,guilsinglleft" g2="T" k="61" />
|
||||||
|
<hkern g1="guillemotright,guilsinglright" g2="T" k="143" />
|
||||||
|
<hkern g1="guillemotright,guilsinglright" g2="Y,Yacute,Ydieresis" k="102" />
|
||||||
|
<hkern g1="hyphen,endash,emdash" g2="T" k="102" />
|
||||||
|
<hkern g1="parenleft,bracketleft,braceleft" g2="y,yacute,ydieresis" k="-61" />
|
||||||
|
<hkern g1="quoteleft,quotedblleft" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="184" />
|
||||||
|
<hkern g1="quoteleft,quotedblleft" g2="J" k="246" />
|
||||||
|
<hkern g1="quoteleft,quotedblleft" g2="T" k="-41" />
|
||||||
|
<hkern g1="quoteleft,quotedblleft" g2="quoteleft,quotedblleft" k="113" />
|
||||||
|
<hkern g1="quoteleft,quotedblleft" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
|
||||||
|
<hkern g1="quoteleft,quotedblleft" g2="AE" k="184" />
|
||||||
|
<hkern g1="quoteright,quotedblright" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="184" />
|
||||||
|
<hkern g1="quoteright,quotedblright" g2="J" k="246" />
|
||||||
|
<hkern g1="quoteright,quotedblright" g2="T" k="-41" />
|
||||||
|
<hkern g1="quoteright,quotedblright" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="174" />
|
||||||
|
<hkern g1="quoteright,quotedblright" g2="quoteright,quotedblright" k="113" />
|
||||||
|
<hkern g1="quoteright,quotedblright" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
|
||||||
|
<hkern g1="quoteright,quotedblright" g2="AE" k="184" />
|
||||||
|
<hkern g1="quotedbl,quotesingle" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="123" />
|
||||||
|
<hkern g1="quotedbl,quotesingle" g2="J" k="225" />
|
||||||
|
<hkern g1="V" g2="A,Agrave,Aacute,Acircumflex,Atilde,Adieresis,Aring" k="82" />
|
||||||
|
<hkern g1="V" g2="J" k="143" />
|
||||||
|
<hkern g1="V" g2="X" k="20" />
|
||||||
|
<hkern g1="V" g2="Y,Yacute,Ydieresis" k="41" />
|
||||||
|
<hkern g1="V" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="143" />
|
||||||
|
<hkern g1="V" g2="C,G,O,Q,Ccedilla,Ograve,Oacute,Ocircumflex,Otilde,Odieresis,Oslash,OE" k="20" />
|
||||||
|
<hkern g1="V" g2="t" k="20" />
|
||||||
|
<hkern g1="V" g2="z" k="41" />
|
||||||
|
<hkern g1="V" g2="S" k="10" />
|
||||||
|
<hkern g1="V" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="61" />
|
||||||
|
<hkern g1="V" g2="m,n,p,r,ntilde" k="61" />
|
||||||
|
<hkern g1="V" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="61" />
|
||||||
|
<hkern g1="V" g2="s" k="61" />
|
||||||
|
<hkern g1="V" g2="u,ugrave,uacute,ucircumflex,udieresis" k="61" />
|
||||||
|
<hkern g1="V" g2="x" k="31" />
|
||||||
|
<hkern g1="V" g2="y,yacute,ydieresis" k="20" />
|
||||||
|
<hkern g1="V" g2="AE" k="41" />
|
||||||
|
<hkern g1="V" g2="f,uniFB01,uniFB02,uniFB03,uniFB04" k="20" />
|
||||||
|
<hkern g1="V" g2="b,h,k,l,germandbls,thorn" k="31" />
|
||||||
|
<hkern g1="v" g2="comma,period,quotesinglbase,quotedblbase,ellipsis" k="61" />
|
||||||
|
<hkern g1="v" g2="a,agrave,aacute,acircumflex,atilde,adieresis,aring,ae" k="20" />
|
||||||
|
<hkern g1="v" g2="c,d,e,g,o,q,ccedilla,egrave,eacute,ecircumflex,edieresis,eth,ograve,oacute,ocircumflex,otilde,odieresis,oslash,oe" k="20" />
|
||||||
|
<hkern g1="v" g2="s" k="20" />
|
||||||
|
<hkern g1="v" g2="y,yacute,ydieresis" k="10" />
|
||||||
|
</font>
|
||||||
|
</defs></svg>
|
After Width: | Height: | Size: 77 KiB |