This commit is contained in:
lxsang 2016-10-29 14:34:29 +02:00
parent 9244208f30
commit f729d5dd8a
2510 changed files with 57350 additions and 0 deletions

96
build/htdocs/dist/.htaccess vendored Normal file
View File

@ -0,0 +1,96 @@
# Generated with `make apache-htaccess`
Options +FollowSymlinks
RewriteEngine on
#RewriteBase /
RewriteCond %{REQUEST_URI} !^index.html
RewriteCond %{REQUEST_URI} !^/http-bind-jabber
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ api.php [QSA,L]
AddCharset UTF-8 .js
AddCharset UTF-8 .html
# For binding to other services
<ifModule mod_proxy.c>
<ifModule mod_proxy_http.c>
RewriteRule http-bind-jabber/ http://localhost:5280/http-bind/ [P]
</ifModule>
</ifModule>
<ifModule mod_headers.c>
<FilesMatch "\.json$">
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</FilesMatch>
<FilesMatch "\.(js|css|html)$">
Header set Cache-Control "max-age=86400, public, must-revalidate"
</FilesMatch>
<FilesMatch "^FS">
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</FilesMatch>
<FilesMatch "\.(ico|jpe?g|png|gif)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
</ifModule>
<ifModule mod_mime.c>
AddType image/bmp .bmp
AddType text/css .css
AddType image/gif .gif
AddType text/html .htm
AddType text/html .html
AddType image/jpeg .jpg
AddType image/jpeg .jpeg
AddType application/javascript .js
AddType application/json .json
AddType application/x-lua .lua
AddType application/x-shellscript .sh
AddType text/x-c .c
AddType text/x-cplusplus .cpp
AddType text/x-cplusplus .cc
AddType font/opentype .otf
AddType font/opentype .ttf
AddType image/png .png
AddType application/zip .zip
AddType audio/aac .aac
AddType video/mp4 .mp4
AddType audio/mp4 .m4a
AddType audio/mpeg .mp1
AddType audio/mpeg .mp2
AddType audio/mpeg .mp3
AddType audio/mpeg .mpg
AddType audio/mpeg .mpeg
AddType audio/ogg .oga
AddType audio/ogg .ogg
AddType audio/wav .wav
AddType video/webm .webm
AddType video/mp4 .m4v
AddType video/ogg .ogv
AddType video/x-ms-video .avi
AddType video/x-flv .flv
AddType video/x-matroska .mkv
AddType application/x-python .py
AddType text/xml .xml
AddType text/plain .md
AddType text/plain .txt
AddType text/plain .log
AddType text/plain .doc
AddType application/pdf .pdf
AddType application/x-ipkg .ipk
AddType osjs/dbeat .odbeat
AddType osjs/playlist .oplist
AddType osjs/document .odoc
AddType osjs/draw .odraw
AddType osjs/project .oproj
</ifModule>

6
build/htdocs/dist/api.php vendored Normal file
View File

@ -0,0 +1,6 @@
<?php
define("DISTDIR", __DIR__);
require __DIR__.'/../src/server/php/server.php';
?>

2
build/htdocs/dist/blank.css vendored Normal file
View File

@ -0,0 +1,2 @@
@charset "UTF-8";

335
build/htdocs/dist/dialogs.html vendored Normal file
View File

@ -0,0 +1,335 @@
<!--
Dialog: Error
-->
<application-dialog data-id="Error">
<gui-vbox>
<gui-vbox-container data-shrink="1">
<gui-label data-id="Message">DIALOG_ERROR_MESSAGE</gui-label>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-label data-id="SummaryLabel">DIALOG_ERROR_SUMMARY</gui-label>
</gui-vbox-container>
<gui-vbox-container data-fill="true" data-basis="90px">
<gui-textarea data-id="Summary"></gui-textarea>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-label data-id="TraceLabel">DIALOG_ERROR_TRACE</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-fill="true">
<gui-textarea data-id="Trace"></gui-textarea>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonOK">LBL_CLOSE</gui-button>
<gui-button data-id="ButtonBugReport">LBL_BUGREPORT</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-dialog>
<!--
Dialog: Application Chooser
-->
<application-dialog data-id="ApplicationChooser">
<gui-vbox>
<gui-vbox-container data-shrink="1">
<gui-label data-id="Message">DIALOG_APPCHOOSER_MSG</gui-label>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-label data-id="FileName">filename (mime)</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-fill="true">
<gui-list-view data-id="ApplicationList" data-multiple="false">
</gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-checkbox data-id="SetDefault" data-label="DIALOG_APPCHOOSER_SET_DEFAULT"></gui-checkbox>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonOK">LBL_OK</gui-button>
<gui-button data-id="ButtonCancel">LBL_CANCEL</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-dialog>
<!--
Dialog: File Save/Open
-->
<application-dialog data-id="File">
<gui-vbox>
<gui-vbox-container data-shrink="1">
<gui-hbox>
<gui-hbox-container data-shrink="1" data-expand="true">
<gui-button data-id="HomeButton" data-icon="stock://16x16/places/folder_home.png"></gui-button>
</gui-hbox-container>
<gui-hbox-container data-grow="1" data-expand="true">
<gui-select data-id="ModuleSelect"></gui-select>
</gui-hbox-container>
</gui-hbox>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-fill="true">
<gui-file-view data-id="FileView">
</gui-file-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-id="FileInput">
<gui-hbox>
<gui-hbox-container data-grow="1" data-expand="true">
<gui-text data-id="Filename"></gui-text>
</gui-hbox-container>
<gui-hbox-container data-shrink="0" data-basis="150px" data-expand="true">
<gui-select data-id="Filetype"></gui-select>
</gui-hbox-container>
</gui-hbox>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonOK">LBL_OK</gui-button>
<gui-button data-id="ButtonCancel">LBL_CANCEL</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-dialog>
<!--
Dialog: File Progress
-->
<application-dialog data-id="FileProgress">
<gui-vbox>
<gui-vbox-container data-grow="1">
<gui-label data-id="Message">LBL_LOADING</gui-label>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-progress-bar data-id="Progress"></gui-progress-bar>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonCancel" data-disabled="true">LBL_CANCEL</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-dialog>
<!--
Dialog: File Upload
-->
<application-dialog data-id="FileUpload">
<gui-vbox>
<gui-vbox-container data-shrink="1">
<gui-label data-id="Message">DIALOG_UPLOAD_DESC</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="1">
<gui-file-upload data-id="File"></gui-file-upload>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonCancel">LBL_CANCEL</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-dialog>
<!--
Dialog: File Information
-->
<application-dialog data-id="FileInfo">
<gui-vbox>
<gui-vbox-container data-grow="1" data-fill="true">
<gui-textarea data-id="Info"></gui-textarea>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonOK">LBL_OK</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-dialog>
<!--
Dialog: Input
-->
<application-dialog data-id="Input">
<gui-vbox>
<gui-vbox-container data-grow="1">
<gui-label data-id="Message">DIALOG_INPUT_TITLE</gui-label>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-text data-id="Input"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonOK">LBL_OK</gui-button>
<gui-button data-id="ButtonCancel">LBL_CANCEL</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-dialog>
<!--
Dialog: Alert
-->
<application-dialog data-id="Alert">
<gui-vbox>
<gui-vbox-container data-grow="1">
<gui-label data-id="Message">DIALOG_ALERT_TITLE</gui-label>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonOK">LBL_OK</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-dialog>
<!--
Dialog: Confirm
-->
<application-dialog data-id="Confirm">
<gui-vbox>
<gui-vbox-container data-grow="1">
<gui-label data-id="Message">DIALOG_CONFIRM_TITLE</gui-label>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonYes">LBL_YES</gui-button>
<gui-button data-id="ButtonNo">LBL_NO</gui-button>
<gui-button data-id="ButtonCancel">LBL_CANCEL</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-dialog>
<!--
Dialog: Color
-->
<application-dialog data-id="Color">
<gui-vbox>
<gui-vbox-container data-grow="1">
<gui-hbox>
<gui-hbox-container data-shrink="1">
<gui-vbox>
<gui-vbox-container shrink="1">
<gui-color-swatch data-id="ColorSelect"></gui-color-swatch>
</gui-vbox-container>
<gui-vbox-container shrink="1" data-expand="true">
<gui-color-box data-id="ColorPreview" data-disabled="true"></gui-color-box>
</gui-vbox-container>
</gui-vbox>
</gui-hbox-container>
<gui-hbox-container data-grow="1">
<gui-vbox>
<gui-vbox-container shrink="1" data-expand="true">
<gui-label data-id="LabelRed">Red</gui-label>
</gui-vbox-container>
<gui-vbox-container shrink="1" data-expand="true">
<gui-slider data-min="0" data-max="255" data-id="Red"></gui-slider>
</gui-vbox-container>
<gui-vbox-container shrink="1" data-expand="true">
<gui-label data-id="LabelGreen">Green</gui-label>
</gui-vbox-container>
<gui-vbox-container shrink="1" data-expand="true">
<gui-slider data-min="0" data-max="255" data-id="Green"></gui-slider>
</gui-vbox-container>
<gui-vbox-container shrink="1" data-expand="true">
<gui-label data-id="LabelBlue">Blue</gui-label>
</gui-vbox-container>
<gui-vbox-container shrink="1" data-expand="true">
<gui-slider data-min="0" data-max="255" data-id="Blue"></gui-slider>
</gui-vbox-container>
<gui-vbox-container shrink="1" data-expand="true" data-id="AlphaLabelContainer">
<gui-label data-id="LabelAlpha">Alpha</gui-label>
</gui-vbox-container>
<gui-vbox-container shrink="1" data-expand="true" data-id="AlphaContainer">
<gui-slider data-min="0" data-max="100" data-id="Alpha"></gui-slider>
</gui-vbox-container>
</gui-vbox>
</gui-hbox-container>
</gui-hbox>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonOK">LBL_OK</gui-button>
<gui-button data-id="ButtonCancel">LBL_CANCEL</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-dialog>
<!--
Dialog: Font
-->
<application-dialog data-id="Font">
<gui-vbox>
<gui-vbox-container data-grow="1" data-fill="true">
<gui-hbox>
<gui-hbox-container data-grow="1" data-shrink="1" data-basis="50%" data-fill="true">
<gui-select-list data-id="FontName"></gui-select-list>
</gui-hbox-container>
<gui-hbox-container data-grow="1" data-shrink="1" data-basis="50%" data-fill="true" data-id="FontSizeContainer">
<gui-select-list data-id="FontSize"></gui-select-list>
</gui-hbox-container>
</gui-hbox>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-basis="50px" data-fill="true">
<gui-textarea data-id="FontPreview"></gui-textarea>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonOK">LBL_OK</gui-button>
<gui-button data-id="ButtonCancel">LBL_CANCEL</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-dialog>

BIN
build/htdocs/dist/favicon.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
build/htdocs/dist/favicon.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 623 B

77
build/htdocs/dist/index.html vendored Normal file
View File

@ -0,0 +1,77 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="google" content="notranslate" />
<!--
OS.js - JavaScript Cloud/Web Desktop Platform
Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@author Anders Evenrud <andersevenrud@gmail.com>
@licence Simplified BSD License
-->
<meta name="description" content="OS.js - JavaScript Cloud/Web Desktop Platform" />
<meta name="keywords" content="OS.js,Web Desktop,Cloud Desktop,JavaScript OS" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>OS.js</title>
<link rel="shortcut icon" type="image/vnd.microsoft.icon" href="favicon.ico" />
<link rel="icon" type="image/png" href="favicon.png" />
<link rel="apple-touch-icon-precomposed" href="favicon.png" />
<!-- Styles -->
<link type="text/css" rel="stylesheet" href="themes/fonts.css" />
<link type="text/css" rel="stylesheet" href="osjs.css" />
<!-- Scripts -->
<script type="text/javascript" charset="utf-8" src="settings.js"></script>
<script type="text/javascript" charset="utf-8" src="osjs.js"></script>
<script type="text/javascript" charset="utf-8" src="locales.js"></script>
</head>
<body>
<div id="LoadingScreen">
<img alt="" src="splash.png" />
</div>
<div id="Login">
<form method="post" id="LoginForm">
<div>
<label for="LoginUsername">Username</label>
<input type="text" name="LoginUsername" id="LoginUsername" value="" placeholder="Username" />
</div>
<div>
<label for="LoginPassword">Password</label>
<input type="password" name="LoginPassword" id="LoginPassword" value="" placeholder="Password" />
</div>
<div class="Submit">
<input type="submit" name="LoginSubmit" id="LoginSubmit" value="Login" />
</div>
</form>
</div>
</body>
</html>

5539
build/htdocs/dist/locales.js vendored Normal file

File diff suppressed because it is too large Load Diff

1702
build/htdocs/dist/osjs.css vendored Normal file

File diff suppressed because it is too large Load Diff

16526
build/htdocs/dist/osjs.js vendored Normal file

File diff suppressed because it is too large Load Diff

650
build/htdocs/dist/packages.js vendored Normal file
View File

@ -0,0 +1,650 @@
(function() {
window.OSjs = window.OSjs || {}
OSjs.Core = OSjs.Core || {}
OSjs.Core.getMetadata = function() {
return Object.freeze({
"default/About": {
"className": "ApplicationAbout",
"name": "About OS.js",
"description": "About OS.js",
"names": {
"bg_BG": " За OS.js",
"de_DE": "Über OS.js",
"fr_FR": "À propos d'OS.js",
"it_IT": "Informazioni su OS.js",
"ko_KR": "OS.js에 대하여",
"nl_NL": "Over OS.js",
"no_NO": "Om OS.js",
"pl_PL": "o OS.js",
"ru_RU": "Об OS.js",
"sk_SK": "o OS.js",
"tr_TR": "hakkında OS.js",
"vi_VN": "Thông tin về OS.js"
},
"descriptions": {
"bg_BG": "За OS.js",
"de_DE": "Über OS.js",
"fr_FR": "À propos d'OS.js",
"it_IT": "Informazioni su OS.js",
"ko_KR": "OS.js에 대하여",
"nl_NL": "Over OS.js",
"no_NO": "Om OS.js",
"pl_PL": "o OS.js",
"ru_RU": "Об OS.js",
"sk_SK": "o OS.js",
"tr_TR": "hakkında OS.js",
"vi_VN": "Thông tin về OS.js"
},
"singular": true,
"category": "system",
"icon": "apps/help-browser.png",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/About",
"build": {},
"repo": "default"
},
"default/Calculator": {
"className": "ApplicationCalculator",
"name": "Calculator",
"names": {
"bg_Bg": "Клакулатор",
"fr_FR": "Calculatrice",
"it_IT": "Calcolatrice",
"ko_KR": "계산기",
"nl_NL": "Rekenmachine",
"no_NO": "Kalkulator",
"pl_PL": "Kalkulator",
"ru_RU": "Калькулятор",
"sk_SK": "Kalkulačka",
"tr_TR": "Hesap Makinesi",
"vi_VN": "Máy tính"
},
"icon": "apps/calc.png",
"category": "office",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Calculator",
"build": {},
"repo": "default"
},
"default/CoreWM": {
"className": "CoreWM",
"name": "OS.js Window Manager",
"names": {
"bg_BG": "Мениджър на прозорци на OS.js",
"de_DE": "OS.js Fenster-Manager",
"es_ES": "OS.js Window Manager",
"fr_FR": "Gestionnaire de fenêtre OS.js",
"it_IT": "OS.js Gestore Finestre",
"ko_KR": "OS.js 윈도우 관리자",
"nl_NL": "OS.js venster beheer",
"no_NO": "OS.js Vinduhåndterer",
"pl_PL": "Menedżer Okien OS.js",
"ru_RU": "OS.js Оконный менеджер",
"sk_SK": "Správca Okien OS.js",
"tr_TR": "OS.js Pencere Yöneticisi",
"vi_VN": "Quản lí cửa sổ OS.js"
},
"singular": true,
"type": "windowmanager",
"icon": "apps/gnome-window-manager.png",
"splash": false,
"preload": [
{
"src": "scheme.html",
"type": "scheme"
},
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
}
],
"panelItems": {
"AppMenu": {
"Name": "AppMenu",
"Description": "Application Menu",
"Icon": "actions/stock_about.png",
"HasOptions": false
},
"Buttons": {
"Name": "Buttons",
"Description": "Button Bar",
"Icon": "actions/stock_about.png"
},
"Clock": {
"Name": "Clock",
"Description": "View the time",
"Icon": "status/appointment-soon.png",
"HasOptions": true
},
"NotificationArea": {
"Name": "NotificationArea",
"Description": "View notifications",
"Icon": "apps/gnome-panel-notification-area.png"
},
"Search": {
"Name": "Search",
"Description": "Perform searches",
"Icon": "actions/find.png",
"HasOptions": true
},
"Weather": {
"Name": "Weather",
"Description": "Weather notification",
"Icon": "status/weather-few-clouds.png"
},
"WindowList": {
"Name": "Window List",
"Description": "Toggle between open windows",
"Icon": "apps/xfwm4.png"
}
},
"path": "default/CoreWM",
"build": {},
"repo": "default"
},
"default/Draw": {
"className": "ApplicationDraw",
"name": "Draw",
"description": "Simple drawing application",
"names": {
"bg_BG": "Рисуване",
"de_DE": "Zeichnen",
"fr_FR": "Dessin",
"it_IT": "Disegna",
"ko_KR": "그림판",
"nl_NL": "Tekenen",
"no_NO": "Tegne",
"pl_PL": "Rysowanie",
"ru_RU": "Графический редактор",
"sk_SK": "Kreslenie",
"tr_TR": "Çiz",
"vi_VN": "Vẽ"
},
"descriptions": {
"bg_BG": "Приложение за рисуване",
"de_DE": "Einfaches Zeichen-Programm",
"fr_FR": "Programme de dessin simple",
"it_IT": "Semplice applicazione per creazione/modifica immagini",
"ko_KR": "간단한 그리기 응용 프로그램",
"nl_NL": "Eenvoudig tekenprogramma",
"no_NO": "Simpelt tegne-program",
"pl_PL": "Prosta aplikacja do rysowania",
"ru_RU": "Простой графический редактор",
"sk_SK": "Jednoduchá aplikácia na kreslenie",
"vi_VN": "Phần mềm vẽ đơn giản"
},
"mime": [
"^image"
],
"category": "graphics",
"icon": "categories/gnome-graphics.png",
"compability": [
"canvas"
],
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Draw",
"build": {},
"repo": "default"
},
"default/FileManager": {
"className": "ApplicationFileManager",
"name": "File Manager",
"description": "The default file manager",
"names": {
"bg_BG": "Файлов мениджър",
"de_DE": "Dateimanager",
"fr_FR": "Explorateur de fichier",
"it_IT": "Gestore File",
"nl_NL": "bestands beheer",
"no_NO": "Fil-håndtering",
"pl_PL": "Menedżer Plików",
"ko_KR": "파일 탐색기",
"sk_SK": "Správca súborov",
"ru_RU": "Файловый менеджер",
"tr_TR": "Dosya Yöneticisi",
"vi_VN": "Quản lí file"
},
"descriptions": {
"bg_BG": "Стандартния файлов мениджър",
"de_DE": "Standardmäßiger Dateimanager",
"fr_FR": "Gestionnaire de fichier par défaut",
"it_IT": "Il gestore file predefinito",
"nl_NL": "Standaard bestands beheerder",
"no_NO": "Standard Fil-håndtering program",
"pl_PL": "Domyślny Menedżer Plików",
"ko_KR": "기본 파일 관리자",
"sk_SK": "Štandardný správca súborov",
"ru_RU": "Стандартный файловый менеджер",
"tr_TR": "Varsayılan dosya yöneticisi",
"vi_VN": "Trình quản lí file mặc định"
},
"category": "utilities",
"icon": "apps/file-manager.png",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/FileManager",
"build": {},
"repo": "default"
},
"default/HTMLViewer": {
"className": "ApplicationHTMLViewer",
"name": "HTML Viewer",
"mime": [
"text\\/html"
],
"icon": "mimetypes/html.png",
"category": "utilities",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/HTMLViewer",
"build": {},
"repo": "default"
},
"default/MusicPlayer": {
"className": "ApplicationMusicPlayer",
"name": "Music Player",
"names": {
"bg_BG": "Музикален плеър",
"de_DE": "Musikspieler",
"es_ES": "Music Player",
"fr_FR": "Lecteur de musique",
"it_IT": "Lettore Musicale",
"ko_KR": "뮤직 플레이어",
"nl_NL": "Audio speler",
"no_NO": "Musikkspiller",
"pl_PL": "Odtwarzacz muzyki",
"ru_RU": "Аудиоплеер",
"sk_SK": "Prehrávač hudby",
"tr_TR": "Muzik Çalar",
"vi_VN": "Nghe nhạc"
},
"mime": [
"^audio",
"osjs\\/playlist"
],
"category": "multimedia",
"icon": "status/audio-volume-high.png",
"singular": true,
"compability": [
"audio"
],
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/MusicPlayer",
"build": {},
"repo": "default"
},
"default/Preview": {
"className": "ApplicationPreview",
"name": "Preview",
"description": "Preview image files",
"names": {
"bg_BG": "Преглед на изображения",
"de_DE": "Vorschau",
"fr_FR": "Visionneuse",
"it_IT": "Anteprima Immagini",
"ko_KR": "미리보기",
"nl_NL": "Foto viewer",
"no_NO": "Forhåndsviser",
"pl_PL": "Podgląd",
"ru_RU": "Просмотрщик",
"sk_SK": "Prehliadač obrázkov",
"tr_TR": "Önizle",
"vi_VN": "Trình xem ảnh"
},
"descriptions": {
"bg_BG": "Преглед на изображения",
"de_DE": "Bildervorschau",
"fr_FR": "Visionneuse de photos",
"it_IT": "Anteprima Immagini",
"ko_KR": "이미지 파일을 미리 봅니다",
"nl_NL": "Foto viewer",
"no_NO": "Forhåndsvisning av bilde-filer",
"pl_PL": "Podgląd zdjęć",
"ru_RU": "Просмотрщик изображений",
"sk_SK": "Prehliadač obrázkov",
"tr_TR": "resim dosyalarını önizle",
"vi_VN": "Trình xem ảnh"
},
"mime": [
"^image",
"^video"
],
"category": "multimedia",
"icon": "mimetypes/image.png",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Preview",
"build": {},
"repo": "default"
},
"default/ProcessViewer": {
"className": "ApplicationProcessViewer",
"name": "Process Viewer",
"description": "View running processes",
"names": {
"bg_BG": "Процеси",
"de_DE": "Prozess-Manager",
"fr_FR": "Gestionnaire de processus",
"it_IT": "Gestore Attività",
"ko_KR": "프로세스 관리자",
"nl_NL": "Proces manager",
"no_NO": "Prosess oversikt",
"pl_PL": "Procesy",
"ru_RU": "Менеджер процессов",
"sk_SK": "Správca procesov",
"tr_TR": "İşlemleri Görüntüle",
"vi_VN": "Xem tiến trình"
},
"descriptions": {
"bg_BG": "Преглед на процеси",
"de_DE": "Laufende Prozesse verwalten",
"fr_FR": "Visualiser les processus en cours",
"it_IT": "Mostri processi attivi",
"ko_KR": "실행 중인 프로세스를 관리합니다",
"nl_NL": "Bekijk de lopende processen",
"no_NO": "Se oversikt over kjørende prosesser",
"pl_PL": "Zobacz działające procesy",
"ru_RU": "Менеджер запущенных процессов",
"sk_SK": "Spravovanie bežiacich procesov",
"tr_TR": "çalışan işlemleri görüntüle",
"vi_VN": "Xem các tiến trình đang chạy"
},
"singular": true,
"category": "system",
"icon": "apps/gnome-monitor.png",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/ProcessViewer",
"build": {},
"repo": "default"
},
"default/Settings": {
"className": "ApplicationSettings",
"preloadParallel": true,
"name": "Settings",
"mime": null,
"icon": "categories/applications-system.png",
"category": "system",
"singular": true,
"names": {
"bg_BG": "Настройки",
"de_DE": "Einstellungen",
"es_ES": "Settings",
"fr_FR": "Paramètres",
"it_IT": "Settaggi",
"ko_KR": "환경설정",
"nl_NL": "Instellingen",
"no_NO": "Instillinger",
"pl_PL": "Ustawienia",
"ru_RU": "Настройки",
"sk_SK": "Nastavenia",
"tr_TR": "Ayarlar",
"vi_VN": "Cài đặt"
},
"descriptions": {
"bg_BG": "Настройки",
"de_DE": "Einstellungen",
"es_ES": "Settings",
"fr_FR": "Paramètres",
"it_IT": "Settaggi",
"ko_KR": "환경설정",
"nl_NL": "Instellingen",
"no_NO": "Instillinger",
"pl_PL": "Ustawienia",
"ru_RU": "Настройки",
"sk_SK": "Nastavenia",
"tr_TR": "Program Ayarlarını düzenle",
"vi_VN": "Cài đặt"
},
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Settings",
"build": {},
"repo": "default"
},
"default/Textpad": {
"className": "ApplicationTextpad",
"name": "Textpad",
"description": "Simple text editor",
"names": {
"bg_BG": "Текстов редактор",
"de_DE": "Texteditor",
"fr_FR": "Éditeur de texte",
"it_IT": "Editor Testi",
"ko_KR": "텍스트패드",
"nl_NL": "Notities",
"no_NO": "Tekstblokk",
"pl_PL": "Notatnik",
"ru_RU": "Редактор текста",
"sk_SK": "Poznámkový blok",
"tr_TR": "Basit Bir Metin Düzenleyicisi",
"vi_VN": "Trình sửa văn bản"
},
"descriptions": {
"bg_BG": "Стандартен текстов редактор",
"de_DE": "Einfacher Texteditor",
"fr_FR": "Éditeur de texte simple",
"it_IT": "Semplice editor di testi",
"ko_KR": "간단한 텍스트 편집기",
"nl_NL": "Eenvoudige Tekstverwerker",
"no_NO": "Simpel tekst redigering",
"pl_PL": "Prosty edytor tekstu",
"ru_RU": "Простой текстовый редактор",
"sk_SK": "Jednoduchý textový editor",
"tr_TR": "Basit Bir Metin Düzenleyicisi",
"vi_VN": "Trình sửa văn bản đơn giản"
},
"mime": [
"^text",
"inode\\/x\\-empty",
"application\\/x\\-empty",
"application\\/x\\-lua",
"application\\/x\\-python",
"application\\/javascript",
"application\\/json"
],
"category": "utilities",
"icon": "apps/accessories-text-editor.png",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Textpad",
"build": {},
"repo": "default"
},
"default/Writer": {
"className": "ApplicationWriter",
"name": "Writer",
"description": "Write rich text documents",
"names": {
"bg_BG": "Текст",
"de_DE": "Writer",
"fr_FR": "Traitement de texte",
"it_IT": "Editor Testi",
"ko_KR": "글쓰기",
"nl_NL": "Tekstverwerker",
"no_NO": "Writer",
"pl_PL": "Writer",
"ru_RU": "Текстовый процессор",
"sk_SK": "Writer",
"tr_TR": "Writer",
"vi_VN": "Viết"
},
"descriptions": {
"bg_BG": "Писанене на обогатен текст",
"de_DE": "Verfassen Sie Rich-Text-Dokumente",
"fr_FR": "Traitement de texte riche",
"it_IT": "Scrivi documenti di testo formattati",
"ko_KR": "리치 텍스트 문서 작성",
"nl_NL": "Tekst verwerker met opmaak",
"no_NO": "Skriv riktekst dokumenter",
"pl_PL": "Twórz dokumenty rich text",
"ru_RU": "Текстовый процессор",
"sk_SK": "Editor na tvorbu Rich-Text dokumentov",
"tr_TR": "Gelişmiş dökümanlar oluşturun",
"vi_VN": "Xem, chỉnh sửa văn bản"
},
"mime": [
"^text",
"osjs\\/document"
],
"category": "office",
"icon": "apps/libreoffice34-writer.png",
"compability": [
"richtext"
],
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Writer",
"build": {},
"repo": "default"
}
});
};
})();

0
build/htdocs/dist/packages/.gitignore vendored Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,44 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2015, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
.ApplicationAboutWindow application-window-content {
background-color : #fff;
color : #000;
text-align : center;
}
.ApplicationAboutWindow application-window-content > div > div {
padding : 10px;
}
.ApplicationAboutWindow h1 {
margin : 0;
padding : 10px;
font-size : 40px;
}

View File

@ -0,0 +1,85 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, VFS, GUI) {
'use strict';
/////////////////////////////////////////////////////////////////////////////
// WINDOWS
/////////////////////////////////////////////////////////////////////////////
function ApplicationAboutWindow(app, metadata, scheme) {
Window.apply(this, ['ApplicationAboutWindow', {
icon: metadata.icon,
title: metadata.name,
gravity: 'center',
allow_resize: false,
allow_maximize: false,
width: 320,
height: 320,
min_width: 320,
min_height: 320
}, app, scheme]);
}
ApplicationAboutWindow.prototype = Object.create(Window.prototype);
ApplicationAboutWindow.constructor = Window.prototype;
ApplicationAboutWindow.prototype.init = function(wm, app, scheme) {
var root = Window.prototype.init.apply(this, arguments);
scheme.render(this, 'AboutWindow', root);
root.getElementsByTagName('img')[0].src = API.getApplicationResource(app, 'about.png');
return root;
};
/////////////////////////////////////////////////////////////////////////////
// APPLICATION
/////////////////////////////////////////////////////////////////////////////
var ApplicationAbout = function(args, metadata) {
Application.apply(this, ['ApplicationAbout', args, metadata]);
};
ApplicationAbout.prototype = Object.create(Application.prototype);
ApplicationAbout.constructor = Application;
ApplicationAbout.prototype.init = function(settings, metadata, scheme) {
Application.prototype.init.apply(this, arguments);
this._addWindow(new ApplicationAboutWindow(this, metadata, scheme));
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationAbout = OSjs.Applications.ApplicationAbout || {};
OSjs.Applications.ApplicationAbout.Class = Object.seal(ApplicationAbout);
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);

View File

@ -0,0 +1,54 @@
{
"className": "ApplicationAbout",
"name": "About OS.js",
"description": "About OS.js",
"names": {
"bg_BG": " За OS.js",
"de_DE": "Über OS.js",
"fr_FR": "À propos d'OS.js",
"it_IT": "Informazioni su OS.js",
"ko_KR": "OS.js에 대하여",
"nl_NL": "Over OS.js",
"no_NO": "Om OS.js",
"pl_PL": "o OS.js",
"ru_RU": "Об OS.js",
"sk_SK": "o OS.js",
"tr_TR": "hakkında OS.js",
"vi_VN": "Thông tin về OS.js"
},
"descriptions": {
"bg_BG": "За OS.js",
"de_DE": "Über OS.js",
"fr_FR": "À propos d'OS.js",
"it_IT": "Informazioni su OS.js",
"ko_KR": "OS.js에 대하여",
"nl_NL": "Over OS.js",
"no_NO": "Om OS.js",
"pl_PL": "o OS.js",
"ru_RU": "Об OS.js",
"sk_SK": "o OS.js",
"tr_TR": "hakkında OS.js",
"vi_VN": "Thông tin về OS.js"
},
"singular": true,
"category": "system",
"icon": "apps/help-browser.png",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/About",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,20 @@
<application-window data-id="AboutWindow">
<div>
<h1>OS.js</h1>
<div>
Created by<br />
<a href="http://andersevenrud.github.io" target="_blank">Anders Evenrud</a>
</div>
<div>
<img alt="" src="" />
</div>
<div>
<a href="https://os.js.org/" target="_blank">Official Homepage</a>
</div>
</div>
</application-window>

View File

@ -0,0 +1,11 @@
<?php
class BroadwayAPIHandler {
public static function broadway(Array $arguments) {
return Array(false, false);
}
}
API::AddHandler('broadway', Array('BroadwayAPIHandler', 'broadway'));
?>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,19 @@
/*.Window_BroadwayConnectionWindow .WindowWrapper {
}
.Window_BroadwayConnectionWindow .WindowWrapper {
}*/
.Window_BroadwayConnectionWindow .WindowWrapper .supported {
color : #33dd33;
}
.Window_BroadwayConnectionWindow .WindowWrapper .unsupported {
color : #dd3333;
}
.Window_BroadwayConnectionWindow .WindowWrapper > * {
margin : 10px;
}

View File

@ -0,0 +1,459 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Window, Utils, API, GUI) {
'use strict';
var _isConnected = false;
var _connWindow = null;
var _scheme = null;
function createConnectionWindow() {
if ( _connWindow ) { return; }
function addWindow() {
var wm = OSjs.Core.getWindowManager();
if ( wm ) {
_connWindow = new BroadwayConnectionWindow(_scheme);
wm.addWindow(_connWindow, true);
}
}
if ( _scheme ) {
addWindow();
return;
}
var url = API.getApplicationResource('ExtensionBroadway', 'scheme.html');
var scheme = GUI.createScheme(url);
scheme.load(function(error, result) {
if ( result ) {
_scheme = scheme;
addWindow();
}
});
}
function destroyConnectionWindow() {
if ( _connWindow ) {
_connWindow._close();
_connWindow = null;
}
}
function createNotification() {
var wm = OSjs.Core.getWindowManager();
function displayMenu(ev) {
var menuItems = [];
if ( _isConnected ) {
menuItems.push({
title: 'Disconnect from Broadway server',
onClick: function() {
window.GTK.disconnect();
}
});
} else {
menuItems.push({
title: 'Connect to Broadway server',
onClick: function() {
createConnectionWindow();
}
});
}
OSjs.API.createMenu(menuItems, ev);
}
if ( wm ) {
removeNotification();
wm.createNotificationIcon('BroadwayService', {
image: API.getIcon('status/network-transmit-receive.png'),
onContextMenu: function(ev) {
displayMenu(ev);
return false;
},
onClick: function(ev) {
displayMenu(ev);
return false;
}
});
}
}
function removeNotification() {
var wm = OSjs.Core.getWindowManager();
if ( wm ) {
wm.removeNotificationIcon('BroadwayService');
}
}
function actionOnWindow(id, cb) {
var wm = OSjs.Core.getWindowManager();
if ( wm ) {
var win = wm.getWindow('BroadwayWindow' + id);
if ( win ) {
return cb(win);
}
}
return null;
}
/////////////////////////////////////////////////////////////////////////////
// CLIENT WINDOW
/////////////////////////////////////////////////////////////////////////////
/**
* Main Window Constructor
*/
var BroadwayConnectionWindow = function(scheme) {
Window.apply(this, ['BroadwayConnectionWindow', {
title: 'Broadway Client',
allow_maximize: false,
allow_reszie: false,
gravity: 'center',
width: 400,
height: 250
}, null, scheme]);
};
BroadwayConnectionWindow.prototype = Object.create(Window.prototype);
BroadwayConnectionWindow.prototype.init = function(wm, app, scheme) {
var root = Window.prototype.init.apply(this, arguments);
var self = this;
var supported = OSjs.Helpers.Broadway ? true : false;
var lbl = 'Broadway support is ' + (supported ? 'loaded' : 'not loaded');
var ws;
scheme.render(this, 'ConnectionWindow', root);
var connectInput = scheme.find(this, 'GtkConnection').set('disabled', !supported);
var procConnection = scheme.find(this, 'ProcConnection').set('disabled', !supported);
var connectButton = scheme.find(this, 'ConnectButton').set('disabled', !supported);
var procInput = scheme.find(this, 'StartProc').set('disabled', true);
var procButton = scheme.find(this, 'StartButton').set('disabled', true);
var statusText = scheme.find(this, 'StatusText').set('value', lbl);
connectButton.on('click', function() {
if ( self._destroyed ) { return; }
if ( ws ) {
ws.close();
ws = null;
}
ws = new WebSocket(procConnection.get('value'), 'broadway-spawner');
ws.onerror = function() {
alert('Failed to connect to spawner');
};
ws.onopen = function() {
if ( self._destroyed ) { return; }
procButton.set('disabled', false);
};
ws.onclose = function() {
if ( self._destroyed ) { return; }
procButton.set('disabled', true);
};
connectButton.set('disabled', true);
statusText.set('value', 'Connecting...');
OSjs.Helpers.Broadway.init(connectInput.get('value'), function(error) {
if ( self._destroyed ) { return; }
if ( error ) {
console.warn('BroadwayClient', error);
statusText.set('value', error);
connectButton.set('disabled', false);
} else {
procInput.set('disabled', false);
connectButton.set('disabled', true);
statusText.set('value', 'Connected!');
}
}, function() {
if ( self._destroyed ) { return; }
statusText.set('value', 'Disconnecting...');
connectButton.set('disabled', false);
procInput.set('disabled', true);
if ( ws ) {
ws.close();
ws = null;
}
});
});
procButton.on('click', function() {
if ( self._destroyed ) { return; }
if ( ws ) {
ws.send(JSON.stringify({
method: 'launch',
argument: procInput.get('value')
}));
}
});
return root;
};
BroadwayConnectionWindow.prototype.destroy = function() {
_connWindow = null;
return Window.prototype.destroy.apply(this, arguments);
};
/////////////////////////////////////////////////////////////////////////////
// BROADWAY WINDOW
/////////////////////////////////////////////////////////////////////////////
/**
* Dialog Window
*/
var BroadwayWindow = function(id, x, y, w, h) {
Window.apply(this, ['BroadwayWindow' + id, {
w: w,
h: h,
title: 'Broadway Window ' + id.toString(),
min_width: 100,
min_height: 100,
allow_resize: false,
allow_minimize: false,
allow_maximize: false,
allow_session: false,
key_capture: true // IMPORTANT
}]);
this._broadwayId = id;
this._canvas = document.createElement('canvas');
};
BroadwayWindow.prototype = Object.create(Window.prototype);
BroadwayWindow.prototype.init = function() {
var self = this;
var root = Window.prototype.init.apply(this, arguments);
this._canvas.width = this._dimension.w;
this._canvas.height = this._dimension.h;
function getMousePos(ev) {
return {
x:ev.pageX - self._position.x,
y:ev.pageY - self._position.y - 26 // FIXME
};
}
function inject(type, ev) {
var pos = getMousePos(ev);
return window.GTK.inject(self._broadwayId, type, ev, {
wx: self._position.x,
wy: self._position.y,
mx: parseInt(pos.x, 0),
my: parseInt(pos.y, 0)
});
}
Utils.$bind(root, 'mouseover', function(ev) {
return inject('mouseover', ev);
});
Utils.$bind(root, 'mouseout', function(ev) {
return inject('mouseout', ev);
});
Utils.$bind(root, 'mousemove', function(ev) {
return inject('mousemove', ev);
});
Utils.$bind(root, 'mousedown', function(ev) {
return inject('mousedown', ev);
});
Utils.$bind(root, 'mouseup', function(ev) {
return inject('mouseup', ev);
});
Utils.$bind(root, 'DOMMouseScroll', function(ev) {
return inject('mousewheel', ev);
});
Utils.$bind(root, 'mousewheel', function(ev) {
return inject('mousewheel', ev);
});
root.appendChild(this._canvas);
return root;
};
BroadwayWindow.prototype.destroy = function() {
Window.prototype.destroy.apply(this, arguments);
this._canvas = null;
};
BroadwayWindow.prototype._inited = function() {
Window.prototype._inited.apply(this, arguments);
this._onChange('move', true);
};
BroadwayWindow.prototype._close = function() {
if ( !Window.prototype._close.apply(this, arguments) ) {
return false;
}
window.GTK.close(this._broadwayId);
return true;
};
BroadwayWindow.prototype._resize = function(w, h) {
if ( !Window.prototype._resize.apply(this, [w, h, true]) ) {
return false;
}
function resizeCanvas(canvas, w, h) {
var tmpCanvas = canvas.ownerDocument.createElement("canvas");
tmpCanvas.width = canvas.width;
tmpCanvas.height = canvas.height;
var tmpContext = tmpCanvas.getContext("2d");
tmpContext.globalCompositeOperation = "copy";
tmpContext.drawImage(canvas, 0, 0, tmpCanvas.width, tmpCanvas.height);
canvas.width = w;
canvas.height = h;
var context = canvas.getContext("2d");
context.globalCompositeOperation = "copy";
context.drawImage(tmpCanvas, 0, 0, tmpCanvas.width, tmpCanvas.height);
}
if ( this._canvas ) {
resizeCanvas(this._canvas, w, h);
}
return true;
};
BroadwayWindow.prototype._onKeyEvent = function(ev, type) {
window.GTK.inject(this._broadwayId, type, ev);
};
BroadwayWindow.prototype._onChange = function(ev, byUser) {
if ( !byUser ) { return; }
if ( ev === 'move' ) {
window.GTK.move(this._broadwayId, this._position.x, this._position.y);
} else if ( ev === 'resize' ) {
window.GTK.resize(this._broadwayId, this._dimension.w, this._dimension.h);
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.API.addHook('onSessionLoaded', function() {
createNotification();
});
OSjs.API.addHook('onLogout', function() {
removeNotification();
destroyConnectionWindow();
});
OSjs.Helpers.Broadway = {};
OSjs.Helpers.Broadway.init = function(host, cb, cbclose) {
window.GTK.connect(host, {
onSocketOpen: function() {
_isConnected = true;
createNotification();
},
onSocketClose: function() {
_isConnected = false;
createNotification();
},
onSetTransient: function(id, parentId, surface) {
return actionOnWindow(parentId, function(win) {
if ( win._canvas && surface.canvas ) {
if ( win._canvas.parentNode ) {
win._canvas.parentNode.appendChild(surface.canvas);
}
}
});
},
onFlushSurface: function(id, q) {
return actionOnWindow(id, function(win) {
return win._canvas;
});
},
onDeleteSurface: function(id) {
return actionOnWindow(id, function(win) {
return win._close();
});
},
onShowSurface: function(id) {
return actionOnWindow(id, function(win) {
return win._restore();
});
},
onHideSurface: function(id) {
return actionOnWindow(id, function(win) {
return win._minimize();
});
},
onMoveSurface: function(id, has_pos, has_size, surface) {
return actionOnWindow(id, function(win) {
/*
if ( has_pos ) {
win._move(x, y);
}
*/
if ( has_size ) {
win._resize(surface.width, surface.height);
}
});
},
onCreateSurface: function(id, surface) {
var wm = OSjs.Core.getWindowManager();
var win = new BroadwayWindow(id, surface.x, surface.y, surface.width, surface.height);
wm.addWindow(win);
return win._canvas;
}
}, cb, cbclose);
};
})(OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.GUI);

View File

@ -0,0 +1,33 @@
{
"className": "ExtensionBroadway",
"type": "extension",
"enabled": false,
"config": {},
"build": {
"copy": [
"scheme.html",
"metadata.json",
"broadway.js",
"extension.js",
"extension.css",
"api.php"
]
},
"sources": [
{
"type": "javascript",
"src": "packages/default/Broadway/broadway.js"
},
{
"type": "stylesheet",
"src": "packages/default/Broadway/extension.css"
},
{
"type": "javascript",
"src": "packages/default/Broadway/extension.js"
}
],
"path": "default/Broadway",
"repo": "default",
"preload": []
}

View File

@ -0,0 +1,35 @@
<application-window data-id="ConnectionWindow">
<gui-vbox>
<gui-vbox-container data-grow="0" data-shrink="0" data-basis="auto" data-expand="true">
<gui-label>Start new process</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="0" data-basis="auto" data-expand="true">
<gui-text data-id="GtkConnection">ws://10.0.0.113:8085/socket-bin</gui-text>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="0" data-basis="auto" data-expand="true">
<gui-text data-id="ProcConnection">ws://10.0.0.113:9000</gui-text>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="0" data-basis="auto" data-expand="true">
<gui-button data-id="ConnectButton">Connect</gui-button>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="0" data-basis="auto" data-expand="true">
<gui-label>Start new process</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="0" data-basis="auto" data-expand="true">
<gui-text data-id="StartProc">/usr/bin/gtk3-demo</gui-text>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="0" data-basis="auto" data-expand="true">
<gui-button data-id="StartButton">Launch</gui-button>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto" data-expand="true">
<gui-statusbar data-id="Statusbar">
<gui-label data-id="StatusText">Checking broadway support...</gui-label>
</gui-statusbar>
</gui-vbox-container>
</gui-vbox>
</application-window>

View File

@ -0,0 +1,142 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2015, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
/*.ApplicationCalculatorWindow {
}*/
.ApplicationCalculatorWindow gui-text {
display : block;
margin : 8px;
height : 50px;
}
.ApplicationCalculatorWindow gui-text > input {
font-size : 30px;
font-family : Monospace;
line-height : 50px;
text-align : right;
}
.ApplicationCalculatorWindow.noop {
opacity : .1;
}
.ApplicationCalculatorWindow.NaN {
-webkit-animation:CalculatorSuck 3s linear;
-moz-animation:CalculatorSuck 3s linear;
-ms-animation:CalculatorSuck 3s linear;
-o-animation:CalculatorSuck 3s linear;
animation:CalculatorSuck 3s linear;
}
@-webkit-keyframes CalculatorSuck {
100% {
-webkit-transform: scale(0) rotate(360deg);
transform: scale(0) rotate(360deg);
-webkit-opacity: 0;
}
50% {
-webkit-transform: scale(.5) rotate(180deg);
transform: scale(.5) rotate(180deg);
}
10% {
-webkit-transform: scale(1.5) rotate(0deg);
transform: scale(1.5) rotate(0deg);
}
0% {
-webkit-opacity: 1;
}
}
@-moz-keyframes CalculatorSuck {
100% {
-moz-transform: scale(0) rotate(360deg);
transform: scale(0) rotate(360deg);
-moz-opacity: 0;
}
50% {
-moz-transform: scale(.5) rotate(180deg);
transform: scale(.5) rotate(180deg);
}
10% {
-moz-transform: scale(1.5) rotate(0deg);
transform: scale(1.5) rotate(0deg);
}
0% {
-moz-opacity: 1;
}
}
@-o-keyframes CalculatorSuck {
100% {
-o-transform: scale(0) rotate(360deg);
transform: scale(0) rotate(360deg);
-o-opacity: 0;
}
50% {
-o-transform: scale(.5) rotate(180deg);
transform: scale(.5) rotate(180deg);
}
10% {
-o-transform: scale(1.5) rotate(0deg);
transform: scale(1.5) rotate(0deg);
}
0% {
-o-opacity: 1;
}
}
@keyframes CalculatorSuck {
100% {
transform: scale(0) rotate(360deg);
opacity: 0;
}
50% {
transform: scale(.5) rotate(180deg);
}
10% {
transform: scale(1.5) rotate(0deg);
}
0% {
opacity: 1;
}
}

View File

@ -0,0 +1,256 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, VFS, GUI) {
/*eslint eqeqeq: "off"*/
'use strict';
var ops = {
dec : '.',
perc : '%',
minus : '-',
plus : '+',
multiply : '*',
divide : '/'
};
var keys = {
107: 'plus',
109: 'minus',
106: 'multiply',
111: 'divide',
110: 'dec',
188: 'dec',
13: 'equal',
47: 'divide',
46: 'CE',
45: 'minus',
44: 'dec',
43: 'plus',
42: 'multiply',
27: 'CE',
8: 'nbs'
};
var labels = {
'CE' : 'CE', 'AC' : 'AC', 'perc' : '%', 'plus' : '+',
'7' : '7', '8' : '8', '9' : '9', 'minus' : '-',
'4' : '4', '5' : '5', '6' : '6', 'multiply' : 'x',
'1' : '1', '2' : '2', '3' : '3', 'divide' : '÷',
'0' : '0', 'swap': '±', 'dec' : ',', 'equal' : '='
};
var buttons = [
['CE', 'AC', 'perc', 'plus'],
['7', '8', '9', 'minus'],
['4', '5', '6', 'multiply'],
['1', '2', '3', 'divide'],
['0', 'dec', 'equal']
];
/////////////////////////////////////////////////////////////////////////////
// WINDOWS
/////////////////////////////////////////////////////////////////////////////
function ApplicationCalculatorWindow(app, metadata, scheme) {
Window.apply(this, ['ApplicationCalculatorWindow', {
icon: metadata.icon,
title: metadata.name,
allow_resize: false,
allow_maximize: false,
width: 220,
height: 340
}, app, scheme]);
this.total = 0;
this.entries = [];
this.temp = '';
}
ApplicationCalculatorWindow.prototype = Object.create(Window.prototype);
ApplicationCalculatorWindow.constructor = Window.prototype;
ApplicationCalculatorWindow.prototype.init = function(wm, app, scheme) {
var root = Window.prototype.init.apply(this, arguments);
var self = this;
// Load and gel.set up scheme (GUI) here
scheme.render(this, 'CalculatorWindow', root);
this._scheme.find(this, 'Output').on('keypress', function(ev) {
ev.stopPropagation();
ev.preventDefault();
var keyCode = ev.which || ev.keyCode;
if ( (keyCode > 95) && (keyCode < 106) ) {
self.operation(keyCode - 96);
} else if ( (keyCode > 47) && (keyCode < 58) ) {
self.operation(keyCode - 48);
} else {
if ( typeof keys[keyCode] !== 'undefined' ) {
self.operation(keys[keyCode]);
}
}
}).set('readonly', true).focus();
root.querySelectorAll('gui-button').forEach(function(el, idx) {
var r = parseInt(idx / 4, 10);
var c = idx % 4;
var op = buttons[r][c];
el = scheme.get(el);
el.set('value', labels[op] || '');
if ( op === null ) {
Utils.$addClass(el.$element, 'noop');
el.set('disabled', true);
} else {
el.on('click', function() {
self.operation(op);
});
}
});
return root;
};
ApplicationCalculatorWindow.prototype.operation = function(val) {
var self = this;
if (this.temp == '' && ['plus', 'minus', 'multiply', 'divide'].indexOf(val) !== -1) {
this.temp = this._scheme.find(this, 'Output').get('value');
}
function getAnswer() {
var nt = Number(self.entries[0]);
for ( var i = 1; i < self.entries.length; i++ ) {
var nextNum = Number(self.entries[i + 1]);
var symbol = self.entries[i];
if (symbol === '+') {
nt += nextNum;
} else if ( symbol === '-' ) {
nt -= nextNum;
} else if ( symbol === '*' ) {
nt *= nextNum;
} else if ( symbol === '/' ) {
nt /= nextNum;
}
i++;
}
if ( nt < 0 ) {
nt = '-' + Math.abs(nt);
}
return nt;
}
var output = (function() {
// Kudos http://codepen.io/GeoffStorbeck/pen/zxgaqw
if ( !isNaN(val) || val === 'dec' ) { // Number
self.temp += val === 'dec' ? ops[val] : val;
return self.temp.substring(0,10);
} else if ( val === 'AC' ) { // Clear
self.entries = [];
self.temp = '';
self.total = 0;
return '';
} else if ( val === 'CE' ) { // Clear Last Entry
self.temp = '';
return '';
} else if ( val === 'equal' ) { // Equal
self.entries.push(self.temp);
var nt = getAnswer();
self.entries = [];
self.temp = '';
return nt;
} else {
if ( typeof ops[val] !== 'undefined' ) {
val = ops[val];
}
self.entries.push(self.temp);
self.entries.push(val);
self.temp = '';
}
return null;
})();
if ( output !== null ) {
if ( !String(output).length ) {
output = String(0);
}
if ( output === 'NaN' || output === 'Infinity' || isNaN(output) || !isFinite(output) ) {
Utils.$addClass(this._$element, 'NaN');
setTimeout(function() {
Utils.$removeClass(self._$element, 'NaN');
}, 3000);
}
this._scheme.find(this, 'Output').set('value', String(output));
}
this._scheme.find(this, 'Output').focus();
};
/////////////////////////////////////////////////////////////////////////////
// APPLICATION
/////////////////////////////////////////////////////////////////////////////
var ApplicationCalculator = function(args, metadata) {
Application.apply(this, ['ApplicationCalculator', args, metadata]);
};
ApplicationCalculator.prototype = Object.create(Application.prototype);
ApplicationCalculator.constructor = Application;
ApplicationCalculator.prototype.init = function(settings, metadata, scheme) {
Application.prototype.init.apply(this, arguments);
this._addWindow(new ApplicationCalculatorWindow(this, metadata, scheme));
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationCalculator = OSjs.Applications.ApplicationCalculator || {};
OSjs.Applications.ApplicationCalculator.Class = Object.seal(ApplicationCalculator);
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);

View File

@ -0,0 +1,37 @@
{
"className": "ApplicationCalculator",
"name": "Calculator",
"names": {
"bg_Bg": "Клакулатор",
"fr_FR": "Calculatrice",
"it_IT": "Calcolatrice",
"ko_KR": "계산기",
"nl_NL": "Rekenmachine",
"no_NO": "Kalkulator",
"pl_PL": "Kalkulator",
"ru_RU": "Калькулятор",
"sk_SK": "Kalkulačka",
"tr_TR": "Hesap Makinesi",
"vi_VN": "Máy tính"
},
"icon": "apps/calc.png",
"category": "office",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Calculator",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,87 @@
<application-window data-id="CalculatorWindow">
<gui-vbox>
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-text data-id="Output">0</gui-text>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-shrink="0" data-basis="auto" data-fill="true">
<gui-grid>
<gui-grid-row>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
</gui-grid-row>
<gui-grid-row>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
</gui-grid-row>
<gui-grid-row>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
</gui-grid-row>
<gui-grid-row>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
</gui-grid-row>
<gui-grid-row>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry>
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
<gui-grid-entry style="flex:2 0 auto;">
<gui-button data-id="ButtonX">X</gui-button>
</gui-grid-entry>
</gui-grid-row>
</gui-grid>
</gui-vbox-container>
</gui-vbox>
</application-window>

View File

@ -0,0 +1,225 @@
/* Animations */
@-webkit-keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
@-moz-keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
@-o-keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
@keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
@-webkit-keyframes fadeOut { from { opacity:1; } to { opacity:0; } }
@-moz-keyframes fadeOut { from { opacity:1; } to { opacity:0; } }
@-o-keyframes fadeOut { from { opacity:1; } to { opacity:0; } }
@keyframes fadeOut { from { opacity:1; } to { opacity:0; } }
@-webkit-keyframes windowloadinganim {
to {
-webkit-transform: rotate( 180deg );
}
}
@-moz-keyframes windowloadinganim {
to {
-moz-transform: rotate( 180deg );
}
}
@-o-keyframes windowloadinganim {
to {
-o-transform: rotate( 180deg );
}
}
@keyframes windowloadinganim {
to {
transform: rotate( 180deg );
}
}
@-webkit-keyframes show {
50% { -webkit-transform: scale(1.03); }
}
@-moz-keyframes show {
50% { -moz-transform: scale(1.03); }
}
@keyframes show {
50% { transform: scale(1.03); }
}
@-webkit-keyframes hide {
50% { -webkit-transform: scale(0.97); }
100% { opacity: 0; -webkit-transform: scale(0.90); }
}
@-moz-keyframes hide {
50% { -moz-transform: scale(0.97); }
100% { opacity: 0; -moz-transform: scale(0.90); }
}
@keyframes hide {
50% { transform: scale(0.97); }
100% { opacity: 0; transform: scale(0.90); }
}
@-webkit-keyframes pulse {
0% {-webkit-transform: scale(0.95); opacity: 0;}
8% {-webkit-transform: scale(1.0); opacity: 0;}
15% {-webkit-transform: scale(1.001); opacity: 1;}
30% {-webkit-transform: scale(1.005); opacity: 1;}
100% {opacity: 0; -webkit-transform: scale(1);}
}
@-moz-keyframes pulse {
0% {-moz-transform: scale(0.95); opacity: 0;}
8% {-moz-transform: scale(1.0); opacity: 0;}
15% {-moz-transform: scale(1.001); opacity: 1;}
30% {-moz-transform: scale(1.005); opacity: 1;}
100% {opacity: 0; -moz-transform: scale(1);}
}
@keyframes pulse {
0% {transform: scale(0.95); opacity: 0;}
8% {transform: scale(1.0); opacity: 0;}
15% {transform: scale(1.001); opacity: 1;}
30% {transform: scale(1.005); opacity: 1;}
100% {opacity: 0; transform: scale(1);}
}
@-webkit-keyframes pulseback {
50% { opacity: .35; }
}
@-moz-keyframes pulseback {
50% { opacity: .35; }
}
@keyframes pulseback {
50% { opacity: .35; }
}
@-webkit-keyframes attention {
0% { -webkit-transform: scale(1); }
30% { -webkit-transform: scale(1); }
40% { -webkit-transform: scale(1.02); }
50% { -webkit-transform: scale(1); }
60% { -webkit-transform: scale(1); }
70% { -webkit-transform: scale(1.005); }
80% { -webkit-transform: scale(1); }
100% { -webkit-transform: scale(1); }
}
@-moz-keyframes attention {
0% { -moz-transform: scale(1); }
30% { -moz-transform: scale(1); }
40% { -moz-transform: scale(1.02); }
50% { -moz-transform: scale(1); }
60% { -moz-transform: scale(1); }
70% { -moz-transform: scale(1.005); }
80% { -moz-transform: scale(1); }
100% { -moz-transform: scale(1); }
}
@keyframes attention {
0% { transform: scale(1); }
30% { transform: scale(1); }
40% { transform: scale(1.02); }
50% { transform: scale(1); }
60% { transform: scale(1); }
70% { transform: scale(1.005); }
80% { transform: scale(1); }
100% { transform: scale(1); }
}
/* Windows */
application-window {
-webkit-animation: show .3s;
-moz-animation: show .3s;
-ms-animation: show .3s;
animation: show .3s;
-webkit-transition: height 0.3s ease-in-out, width 0.3s, top 0.3s, left 0.3s;
-moz-transition: height 0.3s ease-in-out, width 0.3s, top 0.3s, left 0.3s;
-ms-transition: height 0.3s ease-in-out, width 0.3s, top 0.3s, left 0.3s;
-o-transition: height 0.3s ease-in-out, width 0.3s, top 0.3s, left 0.3s;
transition: height 0.3s ease-in-out, width 0.3s, top 0.3s, left 0.3s;
}
application-window[data-hint="resizing"],
application-window[data-hint="moving"] {
-webkit-transition: none;
-moz-transition: none;
-ms-transition: none;
-o-transition: none;
transition: none;
}
application-window[data-hint="closing"],
application-window[data-minimized="true"] {
-webkit-animation: hide .3s;
-moz-animation: hide .3s;
-ms-animation: hide .3s;
animation: hide .3s;
-webkit-animation-fill-mode: forwards;
-moz-animation-fill-mode: forwards;
-ms-animation-fill-mode: forwards;
-o-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
.WindowDropRect {
-webkit-animation: pulse 2s linear infinite;
-moz-animation: pulse 2s linear infinite;
-ms-animation: pulse 2s linear infinite;
animation: pulse 2s linear infinite;
border-image: initial;
}
.WindowAttentionBlink {
-webkit-animation: attention 2s linear infinite;
-moz-animation: attention 2s linear infinite;
-ms-animation: attention 2s linear infinite;
animation: attention 2s linear infinite;
}
/* Desktop */
body[data-attention="true"]:after {
position : absolute;
top : 0;
left : 0;
right : 0;
bottom : 0;
opacity : 0;
-webkit-animation: pulseback 2s linear infinite;
-moz-animation: pulseback 2s linear infinite;
-ms-animation: pulseback 2s linear infinite;
animation: pulseback 2s linear infinite;
}
/* Panel */
corewm-panel {
-webkit-transition: all .3s ease-in-out;
-moz-transition: all .3s ease-in-out;
-ms-transition: all .3s ease-in-out;
-o-transition: all .3s ease-in-out;
transition: all .3s ease-in-out;
}
corewm-panel .Button.Attention {
-webkit-animation: attention 2s linear infinite;
-moz-animation: attention 2s linear infinite;
-ms-animation: attention 2s linear infinite;
animation: attention 2s linear infinite;
}
/* Menus */
gui-menu,
corewm-notification-entry {
-webkit-animation: fadeIn .3s;
-moz-animation: fadeIn .3s;
-ms-animation: fadeIn .3s;
animation: fadeIn .3s;
}
gui-menu[data-hint="closing"],
corewm-notification[data-hint="closing"] {
-webkit-animation: fadeOut .3s;
-moz-animation: fadeOut .3s;
-ms-animation: fadeOut .3s;
animation: fadeOut .3s;
-webkit-animation-fill-mode: forwards;
-moz-animation-fill-mode: forwards;
-ms-animation-fill-mode: forwards;
-o-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}

View File

@ -0,0 +1,672 @@
application-window-top .WindowFrost {
position : absolute;
top : 0;
left : 0;
width : 100%;
height : 100%;
-webkit-filter : blur(4px);
opacity : .5;
}
/**
* Default Wallpaper stuff
*/
body[data-background-style="color"] {
background-image : none;
}
body[data-background-style="default"] {
background-repeat : repeat;
}
body[data-background-style="normal"] {
background-repeat : no-repeat;
}
body[data-background-style="center"] {
background-repeat : no-repeat;
background-position : center center;
}
body[data-background-style="fill"] {
background-repeat : no-repeat;
background-size : cover;
background-position : center center;
/*
background-attachment : fixed;
*/
}
body[data-background-style="strech"] {
background-repeat : no-repeat;
background-size : 100% auto;
}
/**
* ===========================================================================
* NOTIFICATIONS
* ===========================================================================
*/
corewm-notifications {
position : absolute;
top : 0;
right : 0;
z-index : 10000000;
width : 400px;
}
corewm-notification {
display : block;
position : relative;
min-height : 10px;
overflow : hidden;
white-space : nowrap;
}
corewm-notification.HasIcon {
min-height : 32px;
}
corewm-notification.HasIcon img {
position : absolute;
}
corewm-notification.HasIcon .Title,
corewm-notification.HasIcon .Message {
margin-left : 32px;
padding-left : 5px;
white-space: -moz-pre-wrap;
white-space: -o-pre-wrap;
white-space: -pre-wrap;
white-space: pre-wrap;
word-wrap: break-word;
}
corewm-notification:before {
content : '';
position : absolute;
top : 0;
left : 0;
right : 0;
bottom : 0;
z-index : -1;
}
/**
* ===========================================================================
* WINDOW SWITCHER
* ===========================================================================
*/
corewm-window-switcher {
display : block;
position : absolute;
top : 50%;
left : 50%;
width : 256px;
z-index : 999999;
overflow : hidden;
margin-left : -128px;
}
corewm-window-switcher > div {
width : 256px;
height : 32px;
line-height : 32px;
overflow : hidden;
}
corewm-window-switcher > div > img {
vertical-align : middle;
margin-right : 5px;
margin-left : 5px;
width : 16px;
}
/**
* ===========================================================================
* ICON VIEW
* ===========================================================================
*/
#CoreWMDesktopIconView {
background : transparent !important;
position : absolute;
top : 10px;
left : 10px;
right : 10px;
bottom : 10px;
z-index : 1;
border : 0 none !important;
box-shadow : none !important;
pointer-events : none;
box-sizing : border-box;
}
#CoreWMDesktopIconView gui-icon-view-entry {
pointer-events : all;
}
/**
* ===========================================================================
* APPLICATION MENU
* ===========================================================================
*/
#CoreWMApplicationMenu {
z-index : 9999999999;
position : absolute;
left : 5%;
right : 5%;
top : 5% !important;
bottom : 5%;
width : 90%;
height : 90%;
overflow-x : hidden;
overflow-y : auto;
padding : 0;
margin : 0;
background : transparent;
border : 0 none;
box-shadow : none;
text-align : center;
}
#CoreWMApplicationMenu:before {
z-index : -1;
position : fixed;
top : 0;
left : 0;
right : 0;
bottom : 0;
overflow : hidden;
background : rgba(0, 0, 0, .8);
content : '';
}
#CoreWMApplicationMenu gui-menu-entry {
width : 84px;
height : 84px;
padding : 4px;
display : inline-block;
overflow : hidden;
line-height : 16px;
position : relative;
box-sizing : border-box;
text-align : center;
}
#CoreWMApplicationMenu gui-menu-entry img {
margin-top : 5px;
width : 32px;
height : 32px;
}
#CoreWMApplicationMenu gui-menu-entry div {
white-space : normal;
max-height : 30px;
box-sizing : border-box;
margin-top : 5px;
color : #fff;
}
/**
* ===========================================================================
* PANELS
* ===========================================================================
*/
corewm-panel {
display : block;
position : absolute;
overflow : hidden;
z-index : 2;
margin : 0;
box-sizing : border-box;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
min-width : 16px;
min-height : 16px;
}
corewm-panel[data-orientation="horizontal"] {
top : 0;
left : 0;
right : 0;
}
corewm-panel[data-orientation="horizontal"] corewm-panel-item {
height : 100%;
}
corewm-panel[data-orientation="horizontal"] corewm-panel-container {
width : 100%;
min-height : 16px;
height : 16px;
}
corewm-panel[data-orientation="horizontal"] .corewm-panel-buttons {
height : 100%;
}
corewm-panel[data-orientation="horizontal"] .corewm-panel-buttons > li {
height : 100%;
}
corewm-panel[data-orientation="horizontal"] .corewm-panel-buttons > li > img {
height : 100%;
width : auto;
}
corewm-panel[data-orientation="vertical"] {
left : 0;
bottom : 0;
top : 0;
}
corewm-panel[data-orientation="vertical"] corewm-panel-item {
width : 100%;
}
corewm-panel[data-orientation="vertical"] corewm-panel-container {
height : 100%;
min-width : 16px;
width : 16px;
flex-direction : column;
}
corewm-panel[data-orientation="vertical"] .corewm-panel-buttons {
flex-direction : column;
width : 100%;
}
corewm-panel[data-orientation="vertical"] .corewm-panel-buttons > li {
max-width : 100%;
width : 100%;
}
corewm-panel[data-orientation="vertical"] .corewm-panel-buttons > li > span {
transform : rotate(90deg);
}
corewm-panel[data-orientation="vertical"] .corewm-panel-buttons > li > img {
width : 100%;
height : auto;
}
corewm-panel:before {
content : '';
display : block;
position : absolute;
top : 0;
left : 0;
right : 0;
bottom : 0;
z-index : 1;
}
corewm-panel[data-ontop="true"] {
z-index : 9999998;
}
corewm-panel[data-position="bottom"] {
top : auto;
bottom : 0;
}
corewm-panel[data-autohide="true"] {
height : 0;
}
corewm-panel[data-autohide="true"] > * {
visibility : hidden;
}
corewm-panel-container {
position : relative;
z-index : 10;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
justify-content: center;
-ms-flex-align: center;
-webkit-align-items: center;
-moz-align-items: center;
align-items: center;
-webkit-box-align: center;
-moz-box-align: center;
-ms-box-align: center;
-o-box-align: center;
box-align: center;
-webkit-flex-wrap: nowrap;
-moz-flex-wrap: nowrap;
-ms-flex-wrap: nowrap;
-o-flex-wrap: nowrap;
flex-wrap: nowrap;
}
corewm-panel-item {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
box-sizing : border-box;
-webkit-flex: 0 0 auto;
-moz-flex: 0 0 auto;
-ms-flex: 0 0 auto;
-o-flex: 0 0 auto;
flex: 0 0 auto;
}
corewm-panel-container > .corewm-panel-expand {
-webkit-flex: 1 1 auto;
-moz-flex: 1 1 auto;
-ms-flex: 1 1 auto;
-o-flex: 1 1 auto;
flex: 1 1 auto;
}
corewm-panel-container > .corewm-panel-right {
-webkit-justify-content : flex-end;
-moz-justify-content : flex-end;
-ms-justify-content : flex-end;
-o-justify-content : flex-end;
justify-content : flex-end;
}
corewm-panel-item .corewm-panel-buttons {
list-style : none;
margin : 0;
padding : 0;
position : relative;
z-index : 10;
box-sizing : border-box;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-ms-flex-align: center;
-webkit-align-items: center;
-moz-align-items: center;
align-items: center;
}
corewm-panel-item .corewm-panel-buttons > li {
margin : 0;
padding : 0;
box-sizing : border-box;
position : relative;
min-width : 16px;
min-height : 16px;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-flex: 1 1 auto;
-moz-flex: 1 1 auto;
-ms-flex: 1 1 auto;
-o-flex: 1 1 auto;
flex: 1 1 auto;
justify-content: center;
-ms-flex-align: center;
-webkit-align-items: center;
-moz-align-items: center;
align-items: center;
-webkit-box-align: center;
-moz-box-align: center;
}
corewm-panel-item .corewm-panel-buttons:first-child {
margin-right : 0;
margin-top : 0;
}
corewm-panel-item .corewm-panel-buttons:last-child {
margin-right : 0;
margin-bottom : 0;
}
corewm-panel-item .corewm-panel-buttons > li > img {
display : inline-block;
}
corewm-panel-item .corewm-panel-buttons > li > img,
corewm-panel-item .corewm-panel-buttons > li > span {
pointer-events: none;
}
corewm-panel-item .Ghost {
background-color : red !important;
min-width : 16px;
}
.corewm-panel-dummy {
min-width : 16px;
min-height : 16px;
}
.corewm-panel-ellipsis span {
display : inline-block;
overflow : hidden;
white-space : nowrap;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
}
/**
* ===========================================================================
* SEARCH
* ===========================================================================
*/
corewm-search {
position : absolute;
display : none;
z-index : 99999;
max-width : 400px;
}
corewm-search:before {
position : absolute;
top : 0;
left : 0;
bottom : 0;
right : 0;
z-index : -1;
}
corewm-search[data-visible=true] {
display : block;
}
corewm-search > div {
margin-top : 5px;
}
corewm-search gui-text {
width : 100%;
}
corewm-search > ul {
list-style-type : none;
margin : 0;
padding : 0;
}
corewm-search > ul > li {
position : relative;
margin : 0;
padding : 0;
}
corewm-search > ul > li > * {
pointer-events : none;
}
corewm-search > ul > li > img {
position : absolute;
top : 5px;
left : 5px;
}
/**
* ===========================================================================
* PANEL ITEMS
* ===========================================================================
*/
corewm-panel .PanelItemClock {
flex : 0 0 55px;
}
corewm-panel .PanelItemClock li {
cursor : default;
}
corewm-panel .PanelItemWindowList li > span {
max-width : 200px;
}
corewm-panel[data-orientation="horizontal"] .PanelItemWindowList li {
-webkit-flex: 0 0 auto;
-moz-flex: 0 0 auto;
-ms-flex: 0 0 auto;
-o-flex: 0 0 auto;
flex: 0 0 auto;
}
corewm-panel[data-orientation="vertical"] .PanelItemWindowList li {
-ms-flex-align: flex-start;
-webkit-align-items: flex-start;
-moz-align-items: flex-start;
align-items: flex-start;
}
corewm-panel[data-orientation="vertical"] .PanelItemWindowList li > img {
transform : rotate(90deg);
}
corewm-panel[data-orientation="vertical"] .PanelItemWindowList li > span {
position: absolute;
left: .5em;
top: 20px;
transform-origin: left;
}
corewm-panel .PanelItemNotificationArea .BusyNotification > div,
corewm-panel .PanelItemNotificationArea .StartupNotification > div {
cursor : help;
width : 20px;
}
corewm-panel .PanelItemNotificationArea .BusyNotification > div > div,
corewm-panel .PanelItemNotificationArea .StartupNotification > div > div {
border: 2px solid #fff;
border-radius: 100%;
margin-left : -10px;
margin-top : -10px;
position : absolute;
top : 50%;
left : 50%;
width : 20px;
height : 20px;
box-sizing : border-box;
}
corewm-panel .PanelItemNotificationArea .StartupNotification > div > div:before {
display: block;
position: absolute;
left: 7px;
top: 2px;
width: 2px;
height: 6px;
background-color: #fff;
content: "";
-webkit-animation: NotificationSpinAnim 3s linear infinite;
-moz-animation: NotificationSpinAnim 3s linear infinite;
-ms-animation: NotificationSpinAnim 3s linear infinite;
animation: NotificationSpinAnim 3s linear infinite;
-webkit-transform-origin: 1px 6px;
-moz-transform-origin: 1px 6px;
-ms-transform-origin: 1px 6px;
-o-transform-origin: 1px 6px;
transform-origin: 1px 6px;
}
corewm-panel .PanelItemNotificationArea .StartupNotification > div > div:after {
display: block;
position: absolute;
left: 7px; /*( 16px / 2 ) - 1px;*/
top: 3px;
width: 2px;
height: 5px; /*( 16px / 2 ) - 3px;*/
background-color: #fff;
content: "";
-webkit-animation: NotificationSpinAnim 18s linear infinite; /* NotificationSpinAnim 6 * 3s linear infinite; */
-moz-animation: NotificationSpinAnim 18s linear infinite; /* NotificationSpinAnim 6 * 3s linear infinite; */
-ms-animation: NotificationSpinAnim 18s linear infinite; /* NotificationSpinAnim 6 * 3s linear infinite; */
-o-animation: NotificationSpinAnim 18s linear infinite; /* NotificationSpinAnim 6 * 3s linear infinite; */
animation: NotificationSpinAnim 18s linear infinite; /* NotificationSpinAnim 6 * 3s linear infinite; */
-webkit-transform-origin: 1px 5px; /* 1px ( 16px / 2 ) - 3px;*/
-moz-transform-origin: 1px 5px; /* 1px ( 16px / 2 ) - 3px;*/
-ms-transform-origin: 1px 5px; /* 1px ( 16px / 2 ) - 3px;*/
-o-transform-origin: 1px 5px; /* 1px ( 16px / 2 ) - 3px;*/
transform-origin: 1px 5px; /* 1px ( 16px / 2 ) - 3px;*/
}
corewm-panel .PanelItemNotificationArea .BusyNotification > div > div:after,
corewm-panel .PanelItemNotificationArea .BusyNotification > div > div:before {
display: block;
position: absolute;
left: 7px;
top: 2px;
width: 2px;
height: 12px;
background-color: #fff;
content: "";
-webkit-transform-origin: 1px 6px; /* 1px ( 24px / 2 ) - 2px;*/
-moz-transform-origin: 1px 6px; /* 1px ( 24px / 2 ) - 2px;*/
-ms-transform-origin: 1px 6px; /* 1px ( 24px / 2 ) - 2px;*/
-o-transform-origin: 1px 6px; /* 1px ( 24px / 2 ) - 2px;*/
transform-origin: 1px 6px; /* 1px ( 24px / 2 ) - 2px;*/
-webkit-animation: NotificationSpinAnim 3s linear infinite;
-moz-animation: NotificationSpinAnim 3s linear infinite;
-ms-animation: NotificationSpinAnim 3s linear infinite;
-o-animation: NotificationSpinAnim 3s linear infinite;
animation: NotificationSpinAnim 3s linear infinite;
}
corewm-panel .PanelItemNotificationArea .BusyNotification > div > div:after {
-webkit-animation: NotificationSpinAnim 3s linear -0.75s infinite;
-moz-animation: NotificationSpinAnim 3s linear -0.75s infinite;
-ms-animation: NotificationSpinAnim 3s linear -0.75s infinite;
-o-animation: NotificationSpinAnim 3s linear -0.75s infinite;
animation: NotificationSpinAnim 3s linear -0.75s infinite;
}
@-webkit-keyframes NotificationSpinAnim {
to {
-webkit-transform: rotate( 360deg );
}
}
@-moz-keyframes notificationspinanim {
to {
-moz-transform: rotate( 360deg );
}
}
@-o-keyframes notificationspinanim {
to {
-o-transform: rotate( 360deg );
}
}
@keyframes NotificationSpinAnim {
to {
transform: rotate( 360deg );
}
}
/**
* ===========================================================================
* RESPONSIVE
* ===========================================================================
*/
@media all and (max-width: 800px) {
.PanelItemWindowList > ul > li > span {
display: none;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,44 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(WindowManager, Window, GUI, Utils, API, VFS) {
'use strict';
/////////////////////////////////////////////////////////////////////////////
// LOCALES
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {};
})(OSjs.Core.WindowManager, OSjs.Core.Window, OSjs.GUI, OSjs.Utils, OSjs.API, OSjs.VFS);

View File

@ -0,0 +1,80 @@
{
"className": "CoreWM",
"name": "OS.js Window Manager",
"names": {
"bg_BG": "Мениджър на прозорци на OS.js",
"de_DE": "OS.js Fenster-Manager",
"es_ES": "OS.js Window Manager",
"fr_FR": "Gestionnaire de fenêtre OS.js",
"it_IT": "OS.js Gestore Finestre",
"ko_KR": "OS.js 윈도우 관리자",
"nl_NL": "OS.js venster beheer",
"no_NO": "OS.js Vinduhåndterer",
"pl_PL": "Menedżer Okien OS.js",
"ru_RU": "OS.js Оконный менеджер",
"sk_SK": "Správca Okien OS.js",
"tr_TR": "OS.js Pencere Yöneticisi",
"vi_VN": "Quản lí cửa sổ OS.js"
},
"singular": true,
"type": "windowmanager",
"icon": "apps/gnome-window-manager.png",
"splash": false,
"preload": [
{
"src": "scheme.html",
"type": "scheme"
},
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
}
],
"panelItems": {
"AppMenu": {
"Name": "AppMenu",
"Description": "Application Menu",
"Icon": "actions/stock_about.png",
"HasOptions": false
},
"Buttons": {
"Name": "Buttons",
"Description": "Button Bar",
"Icon": "actions/stock_about.png"
},
"Clock": {
"Name": "Clock",
"Description": "View the time",
"Icon": "status/appointment-soon.png",
"HasOptions": true
},
"NotificationArea": {
"Name": "NotificationArea",
"Description": "View notifications",
"Icon": "apps/gnome-panel-notification-area.png"
},
"Search": {
"Name": "Search",
"Description": "Perform searches",
"Icon": "actions/find.png",
"HasOptions": true
},
"Weather": {
"Name": "Weather",
"Description": "Weather notification",
"Icon": "status/weather-few-clouds.png"
},
"WindowList": {
"Name": "Window List",
"Description": "Toggle between open windows",
"Icon": "apps/xfwm4.png"
}
},
"path": "default/CoreWM",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,78 @@
<application-window data-id="ClockSettingsDialog">
<gui-vbox>
<gui-vbox-container data-grow="1" data-shrink="0">
<gui-label>Time Format String:</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-shrink="0" data-expand="true">
<gui-text data-id="InputTimeFormatString">H:i:s</gui-text>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-shrink="0">
<gui-label>Tooltip Format String:</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-shrink="0" data-expand="true">
<gui-text data-id="InputTooltipFormatString">l, j F Y</gui-text>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-shrink="0">
<gui-label>Interval:</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-shrink="0" data-expand="true">
<gui-select data-id="InputInterval">
<gui-select-option data-value="1000">1 second</gui-select-option>
<gui-select-option data-value="60000">1 minute</gui-select-option>
<gui-select-option data-value="3600000">1 hour</gui-select-option>
</gui-select>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-shrink="0">
<gui-label>UTC Time:</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-shrink="0">
<gui-checkbox data-id="InputUseUTC"></gui-checkbox>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-hbox>
<gui-hbox-container data-grow="0" data-shrink="1">
<gui-button data-id="ButtonApply">Apply</gui-button>
<gui-button data-id="ButtonCancel">Cancel</gui-button>
</gui-hbox-container>
</gui-hbox>
</gui-vbox-container>
</gui-vbox>
</application-window>
<application-window data-id="IconViewShortcutDialog">
<gui-vbox>
<gui-vbox-container data-grow="0" data-shrink="0">
<gui-label>Launch:</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="0" data-expand="true">
<gui-text data-id="InputShortcutLaunch">ApplicationClassName</gui-text>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="0">
<gui-label>Label:</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="0" data-expand="true">
<gui-text data-id="InputShortcutLabel"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="0">
<gui-label>Launch arguments:</gui-label>
</gui-vbox-container>
<gui-vbox-container data-grow="0" data-shrink="0" data-expand="true">
<gui-text data-id="InputTooltipFormatString"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-hbox>
<gui-hbox-container data-grow="0" data-shrink="1">
<gui-button data-id="ButtonApply">Apply</gui-button>
<gui-button data-id="ButtonCancel">Cancel</gui-button>
</gui-hbox-container>
</gui-hbox>
</gui-vbox-container>
</gui-vbox>
</application-window>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,41 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2015, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
/*.ApplicationDrawWindow {
}*/
.ApplicationDrawWindow gui-canvas {
background : url('checkerboard.png');
}
.ApplicationDrawWindow gui-vbox-container[data-id="ScrollContainer"] {
background : #DADADA;
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

View File

@ -0,0 +1,58 @@
{
"className": "ApplicationDraw",
"name": "Draw",
"description": "Simple drawing application",
"names": {
"bg_BG": "Рисуване",
"de_DE": "Zeichnen",
"fr_FR": "Dessin",
"it_IT": "Disegna",
"ko_KR": "그림판",
"nl_NL": "Tekenen",
"no_NO": "Tegne",
"pl_PL": "Rysowanie",
"ru_RU": "Графический редактор",
"sk_SK": "Kreslenie",
"tr_TR": "Çiz",
"vi_VN": "Vẽ"
},
"descriptions": {
"bg_BG": "Приложение за рисуване",
"de_DE": "Einfaches Zeichen-Programm",
"fr_FR": "Programme de dessin simple",
"it_IT": "Semplice applicazione per creazione/modifica immagini",
"ko_KR": "간단한 그리기 응용 프로그램",
"nl_NL": "Eenvoudig tekenprogramma",
"no_NO": "Simpelt tegne-program",
"pl_PL": "Prosta aplikacja do rysowania",
"ru_RU": "Простой графический редактор",
"sk_SK": "Jednoduchá aplikácia na kreslenie",
"vi_VN": "Phần mềm vẽ đơn giản"
},
"mime": [
"^image"
],
"category": "graphics",
"icon": "categories/gnome-graphics.png",
"compability": [
"canvas"
],
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Draw",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,83 @@
<application-window data-id="DrawWindow">
<gui-vbox>
<!-- MENU BAR -->
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-menu-bar>
<gui-menu-bar-entry data-label="LBL_FILE">
<gui-menu data-id="SubmenuFile">
<gui-menu-entry data-id="MenuNew" data-label="LBL_NEW"></gui-menu-entry>
<gui-menu-entry data-id="MenuOpen" data-label="LBL_OPEN"></gui-menu-entry>
<gui-menu-entry data-id="MenuSave" data-label="LBL_SAVE"></gui-menu-entry>
<gui-menu-entry data-id="MenuSaveAs" data-label="LBL_SAVEAS"></gui-menu-entry>
<gui-menu-entry data-id="MenuClose" data-label="LBL_CLOSE"></gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
</gui-menu-bar>
</gui-vbox-container>
<!-- CONTENT -->
<gui-vbox-container data-grow="1" data-shrink="0" data-basis="auto" data-fill="true">
<gui-hbox class="gui-no-overflow">
<gui-hbox-container data-shrink="1" data-grow="0" data-basis="74px">
<gui-toolbar data-orientation="vertical" style="text-align:center">
<gui-color-box data-id="Foreground"></gui-color-box>
<gui-color-box data-id="Background"></gui-color-box>
<gui-button data-id="tool-pointer" data-group="tool" data-tool-name="pointer" data-icon="app://icons/stock-cursor-16.png"></gui-button>
<gui-button data-id="tool-picker" data-group="tool" data-tool-name="picker" data-icon="app://icons/stock-color-pick-from-screen-16.png"></gui-button>
<gui-button data-id="tool-bucket" data-group="tool" data-tool-name="bucket" data-icon="app://icons/stock-tool-bucket-fill-16.png"></gui-button>
<gui-button data-id="tool-pencil" data-group="tool" data-tool-name="pencil" data-icon="app://icons/stock-tool-pencil-16.png"></gui-button>
<gui-button data-id="tool-path" data-group="tool" data-tool-name="path" data-icon="app://icons/stock-tool-path-16.png"></gui-button>
<gui-button data-id="tool-rectangle" data-group="tool" data-tool-name="rectangle" data-icon="app://icons/stock-shape-square-16.png"></gui-button>
<gui-button data-id="tool-circle" data-group="tool" data-tool-name="circle" data-icon="app://icons/stock-shape-circle-16.png"></gui-button>
<gui-button data-group="tool" data-tool-name="cursor" data-icon="app://icons/stock-cursor-16.png" style="visibility:hidden;pointer-events:none"></gui-button>
</gui-toolbar>
</gui-hbox-container>
<gui-hbox-container data-shrink="0" data-grow="1" data-fill="true">
<gui-vbox>
<!-- TOOL BAR -->
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-toolbar data-id="TopToolbar">
<gui-label>Line join</gui-label>
<gui-select data-id="LineJoin">
<gui-select-option data-value="round">Round</gui-select-option>
<gui-select-option data-value="miter">Miter</gui-select-option>
<gui-select-option data-value="bevel">Bevel</gui-select-option>
</gui-select>
<gui-label>Line width</gui-label>
<gui-select data-id="LineWidth">
</gui-select>
<gui-checkbox data-id="LineStroke" data-label="Enable stroke"></gui-checkbox>
</gui-toolbar>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-shrink="0" data-basis="auto" data-fill="true" data-id="ScrollContainer">
<gui-scroll-container data-id="ScrollView">
<gui-canvas data-id="Canvas">
</gui-canvas>
</gui-scroll-container>
</gui-vbox-container>
</gui-vbox>
</gui-hbox-container>
</gui-hbox>
</gui-vbox-container>
<!-- STATUSBAR -->
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-statusbar data-id="Statusbar"></gui-statusbar>
</gui-vbox-container>
</gui-vbox>
</application-window>

View File

@ -0,0 +1,39 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2015, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
/*.ApplicationFileManagerWindow {
}*/
.ApplicationFileManagerWindow .unmounted {
opacity : .6;
}
.ApplicationFileManagerWindow gui-menu-bar-entry[data-id="ContextMenu"] {
display : none;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,53 @@
{
"className": "ApplicationFileManager",
"name": "File Manager",
"description": "The default file manager",
"names": {
"bg_BG": "Файлов мениджър",
"de_DE": "Dateimanager",
"fr_FR": "Explorateur de fichier",
"it_IT": "Gestore File",
"nl_NL": "bestands beheer",
"no_NO": "Fil-håndtering",
"pl_PL": "Menedżer Plików",
"ko_KR": "파일 탐색기",
"sk_SK": "Správca súborov",
"ru_RU": "Файловый менеджер",
"tr_TR": "Dosya Yöneticisi",
"vi_VN": "Quản lí file"
},
"descriptions": {
"bg_BG": "Стандартния файлов мениджър",
"de_DE": "Standardmäßiger Dateimanager",
"fr_FR": "Gestionnaire de fichier par défaut",
"it_IT": "Il gestore file predefinito",
"nl_NL": "Standaard bestands beheerder",
"no_NO": "Standard Fil-håndtering program",
"pl_PL": "Domyślny Menedżer Plików",
"ko_KR": "기본 파일 관리자",
"sk_SK": "Štandardný správca súborov",
"ru_RU": "Стандартный файловый менеджер",
"tr_TR": "Varsayılan dosya yöneticisi",
"vi_VN": "Trình quản lí file mặc định"
},
"category": "utilities",
"icon": "apps/file-manager.png",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/FileManager",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,112 @@
<application-window data-id="FileManagerWindow">
<gui-vbox>
<!-- MENU BAR -->
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-menu-bar>
<gui-menu-bar-entry data-label="LBL_FILE">
<gui-menu data-id="SubmenuFile">
<gui-menu-entry data-id="MenuCreate" data-label="LBL_CREATE">
<gui-menu data-id="SubmenuCreate">
<gui-menu-entry data-id="MenuCreateDirectory" data-label="LBL_DIRECTORY"></gui-menu-entry>
<gui-menu-entry data-id="MenuCreateFile" data-label="LBL_FILE"></gui-menu-entry>
</gui-menu>
</gui-menu-entry>
<gui-menu-entry data-id="MenuUpload" data-label="LBL_UPLOAD"></gui-menu-entry>
<gui-menu-entry data-id="MenuClose" data-label="LBL_CLOSE"></gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
<gui-menu-bar-entry data-label="LBL_EDIT">
<gui-menu data-id="SubmenuEdit">
<gui-menu-entry data-id="MenuRename" data-label="LBL_RENAME"></gui-menu-entry>
<gui-menu-entry data-id="MenuDelete" data-label="LBL_DELETE"></gui-menu-entry>
<gui-menu-entry data-id="MenuInfo" data-label="LBL_INFORMATION"></gui-menu-entry>
<gui-menu-entry data-id="MenuOpen" data-label="LBL_OPENWITH"></gui-menu-entry>
<gui-menu-entry data-id="MenuDownload" data-label="LBL_DOWNLOAD_COMP"></gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
<gui-menu-bar-entry data-label="LBL_VIEW">
<gui-menu data-id="SubmenuView">
<gui-menu-entry data-id="MenuRefresh" data-label="LBL_REFRESH"></gui-menu-entry>
<gui-menu-entry data-id="MenuShowSidebar" data-label="LBL_SHOW_SIDEBAR" data-type="checkbox"></gui-menu-entry>
<gui-menu-entry data-id="MenuShowNavigation" data-label="LBL_SHOW_NAVIGATION" data-type="checkbox"></gui-menu-entry>
<gui-menu-entry data-id="MenuShowHidden" data-label="LBL_SHOW_HIDDENFILES" data-type="checkbox"></gui-menu-entry>
<gui-menu-entry data-id="MenuShowExtension" data-label="LBL_SHOW_FILEEXTENSIONS" data-type="checkbox"></gui-menu-entry>
<gui-menu-entry data-id="" data-label="LBL_VIEWTYPE">
<gui-menu>
<gui-menu-entry data-id="MenuViewList" data-label="LBL_LISTVIEW" data-type="radio" data-group="ViewType"></gui-menu-entry>
<gui-menu-entry data-id="MenuViewIcon" data-label="LBL_ICONVIEW" data-type="radio" data-group="ViewType"></gui-menu-entry>
<gui-menu-entry data-id="MenuViewTree" data-label="LBL_TREEVIEW" data-type="radio" data-group="ViewType"></gui-menu-entry>
</gui-menu>
</gui-menu-entry>
<gui-menu-entry data-id="" data-label="LBL_SHOW_COLUMNS">
<gui-menu>
<gui-menu-entry data-id="MenuColumnFilename" data-label="LBL_FILENAME" data-type="checkbox"></gui-menu-entry>
<gui-menu-entry data-id="MenuColumnMIME" data-label="LBL_MIME" data-type="checkbox"></gui-menu-entry>
<gui-menu-entry data-id="MenuColumnCreated" data-label="LBL_CREATED" data-type="checkbox"></gui-menu-entry>
<gui-menu-entry data-id="MenuColumnModified" data-label="LBL_MODIFIED" data-type="checkbox"></gui-menu-entry>
<gui-menu-entry data-id="MenuColumnSize" data-label="LBL_SIZE" data-type="checkbox"></gui-menu-entry>
</gui-menu>
</gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
<!-- CONTEXT MENU -->
<gui-menu-bar-entry data-id="ContextMenu" data-label="LBL_CONTEXT">
<gui-menu data-id="SubmenuContext">
<gui-menu-entry data-id="MenuCreate" data-label="LBL_CREATE">
<gui-menu data-id="SubmenuCreate">
<gui-menu-entry data-id="MenuCreateDirectory" data-label="LBL_DIRECTORY" data-func="MenuCreateDirectory"></gui-menu-entry>
<gui-menu-entry data-id="MenuCreateFile" data-label="LBL_FILE" data-func="MenuCreateFile"></gui-menu-entry>
</gui-menu>
</gui-menu-entry>
<gui-menu-entry data-id="ContextMenuUpload" data-label="LBL_UPLOAD" data-func="MenuUpload"></gui-menu-entry>
<gui-menu-entry data-id="ContextMenuRename" data-label="LBL_RENAME" data-func="MenuRename"></gui-menu-entry>
<gui-menu-entry data-id="ContextMenuDelete" data-label="LBL_DELETE" data-func="MenuDelete"></gui-menu-entry>
<gui-menu-entry data-id="ContextMenuInfo" data-label="LBL_INFORMATION" data-func="MenuInfo"></gui-menu-entry>
<gui-menu-entry data-id="ContextMenuOpen" data-label="LBL_OPENWITH" data-func="MenuOpen"></gui-menu-entry>
<gui-menu-entry data-id="ContextMenuDownload" data-label="LBL_DOWNLOAD_COMP" data-func="MenuDownload"></gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
</gui-menu-bar>
</gui-vbox-container>
<!-- TOOLBAR -->
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto" data-id="ToolbarContainer">
<gui-toolbar data-id="TopToolbar" class="gui-flex">
<gui-button data-icon="stock://16x16/actions/back.png" data-id="GoBack"></gui-button>
<gui-button data-icon="stock://16x16/actions/next.png" data-id="GoNext"></gui-button>
<gui-text class="gui-flex-grow" data-id="GoLocation" data-placeholder="location:///path"></gui-text>
</gui-toolbar>
</gui-vbox-container>
<!-- CONTENT -->
<gui-vbox-container data-grow="1" data-shrink="0" data-basis="auto" data-fill="true">
<gui-paned-view>
<!-- SIDE PANEL -->
<gui-paned-view-container data-basis="150px" data-grow="0" data-shrink="0" data-multiple="false" data-id="SideContainer">
<gui-list-view data-id="SideView" data-single-click="true">
</gui-list-view>
</gui-paned-view-container>
<!-- FILE VIEW -->
<gui-paned-view-container data-grow="1" data-shrink="1">
<gui-file-view data-id="FileView">
</gui-file-view>
</gui-paned-view-container>
</gui-paned-view>
</gui-vbox-container>
<!-- STATUSBAR -->
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-statusbar data-id="Statusbar"></gui-statusbar>
</gui-vbox-container>
</gui-vbox>
</application-window>

View File

@ -0,0 +1,93 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(DefaultApplication, DefaultApplicationWindow, Application, Window, Utils, API, VFS, GUI) {
'use strict';
/////////////////////////////////////////////////////////////////////////////
// WINDOWS
/////////////////////////////////////////////////////////////////////////////
function ApplicationHTMLViewerWindow(app, metadata, scheme, file) {
DefaultApplicationWindow.apply(this, ['ApplicationHTMLViewerWindow', {
icon: metadata.icon,
title: metadata.name,
width: 400,
height: 200
}, app, scheme, file]);
}
ApplicationHTMLViewerWindow.prototype = Object.create(DefaultApplicationWindow.prototype);
ApplicationHTMLViewerWindow.constructor = DefaultApplicationWindow.prototype;
ApplicationHTMLViewerWindow.prototype.init = function(wmRef, app, scheme) {
var root = DefaultApplicationWindow.prototype.init.apply(this, arguments);
scheme.render(this, 'HTMLViewerWindow', root);
return root;
};
ApplicationHTMLViewerWindow.prototype.showFile = function(file, url) {
if ( this._scheme ) {
this._find('iframe').set('src', url);
}
DefaultApplicationWindow.prototype.showFile.apply(this, arguments);
};
/////////////////////////////////////////////////////////////////////////////
// APPLICATION
/////////////////////////////////////////////////////////////////////////////
function ApplicationHTMLViewer(args, metadata) {
DefaultApplication.apply(this, ['ApplicationHTMLViewer', args, metadata, {
extension: 'html',
mime: 'text/htm',
filename: 'index.html',
fileypes: ['htm', 'html'],
readData: false
}]);
}
ApplicationHTMLViewer.prototype = Object.create(DefaultApplication.prototype);
ApplicationHTMLViewer.constructor = DefaultApplication;
ApplicationHTMLViewer.prototype.init = function(settings, metadata, scheme) {
Application.prototype.init.call(this, settings, metadata, scheme);
var file = this._getArgument('file');
this._addWindow(new ApplicationHTMLViewerWindow(this, metadata, scheme, file));
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationHTMLViewer = OSjs.Applications.ApplicationHTMLViewer || {};
OSjs.Applications.ApplicationHTMLViewer.Class = Object.seal(ApplicationHTMLViewer);
})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);

View File

@ -0,0 +1,23 @@
{
"className": "ApplicationHTMLViewer",
"name": "HTML Viewer",
"mime": [
"text\\/html"
],
"icon": "mimetypes/html.png",
"category": "utilities",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/HTMLViewer",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,17 @@
<application-window data-id="HTMLViewerWindow">
<gui-vbox>
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-menu-bar>
<gui-menu-bar-entry data-label="LBL_FILE">
<gui-menu data-id="SubmenuFile">
<gui-menu-entry data-id="MenuOpen" data-label="LBL_OPEN"></gui-menu-entry>
<gui-menu-entry data-id="MenuClose" data-label="LBL_CLOSE"></gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
</gui-menu-bar>
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-shrink="0" data-basis="auto" data-fill="true">
<gui-iframe data-id="iframe" />
</gui-vbox-container>
</gui-vbox>
</application-window>

View File

@ -0,0 +1,47 @@
<?php
if ( !defined("MusicPlayerCommand") ) define("MusicPlayerCommand", "/usr/bin/mediainfo");
class ApplicationMusicPlayer
{
public static function call($method, $args) {
if ( $method === 'info' ) {
list($dirname, $fname, $protocol) = getRealPath($args['filename']);
if ( !class_exists('SimpleXMLElement') ) {
throw new Exception("Cannot get media information -- No XML parser found");
}
if ( !function_exists('exec') ) {
throw new Exception("Cannot get media information -- Exec not allowed");
}
$cmd = sprintf("%s --Output=XML %s", MusicPlayerCommand, escapeshellcmd($fname));
@exec($cmd, $content);
if ( !$content ) {
throw new Exception("Cannot get media information -- Query failed");
}
try {
$xml = new SimpleXMLElement(implode("\n", preg_replace("/_+/", "", $content)));
} catch ( Exception $e ) {
$xml = $e;
}
if ( $xml !== null ) {
if ( isset($xml->File[0]) && isset($xml->File[0]->track) && ($node = $xml->File->track) ) {
return Array(
'Artist' => isset($node->Performer) ? htmlspecialchars($node->Performer) : null,
'Album' => isset($node->Album) ? htmlspecialchars($node->Album) : null,
'Track' => isset($node->Track_name) ? htmlspecialchars($node->Track_name) : null
);
}
}
}
return false;
}
}
?>

View File

@ -0,0 +1,47 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2015, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
/*.ApplicationMusicPlayerWindow {
}*/
.ApplicationMusicPlayerWindow gui-slider {
margin : 4px;
margin-top : 10px;
margin-bottom : 10px;
}
.ApplicationMusicPlayerWindow gui-vbox[data-id="Metadata"] {
margin : 4px;
}
.ApplicationMusicPlayerWindow gui-audio {
display : none;
}
.ApplicationMusicPlayerWindow gui-button-bar {
text-align : center;
}

View File

@ -0,0 +1,541 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, GUI, Dialogs, VFS) {
// jscs:disable validateQuoteMarks
'use strict';
/////////////////////////////////////////////////////////////////////////////
// LOCALES
/////////////////////////////////////////////////////////////////////////////
var _Locales = {
bg_BG : {
'Playlist' : 'Плейлист',
'Playback aborted' : 'Прекратено изпълнение',
'Network or communication error' : 'Проблем с връзка към мрежа',
'Decoding failed. Corruption or unsupported media' : 'Провалено декодиране, повереден файл или неподдържан формат',
'Media source not supported' : 'Източника на медия не се поддържа',
'Failed to play file' : 'Изпълнението на файла се провали',
'Artist' : 'Изпълнител',
'Album' : 'Албум',
'Track' : 'Песен',
'Time' : 'Време',
'Media information query failed' : 'Получаване на информация провалено',
'seek unavailable in format' : 'Невъществуващ формат',
'The audio type is not supported: {0}' : 'Аудио формата не се поддържа'
},
de_DE : {
'Playlist' : 'Wiedergabeliste',
'Playback aborted' : 'Wiedergabe abgebrochen',
'Network or communication error' : 'Netzwerk Kommunikationsfehler',
'Decoding failed. Corruption or unsupported media' : 'Dekodierung gescheitert. Fehlerhafte oder nicht unterstützte Datei',
'Media source not supported' : 'Medienquelle nicht unterstützt',
'Failed to play file' : 'Wiedergabe der Datei gescheitert',
'Artist' : 'Künstler',
'Album' : 'Album',
'Track' : 'Titel',
'Time' : 'Zeit',
'Media information query failed' : 'Media Informationssuche gescheitert',
'seek unavailable in format' : 'Spulen im Format nicht verfügbar',
'The audio type is not supported: {0}' : 'Der Audio-Typ {0} ist nicht unterstützt'
},
es_ES : {
'Playlist' : 'Lista de reproducción',
'Playback aborted' : 'Playback anulado',
'Network or communication error' : 'Error de red o de comunicación',
'Decoding failed. Corruption or unsupported media' : 'Fallo en el desentrelazado. Medio corrupto o no soportado',
'Media source not supported' : 'Medio no soportado',
'Failed to play file' : 'Error reproduciendo archivo',
'Artist' : 'Artista',
'Album' : 'Album',
'Track' : 'Pista',
'Time' : 'Tiempo',
'Media information query failed' : 'Error recupersqndo información del medio',
'seek unavailable in format' : 'búsqueda no disponible en este formato',
'The audio type is not supported: {0}' : 'El tipo de audio no está soportado: {0}'
},
fr_FR : {
'Playlist' : 'Liste de lecture',
'Playback aborted' : 'Lecture interrompue',
'Network or communication error' : 'Erreur de communication ou de réseau',
'Decoding failed. Corruption or unsupported media' : 'Décodage raté. Média corrompus ou non pris en charge',
'Media source not supported' : 'Source de médias non pris en charge',
'Failed to play file' : 'Impossible de lire le fichier',
'Artist' : 'Artiste',
'Album' : 'Album',
'Track' : 'Piste',
'Time' : 'Durée',
'Media information query failed' : 'Requête des informations média échoué',
'seek unavailable in format' : 'recherche indisponible dans ce format',
'The audio type is not supported: {0}' : 'Le type audio n\'est pas pris en charge: {0}'
},
ar_DZ : {
'Playlist' : 'قائمة القرائة',
'Playback aborted' : 'قطع التشغيل',
'Network or communication error' : 'خطأ في الإتصال بالشبكة',
'Decoding failed. Corruption or unsupported media' : 'فشل في فك التشفير. وسائط غير صالحة أو غير مدعومة',
'Media source not supported' : 'وسائط غير مدعومة',
'Failed to play file' : 'لايمكن قراءة الملف',
'Artist' : 'الفنان',
'Album' : 'الألبوم',
'Track' : 'المقطع',
'Time' : 'المدة',
'Media information query failed' : 'خطأ في قراءة معلومات الوسائط',
'seek unavailable in format' : 'بحث غير ممكن في هذا النوع',
'The audio type is not supported: {0}' : 'نوع الملف الصوتي غير مدعوم: {0}'
},
it_IT : {
'Playlist' : 'Playlist',
'Playback aborted' : 'Riproduzione terminata',
'Network or communication error' : 'Errore di rete o di comunicazione',
'Decoding failed. Corruption or unsupported media' : 'Decodifica fallita. Supporto corroto o non supportato.',
'Media source not supported' : 'Sorgente multimediale non supportata',
'Failed to play file' : 'Riproduzione file fallita',
'Artist' : 'Artista',
'Album' : 'Album',
'Track' : 'Traccia',
'Time' : 'Tempo',
'Media information query failed' : 'Recupero informazioni media fallita',
'seek unavailable in format' : 'ricerca non disponibile nel formato',
'The audio type is not supported: {0}' : 'Tipo di audio non supportato: {0}'
},
ko_KR : {
'Playlist' : '재생목록',
'Playback aborted' : '일시중지',
'Network or communication error' : '네트워크 등 통신 문제가 발생했습니다',
'Decoding failed. Corruption or unsupported media' : '디코딩에 실패했습니다. 손상되었거나 지원하지 않는 형식입니다',
'Media source not supported' : '지원하지 않는 미디어 소스입니다',
'Failed to play file' : '파일을 재생하는데 실패했습니다',
'Artist' : '아티스트',
'Album' : '앨범',
'Track' : '트랙',
'Time' : '시간',
'Media information query failed' : '미디어 정보 조회에 실패했습니다',
'seek unavailable in format' : '탐색을 지원하지 않는 형식입니다',
'The audio type is not supported: {0}' : '이 오디오 형식은 지원하지 않습니다: {0}'
},
nl_NL : {
'Playlist' : 'Afspeellijst',
'Playback aborted' : 'Afspelen afgebroken',
'Network or communication error' : 'Netwerk of communicatie fout',
'Decoding failed. Corruption or unsupported media' : 'Decoderen mislukt: bestandstype wordt niet ondersteund',
'Media source not supported' : 'Mediabron wordt niet ondersteund',
'Failed to play file' : 'Afspelen van bestand mislukt',
'Artist' : 'Artiest',
'Album' : 'Album',
'Track' : 'Nummer',
'Time' : 'Tijd',
'Media information query failed' : 'Zoeken naar media is niet gelukt',
'seek unavailable in format' : 'Voor/achteruit spoelen is niet beschikbaar in dit formaat',
'The audio type is not supported: {0}' : 'Audio type {0} wordt niet ondersteund'
},
no_NO : {
'Playlist' : 'Spilleliste',
'Playback aborted' : 'Avspilling avbrutt',
'Network or communication error' : 'Nettverks- eller kommunikasjonsfeil',
'Decoding failed. Corruption or unsupported media' : 'Dekoding feilet. Korrupt eller ustøttet media',
'Media source not supported' : 'Media-kilde ikke støttet',
'Failed to play file' : 'Klarte ikke spille av fil',
'Artist' : 'Artist',
'Album' : 'Album',
'Track' : 'Låt',
'Time' : 'Tid',
'Media information query failed' : 'Media-informasjon forespursel feil',
'seek unavailable in format' : 'spoling utilgjenglig i format',
'The audio type is not supported: {0}' : 'Denne lyd-typen er ikke støttet: {0}'
},
pl_PL : {
'Playlist' : 'Playlista',
'Playback aborted' : 'Odtwarzanie Przerwane',
'Network or communication error' : 'Błąd Sieci lub Komunikacji',
'Decoding failed. Corruption or unsupported media' : 'Dekodowanie nie powiodło się. Uszkodzony lub nieobsługiwany plik',
'Media source not supported' : 'Plik nie jest wspierany',
'Failed to play file' : 'Nie można odtworzyć pliku',
'Artist' : 'Artysta',
'Album' : 'Album',
'Track' : 'Ścieżka',
'Time' : 'Czas',
'Media information query failed' : 'Brak informacji',
'seek unavailable in format' : 'Przewijanie nie jest obsługiwane w tym formacie',
'The audio type is not supported: {0}' : 'Ten typ audio nie jest obsługiwany: {0}'
},
ru_RU : {
'Playlist' : 'Список воспроизведения',
'Playback aborted' : 'Воспроизведение прервано',
'Network or communication error' : 'Ошибка соединения',
'Decoding failed. Corruption or unsupported media' : 'Не удалось декодировать файл. Файл поврежден или данынй формат не поддерживается',
'Media source not supported' : 'Тип файла не поддерживается',
'Failed to play file' : 'Ошибка воспроизведения',
'Artist' : 'Артист',
'Album' : 'Альбом',
'Track' : 'Трек',
'Time' : 'Время',
'Media information query failed' : 'Ошибка в запросе медиа-информации',
'seek unavailable in format' : 'Перемотка недоступна в этом формате',
'The audio type is not supported: {0}' : 'Тип аудио не поддерживается: {0}'
},
sk_SK : {
'Playlist' : 'Zoznam skladieb',
'Playback aborted' : 'Prehrávanie prerušené',
'Network or communication error' : 'Chyba v sieťovej komunikácii',
'Decoding failed. Corruption or unsupported media' : 'Dekódovanie sa nepodarilo alebo médium je nepodporované',
'Media source not supported' : 'Zdrojové médium nie je podporované',
'Failed to play file' : 'Chyba pri prehrávaní súboru',
'Artist' : 'Umelec',
'Album' : 'Album',
'Track' : 'Skladba',
'Time' : 'Čas',
'Media information query failed' : 'Chyba pri získavaní informácii o médiu',
'seek unavailable in format' : 'Formát média nepodporuje preskakovanie (seek)',
'The audio type is not supported: {0}' : 'Nepodporovaný formát: {0}'
},
tr_TR : {
'Playlist' : 'Oynatma listesi',
'Playback aborted' : 'kayıt çalma/dinleme durduruldu',
'Network or communication error' : 'ağ veya iletişim hatası',
'Decoding failed. Corruption or unsupported media' : 'çözümleme hatası. Bozuk veya çalışmıyor.',
'Media source not supported' : 'medya kaynağı bulunamadı',
'Failed to play file' : 'Oynatma hatası',
'Artist' : 'Artist',
'Album' : 'Album',
'Track' : 'Parça',
'Time' : 'zaman',
'Media information query failed' : 'medya bilgisini elde etmede hata oluştu',
'seek unavailable in format' : 'bu formatta ileri saramazsınız',
'The audio type is not supported: {0}' : 'Bu format desteklenmiyor: {0}'
},
vi_VN : {
'Playlist' : 'Danh sách phát',
'Playback aborted' : 'Phát lại bị hủy',
'Network or communication error' : 'Mạng hoặc thông tin liên lạc bị lỗi',
'Decoding failed. Corruption or unsupported media' : 'Giải mã thất bại. Tập tin bị hỏng hoặc không được hỗ trợ',
'Media source not supported' : 'Nguồn phương tiện không được hỗ trợ',
'Failed to play file' : 'Không thể chơi tập tin',
'Artist' : 'Ca sĩ',
'Album' : 'Album',
'Track' : 'Bài hát',
'Time' : 'Thời gian',
'Media information query failed' : 'Truy vấn thông tin tập tin thất bại',
'seek unavailable in format' : 'không tua được trong định dạng này',
'The audio type is not supported: {0}' : 'Loại âm thanh {0} không được hỗ trợ'
}
};
function _() {
var args = Array.prototype.slice.call(arguments, 0);
args.unshift(_Locales);
return OSjs.API.__.apply(this, args);
}
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationMusicPlayer = OSjs.Applications.ApplicationMusicPlayer || {};
OSjs.Applications.ApplicationMusicPlayer._ = _;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.GUI, OSjs.Dialogs, OSjs.VFS);
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(DefaultApplication, DefaultApplicationWindow, Application, Window, Utils, API, VFS, GUI) {
'use strict';
// TODO: Playlist
// TODO: Server seek support: https://gist.github.com/codler/3906826
function formatTime(secs) {
var hr = Math.floor(secs / 3600);
var min = Math.floor((secs - (hr * 3600)) / 60);
var sec = Math.floor(secs - (hr * 3600) - (min * 60));
if (min < 10) {
min = '0' + min;
}
if (sec < 10) {
sec = '0' + sec;
}
return min + ':' + sec;
}
/////////////////////////////////////////////////////////////////////////////
// WINDOWS
/////////////////////////////////////////////////////////////////////////////
function ApplicationMusicPlayerWindow(app, metadata, scheme, file) {
DefaultApplicationWindow.apply(this, ['ApplicationMusicPlayerWindow', {
icon: metadata.icon,
title: metadata.name,
allow_drop: true,
allow_resize: false,
allow_maximize: false,
width: 370,
height: 260
}, app, scheme, file]);
this.updated = false;
}
ApplicationMusicPlayerWindow.prototype = Object.create(DefaultApplicationWindow.prototype);
ApplicationMusicPlayerWindow.constructor = DefaultApplicationWindow.prototype;
ApplicationMusicPlayerWindow.prototype.init = function(wm, app, scheme) {
var root = DefaultApplicationWindow.prototype.init.apply(this, arguments);
var self = this;
// Load and set up scheme (GUI) here
scheme.render(this, 'MusicPlayerWindow', root, null, null, {
_: OSjs.Applications.ApplicationMusicPlayer._
});
var label = this._scheme.find(this, 'LabelTime');
var seeker = this._scheme.find(this, 'Seek');
var player = scheme.find(this, 'Player');
var audio = player.$element.firstChild;
scheme.find(this, 'ButtonStart').set('disabled', true);
scheme.find(this, 'ButtonRew').set('disabled', true);
var buttonPlay = scheme.find(this, 'ButtonPlay').set('disabled', true).on('click', function() {
audio.play();
});
var buttonPause = scheme.find(this, 'ButtonPause').set('disabled', true).on('click', function() {
audio.pause();
});
scheme.find(this, 'ButtonFwd').set('disabled', true);
scheme.find(this, 'ButtonEnd').set('disabled', true);
seeker.on('change', function(ev) {
if ( audio && !audio.paused ) {
try {
audio.pause();
if ( ev ) {
audio.currentTime = ev.detail || 0;
}
audio.play();
} catch ( e ) {}
}
});
player.on('play', function(ev) {
seeker.set('disabled', false);
buttonPause.set('disabled', false);
buttonPlay.set('disabled', true);
});
player.on('ended', function(ev) {
seeker.set('disabled', true);
buttonPause.set('disabled', true);
});
player.on('pause', function(ev) {
seeker.set('disabled', true);
buttonPause.set('disabled', false);
buttonPlay.set('disabled', false);
});
player.on('loadeddata', function(ev) {
});
player.on('timeupdate', function(ev) {
self.updateTime(label, seeker);
});
player.on('error', function(ev) {
if ( !player.$element.src ) {
return;
}
var msg = null;
try {
switch ( ev.target.error.code ) {
case ev.target.error.MEDIA_ERR_ABORTED:
msg = OSjs.Applications.ApplicationMusicPlayer._('Playback aborted');
break;
case ev.target.error.MEDIA_ERR_NETWORK:
msg = OSjs.Applications.ApplicationMusicPlayer._('Network or communication error');
break;
case ev.target.error.MEDIA_ERR_DECODE:
msg = OSjs.Applications.ApplicationMusicPlayer._('Decoding failed. Corruption or unsupported media');
break;
case ev.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED:
msg = OSjs.Applications.ApplicationMusicPlayer._('Media source not supported');
break;
default:
msg = OSjs.API._('ERR_APP_UNKNOWN_ERROR');
break;
}
} catch ( e ) {
msg = OSjs.API._('ERR_GENERIC_APP_FATAL_FMT', e);
}
if ( msg ) {
API.createDialog('Alert', {title: self._title, message: msg}, null, self);
}
});
return root;
};
ApplicationMusicPlayerWindow.prototype.showFile = function(file, content) {
if ( !file || !content ) {
return;
}
var self = this;
var scheme = this._scheme;
var player = scheme.find(this, 'Player');
var seeker = this._scheme.find(this, 'Seek');
var audio = player.$element.firstChild;
var artist = file ? file.filename : '';
var album = file ? Utils.dirname(file.path) : '';
var labelArtist = this._scheme.find(this, 'LabelArtist').set('value', '');
var labelTitle = this._scheme.find(this, 'LabelTitle').set('value', artist);
var labelAlbum = this._scheme.find(this, 'LabelAlbum').set('value', album);
this._scheme.find(this, 'LabelTime').set('value', '');
seeker.set('min', 0);
seeker.set('max', 0);
seeker.set('value', 0);
this.updated = false;
function getInfo() {
self._app._api('info', {filename: file.path}, function(err, info) {
if ( info ) {
if ( info.Artist ) {
labelArtist.set('value', info.Artist);
}
if ( info.Album ) {
labelAlbum.set('value', info.Album);
}
if ( info.Title ) {
labelTitle.set('value', info.Track);
}
}
});
}
audio.src = content || '';
audio.play();
getInfo();
};
ApplicationMusicPlayerWindow.prototype.updateTime = function(label, seeker) {
if ( this._destroyed ) {
return; // Important because async
}
var player = this._scheme.find(this, 'Player');
var audio = player.$element.firstChild;
var total = audio.duration;
var current = audio.currentTime;
var unknown = false;
if ( isNaN(current) || !isFinite(current) ) {
current = 0.0;
}
if ( isNaN(total) || !isFinite(total) ) {
total = current;
unknown = true;
}
var time = Utils.format('{0} / {1}', formatTime(current), unknown ? '<unknown>' : formatTime(total));
if ( !this.updated ) {
seeker.set('min', 0);
seeker.set('max', total);
}
label.set('value', time);
seeker.set('value', current);
this.updated = true;
};
/////////////////////////////////////////////////////////////////////////////
// APPLICATION
/////////////////////////////////////////////////////////////////////////////
var ApplicationMusicPlayer = function(args, metadata) {
DefaultApplication.apply(this, ['ApplicationMusicPlayer', args, metadata, {
readData: false
}]);
};
ApplicationMusicPlayer.prototype = Object.create(DefaultApplication.prototype);
ApplicationMusicPlayer.constructor = DefaultApplication;
ApplicationMusicPlayer.prototype.destroy = function() {
return DefaultApplication.prototype.destroy.apply(this, arguments);
};
ApplicationMusicPlayer.prototype.init = function(settings, metadata, scheme) {
Application.prototype.init.call(this, settings, metadata, scheme);
var file = this._getArgument('file');
this._addWindow(new ApplicationMusicPlayerWindow(this, metadata, scheme, file));
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationMusicPlayer = OSjs.Applications.ApplicationMusicPlayer || {};
OSjs.Applications.ApplicationMusicPlayer.Class = Object.seal(ApplicationMusicPlayer);
})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);

View File

@ -0,0 +1,47 @@
{
"className": "ApplicationMusicPlayer",
"name": "Music Player",
"names": {
"bg_BG": "Музикален плеър",
"de_DE": "Musikspieler",
"es_ES": "Music Player",
"fr_FR": "Lecteur de musique",
"it_IT": "Lettore Musicale",
"ko_KR": "뮤직 플레이어",
"nl_NL": "Audio speler",
"no_NO": "Musikkspiller",
"pl_PL": "Odtwarzacz muzyki",
"ru_RU": "Аудиоплеер",
"sk_SK": "Prehrávač hudby",
"tr_TR": "Muzik Çalar",
"vi_VN": "Nghe nhạc"
},
"mime": [
"^audio",
"osjs\\/playlist"
],
"category": "multimedia",
"icon": "status/audio-volume-high.png",
"singular": true,
"compability": [
"audio"
],
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/MusicPlayer",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,88 @@
<application-window data-id="MusicPlayerWindow">
<gui-vbox>
<!-- MENU BAR -->
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-menu-bar>
<gui-menu-bar-entry data-label="LBL_FILE">
<gui-menu data-id="SubmenuFile">
<gui-menu-entry data-id="MenuOpen" data-label="LBL_OPEN"></gui-menu-entry>
<gui-menu-entry data-id="MenuClose" data-label="LBL_CLOSE"></gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
</gui-menu-bar>
</gui-vbox-container>
<!-- CONTENT -->
<gui-vbox-container data-shrink="1" data-basis="auto">
<gui-vbox data-id="Metadata">
<gui-vbox-container data-shrink="1">
<gui-hbox>
<gui-hbox-container data-basis="80">
<gui-label class="gui-bold">Artist</gui-label>
</gui-hbox-container>
<gui-hbox-container>
<gui-label data-id="LabelArtist"></gui-label>
</gui-hbox-container>
</gui-hbox>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-hbox>
<gui-hbox-container data-basis="80">
<gui-label class="gui-bold">Album</gui-label>
</gui-hbox-container>
<gui-hbox-container>
<gui-label data-id="LabelAlbum"></gui-label>
</gui-hbox-container>
</gui-hbox>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-hbox>
<gui-hbox-container data-basis="80">
<gui-label class="gui-bold">Title</gui-label>
</gui-hbox-container>
<gui-hbox-container>
<gui-label data-id="LabelTitle"></gui-label>
</gui-hbox-container>
</gui-hbox>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-hbox>
<gui-hbox-container data-basis="80">
<gui-label class="gui-bold">Time</gui-label>
</gui-hbox-container>
<gui-hbox-container>
<gui-label data-id="LabelTime"></gui-label>
</gui-hbox-container>
</gui-hbox>
</gui-vbox-container>
</gui-vbox>
</gui-vbox-container>
<gui-vbox-container data-expand="true" data-grow="1">
<gui-slider data-id="Seek"></gui-slider>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="center">
<gui-button-bar data-id="Controls">
<gui-button data-id="ButtonStart" data-icon="stock://32x32/actions/player_start.png" data-icon-size="32"></gui-button>
<gui-button data-id="ButtonRew" data-icon="stock://32x32/actions/player_rew.png" data-icon-size="32"></gui-button>
<gui-button data-id="ButtonPlay" data-icon="stock://32x32/actions/player_play.png" data-icon-size="32"></gui-button>
<gui-button data-id="ButtonPause" data-icon="stock://32x32/actions/player_pause.png" data-icon-size="32"></gui-button>
<gui-button data-id="ButtonFwd" data-icon="stock://32x32/actions/player_fwd.png" data-icon-size="32"></gui-button>
<gui-button data-id="ButtonEnd" data-icon="stock://32x32/actions/player_end.png" data-icon-size="32"></gui-button>
</gui-button-bar>
<gui-audio data-id="Player"></gui-audio>
</gui-vbox-container>
</gui-vbox>
</application-window>

View File

@ -0,0 +1,55 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2015, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
.ApplicationPreviewWindow gui-container {
overflow : hidden;
font-size : 0;
text-align : center;
}
.ApplicationPreviewWindow gui-video {
vertical-align : middle;
display : inline-block;
background : #000;
height : 100%;
width : 100%;
}
.ApplicationPreviewWindow gui-video > video {
height : 100%;
width : 100%;
display : inline-block;
}
.ApplicationPreviewWindow gui-image {
width : auto;
}
.ApplicationPreviewWindow gui-image[data-zoom="fit"] > img {
width : 100%;
}

View File

@ -0,0 +1,204 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(DefaultApplication, DefaultApplicationWindow, Application, Window, Utils, API, VFS, GUI) {
'use strict';
/////////////////////////////////////////////////////////////////////////////
// WINDOWS
/////////////////////////////////////////////////////////////////////////////
function ApplicationPreviewWindow(app, metadata, scheme, file) {
DefaultApplicationWindow.apply(this, ['ApplicationPreviewWindow', {
allow_drop: true,
icon: metadata.icon,
title: metadata.name,
width: 400,
height: 200
}, app, scheme, file]);
this.zoomLevel = 0;
this.isImage = true;
this.origWidth = 0;
this.origHeight = 0;
this.$view = null;
}
ApplicationPreviewWindow.prototype = Object.create(DefaultApplicationWindow.prototype);
ApplicationPreviewWindow.constructor = DefaultApplicationWindow.prototype;
ApplicationPreviewWindow.prototype.destroy = function() {
this.$view = null;
return DefaultApplicationWindow.prototype.destroy.apply(this, arguments);
};
ApplicationPreviewWindow.prototype.init = function(wm, app, scheme) {
var self = this;
var root = DefaultApplicationWindow.prototype.init.apply(this, arguments);
// Load and set up scheme (GUI) here
scheme.render(this, 'PreviewWindow', root);
this._find('ZoomIn').son('click', this, this.onZoomIn);
this._find('ZoomOut').son('click', this, this.onZoomOut);
this._find('ZoomFit').son('click', this, this.onZoomFit);
this._find('ZoomOriginal').son('click', this, this.onZoomOriginal);
var c = this._find('Content').$element;
Utils.$bind(c, 'mousewheel', function(ev, pos) {
if ( pos.z === 1 ) {
self.onZoomOut();
} else if ( pos.z === -1 ) {
self.onZoomIn();
}
});
return root;
};
ApplicationPreviewWindow.prototype.showFile = function(file, result) {
var self = this;
var root = this._scheme.find(this, 'Content').$element;
Utils.$empty(root);
if ( result ) {
this.zoomLevel = 0;
if ( file.mime.match(/^image/) ) {
this.isImage = true;
this.$view = this._scheme.create(self, 'gui-image', {src: result}, root, {
onload: function() {
self.origWidth = this.offsetWidth;
self.origHeight = this.offsetHeight;
self._resizeTo(this.offsetWidth, this.offsetHeight, true, false, this);
}
});
} else if ( file.mime.match(/^video/) ) {
this.isImage = false;
this.$view = this._scheme.create(self, 'gui-video', {src: result, controls: true, autoplay: true}, root, {
onload: function() {
self._resizeTo(this.offsetWidth, this.offsetHeight, true, false, this);
}
});
}
}
var toolbar = this._find('Toolbar');
if ( toolbar ) {
toolbar[this.isImage ? 'show' : 'hide']();
}
DefaultApplicationWindow.prototype.showFile.apply(this, arguments);
};
ApplicationPreviewWindow.prototype._onZoom = function(val) {
if ( !this.isImage || !this.$view ) {
return;
}
var zoom = ['in', 'out'].indexOf(val) !== -1;
var attr = 'zoomed';
var w = null;
if ( val === 'in' ) {
this.zoomLevel = Math.min(10, this.zoomLevel + 1);
} else if ( val === 'out' ) {
this.zoomLevel = Math.max(-10, this.zoomLevel - 1);
} else {
this.zoomLevel = 0;
attr = val === 'fit' ? val : '';
}
if ( zoom ) {
var z = this.zoomLevel;
if ( z === 0 ) {
z = 1;
w = this.origWidth;
} else if ( z > 0 ) {
z += 1;
w = this.origWidth * z;
} else if ( z < 0 ) {
z -= 1;
w = Math.abs(this.origWidth / z);
}
this._setTitle(this.currentFile.filename + ' (' + String(z * 100) + '%)', true);
} else {
this._setTitle(this.currentFile.filename, true);
}
this.$view.$element.setAttribute('data-zoom', attr);
this.$view.$element.firstChild.style.width = (w === null ? 'auto' : String(w) + 'px');
}
ApplicationPreviewWindow.prototype.onZoomIn = function() {
this._onZoom('in');
};
ApplicationPreviewWindow.prototype.onZoomOut = function() {
this._onZoom('out');
};
ApplicationPreviewWindow.prototype.onZoomFit = function() {
this._onZoom('fit');
};
ApplicationPreviewWindow.prototype.onZoomOriginal = function() {
this._onZoom();
};
/////////////////////////////////////////////////////////////////////////////
// APPLICATION
/////////////////////////////////////////////////////////////////////////////
var ApplicationPreview = function(args, metadata) {
DefaultApplication.apply(this, ['ApplicationPreview', args, metadata, {
readData: false
}]);
};
ApplicationPreview.prototype = Object.create(DefaultApplication.prototype);
ApplicationPreview.constructor = DefaultApplication;
ApplicationPreview.prototype.init = function(settings, metadata, scheme) {
Application.prototype.init.call(this, settings, metadata, scheme);
var file = this._getArgument('file');
this._addWindow(new ApplicationPreviewWindow(this, metadata, scheme, file));
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationPreview = OSjs.Applications.ApplicationPreview || {};
OSjs.Applications.ApplicationPreview.Class = Object.seal(ApplicationPreview);
})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);

View File

@ -0,0 +1,57 @@
{
"className": "ApplicationPreview",
"name": "Preview",
"description": "Preview image files",
"names": {
"bg_BG": "Преглед на изображения",
"de_DE": "Vorschau",
"fr_FR": "Visionneuse",
"it_IT": "Anteprima Immagini",
"ko_KR": "미리보기",
"nl_NL": "Foto viewer",
"no_NO": "Forhåndsviser",
"pl_PL": "Podgląd",
"ru_RU": "Просмотрщик",
"sk_SK": "Prehliadač obrázkov",
"tr_TR": "Önizle",
"vi_VN": "Trình xem ảnh"
},
"descriptions": {
"bg_BG": "Преглед на изображения",
"de_DE": "Bildervorschau",
"fr_FR": "Visionneuse de photos",
"it_IT": "Anteprima Immagini",
"ko_KR": "이미지 파일을 미리 봅니다",
"nl_NL": "Foto viewer",
"no_NO": "Forhåndsvisning av bilde-filer",
"pl_PL": "Podgląd zdjęć",
"ru_RU": "Просмотрщик изображений",
"sk_SK": "Prehliadač obrázkov",
"tr_TR": "resim dosyalarını önizle",
"vi_VN": "Trình xem ảnh"
},
"mime": [
"^image",
"^video"
],
"category": "multimedia",
"icon": "mimetypes/image.png",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Preview",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,37 @@
<application-window data-id="PreviewWindow">
<gui-vbox>
<!-- MENU BAR -->
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-menu-bar>
<gui-menu-bar-entry data-label="LBL_FILE">
<gui-menu data-id="SubmenuFile">
<gui-menu-entry data-id="MenuOpen" data-label="LBL_OPEN"></gui-menu-entry>
<gui-menu-entry data-id="MenuClose" data-label="LBL_CLOSE"></gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
</gui-menu-bar>
</gui-vbox-container>
<!-- TOOLBAR -->
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto" data-id="Toolbar">
<gui-toolbar>
<gui-button data-id="ZoomOriginal" data-icon="stock://16x16/actions/viewmag1.png"></gui-button>
<gui-button data-id="ZoomFit" data-icon="stock://16x16/actions/viewmagfit.png"></gui-button>
<gui-button data-id="ZoomOut" data-icon="stock://16x16/actions/zoom-out.png"></gui-button>
<gui-button data-id="ZoomIn" data-icon="stock://16x16/actions/zoom-in.png"></gui-button>
</gui-toolbar>
</gui-vbox-container>
<!-- CONTENT -->
<gui-vbox-container data-grow="1" data-shrink="0" data-basis="auto" data-fill="true">
<gui-container data-id="Content">
</gui-container>
</gui-vbox-container>
</gui-vbox>
</application-window>

View File

@ -0,0 +1,33 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2015, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
/*.ApplicationProcessViewerWindow application-window-content {
}*/

View File

@ -0,0 +1,137 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, VFS, GUI) {
'use strict';
/////////////////////////////////////////////////////////////////////////////
// WINDOWS
/////////////////////////////////////////////////////////////////////////////
function ApplicationProcessViewerWindow(app, metadata, scheme) {
Window.apply(this, ['ApplicationProcessViewerWindow', {
icon: metadata.icon,
title: metadata.name,
width: 400,
height: 300
}, app, scheme]);
this.interval = null;
}
ApplicationProcessViewerWindow.prototype = Object.create(Window.prototype);
ApplicationProcessViewerWindow.constructor = Window.prototype;
ApplicationProcessViewerWindow.prototype.init = function(wm, app, scheme) {
var root = Window.prototype.init.apply(this, arguments);
// Load and set up scheme (GUI) here
scheme.render(this, 'ProcessViewerWindow', root);
var view = scheme.find(this, 'View');
function update() {
var now = new Date();
var rows = [];
API.getProcesses().forEach(function(p) {
if ( p ) {
var alive = now - p.__started;
var iter = {
value: p.__pid,
id: p.__pid,
columns: [
{label: p.__pname},
{label: p.__pid.toString(), textalign: 'right'},
{label: alive.toString(), textalign: 'right'}
]
};
rows.push(iter);
}
});
view.patch(rows);
}
view.set('columns', [
{label: 'Name'},
{label: 'PID', size: '60px', textalign: 'right'},
{label: 'Alive', size: '60px', textalign: 'right'}
]);
scheme.find(this, 'ButtonKill').on('click', function() {
var selected = view.get('selected');
if ( selected && selected[0] && typeof selected[0].data !== 'undefined' ) {
API.kill(selected[0].data);
}
});
this.interval = setInterval(function() {
update();
}, 1000);
update();
return root;
};
ApplicationProcessViewerWindow.prototype.destroy = function() {
Window.prototype.destroy.apply(this, arguments);
this.interval = clearInterval(this.interval);
};
/////////////////////////////////////////////////////////////////////////////
// APPLICATION
/////////////////////////////////////////////////////////////////////////////
var ApplicationProcessViewer = function(args, metadata) {
Application.apply(this, ['ApplicationProcessViewer', args, metadata]);
};
ApplicationProcessViewer.prototype = Object.create(Application.prototype);
ApplicationProcessViewer.constructor = Application;
ApplicationProcessViewer.prototype.destroy = function() {
return Application.prototype.destroy.apply(this, arguments);
};
ApplicationProcessViewer.prototype.init = function(settings, metadata, scheme) {
Application.prototype.init.apply(this, arguments);
this._addWindow(new ApplicationProcessViewerWindow(this, metadata, scheme));
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationProcessViewer = OSjs.Applications.ApplicationProcessViewer || {};
OSjs.Applications.ApplicationProcessViewer.Class = Object.seal(ApplicationProcessViewer);
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);

View File

@ -0,0 +1,54 @@
{
"className": "ApplicationProcessViewer",
"name": "Process Viewer",
"description": "View running processes",
"names": {
"bg_BG": "Процеси",
"de_DE": "Prozess-Manager",
"fr_FR": "Gestionnaire de processus",
"it_IT": "Gestore Attività",
"ko_KR": "프로세스 관리자",
"nl_NL": "Proces manager",
"no_NO": "Prosess oversikt",
"pl_PL": "Procesy",
"ru_RU": "Менеджер процессов",
"sk_SK": "Správca procesov",
"tr_TR": "İşlemleri Görüntüle",
"vi_VN": "Xem tiến trình"
},
"descriptions": {
"bg_BG": "Преглед на процеси",
"de_DE": "Laufende Prozesse verwalten",
"fr_FR": "Visualiser les processus en cours",
"it_IT": "Mostri processi attivi",
"ko_KR": "실행 중인 프로세스를 관리합니다",
"nl_NL": "Bekijk de lopende processen",
"no_NO": "Se oversikt over kjørende prosesser",
"pl_PL": "Zobacz działające procesy",
"ru_RU": "Менеджер запущенных процессов",
"sk_SK": "Spravovanie bežiacich procesov",
"tr_TR": "çalışan işlemleri görüntüle",
"vi_VN": "Xem các tiến trình đang chạy"
},
"singular": true,
"category": "system",
"icon": "apps/gnome-monitor.png",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/ProcessViewer",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,16 @@
<application-window data-id="ProcessViewerWindow">
<gui-vbox>
<gui-vbox-container data-grow="1" data-fill="true">
<gui-list-view data-id="View" data-multiple="false">
</gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonKill">LBL_KILL</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-window>

View File

@ -0,0 +1,51 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function() {
'use strict';
/*
* See http://os.js.org/doc/tutorials/application-with-server-api.html
*/
//
// Run `app._api('test', {}, fn)` in client to reach this
//
module.exports.test = function(args, callback, request, response) {
callback(false, 'test');
};
//
// This is called whenever the HTTP server starts up
//
module.exports._onServerStart = function(server, instance, metadata) {
};
})();

View File

@ -0,0 +1,108 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2015, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
.ApplicationSettingsWindow application-window-content {
overflow : hidden;
}
.ApplicationSettingsWindow application-window-content gui-expander {
margin-bottom : 5px;
}
.ApplicationSettingsWindow application-window-content [data-id="ContainerButtons"],
.ApplicationSettingsWindow application-window-content [data-id="ContainerContent"] {
overflow : hidden;
display : none;
}
.ApplicationSettingsWindow application-window-content [data-id="SoundsList"] {
height : 150px;
}
.ApplicationSettingsWindow application-window-content [data-id="HotkeysList"] {
height : 200px;
}
.ApplicationSettingsWindow application-window-content [data-id="UsersList"],
.ApplicationSettingsWindow application-window-content [data-id="InstalledPackages"],
.ApplicationSettingsWindow application-window-content [data-id="PackagePaths"],
.ApplicationSettingsWindow application-window-content [data-id="PanelItems"],
.ApplicationSettingsWindow application-window-content [data-id="MountList"],
.ApplicationSettingsWindow application-window-content [data-id="SearchPaths"] {
height : 140px;
}
.ApplicationSettingsWindow application-window-content [data-id="ContainerContent"] > div {
overflow : auto;
height : 100%;
width : 100%;
}
.ApplicationSettingsWindow application-window-content [data-id="ContainerSelection"] {
}
.ApplicationSettingsWindow application-window-content .ListView {
overflow : hidden;
height : 100%;
width : 100%;
}
.ApplicationSettingsWindow application-window-content .ListView > div {
min-height : 32px;
}
.ApplicationSettingsWindow application-window-content .ListView > div > ul {
list-style : none;
margin : 0;
padding : 0;
pointer-events: none;
}
.ApplicationSettingsWindow application-window-content .ListView > div > ul > li {
box-sizing : border-box;
display : inline-block;
margin : 0;
padding : 10px;
text-align : center;
cursor : pointer;
width : 90px;
height : 70px;
pointer-events: all;
}
.ApplicationSettingsWindow application-window-content .ListView > div > ul > li * {
pointer-events : none;
}
.ApplicationSettingsWindow application-window-content .ListView > div > ul > li > span {
display : block;
}
.ApplicationSettingsWindow application-window-content .ListView > div > span {
display : block;
font-weight : bold;
margin-bottom : 5px;
pointer-events: none;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,57 @@
{
"className": "ApplicationSettings",
"preloadParallel": true,
"name": "Settings",
"mime": null,
"icon": "categories/applications-system.png",
"category": "system",
"singular": true,
"names": {
"bg_BG": "Настройки",
"de_DE": "Einstellungen",
"es_ES": "Settings",
"fr_FR": "Paramètres",
"it_IT": "Settaggi",
"ko_KR": "환경설정",
"nl_NL": "Instellingen",
"no_NO": "Instillinger",
"pl_PL": "Ustawienia",
"ru_RU": "Настройки",
"sk_SK": "Nastavenia",
"tr_TR": "Ayarlar",
"vi_VN": "Cài đặt"
},
"descriptions": {
"bg_BG": "Настройки",
"de_DE": "Einstellungen",
"es_ES": "Settings",
"fr_FR": "Paramètres",
"it_IT": "Settaggi",
"ko_KR": "환경설정",
"nl_NL": "Instellingen",
"no_NO": "Instillinger",
"pl_PL": "Ustawienia",
"ru_RU": "Настройки",
"sk_SK": "Nastavenia",
"tr_TR": "Program Ayarlarını düzenle",
"vi_VN": "Cài đặt"
},
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Settings",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,655 @@
<application-window data-id="SettingsWindow">
<gui-vbox>
<gui-vbox-container data-grow="1" data-fill="true" data-id="ContainerSelection">
</gui-vbox-container>
<gui-vbox-container data-grow="1" data-fill="true" data-id="ContainerContent">
<div data-module="Desktop">
<gui-expander data-label="LBL_WINDOWMANAGER">
<gui-fragment data-fragment-id="ModuleDesktopWMFragment"></gui-fragment>
</gui-expander>
<gui-expander data-label="LBL_DESKTOP">
<gui-fragment data-fragment-id="ModuleDesktopFragment"></gui-fragment>
</gui-expander>
<gui-expander data-label="Icon View">
<gui-fragment data-fragment-id="ModuleDesktopIconViewFragment"></gui-fragment>
</gui-expander>
</div>
<application-fragment data-id="ModuleDesktopWMFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label data-id="DesktopMarginLabel">Desktop Margin</gui-label>
<gui-slider data-id="DesktopMargin" data-min="0" data-max="50"></gui-slider>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label data-id="CornerSnappingLabel">Desktop Corner Snapping</gui-label>
<gui-slider data-id="CornerSnapping" data-min="0" data-max="50"></gui-slider>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label data-id="WindowSnappingLabel">Window Snapping</gui-label>
<gui-slider data-id="WindowSnapping" data-min="0" data-max="50"></gui-slider>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>Enable Window Switcher</gui-label>
<gui-switch data-id="EnableWindowSwitcher"></gui-switch>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>Enable Animations</gui-label>
<gui-switch data-id="EnableAnimations"></gui-switch>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<application-fragment data-id="ModuleDesktopIconViewFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>Enable Icon View</gui-label>
<gui-switch data-id="EnableIconView"></gui-switch>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>Invert Text Color</gui-label>
<gui-switch data-id="EnableIconViewInvert"></gui-switch>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<application-fragment data-id="ModuleDesktopFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>Enable TouchMenu</gui-label>
<gui-switch data-id="EnableTouchMenu"></gui-switch>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<div data-module="Input">
<gui-expander data-label="LBL_HOTKEYS">
<gui-fragment data-fragment-id="ModuleInputFragment"></gui-fragment>
</gui-expander>
<gui-expander data-label="LBL_HOTKEYS">
<gui-fragment data-fragment-id="ModuleInputShortcutsFragment"></gui-fragment>
</gui-expander>
</div>
<application-fragment data-id="ModuleInputFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>Enable Hotkeys</gui-label>
<gui-switch data-id="EnableHotkeys"></gui-switch>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<application-fragment data-id="ModuleInputShortcutsFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-grow="1">
<gui-list-view data-id="HotkeysList" data-multiple="false">
<gui-list-view-head>
<gui-list-view-row>
<gui-list-view-column>LBL_NAME</gui-list-view-column>
<gui-list-view-column data-size="100px" data-resizable="true">LBL_HOTKEY</gui-list-view-column>
</gui-list-view-row>
</gui-list-view-head>
</gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-button-bar>
<gui-button data-id="HotkeysEdit" data-icon="stock://16x16/actions/system-run.png"></gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<div data-module="Locale">
<gui-expander data-label="LBL_LOCALES">
<gui-fragment data-fragment-id="ModuleLocalesFragment"></gui-fragment>
</gui-expander>
</div>
<application-fragment data-id="ModuleLocalesFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>Language (requires restart)</gui-label>
<gui-select data-id="UserLocale"></gui-select>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<div data-module="Panel">
<gui-expander data-label="LBL_OPTIONS">
<gui-fragment data-fragment-id="ModulePanelAppearance"></gui-fragment>
</gui-expander>
<gui-expander data-label="LBL_ITEMS">
<gui-fragment data-fragment-id="ModulePanelItems"></gui-fragment>
</gui-expander>
</div>
<application-fragment data-id="ModulePanelAppearance">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_POSITION</gui-label>
<gui-select data-id="PanelPosition"></gui-select>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_AUTOHIDE</gui-label>
<gui-switch data-id="PanelAutoHide"></gui-switch>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_ONTOP</gui-label>
<gui-switch data-id="PanelOntop"></gui-switch>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_BACKGROUND_COLOR</gui-label>
<gui-input-modal data-id="PanelBackgroundColor"></gui-input-modal>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_TEXT_COLOR</gui-label>
<gui-input-modal data-id="PanelForegroundColor"></gui-input-modal>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_OPACITY</gui-label>
<gui-slider data-id="PanelOpacity" data-min="0" data-max="100"></gui-slider>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<application-fragment data-id="ModulePanelItems">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-grow="1">
<gui-list-view data-id="PanelItems" data-multiple="false"></gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-button-bar>
<gui-button data-id="PanelButtonAdd" data-icon="stock://16x16/actions/add.png"></gui-button>
<gui-button data-id="PanelButtonRemove" data-icon="stock://16x16/actions/remove.png"></gui-button>
<gui-button data-id="PanelButtonUp" data-icon="stock://16x16/actions/up.png"></gui-button>
<gui-button data-id="PanelButtonDown" data-icon="stock://16x16/actions/down.png"></gui-button>
<gui-button data-id="PanelButtonOptions" data-icon="stock://16x16/actions/system-run.png"></gui-button>
<gui-button data-id="PanelButtonReset" data-icon="stock://16x16/actions/revert.png"></gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<div data-module="Packages">
<gui-expander data-label="Package Visibility">
<gui-fragment data-fragment-id="ModulePackageVisibilityFragment"></gui-fragment>
</gui-expander>
<gui-expander data-label="Package Locations">
<gui-fragment data-fragment-id="ModulePackagePathsFragment"></gui-fragment>
</gui-expander>
</div>
<application-fragment data-id="ModulePackageVisibilityFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-grow="1">
<gui-list-view data-id="InstalledPackages" data-multiple="false">
<gui-list-view-head>
<gui-list-view-row>
<gui-list-view-column data-size="40px">LBL_HIDE</gui-list-view-column>
<gui-list-view-column data-size="100px" data-resizable="true">LBL_APPLICATION</gui-list-view-column>
<gui-list-view-column data-size="50px" data-resizable="true">LBL_SCOPE</gui-list-view-column>
<gui-list-view-column>Name</gui-list-view-column>
</gui-list-view-row>
</gui-list-view-head>
</gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-button-bar>
<gui-button data-id="ButtonUninstall" data-disabled="true">LBL_UNINSTALL</gui-button>
<gui-button data-id="ButtonSaveHidden">LBL_SAVE</gui-button>
<gui-button data-id="ButtonRegen">LBL_REGENERATE</gui-button>
<gui-button data-id="ButtonZipInstall">Install from zip</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<application-fragment data-id="ModulePackagePathsFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-grow="1">
<gui-list-view data-id="PackagePaths" data-multiple="false"></gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-button-bar>
<gui-button data-id="PackagePathsAdd" data-icon="stock://16x16/actions/add.png"></gui-button>
<gui-button data-id="PackagePathsRemove" data-icon="stock://16x16/actions/remove.png"></gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<div data-module="Store">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-grow="1" data-fill="true">
<gui-list-view data-id="AppStorePackages" data-multiple="false">
<gui-list-view-head>
<gui-list-view-row>
<gui-list-view-column>LBL_NAME</gui-list-view-column>
<gui-list-view-column data-size="100px">LBL_REPOSITORY</gui-list-view-column>
<gui-list-view-column data-size="50px" data-resizable="true">LBL_VERSION</gui-list-view-column>
<gui-list-view-column data-size="100px" data-resizable="true">LBL_AUTHOR</gui-list-view-column>
</gui-list-view-row>
</gui-list-view-head>
</gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-button-bar>
<gui-button data-id="ButtonStoreRefresh">LBL_REFRESH</gui-button>
<gui-button data-id="ButtonStoreInstall">LBL_INSTALL</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</div>
<div data-module="Search">
<gui-expander data-label="Search Options">
<gui-fragment data-fragment-id="ModuleSearchOptionsFragment"></gui-fragment>
</gui-expander>
<gui-expander data-label="Search Locations">
<gui-fragment data-fragment-id="ModuleSearchLocationsFragment"></gui-fragment>
</gui-expander>
</div>
<application-fragment data-id="ModuleSearchOptionsFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>Enable Application Search</gui-label>
<gui-switch data-id="SearchEnableApplications"></gui-switch>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>Enable File Search</gui-label>
<gui-switch data-id="SearchEnableFiles"></gui-switch>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<application-fragment data-id="ModuleSearchLocationsFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-grow="1">
<gui-list-view data-id="SearchPaths" data-multiple="false"></gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-button-bar>
<gui-button data-id="SearchAdd" data-icon="stock://16x16/actions/add.png"></gui-button>
<gui-button data-id="SearchRemove" data-icon="stock://16x16/actions/remove.png"></gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<div data-module="Sounds">
<gui-expander data-label="Sound Theme">
<gui-fragment data-fragment-id="ModuleSoundThemeFragment"></gui-fragment>
</gui-expander>
<gui-expander data-label="LBL_SOUNDS">
<gui-fragment data-fragment-id="ModuleSoundMapFragment"></gui-fragment>
</gui-expander>
</div>
<application-fragment data-id="ModuleSoundThemeFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-select data-id="SoundThemeName"></gui-select>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>Enable Sounds</gui-label>
<gui-switch data-id="EnableSounds"></gui-switch>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<application-fragment data-id="ModuleSoundMapFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-grow="1">
<gui-list-view data-id="SoundsList" data-multiple="false">
<gui-list-view-head>
<gui-list-view-row>
<gui-list-view-column>LBL_NAME</gui-list-view-column>
<gui-list-view-column data-size="100px" data-resizable="true">LBL_FILENAME</gui-list-view-column>
</gui-list-view-row>
</gui-list-view-head>
</gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-button-bar>
<gui-button data-id="SoundsEdit" data-icon="stock://16x16/actions/system-run.png"></gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<div data-module="Theme">
<gui-expander data-label="LBL_THEME">
<gui-fragment data-fragment-id="ModuleThemeFragment"></gui-fragment>
</gui-expander>
<gui-expander data-label="LBL_BACKGROUND">
<gui-fragment data-fragment-id="ModuleBackgroundFragment"></gui-fragment>
</gui-expander>
<gui-expander data-label="LBL_FONTS">
<gui-fragment data-fragment-id="ModuleFontFragment"></gui-fragment>
</gui-expander>
</div>
<application-fragment data-id="ModuleThemeFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_THEME</gui-label>
<gui-select data-id="StyleThemeName"></gui-select>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_ICONS</gui-label>
<gui-select data-id="IconThemeName"></gui-select>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<application-fragment data-id="ModuleBackgroundFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_BACKGROUND_IMAGE</gui-label>
<gui-input-modal data-id="BackgroundImage"></gui-input-modal>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_BACKGROUND_COLOR</gui-label>
<gui-input-modal data-id="BackgroundColor"></gui-input-modal>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>Background Type</gui-label>
<gui-select data-id="BackgroundStyle"></gui-select>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<application-fragment data-id="ModuleFontFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_FONT</gui-label>
<gui-input-modal data-id="FontName"></gui-input-modal>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<div data-module="User">
<gui-expander data-label="LBL_INFORMATION">
<gui-fragment data-fragment-id="ModuleUserInformationFragment"></gui-fragment>
</gui-expander>
</div>
<application-fragment data-id="ModuleUserInformationFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_ID</gui-label>
<gui-text data-id="UserID" data-disabled="true"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_NAME</gui-label>
<gui-text data-id="UserName" data-disabled="true"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_USERNAME</gui-label>
<gui-text data-id="UserUsername" data-disabled="true"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_GROUPS</gui-label>
<gui-text data-id="UserGroups" data-disabled="true"></gui-text>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<div data-module="VFS">
<gui-expander data-label="File View Options">
<gui-fragment data-fragment-id="ModuleVFSViewOptionsFragment"></gui-fragment>
</gui-expander>
<gui-expander data-label="LBL_MOUNTS">
<gui-fragment data-fragment-id="ModuleVFSMountsFragment"></gui-fragment>
</gui-expander>
</div>
<application-fragment data-id="ModuleVFSViewOptionsFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_SHOW_HIDDENFILES</gui-label>
<gui-switch data-id="ShowHiddenFiles"></gui-switch>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-label>LBL_SHOW_FILEEXTENSIONS</gui-label>
<gui-switch data-id="ShowFileExtensions"></gui-switch>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<application-fragment data-id="ModuleVFSMountsFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-grow="1">
<gui-list-view data-id="MountList" data-multiple="false"></gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-button-bar>
<gui-button data-id="MountAdd" data-icon="stock://16x16/actions/add.png"></gui-button>
<gui-button data-id="MountRemove" data-icon="stock://16x16/actions/remove.png"></gui-button>
<gui-button data-id="MountEdit" data-icon="stock://16x16/actions/system-run.png"></gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
<div data-module="Users">
<gui-expander data-label="LBL_USERS">
<gui-fragment data-fragment-id="ModuleUsersFragment"></gui-fragment>
</gui-expander>
</div>
<application-fragment data-id="ModuleUsersFragment">
<gui-vbox class="block-label">
<gui-vbox-container data-shrink="1" data-grow="1">
<gui-list-view data-id="UsersList" data-multiple="false">
<gui-list-view-head>
<gui-list-view-row>
<gui-list-view-column data-size="100px">LBL_USERNAME</gui-list-view-column>
<gui-list-view-column>LBL_NAME</gui-list-view-column>
</gui-list-view-row>
</gui-list-view-head>
</gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-expand="true">
<gui-button-bar>
<gui-button data-id="UsersAdd" data-icon="stock://16x16/actions/add.png"></gui-button>
<gui-button data-id="UsersRemove" data-icon="stock://16x16/actions/remove.png"></gui-button>
<gui-button data-id="UsersEdit" data-icon="stock://16x16/actions/system-run.png"></gui-button>
<gui-button data-id="UsersPasswd" data-icon="stock://16x16/status/dialog-password.png"></gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-fragment>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end" data-id="ContainerButtons">
<gui-button-bar>
<gui-button data-id="ButtonOK">LBL_SAVE</gui-button>
<gui-button data-id="ButtonCancel">LBL_BACK</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-window>
<application-window data-id="PanelSettingWindow">
<gui-vbox>
<gui-vbox-container data-grow="1" data-fill="true">
<gui-list-view data-id="List" data-multiple="false">
</gui-list-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonPanelOK">LBL_OK</gui-button>
<gui-button data-id="ButtonPanelCancel">LBL_CANCEL</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-window>
<application-window data-id="SettingsMountWindow">
<gui-vbox>
<gui-vbox-container data-grow="1" data-shrink="1" data-fill="true">
<gui-scroll-view>
<gui-vbox>
<gui-vbox-container data-shrink="1">
<gui-label>LBL_TYPE</gui-label>
</gui-vbox-container>
<gui-vbox-container data-expand="true">
<gui-select data-id="MountType">
<gui-select-option data-value="WebDAV">WebDAV (OwnCloud)</gui-select-option>
</gui-select>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-label>LBL_NAME</gui-label>
</gui-vbox-container>
<gui-vbox-container data-expand="true">
<gui-text data-id="MountName" data-placeholder="mydav"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-label>LBL_DESCRIPTION</gui-label>
</gui-vbox-container>
<gui-vbox-container data-expand="true">
<gui-text data-id="MountDescription" data-placeholder="My DAV"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-grow="1">
<gui-expander data-label="LBL_SETTINGS" data-expanded="false">
<gui-vbox>
<gui-vbox-container data-shrink="1">
<gui-label>LBL_HOST</gui-label>
</gui-vbox-container>
<gui-vbox-container data-expand="true">
<gui-text data-id="MountHost" data-placeholder="http://127.0.0.1/remote.php/webdav/"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-label>LBL_NAMESPACE</gui-label>
</gui-vbox-container>
<gui-vbox-container data-expand="true">
<gui-text data-id="MountNamespace" data-placeholder="DAV"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-label>LBL_USERNAME</gui-label>
</gui-vbox-container>
<gui-vbox-container data-expand="true">
<gui-text data-id="MountUsername" data-placeholder="username"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-label>LBL_PASSWORD</gui-label>
</gui-vbox-container>
<gui-vbox-container data-expand="true">
<gui-password data-id="MountPassword" data-placeholder="password"></gui-password>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-label>CORS Enabled</gui-label>
</gui-vbox-container>
<gui-vbox-container data-expand="true">
<gui-switch data-id="MountCORS"></gui-switch>
</gui-vbox-container>
</gui-vbox>
</gui-expander>
</gui-vbox-container>
</gui-vbox>
</gui-scroll-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonOK">LBL_CONNECT</gui-button>
<gui-button data-id="ButtonClose">LBL_CLOSE</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-window>
<application-window data-id="SettingsUserWindow">
<gui-vbox>
<gui-vbox-container data-grow="1" data-shrink="1" data-fill="true">
<gui-scroll-view>
<gui-vbox>
<gui-vbox-container data-shrink="1">
<gui-label>LBL_USERNAME</gui-label>
</gui-vbox-container>
<gui-vbox-container data-expand="true">
<gui-text data-id="UserUsername" data-placeholder="johndoe"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-label>LBL_NAME</gui-label>
</gui-vbox-container>
<gui-vbox-container data-expand="true">
<gui-text data-id="UserName" data-placeholder="John Doe"></gui-text>
</gui-vbox-container>
<gui-vbox-container data-shrink="1">
<gui-label>LBL_GROUPS</gui-label>
</gui-vbox-container>
<gui-vbox-container data-expand="true">
<gui-text data-id="UserGroups" data-placeholder="[]"></gui-text>
</gui-vbox-container>
</gui-vbox>
</gui-scroll-view>
</gui-vbox-container>
<gui-vbox-container data-shrink="1" data-align="end">
<gui-button-bar>
<gui-button data-id="ButtonOK">LBL_SAVE</gui-button>
<gui-button data-id="ButtonClose">LBL_CLOSE</gui-button>
</gui-button-bar>
</gui-vbox-container>
</gui-vbox>
</application-window>

View File

@ -0,0 +1,33 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2015, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
/*.ApplicationTextpadWindow {
}*/

View File

@ -0,0 +1,119 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(DefaultApplication, DefaultApplicationWindow, Application, Window, Utils, API, VFS, GUI) {
'use strict';
/////////////////////////////////////////////////////////////////////////////
// WINDOWS
/////////////////////////////////////////////////////////////////////////////
function ApplicationTextpadWindow(app, metadata, scheme, file) {
DefaultApplicationWindow.apply(this, ['ApplicationTextpadWindow', {
allow_drop: true,
icon: metadata.icon,
title: metadata.name,
width: 450,
height: 300
}, app, scheme, file]);
}
ApplicationTextpadWindow.prototype = Object.create(DefaultApplicationWindow.prototype);
ApplicationTextpadWindow.constructor = DefaultApplicationWindow.prototype;
ApplicationTextpadWindow.prototype.init = function(wmRef, app, scheme) {
var root = DefaultApplicationWindow.prototype.init.apply(this, arguments);
var self = this;
// Load and set up scheme (GUI) here
scheme.render(this, 'TextpadWindow', root);
scheme.find(this, 'Text').on('change', function() {
self.hasChanged = true;
});
return root;
};
ApplicationTextpadWindow.prototype.updateFile = function(file) {
DefaultApplicationWindow.prototype.updateFile.apply(this, arguments);
this._scheme.find(this, 'Text').$element.focus();
};
ApplicationTextpadWindow.prototype.showFile = function(file, content) {
this._scheme.find(this, 'Text').set('value', content || '');
DefaultApplicationWindow.prototype.showFile.apply(this, arguments);
};
ApplicationTextpadWindow.prototype.getFileData = function() {
return this._scheme.find(this, 'Text').get('value');
};
ApplicationTextpadWindow.prototype._focus = function() {
if ( DefaultApplicationWindow.prototype._focus.apply(this, arguments) ) {
if ( this._scheme ) {
var input = this._scheme.find(this, 'Text').$element;
if ( input ) {
input.focus();
}
}
return true;
}
return false;
};
/////////////////////////////////////////////////////////////////////////////
// APPLICATION
/////////////////////////////////////////////////////////////////////////////
var ApplicationTextpad = function(args, metadata) {
DefaultApplication.apply(this, ['ApplicationTextpad', args, metadata, {
extension: 'txt',
mime: 'text/plain',
filename: 'New text file.txt'
}]);
};
ApplicationTextpad.prototype = Object.create(DefaultApplication.prototype);
ApplicationTextpad.constructor = DefaultApplication;
ApplicationTextpad.prototype.init = function(settings, metadata, scheme) {
Application.prototype.init.call(this, settings, metadata, scheme);
var file = this._getArgument('file');
this._addWindow(new ApplicationTextpadWindow(this, metadata, scheme, file));
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationTextpad = OSjs.Applications.ApplicationTextpad || {};
OSjs.Applications.ApplicationTextpad.Class = Object.seal(ApplicationTextpad);
})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);

View File

@ -0,0 +1,62 @@
{
"className": "ApplicationTextpad",
"name": "Textpad",
"description": "Simple text editor",
"names": {
"bg_BG": "Текстов редактор",
"de_DE": "Texteditor",
"fr_FR": "Éditeur de texte",
"it_IT": "Editor Testi",
"ko_KR": "텍스트패드",
"nl_NL": "Notities",
"no_NO": "Tekstblokk",
"pl_PL": "Notatnik",
"ru_RU": "Редактор текста",
"sk_SK": "Poznámkový blok",
"tr_TR": "Basit Bir Metin Düzenleyicisi",
"vi_VN": "Trình sửa văn bản"
},
"descriptions": {
"bg_BG": "Стандартен текстов редактор",
"de_DE": "Einfacher Texteditor",
"fr_FR": "Éditeur de texte simple",
"it_IT": "Semplice editor di testi",
"ko_KR": "간단한 텍스트 편집기",
"nl_NL": "Eenvoudige Tekstverwerker",
"no_NO": "Simpel tekst redigering",
"pl_PL": "Prosty edytor tekstu",
"ru_RU": "Простой текстовый редактор",
"sk_SK": "Jednoduchý textový editor",
"tr_TR": "Basit Bir Metin Düzenleyicisi",
"vi_VN": "Trình sửa văn bản đơn giản"
},
"mime": [
"^text",
"inode\\/x\\-empty",
"application\\/x\\-empty",
"application\\/x\\-lua",
"application\\/x\\-python",
"application\\/javascript",
"application\\/json"
],
"category": "utilities",
"icon": "apps/accessories-text-editor.png",
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Textpad",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,36 @@
<application-window data-id="TextpadWindow">
<gui-vbox>
<!-- MENU BAR -->
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-menu-bar>
<gui-menu-bar-entry data-label="LBL_FILE">
<gui-menu data-id="SubmenuFile">
<gui-menu-entry data-id="MenuNew" data-label="LBL_NEW"></gui-menu-entry>
<gui-menu-entry data-id="MenuOpen" data-label="LBL_OPEN"></gui-menu-entry>
<gui-menu-entry data-id="MenuSave" data-label="LBL_SAVE"></gui-menu-entry>
<gui-menu-entry data-id="MenuSaveAs" data-label="LBL_SAVEAS"></gui-menu-entry>
<gui-menu-entry data-id="MenuClose" data-label="LBL_CLOSE"></gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
</gui-menu-bar>
</gui-vbox-container>
<!-- CONTENT -->
<gui-vbox-container data-grow="1" data-shrink="0" data-basis="auto" data-fill="true">
<gui-textarea data-id="Text"></gui-textarea>
</gui-vbox-container>
<!-- STATUSBAR -->
<!--
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-statusbar data-id="Statusbar"></gui-statusbar>
</gui-vbox-container>
-->
</gui-vbox>
</application-window>

View File

@ -0,0 +1,33 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2015, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
/*.ApplicationWriterWindow application-window-content {
}*/

View File

@ -0,0 +1,461 @@
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, GUI, Dialogs, VFS, Utils) {
// jscs:disable validateQuoteMarks
'use strict';
/////////////////////////////////////////////////////////////////////////////
// LOCALES
/////////////////////////////////////////////////////////////////////////////
var _Locales = {
bg_BG : {
'Insert URL' : 'Въведи URL'
},
de_DE : {
'Insert URL' : 'URL einfügen'
},
es_ES : {
'Insert URL' : 'Insertar URL'
},
fr_FR : {
'Insert URL' : 'Insérer une URL'
},
ar_DZ : {
'Insert URL' : 'أدخل رابط'
},
it_IT : {
'Insert URL' : 'Inserisci URL'
},
ko_KR : {
'Insert URL' : '링크 삽입'
},
nl_NL : {
'Insert URL' : 'URL invoegen'
},
no_NO : {
'Insert URL' : 'Sett inn URL'
},
pl_PL : {
'Insert URL' : 'Wpisz URL'
},
ru_RU : {
'Insert URL' : 'Вставить ссылку'
},
sk_SK : {
'Insert URL' : 'Vložiť URL'
},
tr_TR : {
'Insert URL' : 'URL ekle'
},
vi_VN : {
'Insert URL' : 'Thêm URL'
}
};
function _() {
var args = Array.prototype.slice.call(arguments, 0);
args.unshift(_Locales);
return OSjs.API.__.apply(this, args);
}
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationWriter = OSjs.Applications.ApplicationWriter || {};
OSjs.Applications.ApplicationWriter._ = _;
})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.GUI, OSjs.Dialogs, OSjs.VFS, OSjs.Utils);
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(DefaultApplication, DefaultApplicationWindow, Application, Window, Utils, API, VFS, GUI) {
'use strict';
/////////////////////////////////////////////////////////////////////////////
// WINDOWS
/////////////////////////////////////////////////////////////////////////////
function ApplicationWriterWindow(app, metadata, scheme, file) {
/*eslint dot-notation: "off"*/
var config = OSjs.Core.getConfig();
DefaultApplicationWindow.apply(this, ['ApplicationWriterWindow', {
allow_drop: true,
icon: metadata.icon,
title: metadata.name,
width: 550,
height: 400
}, app, scheme, file]);
this.checkChangeLength = -1;
this.checkChangeInterval = null;
this.color = {
background : '#ffffff',
foreground : '#000000'
};
this.font = {
name: config.Fonts['default'],
size: 3
};
}
ApplicationWriterWindow.prototype = Object.create(DefaultApplicationWindow.prototype);
ApplicationWriterWindow.constructor = DefaultApplicationWindow.prototype;
ApplicationWriterWindow.prototype.destroy = function() {
this.checkChangeInterval = clearInterval(this.checkChangeInterval);
return DefaultApplicationWindow.prototype.destroy.apply(this, arguments);
};
ApplicationWriterWindow.prototype.init = function(wmRef, app, scheme) {
var root = DefaultApplicationWindow.prototype.init.apply(this, arguments);
var self = this;
var _ = OSjs.Applications.ApplicationWriter._;
// Load and set up scheme (GUI) here
scheme.render(this, 'WriterWindow', root, null, null, {
_: _
});
var text = scheme.find(this, 'Text');
var buttons = {
'text-bold': {
command: 'bold'
},
'text-italic': {
command: 'italic'
},
'text-underline': {
command: 'underline'
},
'text-strikethrough': {
command: 'strikeThrough'
},
'justify-left': {
command: 'justifyLeft'
},
'justify-center': {
command: 'justifyCenter'
},
'justify-right': {
command: 'justifyRight'
},
'indent': {
command: 'indent'
},
'unindent': {
command: 'outdent'
}
};
var menuEntries = {
'MenuUndo': function() {
text._call('command', ['undo', false]);
},
'MenuRedo': function() {
text._call('command', ['redo', false]);
},
'MenuCopy': function() {
text._call('command', ['copy', false]);
},
'MenuCut': function() {
text._call('command', ['cut', false]);
},
'MenuDelete': function() {
text._call('command', ['delete', false]);
},
'MenuPaste': function() {
text._call('command', ['paste', false]);
},
'MenuUnlink': function() {
text._call('command', ['unlink', false]);
},
'MenuInsertOL': function() {
text._call('command', ['insertOrderedList', false]);
},
'MenuInsertUL': function() {
text._call('command', ['insertUnorderedList', false]);
},
'MenuInsertImage': function() {
API.createDialog('File', {
filter: ['^image']
}, function(ev, button, result) {
if ( button !== 'ok' || !result ) {
return;
}
VFS.url(result, function(error, url) {
text._call('command', ['insertImage', false, url]);
});
}, self);
},
'MenuInsertLink': function() {
API.createDialog('Input', {
message: _('Insert URL'),
placeholder: 'https://os.js.org'
}, function(ev, button, result) {
if ( button !== 'ok' || !result ) {
return;
}
text._call('command', ['createLink', false, result]);
}, self);
}
};
function menuEvent(ev) {
if ( menuEntries[ev.detail.id] ) {
menuEntries[ev.detail.id]();
}
}
scheme.find(this, 'SubmenuEdit').on('select', menuEvent);
scheme.find(this, 'SubmenuInsert').on('select', menuEvent);
function getSelectionStyle() {
function _call(cmd) {
return text._call('query', [cmd]);
}
var style = {
fontName: ((_call('fontName') || '').split(',')[0]).replace(/^'/, '').replace(/'$/, ''),
fontSize: parseInt(_call('fontSize'), 10) || self.font.size,
foreColor: _call('foreColor'),
hiliteColor: _call('hiliteColor')
};
Object.keys(buttons).forEach(function(b) {
var button = buttons[b];
style[button.command] = {
button: b,
value:_call(button.command)
};
});
return style;
}
function createColorDialog(current, cb) {
self._toggleDisabled(true);
API.createDialog('Color', {
color: current
}, function(ev, button, result) {
self._toggleDisabled(false);
if ( button === 'ok' && result ) {
cb(result.hex);
}
}, self);
}
function createFontDialog(current, cb) {
self._toggleDisabled(true);
API.createDialog('Font', {
fontSize: self.font.size,
fontName: self.font.name,
minSize: 1,
maxSize: 8,
unit: 'null'
}, function(ev, button, result) {
self._toggleDisabled(false);
if ( button === 'ok' && result ) {
cb(result);
}
}, self);
}
var back = scheme.find(this, 'Background').on('click', function() {
createColorDialog(self.color.background, function(hex) {
text._call('command', ['hiliteColor', false, hex]);
self.color.background = hex;
back.set('value', hex);
});
});
var front = scheme.find(this, 'Foreground').on('click', function() {
createColorDialog(self.color.foreground, function(hex) {
text._call('command', ['foreColor', false, hex]);
self.color.foreground = hex;
front.set('value', hex);
});
});
var font = scheme.find(this, 'Font').on('click', function() {
createFontDialog(null, function(font) {
text._call('command', ['fontName', false, font.fontName]);
text._call('command', ['fontSize', false, font.fontSize]);
self.font.name = font.fontName;
self.font.size = font.fontSize;
});
});
root.querySelectorAll('gui-toolbar > gui-button').forEach(function(b) {
var id = b.getAttribute('data-id');
var button = buttons[id];
if ( button ) {
(new GUI.Element(b)).on('click', function() {
text._call('command', [button.command]);
}).on('mousedown', function(ev) {
ev.preventDefault();
});
}
});
function updateToolbar(style) {
back.set('value', style.hiliteColor);
front.set('value', style.foreColor);
if ( style.fontName ) {
font.set('label', Utils.format('{0} ({1})', style.fontName, style.fontSize.toString()));
}
}
function updateSelection() {
var style = getSelectionStyle();
updateToolbar(style);
}
back.set('value', this.color.background);
front.set('value', this.color.foreground);
font.set('label', Utils.format('{0} ({1})', this.font.name, this.font.size.toString()));
text.on('selection', function() {
updateSelection();
});
this.checkChangeInterval = setInterval(function() {
if ( self.hasChanged ) {
return;
}
if ( self.checkChangeLength < 0 ) {
self.checkChangeLength = text.get('value').length;
}
var len = text.get('value').length;
if ( len !== self.checkChangeLength ) {
self.hasChanged = true;
}
self.checkChangeLength = len;
}, 500);
return root;
};
ApplicationWriterWindow.prototype.updateFile = function(file) {
DefaultApplicationWindow.prototype.updateFile.apply(this, arguments);
try {
var el = this._scheme.find(this, 'Text');
el.$element.focus();
} catch ( e ) {}
this.checkChangeLength = -1;
};
ApplicationWriterWindow.prototype.showFile = function(file, content) {
this._scheme.find(this, 'Text').set('value', content || '');
DefaultApplicationWindow.prototype.showFile.apply(this, arguments);
};
ApplicationWriterWindow.prototype.getFileData = function() {
return this._scheme.find(this, 'Text').get('value');
};
ApplicationWriterWindow.prototype._focus = function(file, content) {
if ( DefaultApplicationWindow.prototype._focus.apply(this, arguments) ) {
this._scheme.find(this, 'Text').focus();
return true;
}
return false;
};
/////////////////////////////////////////////////////////////////////////////
// APPLICATION
/////////////////////////////////////////////////////////////////////////////
function ApplicationWriter(args, metadata) {
DefaultApplication.apply(this, ['ApplicationWriter', args, metadata, {
extension: 'odoc',
mime: 'osjs/document',
filename: 'New text file.odoc'
}]);
}
ApplicationWriter.prototype = Object.create(DefaultApplication.prototype);
ApplicationWriter.constructor = DefaultApplication;
ApplicationWriter.prototype.destroy = function() {
return DefaultApplication.prototype.destroy.apply(this, arguments);
};
ApplicationWriter.prototype.init = function(settings, metadata, scheme) {
Application.prototype.init.call(this, settings, metadata, scheme);
var file = this._getArgument('file');
this._addWindow(new ApplicationWriterWindow(this, metadata, scheme, file));
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationWriter = OSjs.Applications.ApplicationWriter || {};
OSjs.Applications.ApplicationWriter.Class = Object.seal(ApplicationWriter);
})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);

View File

@ -0,0 +1,60 @@
{
"className": "ApplicationWriter",
"name": "Writer",
"description": "Write rich text documents",
"names": {
"bg_BG": "Текст",
"de_DE": "Writer",
"fr_FR": "Traitement de texte",
"it_IT": "Editor Testi",
"ko_KR": "글쓰기",
"nl_NL": "Tekstverwerker",
"no_NO": "Writer",
"pl_PL": "Writer",
"ru_RU": "Текстовый процессор",
"sk_SK": "Writer",
"tr_TR": "Writer",
"vi_VN": "Viết"
},
"descriptions": {
"bg_BG": "Писанене на обогатен текст",
"de_DE": "Verfassen Sie Rich-Text-Dokumente",
"fr_FR": "Traitement de texte riche",
"it_IT": "Scrivi documenti di testo formattati",
"ko_KR": "리치 텍스트 문서 작성",
"nl_NL": "Tekst verwerker met opmaak",
"no_NO": "Skriv riktekst dokumenter",
"pl_PL": "Twórz dokumenty rich text",
"ru_RU": "Текстовый процессор",
"sk_SK": "Editor na tvorbu Rich-Text dokumentov",
"tr_TR": "Gelişmiş dökümanlar oluşturun",
"vi_VN": "Xem, chỉnh sửa văn bản"
},
"mime": [
"^text",
"osjs\\/document"
],
"category": "office",
"icon": "apps/libreoffice34-writer.png",
"compability": [
"richtext"
],
"preload": [
{
"type": "javascript",
"src": "combined.js"
},
{
"type": "stylesheet",
"src": "combined.css"
},
{
"src": "scheme.html",
"type": "scheme"
}
],
"type": "application",
"path": "default/Writer",
"build": {},
"repo": "default"
}

View File

@ -0,0 +1,90 @@
<application-window data-id="WriterWindow">
<gui-vbox>
<!-- MENU BAR -->
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-menu-bar>
<gui-menu-bar-entry data-label="LBL_FILE">
<gui-menu data-id="SubmenuFile">
<gui-menu-entry data-id="MenuNew" data-label="LBL_NEW"></gui-menu-entry>
<gui-menu-entry data-id="MenuOpen" data-label="LBL_OPEN"></gui-menu-entry>
<gui-menu-entry data-id="MenuSave" data-label="LBL_SAVE"></gui-menu-entry>
<gui-menu-entry data-id="MenuSaveAs" data-label="LBL_SAVEAS"></gui-menu-entry>
<gui-menu-entry data-id="MenuClose" data-label="LBL_CLOSE"></gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
<gui-menu-bar-entry data-label="LBL_EDIT">
<gui-menu data-id="SubmenuEdit">
<gui-menu-entry data-id="MenuUndo" data-label="LBL_UNDO"></gui-menu-entry>
<gui-menu-entry data-id="MenuRedo" data-label="LBL_REDO"></gui-menu-entry>
<gui-menu-entry data-id="MenuCut" data-label="LBL_CUT"></gui-menu-entry>
<gui-menu-entry data-id="MenuCopy" data-label="LBL_COPY"></gui-menu-entry>
<gui-menu-entry data-id="MenuPaste" data-label="LBL_PASTE"></gui-menu-entry>
<gui-menu-entry data-id="MenuDelete" data-label="LBL_DELETE"></gui-menu-entry>
<gui-menu-entry data-id="MenuUnlink" data-label="LBL_UNLINK"></gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
<gui-menu-bar-entry data-label="LBL_INSERT">
<gui-menu data-id="SubmenuInsert">
<gui-menu-entry data-id="MenuInsertOL" data-label="LBL_ORDERED_LIST"></gui-menu-entry>
<gui-menu-entry data-id="MenuInsertUL" data-label="LBL_UNORDERED_LIST"></gui-menu-entry>
<gui-menu-entry data-id="MenuInsertLink" data-label="LBL_LINK"></gui-menu-entry>
<gui-menu-entry data-id="MenuInsertImage" data-label="LBL_IMAGE"></gui-menu-entry>
</gui-menu>
</gui-menu-bar-entry>
</gui-menu-bar>
</gui-vbox-container>
<!-- TOOLS -->
<gui-vbox-container data-shrink="1" data-basis="auto" data-expand="true">
<gui-toolbar>
<gui-button data-id="text-bold" data-icon="stock://actions/format-text-bold.png"></gui-button>
<gui-button data-id="text-italic" data-icon="stock://actions/format-text-italic.png"></gui-button>
<gui-button data-id="text-underline" data-icon="stock://actions/format-text-underline.png"></gui-button>
<gui-button data-id="text-strikethrough" data-icon="stock://actions/format-text-strikethrough.png"></gui-button>
<gui-toolbar-separator />
<gui-button data-id="justify-left" data-icon="stock://actions/format-justify-left.png"></gui-button>
<gui-button data-id="justify-center" data-icon="stock://actions/format-justify-center.png"></gui-button>
<gui-button data-id="justify-right" data-icon="stock://actions/format-justify-right.png"></gui-button>
<gui-toolbar-separator />
<gui-button data-id="indent" data-icon="stock://actions/gtk-indent-ltr.png"></gui-button>
<gui-button data-id="unindent" data-icon="stock://actions/gtk-unindent-ltr.png"></gui-button>
<gui-toolbar-separator />
<gui-color-box data-id="Foreground"></gui-color-box>
<gui-color-box data-id="Background"></gui-color-box>
<gui-toolbar-separator />
<gui-button data-id="Font" data-group="tool" data-tool-name="">FONT (SIZE)</gui-button>
</gui-toolbar>
</gui-vbox-container>
<!-- CONTENT -->
<gui-vbox-container data-grow="1" data-shrink="0" data-basis="auto" data-fill="true">
<gui-richtext data-id="Text"></gui-richtext>
</gui-vbox-container>
<!-- STATUSBAR -->
<!--
<gui-vbox-container data-grow="0" data-shrink="1" data-basis="auto">
<gui-statusbar data-id="Statusbar"></gui-statusbar>
</gui-vbox-container>
-->
</gui-vbox>
</application-window>

500
build/htdocs/dist/settings.js vendored Normal file
View File

@ -0,0 +1,500 @@
(function() {
window.OSjs = window.OSjs || {}
OSjs.Core = OSjs.Core || {}
OSjs.Core.getConfig = (function() {
var _cache;
return function() {
if ( !_cache ) {
_cache = {
"Version": "2.0-alpha80",
"SettingsManager": {
"VFS": {
"scandir": {
"showHiddenFiles": true,
"showFileExtensions": true,
"columns": [
"filename",
"mime",
"size"
]
},
"mounts": []
},
"CoreWM": {
"styleTheme": "default",
"iconTheme": "default",
"soundTheme": "default",
"animations": true,
"fullscreen": true,
"desktopMargin": 5,
"wallpaper": "osjs:///themes/wallpapers/wallpaper.png",
"desktopPath": "desktop:///",
"icon": "osjs-white.png",
"backgroundColor": "#572a79",
"fontFamily": "Karla",
"background": "image-fill",
"windowCornerSnap": 0,
"windowSnap": 0,
"useTouchMenu": false,
"enableIconView": false,
"enableSwitcher": true,
"enableHotkeys": true,
"enableSounds": true,
"invertIconViewColor": false,
"moveOnResize": true,
"hotkeys": {
"WINDOW_MOVE_UP": "ALT+UP",
"WINDOW_MOVE_DOWN": "ALT+DOWN",
"WINDOW_MOVE_LEFT": "ALT+LEFT",
"WINDOW_MOVE_RIGHT": "ALT+RIGHT",
"WINDOW_MINIMIZE": "ALT+H",
"WINDOW_RESTORE": "ALT+R",
"WINDOW_MAXIMIZE": "ALT+M",
"SEARCH": "F3",
"SWITCHER": "ALT+TILDE",
"SAVEAS": "CTRL+SHIFT+S",
"SAVE": "CTRL+S",
"OPEN": "CTRL+O"
},
"sounds": {
"LOGOUT": "service-logout",
"LOGIN": "service-login",
"ERROR": "dialog-warning"
},
"panels": [
{
"options": {
"position": "top",
"ontop": true,
"autohide": false,
"background": "#101010",
"foreground": "#ffffff",
"opacity": 85
},
"items": [
{
"name": "AppMenu",
"settings": {}
},
{
"name": "Buttons",
"settings": {}
},
{
"name": "WindowList",
"settings": {}
},
{
"name": "NotificationArea",
"settings": {}
},
{
"name": "Search",
"settings": {}
},
{
"name": "Clock",
"settings": {}
}
]
}
],
"mediaQueries": {
"mobile": 320,
"tablet": 800
},
"menu": {
"development": {
"icon": "categories/package_development.png",
"title": "Development"
},
"education": {
"icon": "categories/applications-sience.png",
"title": "Education"
},
"games": {
"icon": "categories/package_games.png",
"title": "Games"
},
"graphics": {
"icon": "categories/package_graphics.png",
"title": "Graphics"
},
"network": {
"icon": "categories/package_network.png",
"title": "Network"
},
"multimedia": {
"icon": "categories/package_multimedia.png",
"title": "Multimedia"
},
"office": {
"icon": "categories/package_office.png",
"title": "Office"
},
"system": {
"icon": "categories/package_system.png",
"title": "System"
},
"utilities": {
"icon": "categories/package_utilities.png",
"title": "Utilities"
},
"unknown": {
"icon": "categories/applications-other.png",
"title": "Other"
}
}
},
"PackageManager": {
"Repositories": [
"https://builds.os.js.org/store/packages.json"
],
"PackagePaths": [
"home:///.packages"
],
"Hidden": []
},
"DefaultApplication": {
"dir": "ApplicationFileManager"
},
"SearchEngine": {
"applications": true,
"files": true,
"paths": [
"home:///"
]
}
},
"PackageManager": {
"UseStaticManifest": false
},
"Preloads": [],
"AutoStart": [],
"Languages": {
"en_EN": "English",
"bg_BG": "Bulgarian (Bulgaria)",
"no_NO": "Norsk (Norwegian)",
"de_DE": "Deutsch (German)",
"es_ES": "Spanish (Spain)",
"fr_FR": "French (France)",
"ru_RU": "Russian (Russia)",
"ko_KR": "Korean (한국어)",
"zh_CN": "Chinese (China)",
"nl_NL": "Dutch (Nederlands)",
"pl_PL": "Polski (Poland)",
"pt_BR": "Portuguese (Brazil)",
"sk_SK": "Slovak (Slovenčina)",
"vi_VN": "Vietnamese (Tiếng Việt)",
"tr_TR": "Turkish (Turkey)",
"it_IT": "Italiano (Italian)",
"fa_FA": "Farsi (Persian)",
"ar_DZ": "Arabic (Algeria)"
},
"Styles": [
{
"name": "dark",
"title": "Dark",
"style": {
"window": {
"margin": 30,
"border": 3
}
}
},
{
"name": "default",
"title": "Default",
"style": {
"window": {
"margin": 30,
"border": 3
}
}
},
{
"name": "glass",
"title": "Glass",
"style": {
"window": {
"margin": 30,
"border": 5
}
}
},
{
"name": "material",
"title": "Material Design",
"style": {
"window": {
"margin": 34,
"border": 0
}
}
},
{
"name": "windows8",
"title": "Windows 8",
"style": {
"window": {
"margin": 30,
"border": 3
}
}
}
],
"Sounds": {
"default": "Default (Freedesktop)"
},
"Icons": {
"default": "Default (Gnome)"
},
"Fonts": {
"default": "Karla",
"list": [
"Arial",
"Arial Black",
"Sans-serif",
"Serif",
"Trebuchet MS",
"Impact",
"Georgia",
"Courier New",
"Comic Sans MS",
"Monospace",
"Symbol",
"Webdings"
]
},
"MIME": {
"descriptions": {
"image/bmp": "Bitmap Image",
"image/gif": "GIF Image",
"image/jpeg": "JPEG Image",
"image/jpg": "JPEG Image",
"image/png": "PNG Image",
"text/plain": "Text Document",
"text/css": "Cascade Stylesheet",
"text/html": "HTML Document",
"text/xml": "XML Document",
"application/javascript": "JavaScript Document",
"application/json": "JSON Document",
"application/x-python": "Python Document",
"application/x-lua": "Lua Document",
"application/x-shellscript": "Shell Script",
"text/x-c": "C Document",
"text/x-cplusplus": "C++ Document",
"application/pdf": "PDF Document",
"application/zip": "ZIP Archive",
"audio/aac": "AAC Audio",
"audio/mp4": "MP4 Audio",
"audio/mpeg": "MPEG Audio",
"audio/ogg": "OGG Audio",
"audio/wav": "WAV Audio",
"audio/webm": "WEBM Audio",
"video/mp4": "MP4 Video",
"video/ogg": "OGG Video",
"video/webm": "WEBM Video",
"video/x-ms-video": "AVI Video",
"video/x-flv": "FLV Video",
"video/x-matroska": "MKV Video",
"application/x-ipkg": "Itsy Package",
"osjs/document": "OS.js Document",
"osjs/draw": "OS.js Image",
"osjs/project": "OS.js Project"
},
"mapping": {
".bmp": "image/bmp",
".css": "text/css",
".gif": "image/gif",
".htm": "text/html",
".html": "text/html",
".jpg": "image/jpeg",
".jpeg": "image/jpeg",
".js": "application/javascript",
".json": "application/json",
".lua": "application/x-lua",
".sh": "application/x-shellscript",
".c": "text/x-c",
".cpp": "text/x-cplusplus",
".cc": "text/x-cplusplus",
".otf": "font/opentype",
".ttf": "font/opentype",
".png": "image/png",
".zip": "application/zip",
".aac": "audio/aac",
".mp4": "video/mp4",
".m4a": "audio/mp4",
".mp1": "audio/mpeg",
".mp2": "audio/mpeg",
".mp3": "audio/mpeg",
".mpg": "audio/mpeg",
".mpeg": "audio/mpeg",
".oga": "audio/ogg",
".ogg": "audio/ogg",
".wav": "audio/wav",
".webm": "video/webm",
".m4v": "video/mp4",
".ogv": "video/ogg",
".avi": "video/x-ms-video",
".flv": "video/x-flv",
".mkv": "video/x-matroska",
".py": "application/x-python",
".xml": "text/xml",
".md": "text/plain",
".txt": "text/plain",
".log": "text/plain",
".doc": "text/plain",
".pdf": "application/pdf",
".ipk": "application/x-ipkg",
".odbeat": "osjs/dbeat",
".oplist": "osjs/playlist",
".odoc": "osjs/document",
".odraw": "osjs/draw",
".oproj": "osjs/project",
"default": "application/octet-stream"
}
},
"WM": {
"exec": "CoreWM",
"args": {
"defaults": {}
}
},
"VFS": {
"MaxUploadSize": 2097152,
"Home": "home:///",
"GoogleDrive": {
"Enabled": false
},
"OneDrive": {
"Enabled": false
},
"Dropbox": {
"Enabled": false
},
"LocalStorage": {
"Enabled": false
},
"Mountpoints": {
"applications": {
"enabled": true,
"transport": "Applications",
"icon": "places/user-bookmarks.png",
"description": "Applications"
},
"desktop": {
"enabled": true,
"icon": "places/desktop.png",
"description": "Desktop",
"options": {
"alias": "home:///.desktop",
"path": "home:///.desktop"
}
},
"osjs": {
"enabled": true,
"transport": "OSjs",
"icon": "devices/harddrive.png",
"description": "OS.js"
},
"home": {
"enabled": true,
"icon": "places/folder_home.png",
"description": "Home"
},
"shared": {
"enabled": true,
"description": "Shared",
"icon": "places/folder-publicshare.png"
}
}
},
"Connection": {
"Type": "http",
"Handler": "demo",
"RootURI": "",
"APIURI": "API",
"FSURI": "FS",
"MetadataURI": "packages.js",
"ThemeURI": "themes/styles",
"SoundURI": "themes/sounds",
"IconURI": "themes/icons",
"FontURI": "themes/fonts",
"PackageURI": "packages",
"AppendVersion": "",
"PreloadParallel": 3,
"Dist": "dist"
},
"BugReporting": {
"enabled": true,
"url": "//github.com/os-js/OS.js/issues/new?title=%TITLE%&body=%BODY%",
"options": {
"issue": true,
"title": "[Automated Bugreport] YOUR TITLE HERE",
"message": "This bugreport was generated by OS.js"
}
},
"ShowQuitWarning": false,
"ReloadOnShutdown": false,
"PreloadOnBoot": [],
"Watermark": {
"enabled": true,
"lines": [
"OS.js %VERSION%",
"Copyright &copy; 2011-2016 <a href=\"mailto:andersevenrud@gmail.com\">Anders Evenrud</a>"
]
},
"DropboxAPI": {
"ClientKey": ""
},
"GoogleAPI": {
"ClientId": ""
},
"WindowsLiveAPI": {
"ClientId": ""
},
"Locale": "en_EN",
"LocaleOptions": {
"AutoDetect": true,
"RTL": [
"az",
"fa",
"he",
"uz",
"zh",
"ar"
]
}
};
var rootURI = window.location.pathname || '/';
if ( window.location.protocol === 'file:' ) {
rootURI = '';
}
var replace = ['RootURI', 'APIURI', 'FSURI', 'MetadataURI', 'ThemeURI', 'SoundURI', 'IconURI', 'PackageURI'];
replace.forEach(function(val) {
if ( _cache[val] ) {
_cache[val] = _cache[val].replace(/^\//, rootURI);
}
});
var preloads = _cache.Preloads;
if ( preloads ) {
preloads.forEach(function(item, key) {
if ( item && item.src && item.src.match(/^\//) ) {
preloads[key].src = item.src.replace(/^\//, rootURI);
}
});
}
var dev =_cache.Connection.Dist === 'dist-dev';
_cache.MOCHAMODE = dev && window.location.hash === '#mocha';
_cache.DEVMODE = dev && window.location.hash === '#developer';
}
return Object.freeze(_cache);
};
})();
})();

BIN
build/htdocs/dist/splash.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

0
build/htdocs/dist/themes/.gitignore vendored Normal file
View File

198
build/htdocs/dist/themes/fonts.css vendored Normal file
View File

@ -0,0 +1,198 @@
@font-face {
font-family:Karla;
src: url('fonts/Karla/Regular.eot');
src: url('fonts/Karla/Regular.eot?#iefix') format('embedded-opentype'),
url('fonts/Karla/Regular.woff') format('woff'),
url('fonts/Karla/Regular.ttf') format('truetype'),
url('fonts/Karla/Regular.svg#karla') format('svg');
font-weight:normal;
font-style:normal;
}
@font-face {
font-family:Karla;
src: url('fonts/Karla/Bold.eot');
src: url('fonts/Karla/Bold.eot?#iefix') format('embedded-opentype'),
url('fonts/Karla/Bold.woff') format('woff'),
url('fonts/Karla/Bold.ttf') format('truetype'),
url('fonts/Karla/Bold.svg#karla_bold') format('svg');
font-weight:bold;
}
@font-face {
font-family:Karla;
src: url('fonts/Karla/Italic.eot');
src: url('fonts/Karla/Italic.eot?#iefix') format('embedded-opentype'),
url('fonts/Karla/Italic.woff') format('woff'),
url('fonts/Karla/Italic.ttf') format('truetype'),
url('fonts/Karla/Italic.svg#karla_italic') format('svg');
font-style:italic;
}
@font-face {
font-family:Karla;
src: url('fonts/Karla/Italic.eot');
src: url('fonts/Karla/Italic.eot?#iefix') format('embedded-opentype'),
url('fonts/Karla/Italic.woff') format('woff'),
url('fonts/Karla/Italic.ttf') format('truetype'),
url('fonts/Karla/Italic.svg#karla_italic') format('svg');
font-style:oblique;
}
@font-face {
font-family:Karla;
src: url('fonts/Karla/BoldItalic.eot');
src: url('fonts/Karla/BoldItalic.eot?#iefix') format('embedded-opentype'),
url('fonts/Karla/BoldItalic.woff') format('woff'),
url('fonts/Karla/BoldItalic.ttf') format('truetype'),
url('fonts/Karla/BoldItalic.svg#karla_bolditalic') format('svg');
font-weight:bold;
font-style:italic;
}
@font-face {
font-family:Karla;
src: url('fonts/Karla/BoldItalic.eot');
src: url('fonts/Karla/BoldItalic.eot?#iefix') format('embedded-opentype'),
url('fonts/Karla/BoldItalic.woff') format('woff'),
url('fonts/Karla/BoldItalic.ttf') format('truetype'),
url('fonts/Karla/BoldItalic.svg#karla_bolditalic') format('svg');
font-weight:bold;
font-style:oblique;
}
@font-face {
font-family: 'Roboto';
font-weight: 100;
font-style: normal;
src: url('fonts/Roboto/fonts/Roboto-100/Roboto-100.eot');
src: url('fonts/Roboto/fonts/Roboto-100/Roboto-100.eot?#iefix') format('embedded-opentype'),
local('Roboto Thin'),
local('Roboto-100'),
url('fonts/Roboto/fonts/Roboto-100/Roboto-100.woff2') format('woff2'),
url('fonts/Roboto/fonts/Roboto-100/Roboto-100.woff') format('woff'),
url('fonts/Roboto/fonts/Roboto-100/Roboto-100.ttf') format('truetype'),
url('fonts/Roboto/fonts/Roboto-100/Roboto-100.svg#Roboto') format('svg');
}
@font-face {
font-family: 'Roboto';
font-weight: 300;
font-style: normal;
src: url('fonts/Roboto/fonts/Roboto-300/Roboto-300.eot');
src: url('fonts/Roboto/fonts/Roboto-300/Roboto-300.eot?#iefix') format('embedded-opentype'),
local('Roboto Light'),
local('Roboto-300'),
url('fonts/Roboto/fonts/Roboto-300/Roboto-300.woff2') format('woff2'),
url('fonts/Roboto/fonts/Roboto-300/Roboto-300.woff') format('woff'),
url('fonts/Roboto/fonts/Roboto-300/Roboto-300.ttf') format('truetype'),
url('fonts/Roboto/fonts/Roboto-300/Roboto-300.svg#Roboto') format('svg');
}
@font-face {
font-family: 'Roboto';
font-weight: 400;
font-style: normal;
src: url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.eot');
src: url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.eot?#iefix') format('embedded-opentype'),
local('Roboto'),
local('Roboto-regular'),
url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.woff2') format('woff2'),
url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.woff') format('woff'),
url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.ttf') format('truetype'),
url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.svg#Roboto') format('svg');
}
@font-face {
font-family: 'Roboto';
font-weight: 500;
font-style: normal;
src: url('fonts/Roboto/fonts/Roboto-500/Roboto-500.eot');
src: url('fonts/Roboto/fonts/Roboto-500/Roboto-500.eot?#iefix') format('embedded-opentype'),
local('Roboto Medium'),
local('Roboto-500'),
url('fonts/Roboto/fonts/Roboto-500/Roboto-500.woff2') format('woff2'),
url('fonts/Roboto/fonts/Roboto-500/Roboto-500.woff') format('woff'),
url('fonts/Roboto/fonts/Roboto-500/Roboto-500.ttf') format('truetype'),
url('fonts/Roboto/fonts/Roboto-500/Roboto-500.svg#Roboto') format('svg');
}
@font-face {
font-family: 'Roboto';
font-weight: 700;
font-style: normal;
src: url('fonts/Roboto/fonts/Roboto-700/Roboto-700.eot');
src: url('fonts/Roboto/fonts/Roboto-700/Roboto-700.eot?#iefix') format('embedded-opentype'),
local('Roboto Bold'),
local('Roboto-700'),
url('fonts/Roboto/fonts/Roboto-700/Roboto-700.woff2') format('woff2'),
url('fonts/Roboto/fonts/Roboto-700/Roboto-700.woff') format('woff'),
url('fonts/Roboto/fonts/Roboto-700/Roboto-700.ttf') format('truetype'),
url('fonts/Roboto/fonts/Roboto-700/Roboto-700.svg#Roboto') format('svg');
}
@font-face {
font-family: 'Roboto';
font-weight: 100;
font-style: italic;
src: url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.eot');
src: url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.eot?#iefix') format('embedded-opentype'),
local('Roboto Thin Italic'),
local('Roboto-100italic'),
url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.woff2') format('woff2'),
url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.woff') format('woff'),
url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.ttf') format('truetype'),
url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.svg#Roboto') format('svg');
}
@font-face {
font-family: 'Roboto';
font-weight: 300;
font-style: italic;
src: url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.eot');
src: url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.eot?#iefix') format('embedded-opentype'),
local('Roboto Light Italic'),
local('Roboto-300italic'),
url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.woff2') format('woff2'),
url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.woff') format('woff'),
url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.ttf') format('truetype'),
url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.svg#Roboto') format('svg');
}
@font-face {
font-family: 'Roboto';
font-weight: 400;
font-style: italic;
src: url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.eot');
src: url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.eot?#iefix') format('embedded-opentype'),
local('Roboto Italic'),
local('Roboto-italic'),
url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.woff2') format('woff2'),
url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.woff') format('woff'),
url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.ttf') format('truetype'),
url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.svg#Roboto') format('svg');
}
@font-face {
font-family: 'Roboto';
font-weight: 500;
font-style: italic;
src: url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.eot');
src: url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.eot?#iefix') format('embedded-opentype'),
local('Roboto Medium Italic'),
local('Roboto-500italic'),
url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.woff2') format('woff2'),
url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.woff') format('woff'),
url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.ttf') format('truetype'),
url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.svg#Roboto') format('svg');
}
@font-face {
font-family: 'Roboto';
font-weight: 700;
font-style: italic;
src: url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.eot');
src: url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.eot?#iefix') format('embedded-opentype'),
local('Roboto Bold Italic'),
local('Roboto-700italic'),
url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.woff2') format('woff2'),
url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.woff') format('woff'),
url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.ttf') format('truetype'),
url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.svg#Roboto') format('svg');
}

Binary file not shown.

View File

@ -0,0 +1,599 @@
<?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>
<metadata>
Created by FontForge 20120731 at Tue Jul 8 22:17:55 2014
By World Wide Web Server
Copyright (c) 2011, Jonathan Pinhorn (pinhorn.typedesign@gmail.com), with Reserved Font Names "Karla" and "Karla Tamil".
</metadata>
<defs>
<font id="Karla-Bold" horiz-adv-x="304" >
<font-face
font-family="Karla"
font-weight="700"
font-stretch="normal"
units-per-em="1000"
panose-1="0 0 0 0 0 0 0 0 0 0"
ascent="800"
descent="-200"
x-height="486"
cap-height="649"
bbox="-76 -251 976 913"
underline-thickness="50"
underline-position="-50"
unicode-range="U+0020-2212"
/>
<missing-glyph horiz-adv-x="589"
/>
<glyph glyph-name=".notdef" horiz-adv-x="589"
/>
<glyph glyph-name=".null" horiz-adv-x="0"
/>
<glyph glyph-name="nonmarkingreturn" horiz-adv-x="589"
/>
<glyph glyph-name="space" unicode=" " horiz-adv-x="253"
/>
<glyph glyph-name="space" unicode="&#xa0;" horiz-adv-x="253"
/>
<glyph glyph-name="exclam" unicode="!" horiz-adv-x="293"
d="M86 664h128l-14 -445h-101zM91 13q-23 22 -23 56t23 57t59 23t60 -23t24 -57t-24 -56t-60 -22t-59 22z" />
<glyph glyph-name="quotedbl" unicode="&#x22;" horiz-adv-x="383"
d="M150 686l-16 -238h-87l-15 238h118zM351 686l-16 -238h-87l-15 238h118z" />
<glyph glyph-name="numbersign" unicode="#" horiz-adv-x="678"
d="M396 164h-136l-14 -131h-111l14 131h-92l7 77h93l17 158h-93l8 78h93l14 129h111l-14 -129h136l14 129h111l-14 -129h94l-9 -78h-93l-17 -158h94l-8 -77h-94l-14 -131h-111zM268 241h136l17 158h-136z" />
<glyph glyph-name="dollar" unicode="$" horiz-adv-x="689"
d="M475 343q75 -26 112 -65.5t37 -104.5q0 -71 -58 -123q-64 -55 -179 -63v-88h-84v90q-104 10 -169 62q-69 56 -69 152h117q0 -48 31 -73t90 -32v194l-50 17q-84 28 -130 67.5t-46 110.5t57.5 118.5t168.5 55.5v76h84v-77q97 -10 148 -60t65 -130h-117q-5 30 -29.5 53.5
t-66.5 32.5v-182zM466 123q25 22 25 52q0 57 -72 84l-32 12v-175q54 5 79 27zM230.5 532q-24.5 -21 -24.5 -49t16 -44.5t51 -28.5l30 -12v161q-48 -6 -72.5 -27z" />
<glyph glyph-name="percent" unicode="%" horiz-adv-x="765"
d="M198 662q27 0 52 -9.5t44 -28.5q41 -39 41 -113q0 -73 -41 -114q-38 -38 -97 -38q-57 0 -95 38q-41 41 -41 114q0 74 41 113q39 38 96 38zM246 511q0 76 -49 76q-48 0 -48 -76q0 -77 48 -77q49 0 49 77zM546 649h119l-439 -649h-120zM573 290q57 0 96 -38q41 -39 41 -113
t-41 -115q-38 -38 -96 -38t-96 38q-41 41 -41 115t41 113q39 38 96 38zM573 215q-48 0 -48 -76.5t48 -76.5q21 0 35 17.5t14 59t-14 59t-35 17.5z" />
<glyph glyph-name="ampersand" unicode="&#x26;" horiz-adv-x="965"
d="M764 344q-44 -125 -110 -207l17 -15q18 -16 34 -24t39.5 -8t40.5 17.5t19 56.5h107q-2 -82 -40.5 -130t-114.5 -48q-48 0 -88.5 19t-85.5 60q-100 -79 -222 -79q-112 0 -190 57q-78 58 -78 142q0 130 183 159l-16 15q-72 65 -72 143q0 69 57 112q61 46 162 46
q97 0 158 -46q56 -43 56 -108t-41.5 -109.5t-126.5 -76.5l127 -115q61 73 105 183zM342 284q-120 -17 -120 -92q0 -42 36.5 -70.5t102.5 -28.5q76 0 143 44zM465.5 428q24.5 26 24.5 58.5t-23 52t-64 19.5t-63.5 -21.5t-22.5 -51.5q0 -44 47 -85l23 -21q54 23 78.5 49z" />
<glyph glyph-name="quotesingle" unicode="'" horiz-adv-x="180"
d="M149 677l-16 -238h-87l-15 238h118z" />
<glyph glyph-name="parenleft" unicode="(" horiz-adv-x="400"
d="M282 -118q-209 186 -209 436q0 252 209 436l85 -62q-86 -90 -129 -180.5t-43 -193.5t43 -192.5t129 -179.5z" />
<glyph glyph-name="parenright" unicode=")" horiz-adv-x="400"
d="M118 754q209 -186 209 -436q0 -248 -209 -436l-86 64q87 90 130 179.5t43 192.5t-43.5 193.5t-129.5 180.5z" />
<glyph glyph-name="asterisk" unicode="*" horiz-adv-x="409"
d="M161 528l-111 37l30 70l99 -50l-12 119h80l-12 -119l99 52l30 -71l-109 -37l86 -82l-59 -51l-74 101l-76 -101l-57 51z" />
<glyph glyph-name="plus" unicode="+" horiz-adv-x="544"
d="M331 491v-194h195v-103h-195v-194h-118v194h-195v103h195v194h118z" />
<glyph glyph-name="comma" unicode="," horiz-adv-x="253"
d="M68.5 17.5q-19.5 17.5 -19.5 47t23 50.5t63 21t65 -31t25 -76q0 -73 -66 -133q-21 -19 -47 -32l-88 44q33 17 58.5 38t33.5 49q-28 5 -47.5 22.5z" />
<glyph glyph-name="hyphen" unicode="-" horiz-adv-x="373"
d="M46 353h281v-103h-281v103z" />
<glyph glyph-name="period" unicode="." horiz-adv-x="215"
d="M47 13q-23 22 -23 56t23 57t59 23t60 -23t24 -57t-24 -56t-60 -22t-59 22z" />
<glyph glyph-name="slash" unicode="/" horiz-adv-x="472"
d="M310 745h121l-258 -826h-120z" />
<glyph glyph-name="zero" unicode="0" horiz-adv-x="633"
d="M316 662q60 0 109.5 -20.5t84.5 -62.5q76 -89 76 -255t-76 -255q-70 -83 -193 -83q-124 0 -195 83q-75 87 -75 255t75 255q71 83 194 83zM425.5 495.5q-38.5 59.5 -109 59.5t-109 -59.5t-38.5 -171.5t38.5 -170.5t109 -58.5t109 58.5t38.5 170.5t-38.5 171.5z" />
<glyph glyph-name="one" unicode="1" horiz-adv-x="357"
d="M42 600q75 11 132 53h89v-653h-118v512q-51 -25 -103 -25v113z" />
<glyph glyph-name="two" unicode="2" horiz-adv-x="605"
d="M178 108h371v-108h-489v111q0 117 83 170q28 18 65 32l133 51q44 17 64.5 42.5t20.5 63.5t-27 63.5t-77 25.5t-82.5 -24t-37.5 -71h-131q2 95 73 149q65 49 175 49q101 0 167 -54q67 -56 67 -137t-40.5 -129.5t-125.5 -81.5l-135 -52q-39 -15 -56.5 -33.5t-17.5 -47.5
v-19z" />
<glyph glyph-name="three" unicode="3" horiz-adv-x="622"
d="M309 555q-109 0 -127 -83h-124q10 96 78 145q64 45 168 45q107 0 174 -50q70 -51 70 -131q0 -50 -27 -86.5t-80 -54.5q59 -20 94.5 -59.5t35.5 -90.5t-18.5 -87t-52.5 -62q-72 -55 -187 -55q-110 0 -185 56q-84 61 -84 162h126q3 -51 41.5 -80t100.5 -29t96.5 27.5
t34.5 70t-31.5 66.5t-99.5 24h-86v93h74q57 0 89 24.5t32 64.5t-27.5 65t-84.5 25z" />
<glyph glyph-name="four" unicode="4" horiz-adv-x="595"
d="M468 656v-411h113v-101h-113v-144h-117v144h-329v89l332 423h114zM162 233h195v248z" />
<glyph glyph-name="five" unicode="5" horiz-adv-x="582"
d="M219 395q54 9 103 9q101 0 161 -48.5t60 -139.5q0 -99 -67 -163q-71 -67 -179 -67q-107 0 -171 54q-67 56 -69 154h121q0 -51 34 -75t87 -24t87.5 34.5t34.5 86.5q0 99 -134 99h-198l30 334h389v-108h-275z" />
<glyph glyph-name="six" unicode="6" horiz-adv-x="607"
d="M425 471q-5 39 -28 61.5t-63.5 22.5t-71 -17.5t-52.5 -50.5q-44 -68 -44 -184q0 -43 3 -65q11 86 65 126q47 34 117 34q90 0 149 -58q58 -56 58 -148t-65 -149t-170 -57q-122 0 -199 92t-77 235q0 166 77 259q75 90 204 90q98 0 158 -52q61 -53 65 -139h-126z
M242.5 272.5q-32.5 -28.5 -32.5 -75.5t32.5 -74.5t80 -27.5t80.5 27.5t33 74.5t-34 77q-31 27 -79 27t-80.5 -28.5z" />
<glyph glyph-name="seven" unicode="7" horiz-adv-x="498"
d="M480 649v-113l-277 -536h-159l297 535h-317v114h456z" />
<glyph glyph-name="eight" unicode="8" horiz-adv-x="647"
d="M502 609.5q73 -52.5 73 -133.5q0 -49 -33.5 -87.5t-96.5 -49.5q83 -33 115 -67q38 -40 38 -100q0 -83 -72 -134q-75 -52 -203 -52q-123 0 -199 54q-75 52 -75 135q0 61 42.5 98.5t108.5 45.5q-87 42 -118 109q-11 25 -11 57q0 82 65.5 129.5t179 47.5t186.5 -52.5z
M303 278q-91 -6 -123 -58q-9 -15 -9 -35t12 -37t33 -29q40 -24 112.5 -24t110 19.5t37.5 48t-18.5 46t-50.5 30.5zM259 411l75 -29q48 0 84 24q35 24 35 63t-36 62.5t-94 23.5q-56 0 -93 -21t-37 -58.5t66 -64.5z" />
<glyph glyph-name="nine" unicode="9" horiz-adv-x="610"
d="M293 95q152 0 152 250q0 27 -4 59q-13 -78 -65 -118q-46 -35 -117 -35q-91 0 -148.5 57.5t-57.5 147.5q0 92 65 149t169 57q118 0 197 -90q80 -92 80 -237q0 -251 -150 -325q-50 -24 -108.5 -24t-102 15t-75.5 42q-68 57 -68 149h123q2 -45 32.5 -71t77.5 -26z
M207.5 526.5q-32.5 -27.5 -32.5 -76t32.5 -75.5t80.5 -27q47 0 80 28q33 30 33 75q0 46 -33 75q-32 28 -80 28t-80.5 -27.5z" />
<glyph glyph-name="colon" unicode=":" horiz-adv-x="270"
d="M74 30q-23 22 -23 56t23 57t59 23t60 -23t24 -57t-24 -56t-60 -22t-59 22zM74 327q-23 22 -23 56t23 57t59 23t60 -23t24 -57t-24 -56t-60 -22t-59 22z" />
<glyph glyph-name="semicolon" unicode=";" horiz-adv-x="308"
d="M98.5 17.5q-19.5 17.5 -19.5 47t23 50.5t63 21t65 -31t25 -76q0 -73 -66 -133q-21 -19 -47 -32l-88 44q33 17 58.5 38t33.5 49q-28 5 -47.5 22.5zM108 327q-23 22 -23 56t23 57t59 23t60 -23t24 -57t-24 -56t-60 -22t-59 22z" />
<glyph glyph-name="less" unicode="&#x3c;" horiz-adv-x="502"
d="M457 527l-291 -205l291 -204l-78 -90l-334 241v107l334 241z" />
<glyph glyph-name="equal" unicode="=" horiz-adv-x="506"
d="M427 198v-103h-348v103h348zM427 408v-102h-348v102h348z" />
<glyph glyph-name="greater" unicode="&#x3e;" horiz-adv-x="502"
d="M123 617l334 -241v-107l-334 -241l-78 90l290 204l-290 205z" />
<glyph glyph-name="question" unicode="?" horiz-adv-x="517"
d="M485 481q0 -53 -26 -88.5t-82 -63.5q-47 -24 -61.5 -41t-18.5 -31.5t-4 -33.5v-29h-118v40q0 90 54 128q19 14 56 33t53.5 38.5t16.5 50t-25 51t-74 20.5t-77 -23.5t-32 -61.5h-123q5 87 64 139.5t165.5 52.5t169 -52t62.5 -129zM177.5 121q22.5 22 59 22t60.5 -22
t24 -56t-24 -56.5t-60.5 -22.5t-59 22.5t-22.5 56.5t22.5 56z" />
<glyph glyph-name="at" unicode="@" horiz-adv-x="1027"
d="M609 280q0 31 -11.5 50t-37.5 19t-49 -10.5t-42 -30.5q-44 -48 -44 -114q0 -45 23.5 -68.5t58.5 -23.5t58.5 19.5t43.5 58.5v100zM704 150q0 -51 35 -51q16 0 36.5 10.5t38.5 34.5q43 56 43 149q0 116 -77 187q-83 76 -220 76q-165 0 -270 -102q-104 -100 -104 -252
q0 -147 99 -232q104 -91 284 -91v-97q-114 0 -206.5 33.5t-158.5 91t-101.5 135.5t-35.5 173.5t37 179t103 143t156.5 92t190 32.5t176.5 -28.5t131.5 -78.5t84.5 -117.5t30 -140.5t-21 -126.5t-54.5 -90t-77 -55.5t-90 -19t-76.5 17.5t-39 49.5l-6 16q-20 -38 -48.5 -60.5
t-70.5 -22.5t-71.5 14t-52.5 38q-51 55 -51 134q0 103 72 176q70 72 169 72q66 0 105.5 -39.5t39.5 -119.5v-131z" />
<glyph glyph-name="A" unicode="A" horiz-adv-x="626"
d="M243 649h148l213 -649h-125l-45 140h-241l-46 -140h-125zM223 229h182l-90 279z" />
<glyph glyph-name="B" unicode="B" horiz-adv-x="648"
d="M93 649h262q108 0 167 -51q56 -47 56 -121q0 -55 -30.5 -94t-85.5 -55q55 -11 91 -49.5t36 -98.5q0 -120 -119 -164q-45 -16 -114 -16h-263v649zM353 103q57 0 82.5 23t25.5 61t-26.5 61.5t-81.5 23.5h-142v-169h142zM211 375h139q53 0 80 23t27 62.5t-26.5 63
t-79.5 23.5h-140v-172z" />
<glyph glyph-name="C" unicode="C" horiz-adv-x="634"
d="M326 662q60 0 104 -14.5t76 -40.5q63 -51 82 -143l-126 -23q-16 51 -49.5 82.5t-83.5 31.5q-68 0 -110 -57q-45 -62 -45 -171.5t40 -171t109 -61.5t104 33.5t35 86.5h127q0 -109 -69.5 -168.5t-190.5 -59.5q-129 0 -205 90q-77 92 -77 250q0 160 79 250q76 86 200 86z
" />
<glyph glyph-name="D" unicode="D" horiz-adv-x="686"
d="M303 649q148 0 239 -88q92 -88 92 -237q0 -148 -92 -236q-91 -88 -239 -88h-211v649h211zM211 107h92q92 0 149 62q54 60 54 155q0 97 -54 157q-56 61 -149 61h-92v-435z" />
<glyph glyph-name="E" unicode="E" horiz-adv-x="586"
d="M92 649h418v-102h-300v-171h281v-102h-281v-171h300v-103h-418v649z" />
<glyph glyph-name="F" unicode="F" horiz-adv-x="547"
d="M93 649h409v-102h-291v-171h266v-101h-266v-275h-118v649z" />
<glyph glyph-name="G" unicode="G" horiz-adv-x="677"
d="M491 103q-42 -117 -161 -117q-122 0 -201 92q-82 95 -82 243q0 156 88 250q85 91 219 91q91 0 152.5 -39.5t96.5 -124.5l-121 -28q-53 85 -134 85q-74 0 -123 -63q-51 -64 -51 -171q0 -101 46 -164q45 -62 120 -62q64 0 105 41q42 42 42 115v4l-146 3v76h259v-334h-96z
" />
<glyph glyph-name="H" unicode="H" horiz-adv-x="706"
d="M211 649v-271h283v271h118v-649h-118v275h-283v-275h-118v649h118z" />
<glyph glyph-name="I" unicode="I"
d="M93 649h118v-649h-118v649z" />
<glyph glyph-name="J" unicode="J" horiz-adv-x="444"
d="M16 27v118q77 -44 149 -44q43 0 62.5 25t19.5 76v447h119v-447q0 -112 -54 -167q-48 -49 -132 -49t-164 41z" />
<glyph glyph-name="K" unicode="K" horiz-adv-x="654"
d="M212 649v-267l256 267h162l-286 -292l305 -357h-153l-231 275l-53 -54v-221h-119v649h119z" />
<glyph glyph-name="L" unicode="L" horiz-adv-x="494"
d="M211 103h267v-103h-385v649h118v-546z" />
<glyph glyph-name="M" unicode="M" horiz-adv-x="874"
d="M262 649l178 -386l178 386h163v-649h-119v493l-184 -422h-77l-190 436v-507h-118v649h169z" />
<glyph glyph-name="N" unicode="N" horiz-adv-x="717"
d="M220 649l286 -460v460h118v-649h-120l-295 476v-476h-118v649h129z" />
<glyph glyph-name="O" unicode="O" horiz-adv-x="683"
d="M342 662q65 0 119 -21.5t93 -63.5q82 -88 82 -252q0 -165 -82 -255q-78 -84 -213 -84q-134 0 -212 86q-82 89 -82 253q0 166 82 254q77 83 213 83zM467.5 495.5q-46.5 60.5 -125.5 60.5t-126 -60.5t-47 -172t47 -171t126 -59.5t125.5 59.5t46.5 171t-46.5 172z" />
<glyph glyph-name="P" unicode="P" horiz-adv-x="581"
d="M490.5 595.5q61.5 -53.5 61.5 -153t-61.5 -153t-171.5 -53.5h-110v-236h-119v649h229q110 0 171.5 -53.5zM319 339q55 0 83 29t28 74.5t-28 75t-83 29.5h-110v-208h110z" />
<glyph glyph-name="Q" unicode="Q" horiz-adv-x="686"
d="M628 -162q-41 -18 -89 -18q-97 0 -164 101l-43 65q-129 2 -206 88q-79 91 -79 251q0 166 82 254q77 83 212 83q134 0 213 -85q82 -88 82 -252q0 -135 -52 -215.5t-140 -108.5l16 -25q24 -37 71 -39q43 0 97 23v-122zM467.5 495.5q-46.5 60.5 -125.5 60.5t-126 -60.5
t-47 -172t47 -171t126 -59.5t125.5 59.5t46.5 171t-46.5 172z" />
<glyph glyph-name="R" unicode="R" horiz-adv-x="644"
d="M575 450q0 -69 -39 -118t-112 -68l174 -264h-154l-143 253h-90v-253h-118v649h240q115 0 179 -55q63 -53 63 -144zM322 332q65 0 98 29.5t33 78t-30 78t-90 29.5h-122v-215h111z" />
<glyph glyph-name="S" unicode="S" horiz-adv-x="638"
d="M434 470q-16 85 -120 85q-51 0 -79.5 -20.5t-28.5 -49.5t18.5 -45.5t57.5 -30.5l141 -55q72 -28 111 -70.5t39 -106.5q0 -88 -66 -139.5t-188 -51.5q-108 0 -175 53q-75 58 -79 164h117q0 -80 83 -101q25 -7 66 -7t76 20.5t35 55t-19 53t-62 34.5l-129 51q-75 29 -115 68
t-40 108q0 81 63 128q64 49 173.5 49t169 -50.5t68.5 -141.5h-117z" />
<glyph glyph-name="T" unicode="T" horiz-adv-x="532"
d="M6 649h520v-102h-201v-547h-118v547h-201v102z" />
<glyph glyph-name="U" unicode="U" horiz-adv-x="690"
d="M201 649v-404q0 -80 40.5 -115t104.5 -35t104.5 35t40.5 115v404h118v-404q0 -124 -69 -191.5t-194 -67.5t-194 67.5t-69 191.5v404h118z" />
<glyph glyph-name="V" unicode="V" horiz-adv-x="607"
d="M145 649l158 -501l160 501h124l-223 -649h-124l-220 649h125z" />
<glyph glyph-name="W" unicode="W" horiz-adv-x="966"
d="M152 649l143 -493l139 450h80l147 -452l152 495h133l-223 -649h-124l-122 366l-121 -366h-124l-212 649h132z" />
<glyph glyph-name="X" unicode="X" horiz-adv-x="684"
d="M649 0h-148l-171 230l-152 -230h-144l229 323l-230 326h145l164 -234l142 234h143l-219 -324z" />
<glyph glyph-name="Y" unicode="Y" horiz-adv-x="604"
d="M156 649l143 -259l150 259h139l-231 -381v-268h-118v268l-223 381h140z" />
<glyph glyph-name="Z" unicode="Z" horiz-adv-x="629"
d="M73 102l343 438l-343 1v108h491v-101l-342 -439l342 -1v-108h-491v102z" />
<glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="352"
d="M93 790h247v-106h-129v-718h129v-107h-247v931z" />
<glyph glyph-name="backslash" unicode="\" horiz-adv-x="472"
d="M41 746h120l258 -826h-121z" />
<glyph glyph-name="bracketright" unicode="]" horiz-adv-x="336"
d="M243 -141h-247v107h129v718h-129v106h247v-931z" />
<glyph glyph-name="asciicircum" unicode="^" horiz-adv-x="527"
d="M20 218l198 385h96l197 -385h-130l-115 246l-116 -246h-130z" />
<glyph glyph-name="underscore" unicode="_" horiz-adv-x="768"
d="M55 -55h659v-103h-659v103z" />
<glyph glyph-name="grave" unicode="`" horiz-adv-x="356"
d="M66 900l267 -132l-30 -74l-279 104z" />
<glyph glyph-name="a" unicode="a" horiz-adv-x="584"
d="M253 284q58 0 134 -19v48q0 51 -20.5 75.5t-67 24.5t-71.5 -18.5t-25 -52.5h-129q0 83 58.5 120t163.5 37q150 0 194 -105q15 -36 15 -85v-309h-103l-9 65q-47 -79 -144 -79q-94 0 -146 46q-48 44 -48 111.5t53 104t145 36.5zM387 190q-59 16 -110 16q-96 0 -96 -64
q0 -27 22 -46.5t70.5 -19.5t80 32.5t33.5 81.5z" />
<glyph glyph-name="b" unicode="b" horiz-adv-x="614"
d="M563 245q0 -114 -65 -188q-63 -71 -157 -71q-45 0 -82.5 24t-59.5 74l-29 -84h-77v686h118v-261q46 74 137.5 74t153 -70t61.5 -184zM211 273v-64q2 -51 37 -84q33 -32 80.5 -32t81.5 41.5t34 109.5t-33.5 108.5t-83.5 40.5t-83 -33t-33 -87z" />
<glyph glyph-name="c" unicode="c" horiz-adv-x="530"
d="M278 499q46 0 82.5 -15.5t61.5 -40.5q50 -48 59 -121l-119 -3q-8 32 -29.5 53t-49.5 21t-48 -8.5t-35 -26.5q-34 -42 -34 -116t32 -111.5t77.5 -37.5t66 21.5t20.5 58.5h119q0 -80 -53 -133q-54 -54 -151 -54q-96 0 -161 70q-69 75 -69 187q0 118 69 189q65 67 162 67z
" />
<glyph glyph-name="d" unicode="d" horiz-adv-x="614"
d="M410 75q-45 -89 -138 -89t-156 71q-65 74 -65 188t62 185q61 69 152 69t137 -73v260h119v-686h-97zM203.5 352.5q-33.5 -40.5 -33.5 -108.5t34 -109.5t86 -41.5q43 0 77 34q35 35 35 88v63q-2 52 -35 85q-30 30 -80 30t-83.5 -40.5z" />
<glyph glyph-name="e" unicode="e" horiz-adv-x="530"
d="M469.5 354q12.5 -42 12.5 -77t-4 -63h-314q2 -59 29 -96t82 -37q73 0 87 64h119q-12 -73 -67 -115q-57 -44 -139 -44q-96 0 -161 70q-67 73 -67 187q0 117 67 188q64 68 161 68q101 0 157 -71q25 -32 37.5 -74zM276 405q-50 0 -78 -32.5t-33 -83.5h207q0 79 -50 106
q-19 10 -46 10z" />
<glyph glyph-name="f" unicode="f" horiz-adv-x="366"
d="M40 486h72v57q0 75 44 115q40 36 104 36q41 0 101 -12l-23 -91q-28 10 -50.5 10t-39.5 -12.5t-17 -46.5v-56h89v-79h-89v-407h-119v407h-72v79z" />
<glyph glyph-name="g" unicode="g" horiz-adv-x="582"
d="M135 199q-59 50 -59 125q0 79 62 128q60 47 137.5 47t129.5 -29q6 57 49 92q42 35 99 35l-6 -113q-86 0 -89 -57q37 -46 37 -94t-17 -80.5t-46 -54.5q-60 -48 -146 -48q-49 0 -89 15q-40 -12 -40 -48q0 -45 76 -45h163q166 0 166 -116q0 -39 -19.5 -76.5t-56.5 -66.5
q-82 -64 -206 -64q-120 0 -195 49q-70 47 -70 115q0 45 27.5 71.5t72.5 33.5q-59 36 -59 89q0 35 22 58.5t57 33.5zM225 -11q-94 -4 -94 -71q0 -34 39.5 -54.5t93.5 -20.5t84.5 9t51.5 24q45 30 45 72q0 18 -12.5 29.5t-36.5 11.5h-171zM355.5 391.5q-22.5 25.5 -68.5 25.5
t-70 -25.5t-24 -66t24 -66.5t70 -26t68.5 26t22.5 66.5t-22.5 66z" />
<glyph glyph-name="h" unicode="h" horiz-adv-x="623"
d="M211 407q50 92 146 92t141.5 -59t45.5 -156v-284h-118v284q0 54 -26 81.5t-73 27.5t-80.5 -42t-35.5 -126v-225h-118v686h118v-279z" />
<glyph glyph-name="i" unicode="i" horiz-adv-x="328"
d="M103 487h118v-487h-118v487zM89 643q0 32 19 50.5t54 18.5q34 0 53.5 -18.5t19.5 -50.5t-19.5 -50.5t-53.5 -18.5q-35 0 -54 18.5t-19 50.5z" />
<glyph glyph-name="j" unicode="j" horiz-adv-x="335"
d="M95 643q0 32 19.5 50.5t54 18.5t53.5 -18.5t19 -50.5t-19 -50.5t-53.5 -18.5t-54 18.5t-19.5 50.5zM-74 -118q60 -30 103 -30t62 20.5t19 71.5v544h118v-546q0 -104 -43.5 -148.5t-113 -44.5t-147.5 31z" />
<glyph glyph-name="k" unicode="k" horiz-adv-x="575"
d="M265 237l-54 -45v-192h-118v686h118v-371l192 171h160l-215 -180l227 -306h-144z" />
<glyph glyph-name="l" unicode="l"
d="M93 686h118v-686h-118v686z" />
<glyph glyph-name="m" unicode="m" horiz-adv-x="949"
d="M525 394q47 105 165 105q87 0 135 -59q46 -56 46 -156v-284h-119v284q0 54 -26 81.5t-73 27.5t-77 -41t-32 -124v-228h-118v284q0 54 -26 81.5t-73 27.5t-80.5 -42t-35.5 -126v-225h-118v486h103l13 -84q48 97 154 97q61 0 101.5 -28t60.5 -77z" />
<glyph glyph-name="n" unicode="n" horiz-adv-x="623"
d="M209 402q48 97 154 97q90 0 135.5 -59t45.5 -156v-284h-118v284q0 54 -26 81.5t-73 27.5t-80.5 -42t-35.5 -126v-225h-118v486h103z" />
<glyph glyph-name="o" unicode="o" horiz-adv-x="566"
d="M284 499q49 0 92 -15.5t74 -47.5q69 -70 69 -194q0 -122 -69 -192q-62 -64 -166 -64t-168 64q-69 69 -69 192q0 125 69 194q63 63 168 63zM371 358.5q-30 38.5 -83.5 38.5t-87.5 -38.5t-34 -115.5t30.5 -115.5t83.5 -38.5t87 38.5t34 115.5t-30 115.5z" />
<glyph glyph-name="p" unicode="p" horiz-adv-x="610"
d="M201 420q46 79 140 79q90 0 154 -68q68 -72 68 -188q0 -117 -69 -189q-64 -68 -153 -68t-130 53v-276h-118v723h97zM320 93q21 0 43.5 9t40.5 28q40 42 40 112.5t-34.5 110.5t-84 40t-81 -28.5t-33.5 -81.5v-87q0 -47 33 -76q31 -27 76 -27z" />
<glyph glyph-name="q" unicode="q" horiz-adv-x="610"
d="M398 63q-36 -77 -124 -77q-94 0 -158 68q-69 72 -69 189q0 115 67 188q63 68 154 68q45 0 83.5 -21.5t62.5 -66.5l26 75h77v-561q0 -43 10.5 -57t23.5 -20.5t32 -12.5l-34 -86q-82 20 -116.5 64t-34.5 121v129zM366 363q-32 30 -81.5 30t-84 -40t-34.5 -110
q0 -71 40 -113q35 -37 85 -37q41 0 72 25q33 28 35 73v87q0 55 -32 85z" />
<glyph glyph-name="r" unicode="r" horiz-adv-x="416"
d="M211 390q44 105 132 105q17 0 43 -7l-2 -118q-28 6 -55 6q-118 0 -118 -163v-213h-118v487h118v-97z" />
<glyph glyph-name="s" unicode="s" horiz-adv-x="527"
d="M159 148q2 -69 101 -69q38 0 62.5 16.5t24.5 38.5t-15 34t-47 22l-106 38q-118 41 -118 134q0 62 55.5 99.5t149 37.5t144 -41t52.5 -103h-111q-2 24 -23 38t-60 14t-60.5 -15.5t-21.5 -35.5q0 -35 59 -52l115 -43q57 -19 87.5 -48.5t30.5 -76.5q0 -60 -57 -104
q-59 -46 -156 -46t-156 42.5t-60 119.5h110z" />
<glyph glyph-name="t" unicode="t" horiz-adv-x="395"
d="M367 12q-66 -26 -104 -26t-66.5 9t-50.5 27q-46 41 -46 113v272h-68v79h68v128h118v-128h132v-79h-132v-268q0 -60 57 -60q29 0 75 16z" />
<glyph glyph-name="u" unicode="u" horiz-adv-x="627"
d="M416 88q-46 -97 -148 -97q-129 0 -170 101q-15 35 -15 85v310h118v-298q0 -48 23 -71.5t56.5 -23.5t56.5 9.5t40 28.5q37 43 39 115v240h118v-487h-118v88z" />
<glyph glyph-name="v" unicode="v" horiz-adv-x="519"
d="M148 486l111 -369l112 369h136l-181 -486h-133l-181 486h136z" />
<glyph glyph-name="w" unicode="w" horiz-adv-x="758"
d="M136 486l98 -347l93 320h107l93 -321l99 348h118l-160 -486h-116l-90 291l-88 -291h-117l-161 486h124z" />
<glyph glyph-name="x" unicode="x" horiz-adv-x="554"
d="M537 0h-144l-120 156l-112 -156h-145l189 242l-189 245h145l119 -156l113 156h144l-188 -245z" />
<glyph glyph-name="y" unicode="y" horiz-adv-x="504"
d="M153 486l117 -350l102 350h120l-186 -574q-29 -87 -70.5 -125t-105.5 -38q-65 0 -130 32v104q52 -33 105 -33q35 0 57.5 28t36.5 73l15 47l-195 486h134z" />
<glyph glyph-name="z" unicode="z" horiz-adv-x="495"
d="M57 96l252 294h-252v96h382v-96l-244 -294h244v-96h-382v96z" />
<glyph glyph-name="braceleft" unicode="{" horiz-adv-x="391"
d="M387 -156q-131 0 -197 70q-61 65 -61 182v91q0 42 -6.5 57.5t-26.5 15.5h-25v119h25q20 0 26.5 15.5t6.5 57.5v92q0 179 141 232q49 19 117 19v-107q-74 0 -107.5 -35.5t-33.5 -110.5v-96q0 -48 -18.5 -79t-47.5 -45v-5q29 -14 47.5 -45t18.5 -79v-96q0 -75 33.5 -110.5
t107.5 -35.5v-107z" />
<glyph glyph-name="bar" unicode="|"
d="M93 771h118v-893h-118v893z" />
<glyph glyph-name="braceright" unicode="}" horiz-adv-x="391"
d="M4 -49q74 0 107.5 35.5t33.5 110.5v96q0 48 18.5 79t47.5 45v5q-29 14 -47.5 45t-18.5 79v96q0 75 -33.5 110.5t-107.5 35.5v107q131 0 198 -71q60 -64 60 -180v-92q0 -42 6.5 -57.5t26.5 -15.5h25v-119h-25q-20 0 -26.5 -15.5t-6.5 -57.5v-91q0 -180 -141 -234
q-49 -18 -117 -18v107z" />
<glyph glyph-name="asciitilde" unicode="~" horiz-adv-x="570"
d="M184 265q-38 0 -64 -61l-63 34q17 65 47.5 102.5t80.5 37.5q34 0 89 -21q86 -33 110 -33q41 0 65 56l64 -41q-40 -127 -138 -127q-33 0 -102 28q-37 13 -55.5 19t-33.5 6z" />
<glyph glyph-name="sterling" unicode="&#xa3;" horiz-adv-x="602"
d="M22 107h32q37 0 52 21t15 66v87h-83v79h83v84q0 108 56 163t148 55q168 0 192 -175h-116q-5 33 -25 50.5t-54.5 17.5t-58.5 -27t-24 -84v-84h171v-79h-171v-79q0 -65 -36 -95h136q50 0 71.5 18.5t26.5 58.5h129q-4 -92 -54 -136q-56 -48 -172 -48h-318v107z" />
<glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="382"
d="M43.5 788.5q-19.5 18.5 -19.5 47t19.5 47.5t50.5 19t51 -19t20 -47.5t-20 -47t-51 -18.5t-50.5 18.5zM217 836q0 29 20 48t50.5 19t50.5 -19t20 -48t-20 -47t-50.5 -18t-50.5 18t-20 47z" />
<glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="356"
d="M332 798l-279 -104l-30 74l267 132z" />
<glyph glyph-name="Agrave" unicode="&#xc0;" horiz-adv-x="626"
d="M243 649h148l213 -649h-125l-45 140h-241l-46 -140h-125zM205 900l267 -132l-30 -74l-279 104zM223 229h182l-90 279z" />
<glyph glyph-name="Aacute" unicode="&#xc1;" horiz-adv-x="626"
d="M243 649h148l213 -649h-125l-45 140h-241l-46 -140h-125zM471 798l-279 -104l-30 74l267 132zM223 229h182l-90 279z" />
<glyph glyph-name="Acircumflex" unicode="&#xc2;" horiz-adv-x="626"
d="M243 649h148l213 -649h-125l-45 140h-241l-46 -140h-125zM524 752l-75 -59l-133 101l-134 -101l-75 59l209 161zM223 229h182l-90 279z" />
<glyph glyph-name="Atilde" unicode="&#xc3;" horiz-adv-x="626"
d="M243 649h148l213 -649h-125l-45 140h-241l-46 -140h-125zM386 838q32 0 53 49l50 -33q-11 -54 -39.5 -88.5t-60.5 -34.5q-18 0 -35.5 7t-43.5 20q-45 23 -61 23q-35 0 -59 -50l-47 28q12 61 40.5 94.5t66.5 33.5q27 0 63 -18.5t48.5 -24.5t24.5 -6zM223 229h182l-90 279z
" />
<glyph glyph-name="Adieresis" unicode="&#xc4;" horiz-adv-x="626"
d="M243 649h148l213 -649h-125l-45 140h-241l-46 -140h-125zM223 229h182l-90 279zM168.5 767.5q-19.5 18.5 -19.5 47t19.5 47.5t50.5 19t51 -19t20 -47.5t-20 -47t-51 -18.5t-50.5 18.5zM342 815q0 29 20 48t50.5 19t50.5 -19t20 -48t-20 -47t-50.5 -18t-50.5 18t-20 47z
" />
<glyph glyph-name="Egrave" unicode="&#xc8;" horiz-adv-x="588"
d="M92 649h418v-102h-300v-171h281v-102h-281v-171h300v-103h-418v649zM190 900l267 -132l-30 -74l-279 104z" />
<glyph glyph-name="Eacute" unicode="&#xc9;" horiz-adv-x="588"
d="M92 0h418v103h-300v171h281v102h-281v171h300v102h-418v-649zM456 798l-279 -104l-30 74l267 132z" />
<glyph glyph-name="Ecircumflex" unicode="&#xca;" horiz-adv-x="588"
d="M102 649h418v-102h-300v-171h281v-102h-281v-171h300v-103h-418v649zM520 752l-75 -59l-133 101l-134 -101l-75 59l209 161z" />
<glyph glyph-name="Edieresis" unicode="&#xcb;" horiz-adv-x="588"
d="M92 649h418v-102h-300v-171h281v-102h-281v-171h300v-103h-418v649zM154.5 767.5q-19.5 18.5 -19.5 47t19.5 47.5t50.5 19t51 -19t20 -47.5t-20 -47t-51 -18.5t-50.5 18.5zM328 815q0 29 20 48t50.5 19t50.5 -19t20 -48t-20 -47t-50.5 -18t-50.5 18t-20 47z" />
<glyph glyph-name="Igrave" unicode="&#xcc;"
d="M93 649h118v-649h-118v649zM41 900l267 -132l-30 -74l-279 104z" />
<glyph glyph-name="Iacute" unicode="&#xcd;"
d="M93 0h118v649h-118v-649zM307 798l-279 -104l-30 74l267 132z" />
<glyph glyph-name="Icircumflex" unicode="&#xce;"
d="M93 649h118v-649h-118v649zM361 752l-75 -59l-133 101l-134 -101l-75 59l209 161z" />
<glyph glyph-name="Idieresis" unicode="&#xcf;"
d="M93 649h118v-649h-118v649zM5.5 767.5q-19.5 18.5 -19.5 47t19.5 47.5t50.5 19t51 -19t20 -47.5t-20 -47t-51 -18.5t-50.5 18.5zM179 815q0 29 20 48t50.5 19t50.5 -19t20 -48t-20 -47t-50.5 -18t-50.5 18t-20 47z" />
<glyph glyph-name="Ntilde" unicode="&#xd1;" horiz-adv-x="720"
d="M91 649v-649h118v476l295 -476h120v649h-118v-460l-286 460h-129zM429 838q32 0 53 49l50 -33q-11 -54 -39.5 -88.5t-60.5 -34.5q-18 0 -35.5 7t-44.5 20q-44 23 -60 23q-35 0 -59 -50l-47 28q12 61 40.5 94.5t66.5 33.5q27 0 63 -18.5t48.5 -24.5t24.5 -6z" />
<glyph glyph-name="Ograve" unicode="&#xd2;" horiz-adv-x="683"
d="M342 662q65 0 119 -21.5t93 -63.5q82 -88 82 -252q0 -165 -82 -255q-78 -84 -213 -84q-134 0 -212 86q-82 89 -82 253q0 166 82 254q77 83 213 83zM467.5 495.5q-46.5 60.5 -125.5 60.5t-126 -60.5t-47 -172t47 -171t126 -59.5t125.5 59.5t46.5 171t-46.5 172zM228 900
l267 -132l-30 -74l-279 104z" />
<glyph glyph-name="Oacute" unicode="&#xd3;" horiz-adv-x="683"
d="M342 662q-66 0 -120 -20.5t-93 -62.5q-82 -88 -82 -254q0 -164 82 -253q78 -86 212 -86q135 0 213 84q82 90 82 255q0 164 -82 252q-79 85 -212 85zM216 495.5q47 60.5 126 60.5t125.5 -60.5t46.5 -172t-46.5 -171t-125.5 -59.5t-126 59.5t-47 171t47 172zM494 798
l-279 -104l-30 74l267 132z" />
<glyph glyph-name="Ocircumflex" unicode="&#xd4;" horiz-adv-x="683"
d="M342 662q65 0 119 -21.5t93 -63.5q82 -88 82 -252q0 -165 -82 -255q-78 -84 -213 -84q-134 0 -212 86q-82 89 -82 253q0 166 82 254q77 83 213 83zM467.5 495.5q-46.5 60.5 -125.5 60.5t-126 -60.5t-47 -172t47 -171t126 -59.5t125.5 59.5t46.5 171t-46.5 172zM549 752
l-75 -59l-133 101l-134 -101l-75 59l209 161z" />
<glyph glyph-name="Otilde" unicode="&#xd5;" horiz-adv-x="683"
d="M342 662q-66 0 -120 -20.5t-93 -62.5q-82 -88 -82 -254q0 -164 82 -253q78 -86 212 -86q135 0 213 84q82 90 82 255q0 164 -82 252q-79 85 -212 85zM216 495.5q47 60.5 126 60.5t125.5 -60.5t46.5 -172t-46.5 -171t-125.5 -59.5t-126 59.5t-47 171t47 172zM411 838
q32 0 53 49l50 -33q-11 -54 -39.5 -88.5t-60.5 -34.5q-18 0 -35.5 7t-44.5 20q-44 23 -60 23q-35 0 -59 -50l-47 28q12 61 40.5 94.5t66.5 33.5q27 0 63 -18.5t48.5 -24.5t24.5 -6z" />
<glyph glyph-name="Odieresis" unicode="&#xd6;" horiz-adv-x="683"
d="M342 662q65 0 119 -21.5t93 -63.5q82 -88 82 -252q0 -165 -82 -255q-78 -84 -213 -84q-134 0 -212 86q-82 89 -82 253q0 166 82 254q77 83 213 83zM467.5 495.5q-46.5 60.5 -125.5 60.5t-126 -60.5t-47 -172t47 -171t126 -59.5t125.5 59.5t46.5 171t-46.5 172z
M193.5 767.5q-19.5 18.5 -19.5 47t19.5 47.5t50.5 19t51 -19t20 -47.5t-20 -47t-51 -18.5t-50.5 18.5zM367 815q0 29 20 48t50.5 19t50.5 -19t20 -48t-20 -47t-50.5 -18t-50.5 18t-20 47z" />
<glyph glyph-name="Ugrave" unicode="&#xd9;" horiz-adv-x="690"
d="M201 649v-404q0 -80 40.5 -115t104.5 -35t104.5 35t40.5 115v404h118v-404q0 -124 -69 -191.5t-194 -67.5t-194 67.5t-69 191.5v404h118zM233 900l267 -132l-30 -74l-279 104z" />
<glyph glyph-name="Uacute" unicode="&#xda;" horiz-adv-x="690"
d="M83 649v-404q0 -124 69 -191.5t194 -67.5t194 67.5t69 191.5v404h-118v-404q0 -80 -40.5 -115t-104.5 -35t-104.5 35t-40.5 115v404h-118zM499 798l-279 -104l-30 74l267 132z" />
<glyph glyph-name="Ucircumflex" unicode="&#xdb;" horiz-adv-x="690"
d="M201 649v-404q0 -80 40.5 -115t104.5 -35t104.5 35t40.5 115v404h118v-404q0 -124 -69 -191.5t-194 -67.5t-194 67.5t-69 191.5v404h118zM554 752l-75 -59l-133 101l-134 -101l-75 59l209 161z" />
<glyph glyph-name="Udieresis" unicode="&#xdc;" horiz-adv-x="690"
d="M201 649v-404q0 -80 40.5 -115t104.5 -35t104.5 35t40.5 115v404h118v-404q0 -124 -69 -191.5t-194 -67.5t-194 67.5t-69 191.5v404h118zM199.5 767.5q-19.5 18.5 -19.5 47t19.5 47.5t50.5 19t51 -19t20 -47.5t-20 -47t-51 -18.5t-50.5 18.5zM373 815q0 29 20 48t50.5 19
t50.5 -19t20 -48t-20 -47t-50.5 -18t-50.5 18t-20 47z" />
<glyph glyph-name="agrave" unicode="&#xe0;" horiz-adv-x="585"
d="M253 284q58 0 134 -19v48q0 51 -20.5 75.5t-67 24.5t-71.5 -18.5t-25 -52.5h-129q0 83 58.5 120t163.5 37q150 0 194 -105q15 -36 15 -85v-309h-103l-9 65q-47 -79 -144 -79q-94 0 -146 46q-48 44 -48 111.5t53 104t145 36.5zM185 764l267 -132l-30 -74l-279 104z
M387 190q-59 16 -110 16q-96 0 -96 -64q0 -27 22 -46.5t70.5 -19.5t80 32.5t33.5 81.5z" />
<glyph glyph-name="aacute" unicode="&#xe1;" horiz-adv-x="585"
d="M253 284q58 0 134 -19v48q0 51 -20.5 75.5t-67 24.5t-71.5 -18.5t-25 -52.5h-129q0 83 58.5 120t163.5 37q150 0 194 -105q15 -36 15 -85v-309h-103l-9 65q-47 -79 -144 -79q-94 0 -146 46q-48 44 -48 111.5t53 104t145 36.5zM451 662l-279 -104l-30 74l267 132zM387 190
q-59 16 -110 16q-96 0 -96 -64q0 -27 22 -46.5t70.5 -19.5t80 32.5t33.5 81.5z" />
<glyph glyph-name="acircumflex" unicode="&#xe2;" horiz-adv-x="585"
d="M253 284q58 0 134 -19v48q0 51 -20.5 75.5t-67 24.5t-71.5 -18.5t-25 -52.5h-129q0 83 58.5 120t163.5 37q150 0 194 -105q15 -36 15 -85v-309h-103l-9 65q-47 -79 -144 -79q-94 0 -146 46q-48 44 -48 111.5t53 104t145 36.5zM506 616l-75 -59l-133 101l-134 -101l-75 59
l209 161zM387 190q-59 16 -110 16q-96 0 -96 -64q0 -27 22 -46.5t70.5 -19.5t80 32.5t33.5 81.5z" />
<glyph glyph-name="atilde" unicode="&#xe3;" horiz-adv-x="585"
d="M253 284q58 0 134 -19v48q0 51 -20.5 75.5t-67 24.5t-71.5 -18.5t-25 -52.5h-129q0 83 58.5 120t163.5 37q150 0 194 -105q15 -36 15 -85v-309h-103l-9 65q-47 -79 -144 -79q-94 0 -146 46q-48 44 -48 111.5t53 104t145 36.5zM368 702q32 0 53 49l50 -33
q-11 -54 -39.5 -88.5t-60.5 -34.5q-18 0 -35.5 7t-43.5 20q-45 23 -61 23q-35 0 -59 -50l-47 28q12 61 40.5 94.5t66.5 33.5q27 0 63 -18.5t48.5 -24.5t24.5 -6zM387 190q-59 16 -110 16q-96 0 -96 -64q0 -27 22 -46.5t70.5 -19.5t80 32.5t33.5 81.5z" />
<glyph glyph-name="adieresis" unicode="&#xe4;" horiz-adv-x="585"
d="M253 284q58 0 134 -19v48q0 51 -20.5 75.5t-67 24.5t-71.5 -18.5t-25 -52.5h-129q0 83 58.5 120t163.5 37q150 0 194 -105q15 -36 15 -85v-309h-103l-9 65q-47 -79 -144 -79q-94 0 -146 46q-48 44 -48 111.5t53 104t145 36.5zM387 190q-59 16 -110 16q-96 0 -96 -64
q0 -27 22 -46.5t70.5 -19.5t80 32.5t33.5 81.5zM150.5 631.5q-19.5 18.5 -19.5 47t19.5 47.5t50.5 19t51 -19t20 -47.5t-20 -47t-51 -18.5t-50.5 18.5zM324 679q0 29 20 48t50.5 19t50.5 -19t20 -48t-20 -47t-50.5 -18t-50.5 18t-20 47z" />
<glyph glyph-name="egrave" unicode="&#xe8;" horiz-adv-x="530"
d="M469.5 354q12.5 -42 12.5 -77t-4 -63h-314q2 -59 29 -96t82 -37q73 0 87 64h119q-12 -73 -67 -115q-57 -44 -139 -44q-96 0 -161 70q-67 73 -67 187q0 117 67 188q64 68 161 68q101 0 157 -71q25 -32 37.5 -74zM154 774l267 -132l-30 -74l-279 104zM276 405
q-50 0 -78 -32.5t-33 -83.5h207q0 79 -50 106q-19 10 -46 10z" />
<glyph glyph-name="eacute" unicode="&#xe9;" horiz-adv-x="530"
d="M362 145q-14 -64 -87 -64q-55 0 -82 37t-29 96h314q4 28 4 63t-12.5 77t-37.5 74q-56 71 -157 71q-97 0 -161 -68q-67 -71 -67 -188q0 -114 67 -187q65 -70 161 -70q82 0 139 44q55 42 67 115h-119zM420 672l-279 -104l-30 74l267 132zM372 289h-207q5 51 33 83.5
t78 32.5t73 -32.5t23 -83.5z" />
<glyph glyph-name="ecircumflex" unicode="&#xea;" horiz-adv-x="530"
d="M476.5 354q12.5 -42 12.5 -77t-4 -63h-314q2 -59 29 -96t82 -37q73 0 87 64h119q-12 -73 -67 -115q-57 -44 -139 -44q-96 0 -161 70q-67 73 -67 187q0 117 67 188q64 68 161 68q101 0 156 -71q26 -32 38.5 -74zM480 626l-75 -59l-133 101l-134 -101l-75 59l209 161z
M283 405q-50 0 -78 -32.5t-33 -83.5h207q0 79 -51 106q-18 10 -45 10z" />
<glyph glyph-name="edieresis" unicode="&#xeb;" horiz-adv-x="530"
d="M469.5 354q12.5 -42 12.5 -77t-4 -63h-314q2 -59 29 -96t82 -37q73 0 87 64h119q-12 -73 -67 -115q-57 -44 -139 -44q-96 0 -161 70q-67 73 -67 187q0 117 67 188q64 68 161 68q101 0 157 -71q25 -32 37.5 -74zM276 405q-50 0 -78 -32.5t-33 -83.5h207q0 79 -50 106
q-19 10 -46 10zM118.5 631.5q-19.5 18.5 -19.5 47t19.5 47.5t50.5 19t51 -19t20 -47.5t-20 -47t-51 -18.5t-50.5 18.5zM292 679q0 29 20 48t50.5 19t50.5 -19t20 -48t-20 -47t-50.5 -18t-50.5 18t-20 47z" />
<glyph glyph-name="igrave" unicode="&#xec;" horiz-adv-x="328"
d="M103 487h118v-487h-118v487zM50 764l267 -132l-30 -74l-279 104z" />
<glyph glyph-name="iacute" unicode="&#xed;" horiz-adv-x="328"
d="M103 0h118v487h-118v-487zM316 662l-279 -104l-30 74l267 132z" />
<glyph glyph-name="icircumflex" unicode="&#xee;" horiz-adv-x="328"
d="M103 487h118v-487h-118v487zM370 616l-75 -59l-133 101l-134 -101l-75 59l209 161z" />
<glyph glyph-name="idieresis" unicode="&#xef;" horiz-adv-x="328"
d="M103 487h118v-487h-118v487zM14.5 631.5q-19.5 18.5 -19.5 47t19.5 47.5t50.5 19t51 -19t20 -47.5t-20 -47t-51 -18.5t-50.5 18.5zM188 679q0 29 20 48t50.5 19t50.5 -19t20 -48t-20 -47t-50.5 -18t-50.5 18t-20 47z" />
<glyph glyph-name="ntilde" unicode="&#xf1;" horiz-adv-x="623"
d="M363 499q-106 0 -154 -97l-13 84h-103v-486h118v225q2 84 35.5 126t80.5 42t73 -27.5t26 -81.5v-284h118v284q0 97 -45.5 156t-135.5 59zM384 702q32 0 53 49l50 -33q-11 -54 -39.5 -88.5t-60.5 -34.5q-18 0 -35.5 7t-43.5 20q-45 23 -61 23q-35 0 -59 -50l-47 28
q12 61 40.5 94.5t66.5 33.5q27 0 63 -18.5t48.5 -24.5t24.5 -6z" />
<glyph glyph-name="ograve" unicode="&#xf2;" horiz-adv-x="566"
d="M284 499q49 0 92 -15.5t74 -47.5q69 -70 69 -194q0 -122 -69 -192q-62 -64 -166 -64t-168 64q-69 69 -69 192q0 125 69 194q63 63 168 63zM371 358.5q-30 38.5 -83.5 38.5t-87.5 -38.5t-34 -115.5t30.5 -115.5t83.5 -38.5t87 38.5t34 115.5t-30 115.5zM172 764l267 -132
l-30 -74l-279 104z" />
<glyph glyph-name="oacute" unicode="&#xf3;" horiz-adv-x="566"
d="M284 499q-50 0 -93 -15.5t-75 -47.5q-69 -69 -69 -194q0 -123 69 -192q64 -64 168 -64t166 64q69 70 69 192q0 124 -69 194q-62 63 -166 63zM200 358.5q34 38.5 87.5 38.5t83.5 -38.5t30 -115.5t-34 -115.5t-87 -38.5t-83.5 38.5t-30.5 115.5t34 115.5zM438 662
l-279 -104l-30 74l267 132z" />
<glyph glyph-name="ocircumflex" unicode="&#xf4;" horiz-adv-x="566"
d="M284 499q49 0 92 -15.5t74 -47.5q69 -70 69 -194q0 -122 -69 -192q-62 -64 -166 -64t-168 64q-69 69 -69 192q0 125 69 194q63 63 168 63zM371 358.5q-30 38.5 -83.5 38.5t-87.5 -38.5t-34 -115.5t30.5 -115.5t83.5 -38.5t87 38.5t34 115.5t-30 115.5zM492 616l-75 -59
l-133 101l-134 -101l-75 59l209 161z" />
<glyph glyph-name="otilde" unicode="&#xf5;" horiz-adv-x="566"
d="M284 499q-50 0 -93 -15.5t-75 -47.5q-69 -69 -69 -194q0 -123 69 -192q64 -64 168 -64t166 64q69 70 69 192q0 124 -69 194q-62 63 -166 63zM200 358.5q34 38.5 87.5 38.5t83.5 -38.5t30 -115.5t-34 -115.5t-87 -38.5t-83.5 38.5t-30.5 115.5t34 115.5zM353 702
q32 0 53 49l50 -33q-11 -54 -39.5 -88.5t-60.5 -34.5q-18 0 -35.5 7t-44.5 20q-44 23 -60 23q-35 0 -59 -50l-47 28q12 61 40.5 94.5t66.5 33.5q27 0 63 -18.5t48.5 -24.5t24.5 -6z" />
<glyph glyph-name="odieresis" unicode="&#xf6;" horiz-adv-x="566"
d="M284 499q49 0 92 -15.5t74 -47.5q69 -70 69 -194q0 -122 -69 -192q-62 -64 -166 -64t-168 64q-69 69 -69 192q0 125 69 194q63 63 168 63zM371 358.5q-30 38.5 -83.5 38.5t-87.5 -38.5t-34 -115.5t30.5 -115.5t83.5 -38.5t87 38.5t34 115.5t-30 115.5zM136.5 631.5
q-19.5 18.5 -19.5 47t19.5 47.5t50.5 19t51 -19t20 -47.5t-20 -47t-51 -18.5t-50.5 18.5zM310 679q0 29 20 48t50.5 19t50.5 -19t20 -48t-20 -47t-50.5 -18t-50.5 18t-20 47z" />
<glyph glyph-name="ugrave" unicode="&#xf9;" horiz-adv-x="627"
d="M416 88q-46 -97 -148 -97q-129 0 -170 101q-15 35 -15 85v310h118v-298q0 -48 23 -71.5t56.5 -23.5t56.5 9.5t40 28.5q37 43 39 115v240h118v-487h-118v88zM201 784l267 -132l-30 -74l-279 104z" />
<glyph glyph-name="uacute" unicode="&#xfa;" horiz-adv-x="627"
d="M268 -9q102 0 148 97v-88h118v487h-118v-232q0 -77 -38 -121q-34 -40 -82.5 -40t-71.5 23.5t-23 71.5v298h-118v-310q0 -94 53 -143q47 -43 132 -43zM467 682l-279 -104l-30 74l267 132z" />
<glyph glyph-name="ucircumflex" unicode="&#xfb;" horiz-adv-x="627"
d="M416 88q-46 -97 -148 -97q-129 0 -170 101q-15 35 -15 85v310h118v-298q0 -48 23 -71.5t56.5 -23.5t56.5 9.5t40 28.5q37 43 39 115v240h118v-487h-118v88zM521 636l-75 -59l-133 101l-134 -101l-75 59l209 161z" />
<glyph glyph-name="udieresis" unicode="&#xfc;" horiz-adv-x="627"
d="M416 88q-46 -97 -148 -97q-129 0 -170 101q-15 35 -15 85v310h118v-298q0 -48 23 -71.5t56.5 -23.5t56.5 9.5t40 28.5q37 43 39 115v240h118v-487h-118v88zM165.5 631.5q-19.5 18.5 -19.5 47t19.5 47.5t50.5 19t51 -19t20 -47.5t-20 -47t-51 -18.5t-50.5 18.5zM339 679
q0 29 20 48t50.5 19t50.5 -19t20 -48t-20 -47t-50.5 -18t-50.5 18t-20 47z" />
<glyph glyph-name="dotlessi" unicode="&#x131;"
d="M93 487h118v-487h-118v487z" />
<glyph glyph-name="apostrophe" unicode="&#x2bc;" horiz-adv-x="237"
d="M80.5 537.5q-19.5 17.5 -19.5 47t23 50.5t63 21t65 -31t25 -76q0 -73 -66 -133q-21 -19 -47 -32l-88 44q33 17 58.5 38t33.5 49q-28 5 -47.5 22.5z" />
<glyph glyph-name="circumflex" unicode="&#x2c6;" horiz-adv-x="465"
d="M441 752l-75 -59l-133 101l-134 -101l-75 59l209 161z" />
<glyph glyph-name="tilde" unicode="&#x2dc;" horiz-adv-x="394"
d="M266 838q32 0 53 49l50 -33q-11 -54 -39.5 -88.5t-60.5 -34.5q-18 0 -35.5 7t-43.5 20q-45 23 -61 23q-35 0 -59 -50l-47 28q12 61 40.5 94.5t66.5 33.5q27 0 63 -18.5t48.5 -24.5t24.5 -6z" />
<glyph glyph-name="endash" unicode="&#x2013;" horiz-adv-x="525"
d="M55 353h415v-103h-415v103z" />
<glyph glyph-name="emdash" unicode="&#x2014;" horiz-adv-x="768"
d="M55 353h659v-103h-659v103z" />
<glyph glyph-name="quoteleft" unicode="&#x2018;" horiz-adv-x="271"
d="M189.5 400q-22.5 -21 -62.5 -21t-65.5 31.5t-25.5 78t32.5 91.5t86.5 72l83 -46q-77 -36 -93 -87q28 -5 47.5 -22t19.5 -46.5t-22.5 -50.5z" />
<glyph glyph-name="quoteright" unicode="&#x2019;" horiz-adv-x="271"
d="M77 631.5q23 20.5 62.5 20.5t65 -31.5t25.5 -78t-32.5 -91.5t-86.5 -72l-82 45q77 39 93 88q-29 5 -48.5 22t-19.5 47t23 50.5z" />
<glyph glyph-name="rupeesymbol" unicode="&#x20a8;" horiz-adv-x="604"
d="M83 649h464v-66h-182q60 -36 75 -94h107v-67h-104q-7 -64 -54 -109.5t-146 -60.5l261 -252h-166l-255 246v67h77q73 2 110.5 32t45.5 77h-233v67h229q-11 42 -50 68t-110 26h-69v66z" />
<glyph glyph-name="minus" unicode="&#x2212;" horiz-adv-x="506"
d="M427 353v-103h-348v103h348z" />
<glyph glyph-name="zero.propold" horiz-adv-x="570"
d="M285 583q106 0 171 -77q66 -79 66 -221t-66 -222q-64 -77 -171 -77t-171 77q-67 81 -67 222t67 221q65 77 171 77zM405 285q0 192 -120 192q-119 0 -119 -192t119.5 -192t119.5 192z" />
<glyph glyph-name="one.propold" horiz-adv-x="357"
d="M42 518q74 9 132 53h89v-571h-118v430q-48 -24 -103 -26v114z" />
<glyph glyph-name="two.propold" horiz-adv-x="595"
d="M313 480q-101 0 -111 -80h-131q2 90 68 138q63 45 168 45q98 0 161 -52q61 -50 61 -124t-39.5 -114.5t-127.5 -62.5l-105 -26q-42 -11 -60.5 -28.5t-18.5 -43.5v-24h355v-108h-473v98q0 83 38 128q37 42 118 62l95 23q55 14 77.5 36.5t22.5 55.5t-26 55t-72 22z" />
<glyph glyph-name="three.propold" horiz-adv-x="588"
d="M501 407q0 -100 -105 -141q61 -23 94 -71t33 -101.5t-18 -90.5t-51 -64q-71 -58 -181 -58q-106 0 -176 52q-77 57 -77 162h120q4 -60 41 -87t93.5 -27t93 32t36.5 80.5t-36 81t-102 32.5h-67v93h61q57 0 90 24.5t33 66.5t-29 67.5t-77.5 25.5t-80 -22.5t-37.5 -63.5h-126
q17 144 147 175q42 10 93.5 10t94 -13.5t72.5 -37.5q61 -48 61 -125z" />
<glyph glyph-name="four.propold" horiz-adv-x="596"
d="M466 574v-423h112v-102h-112v-157h-119v157h-329v89l332 436h116zM148 138h205v263z" />
<glyph glyph-name="five.propold" horiz-adv-x="589"
d="M503 581v-108h-273l-15 -156q45 12 95.5 12t92.5 -15.5t72 -43.5q62 -58 62 -155q0 -101 -73 -168q-71 -66 -180 -66q-96 0 -158 54q-69 59 -69 157h117q0 -51 31 -77t82 -26q56 0 94 35q38 34 38 90.5t-35.5 87.5t-108.5 31h-184l31 348h381z" />
<glyph glyph-name="six.propold" horiz-adv-x="607"
d="M425 471q-5 39 -28 61.5t-63.5 22.5t-71 -17.5t-52.5 -50.5q-44 -68 -44 -184q0 -43 3 -65q11 86 65 126q47 34 117 34q90 0 149 -58q58 -56 58 -148t-65 -149t-170 -57q-122 0 -199 92t-77 235q0 166 77 259q75 90 204 90q98 0 158 -52q61 -53 65 -139h-126z
M242.5 272.5q-32.5 -28.5 -32.5 -75.5t32.5 -74.5t80 -27.5t80.5 27.5t33 74.5t-34 77q-31 27 -79 27t-80.5 -28.5z" />
<glyph glyph-name="seven.propold" horiz-adv-x="498"
d="M480 583v-102l-300 -585h-144l323 584h-335v103h456z" />
<glyph glyph-name="eight.propold" horiz-adv-x="647"
d="M502 609.5q73 -52.5 73 -133.5q0 -49 -33.5 -87.5t-96.5 -49.5q83 -33 115 -67q38 -40 38 -100q0 -83 -72 -134q-75 -52 -203 -52q-123 0 -199 54q-75 52 -75 135q0 61 42.5 98.5t108.5 45.5q-87 42 -118 109q-11 25 -11 57q0 82 65.5 129.5t179 47.5t186.5 -52.5z
M303 278q-91 -6 -123 -58q-9 -15 -9 -35t12 -37t33 -29q40 -24 112.5 -24t110 19.5t37.5 48t-18.5 46t-50.5 30.5zM259 411l75 -29q48 0 84 24q35 24 35 63t-36 62.5t-94 23.5q-56 0 -93 -21t-37 -58.5t66 -64.5z" />
<glyph glyph-name="nine.propold" horiz-adv-x="609"
d="M296 583q60 0 111.5 -29.5t86.5 -77.5q69 -98 69 -239q0 -165 -75 -262q-72 -94 -196 -94q-99 0 -164 57q-66 57 -66 148h124q3 -46 29.5 -71.5t76.5 -25.5q79 0 116 69.5t37 187.5q0 37 -4 71q-10 -75 -57.5 -114.5t-113.5 -39.5q-92 0 -154 59q-63 59 -63 149
q0 93 65 152q66 60 178 60zM287 480q-53 0 -82.5 -31t-29.5 -79t30 -79t83 -31t83 32t30 79t-30.5 78t-83.5 31z" />
<hkern u1="A" u2="y" k="15" />
<hkern u1="A" u2="w" k="24" />
<hkern u1="A" u2="v" k="20" />
<hkern u1="A" u2="f" k="12" />
<hkern u1="A" u2="Y" k="28" />
<hkern u1="A" u2="W" k="32" />
<hkern u1="A" u2="V" k="32" />
<hkern u1="A" u2="T" k="45" />
<hkern u1="D" u2="Y" k="36" />
<hkern u1="F" u2="z" k="24" />
<hkern u1="F" u2="y" k="20" />
<hkern u1="F" u2="x" k="32" />
<hkern u1="F" u2="w" k="36" />
<hkern u1="F" u2="v" k="28" />
<hkern u1="F" u2="u" k="24" />
<hkern u1="F" u2="q" k="32" />
<hkern u1="F" u2="o" k="32" />
<hkern u1="F" u2="g" k="40" />
<hkern u1="F" u2="e" k="32" />
<hkern u1="F" u2="d" k="24" />
<hkern u1="F" u2="c" k="32" />
<hkern u1="F" u2="a" k="24" />
<hkern u1="F" u2="Y" k="4" />
<hkern u1="F" u2="X" k="8" />
<hkern u1="F" u2="W" k="4" />
<hkern u1="F" u2="A" k="65" />
<hkern u1="L" u2="y" k="15" />
<hkern u1="L" u2="w" k="24" />
<hkern u1="L" u2="v" k="24" />
<hkern u1="L" u2="Y" k="77" />
<hkern u1="L" u2="W" k="50" />
<hkern u1="L" u2="V" k="53" />
<hkern u1="L" u2="T" k="60" />
<hkern u1="L" u2="J" k="-8" />
<hkern u1="O" u2="X" k="24" />
<hkern u1="P" u2="A" k="41" />
<hkern u1="Q" u2="Y" k="20" />
<hkern u1="S" u2="Y" k="28" />
<hkern u1="T" u2="z" k="68" />
<hkern u1="T" u2="y" k="70" />
<hkern u1="T" u2="x" k="65" />
<hkern u1="T" u2="v" k="73" />
<hkern u1="T" u2="u" k="83" />
<hkern u1="T" u2="s" k="97" />
<hkern u1="T" u2="r" k="85" />
<hkern u1="T" u2="q" k="83" />
<hkern u1="T" u2="p" k="83" />
<hkern u1="T" u2="o" k="91" />
<hkern u1="T" u2="n" k="83" />
<hkern u1="T" u2="m" k="83" />
<hkern u1="T" u2="g" k="83" />
<hkern u1="T" u2="f" k="57" />
<hkern u1="T" u2="e" k="83" />
<hkern u1="T" u2="d" k="91" />
<hkern u1="T" u2="c" k="83" />
<hkern u1="T" u2="a" k="95" />
<hkern u1="T" u2="J" k="77" />
<hkern u1="T" u2="A" k="45" />
<hkern u1="V" u2="s" k="41" />
<hkern u1="V" u2="r" k="32" />
<hkern u1="V" u2="q" k="38" />
<hkern u1="V" u2="o" k="41" />
<hkern u1="V" u2="g" k="49" />
<hkern u1="V" u2="f" k="45" />
<hkern u1="V" u2="e" k="41" />
<hkern u1="V" u2="d" k="41" />
<hkern u1="V" u2="c" k="41" />
<hkern u1="V" u2="a" k="41" />
<hkern u1="V" u2="J" k="77" />
<hkern u1="V" u2="C" k="16" />
<hkern u1="V" u2="A" k="41" />
<hkern u1="W" u2="u" k="32" />
<hkern u1="W" u2="s" k="45" />
<hkern u1="W" u2="r" k="41" />
<hkern u1="W" u2="q" k="41" />
<hkern u1="W" u2="o" k="41" />
<hkern u1="W" u2="g" k="49" />
<hkern u1="W" u2="f" k="45" />
<hkern u1="W" u2="e" k="41" />
<hkern u1="W" u2="d" k="41" />
<hkern u1="W" u2="c" k="41" />
<hkern u1="W" u2="a" k="41" />
<hkern u1="W" u2="J" k="77" />
<hkern u1="W" u2="A" k="41" />
<hkern u1="X" u2="O" k="24" />
<hkern u1="Y" u2="z" k="81" />
<hkern u1="Y" u2="y" k="65" />
<hkern u1="Y" u2="x" k="57" />
<hkern u1="Y" u2="w" k="53" />
<hkern u1="Y" u2="v" k="53" />
<hkern u1="Y" u2="u" k="85" />
<hkern u1="Y" u2="t" k="48" />
<hkern u1="Y" u2="s" k="81" />
<hkern u1="Y" u2="r" k="81" />
<hkern u1="Y" u2="q" k="81" />
<hkern u1="Y" u2="p" k="81" />
<hkern u1="Y" u2="o" k="81" />
<hkern u1="Y" u2="n" k="81" />
<hkern u1="Y" u2="m" k="81" />
<hkern u1="Y" u2="g" k="81" />
<hkern u1="Y" u2="f" k="69" />
<hkern u1="Y" u2="e" k="81" />
<hkern u1="Y" u2="d" k="81" />
<hkern u1="Y" u2="c" k="81" />
<hkern u1="Y" u2="a" k="73" />
<hkern u1="Y" u2="S" k="32" />
<hkern u1="Y" u2="Q" k="20" />
<hkern u1="Y" u2="J" k="101" />
<hkern u1="Y" u2="H" k="16" />
<hkern u1="Y" u2="C" k="32" />
<hkern u1="Y" u2="A" k="77" />
<hkern u1="a" u2="Y" k="57" />
<hkern u1="a" u2="W" k="32" />
<hkern u1="a" u2="V" k="48" />
<hkern u1="a" u2="T" k="81" />
<hkern u1="b" u2="Y" k="32" />
<hkern u1="b" u2="V" k="38" />
<hkern u1="b" u2="T" k="28" />
<hkern u1="c" u2="Y" k="41" />
<hkern u1="c" u2="V" k="32" />
<hkern u1="c" u2="T" k="55" />
<hkern u1="e" u2="Y" k="38" />
<hkern u1="e" u2="V" k="24" />
<hkern u1="e" u2="T" k="55" />
<hkern u1="f" u2="s" k="12" />
<hkern u1="f" u2="j" k="8" />
<hkern u1="f" u2="g" k="16" />
<hkern u1="f" u2="c" k="8" />
<hkern u1="f" u2="J" k="45" />
<hkern u1="f" u2="A" k="20" />
<hkern u1="g" u2="y" k="-15" />
<hkern u1="g" u2="j" k="-73" />
<hkern u1="h" u2="Y" k="40" />
<hkern u1="h" u2="T" k="16" />
<hkern u1="j" u2="f" k="20" />
<hkern u1="k" u2="y" k="5" />
<hkern u1="k" u2="j" k="4" />
<hkern u1="k" u2="f" k="8" />
<hkern u1="m" u2="Y" k="33" />
<hkern u1="m" u2="T" k="19" />
<hkern u1="n" u2="Y" k="33" />
<hkern u1="n" u2="T" k="35" />
<hkern u1="o" u2="Y" k="81" />
<hkern u1="o" u2="W" k="41" />
<hkern u1="o" u2="V" k="41" />
<hkern u1="o" u2="T" k="75" />
<hkern u1="p" u2="Y" k="36" />
<hkern u1="p" u2="T" k="63" />
<hkern u1="q" u2="j" k="-77" />
<hkern u1="q" u2="Y" k="45" />
<hkern u1="q" u2="T" k="67" />
<hkern u1="r" u2="g" k="8" />
<hkern u1="r" u2="T" k="25" />
<hkern u1="r" u2="J" k="45" />
<hkern u1="s" u2="y" k="15" />
<hkern u1="s" u2="f" k="20" />
<hkern u1="s" u2="Y" k="65" />
<hkern u1="s" u2="W" k="36" />
<hkern u1="s" u2="V" k="32" />
<hkern u1="s" u2="T" k="81" />
<hkern u1="t" u2="Y" k="48" />
<hkern u1="u" u2="Y" k="49" />
<hkern u1="u" u2="T" k="53" />
<hkern u1="v" u2="g" k="4" />
<hkern u1="v" u2="Y" k="53" />
<hkern u1="v" u2="T" k="49" />
<hkern u1="v" u2="J" k="45" />
<hkern u1="v" u2="A" k="24" />
<hkern u1="w" u2="Y" k="28" />
<hkern u1="w" u2="T" k="28" />
<hkern u1="w" u2="J" k="33" />
<hkern u1="w" u2="A" k="32" />
<hkern u1="x" u2="Y" k="49" />
<hkern u1="x" u2="T" k="33" />
<hkern u1="y" u2="g" k="4" />
<hkern u1="y" u2="Y" k="32" />
<hkern u1="y" u2="T" k="41" />
<hkern u1="y" u2="J" k="24" />
<hkern u1="y" u2="A" k="12" />
<hkern u1="z" u2="Y" k="33" />
<hkern u1="z" u2="T" k="12" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,605 @@
<?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>
<metadata>
Created by FontForge 20120731 at Tue Jul 8 22:17:40 2014
By World Wide Web Server
Copyright (c) 2011, Jonathan Pinhorn (pinhorn.typedesign@gmail.com), with Reserved Font Names "Karla" and "Karla Tamil".
</metadata>
<defs>
<font id="Karla-BoldItalic" horiz-adv-x="276" >
<font-face
font-family="Karla"
font-weight="700"
font-style="italic"
font-stretch="normal"
units-per-em="1000"
panose-1="0 0 0 0 0 0 0 0 0 0"
ascent="800"
descent="-200"
x-height="487"
cap-height="651"
bbox="-88 -252 922.849 917"
underline-thickness="50"
underline-position="-50"
unicode-range="U+0020-2212"
/>
<missing-glyph horiz-adv-x="533"
/>
<glyph glyph-name=".notdef" horiz-adv-x="533"
/>
<glyph glyph-name=".null" horiz-adv-x="0"
/>
<glyph glyph-name="nonmarkingreturn" horiz-adv-x="533"
/>
<glyph glyph-name="space" unicode=" " horiz-adv-x="229"
/>
<glyph glyph-name="space" unicode="&#xa0;" horiz-adv-x="229"
/>
<glyph glyph-name="exclam" unicode="!" horiz-adv-x="265"
d="M141 668h120l-54 -445h-94zM85.5 14q-19.5 23 -16.5 57.5t26.5 58t57.5 23.5t53 -23.5t16 -58t-27 -57.5t-57 -23t-52.5 23z" />
<glyph glyph-name="quotedbl" unicode="&#x22;" horiz-adv-x="352"
d="M203 686l-38 -239h-80l8 239h110zM387 686l-38 -239h-80l8 239h110z" />
<glyph glyph-name="numbersign" unicode="#" horiz-adv-x="615"
d="M372 163h-120l-25 -130h-103l25 130h-82l14 80h82l30 156h-83l16 80h82l25 128h103l-25 -128h121l25 128h103l-25 -128h86l-18 -80h-83l-30 -156h85l-15 -80h-84l-25 -130h-104zM266 243h121l29 156h-120z" />
<glyph glyph-name="dollar" unicode="$" horiz-adv-x="625"
d="M475 344q66 -26 95.5 -65.5t23.5 -104.5q-6 -73 -64 -124q-65 -56 -170 -63l-9 -89h-76l8 91q-95 11 -148 63q-58 56 -48 152h109q-5 -47 20 -71t78 -32l18 190l-46 18q-73 28 -111 68t-31 111.5t63.5 119t158.5 55.5l8 76h78l-8 -77q164 -21 175 -193h-108
q-2 29 -21.5 52t-54.5 34l-18 -179zM443 126q24 22 27 50q4 55 -56 82l-28 12l-15 -171q48 5 72 27zM269 531.5q-23 -20.5 -25.5 -47.5t10.5 -43t42 -28l26 -13l15 158q-45 -6 -68 -26.5z" />
<glyph glyph-name="percent" unicode="%" horiz-adv-x="691"
d="M240 664q25 0 47 -9.5t37 -28.5q35 -42 27 -116.5t-48.5 -112t-90.5 -37.5q-53 0 -83 38q-34 42 -26 114q6 72 48 114q38 38 89 38zM233 587q-42 0 -49 -75q-9 -75 35 -75t49 75q7 75 -35 75zM554 651h111l-459 -651h-112zM655 137.5q-7 -75.5 -47 -113.5t-91 -38
q-53 0 -83 38q-35 42 -27 117t48.5 112.5t92 37.5t83 -39t24.5 -114.5zM538 214q-41 0 -48 -74q-7 -76 34 -76q18 0 32 17t18.5 58t-6.5 58t-30 17z" />
<glyph glyph-name="ampersand" unicode="&#x26;" horiz-adv-x="872"
d="M731 343q-51 -123 -118 -205l12 -13q28 -32 63 -32q21 0 38 17.5t22 55.5h99q-10 -83 -49.5 -131.5t-108.5 -48.5q-82 0 -149 79q-100 -79 -208 -79q-101 0 -166 57q-66 57 -58 143q11 130 179 159l-13 15q-58 68 -51 143q6 69 63 113q59 46 151 46q91 0 141 -46
q46 -44 40 -109t-48 -110t-120 -77l100 -112q62 74 111 181zM343 283q-109 -15 -113 -90q-5 -41 25 -69t88 -28q67 0 130 42zM496 489q2 29 -16.5 48.5t-54 19.5t-58 -21t-25.5 -47.5t6 -46t29 -40.5l18 -20q48 21 72 46.5t29 60.5z" />
<glyph glyph-name="quotesingle" unicode="'" horiz-adv-x="166"
d="M202 677l-38 -240h-80l8 240h110z" />
<glyph glyph-name="parenleft" unicode="(" horiz-adv-x="364"
d="M421 692q-85 -90 -132 -180t-56.5 -193t20.5 -192t99 -179l-86 -67q-171 186 -148 438q24 253 231 438z" />
<glyph glyph-name="parenright" unicode=")" horiz-adv-x="364"
d="M180 757q170 -186 148 -438q-22 -247 -231 -438l-74 67q88 90 135 179t56 192q10 103 -20.5 193t-99.5 180z" />
<glyph glyph-name="asterisk" unicode="*" horiz-adv-x="368"
d="M193 529l-96 37l34 71l85 -49l-1 118h74l-22 -118l93 52l22 -73l-102 -37l69 -81l-58 -52l-57 100l-78 -100l-48 52z" />
<glyph glyph-name="plus" unicode="+" horiz-adv-x="492"
d="M346 491l-17 -192h174l-11 -107h-174l-18 -192h-109l18 192h-175l10 107h175l18 192h109z" />
<glyph glyph-name="comma" unicode="," horiz-adv-x="232"
d="M63 18.5q-16 18.5 -13.5 48.5t26 51.5t60.5 21.5t57 -32.5t15.5 -79t-36.5 -93.5t-83 -74l-77 46q75 40 92 88q-25 5 -41 23.5z" />
<glyph glyph-name="hyphen" unicode="-" horiz-adv-x="338"
d="M76 356h254l-11 -107h-253z" />
<glyph glyph-name="period" unicode="." horiz-adv-x="196"
d="M33 72q2 34 26 57.5t57 23.5t53 -23.5t17 -57.5q-3 -35 -27 -58t-58 -23t-53.5 23t-14.5 58z" />
<glyph glyph-name="slash" unicode="/" horiz-adv-x="429"
d="M349 746h113l-311 -828h-111z" />
<glyph glyph-name="zero" unicode="0" horiz-adv-x="573"
d="M365 664q112 0 169 -83q60 -89 44 -256q-15 -166 -92 -255q-74 -84 -185 -84t-169 84q-59 87 -43 255q16 169 91 256q73 83 185 83zM446 495.5q-29 58.5 -91.5 58.5t-102.5 -58.5t-50.5 -170t18 -169.5t91.5 -58t102.5 58t50.5 169.5t-18 170z" />
<glyph glyph-name="one" unicode="1" horiz-adv-x="323"
d="M301 655l-61 -655h-111l48 509q-48 -24 -94 -24l11 117q70 11 125 53h82z" />
<glyph glyph-name="two" unicode="2" horiz-adv-x="546"
d="M174 111h334l-10 -111h-444l10 113q8 81 45 128q35 44 107 75l126 51q79 33 85 104q4 36 -17.5 61.5t-65.5 25.5t-75 -24t-41 -71h-122q12 100 81 151q67 50 164 50q92 0 146 -54q56 -56 48.5 -137.5t-49 -130.5t-121.5 -83l-128 -52q-36 -14 -53 -31.5t-19 -46.5z" />
<glyph glyph-name="three" unicode="3" horiz-adv-x="563"
d="M341 554q-97 0 -121 -82h-116q19 100 85 146t158 46q98 0 154 -50q58 -51 50 -132q-11 -105 -110 -141q51 -20 79.5 -59.5t24 -91t-25 -87.5t-54.5 -62q-70 -55 -175 -55q-100 0 -163 56q-70 61 -61 163h118q-2 -50 29 -78.5t86.5 -28.5t88.5 27t38 69q4 42 -22 65
t-86 23h-79l9 96h69q51 0 81 24t33.5 63.5t-18 64t-72.5 24.5z" />
<glyph glyph-name="four" unicode="4" horiz-adv-x="538"
d="M486 658l-38 -411h101l-9 -104h-101l-14 -143h-109l13 143h-296l8 92l339 423h106zM171 235h173l22 243z" />
<glyph glyph-name="five" unicode="5" horiz-adv-x="526"
d="M245 397q52 9 94 9q91 0 140 -49t40 -140q-8 -98 -76 -164q-69 -67 -169 -67q-98 0 -151 55q-55 57 -47 155h113q-5 -50 22.5 -74t72.5 -24q48 0 84 34q33 32 39 85q8 97 -110 97h-180l58 337h354l-11 -112h-247z" />
<glyph glyph-name="six" unicode="6" horiz-adv-x="549"
d="M441 471q-4 83 -75 83q-77 0 -125 -85q-49 -87 -49 -228q35 159 178 159q83 0 130 -58q46 -58 38 -149q-10 -94 -74 -150q-65 -57 -159 -57q-110 0 -173 92q-61 92 -47 236q16 167 95 260q77 90 193 90q87 0 139 -53q50 -52 46 -140h-117zM334 300q-42 0 -73.5 -28
t-35.5 -74q-4 -43 22 -72q24 -28 67 -28t74 27.5t36 74t-21.5 73.5t-68.5 27z" />
<glyph glyph-name="seven" unicode="7" horiz-adv-x="450"
d="M496 651l-12 -117l-298 -534h-147l316 533h-283l11 118h413z" />
<glyph glyph-name="eight" unicode="8" horiz-adv-x="585"
d="M574 477q-5 -49 -39 -87t-91 -49l3 -2q66 -30 93 -65q31 -39 26 -90.5t-24.5 -85.5t-53.5 -59q-74 -53 -190 -53q-112 0 -176 54q-63 54 -55 136q7 61 49 98t102 45q-75 41 -96 109q-8 26 -5 58q8 83 72 130.5t167 47.5t164.5 -52.5t53.5 -134.5zM309 277
q-52 -3 -88 -28.5t-39 -60.5q-4 -40 34 -66q34 -24 98 -24t99.5 19t38 46.5t-11.5 44.5t-41 30zM241 510q-10 -13 -12 -33q-4 -38 53 -63l64 -29q42 0 76 24q34 25 37.5 62t-26.5 60t-81 23q-77 0 -111 -44z" />
<glyph glyph-name="nine" unicode="9" horiz-adv-x="552"
d="M334 664q50 0 93.5 -23.5t73.5 -66.5q65 -94 51 -238q-25 -252 -168 -326q-47 -24 -100 -24t-91 15t-65 43q-57 59 -47 149h115q-3 -45 21.5 -70t63 -25t66 17.5t47.5 50.5q36 61 49 180q4 28 2 57q-41 -152 -180 -152q-82 0 -128 57.5t-38 148.5q8 92 73 150
q65 57 162 57zM248.5 525.5q-31.5 -27.5 -36.5 -74.5t22 -73.5t68 -26.5t73 28t37 73q4 46 -23 74q-26 27 -67.5 27t-73 -27.5z" />
<glyph glyph-name="colon" unicode=":" horiz-adv-x="246"
d="M58 88q2 34 26 57.5t57 23.5t53 -23.5t17 -58.5t-27 -58t-58 -23t-53.5 23t-14.5 59zM87 384q2 34 26 57.5t57 23.5t53 -23.5t17 -58.5t-27 -57.5t-58 -22.5t-53.5 22.5t-14.5 58.5z" />
<glyph glyph-name="semicolon" unicode=";" horiz-adv-x="281"
d="M90.5 18.5q-16.5 18.5 -14 48.5t26 51.5t50.5 21.5t42.5 -9t25.5 -24q20 -30 15.5 -77.5t-37 -94.5t-83.5 -74l-76 46q74 41 91 88q-24 5 -40.5 23.5zM128.5 325.5q-19.5 22.5 -16.5 57.5t27 58.5t57.5 23.5t53.5 -23.5t17 -58.5t-27.5 -57.5t-58 -22.5t-53 22.5z" />
<glyph glyph-name="less" unicode="&#x3c;" horiz-adv-x="456"
d="M466 528l-282 -204l243 -204l-82 -93l-279 242l11 111l324 241z" />
<glyph glyph-name="equal" unicode="=" horiz-adv-x="457"
d="M404 199l-11 -106h-314l10 106h315zM424 411l-9 -105h-315l9 105h315z" />
<glyph glyph-name="greater" unicode="&#x3e;" horiz-adv-x="456"
d="M171 621l279 -241l-10 -111l-326 -242l-63 93l281 204l-242 204z" />
<glyph glyph-name="question" unicode="?" horiz-adv-x="467"
d="M484 482q-5 -54 -31.5 -89.5t-79.5 -62.5q-46 -24 -60 -41q-23 -30 -25 -64l-2 -28h-111l4 40q8 90 61 129q18 13 42 25.5t39 23t24 21.5q16 18 19 47.5t-17.5 50t-63.5 20.5t-70.5 -23.5t-33.5 -61.5h-114q13 89 71 142t155 53t149 -52t44 -130zM171.5 124.5
q23.5 22.5 57 22.5t53.5 -22.5t16 -57.5q-2 -35 -26.5 -58t-59 -23t-52.5 23t-15 58t26.5 57.5z" />
<glyph glyph-name="at" unicode="@" horiz-adv-x="932"
d="M586 279q7 68 -41 68q-42 0 -81 -41q-44 -47 -50 -113q-3 -44 15 -67t49.5 -23t53.5 19t44 58zM398 631q85 33 175.5 33t157.5 -29t112 -79q92 -104 78 -263q-11 -133 -88 -215q-71 -74 -158 -74q-43 0 -68.5 17.5t-32.5 48.5l-3 16q-21 -38 -49 -60t-66 -22t-63.5 14
t-43.5 39q-42 56 -34 134q10 104 82 177q70 72 160 72q61 0 93.5 -39.5t24.5 -120.5l-13 -129q-5 -51 26 -51q35 0 71 44q43 54 52 149q12 114 -50 186q-67 76 -192 76q-149 0 -253 -102t-118 -253q-14 -144 67 -231q84 -90 246 -90l-9 -101q-103 0 -183.5 33.5t-134.5 92
t-79 137t-16 174.5t51 180t107.5 143.5t150.5 92.5z" />
<glyph glyph-name="A" unicode="A" horiz-adv-x="568"
d="M280 651h138l131 -651h-117l-27 138h-216l-54 -138h-115zM226 230h161l-54 277z" />
<glyph glyph-name="B" unicode="B" horiz-adv-x="585"
d="M144 651h239q98 0 147 -51q44 -45 38 -122q-5 -55 -36 -94t-82 -55q48 -11 76.5 -49.5t22.5 -98.5q-12 -122 -123 -165q-42 -16 -104 -16h-239zM329 106q93 0 102 82q4 38 -17 60.5t-70 22.5h-126l-16 -165h127zM228 378h124q47 0 72.5 22.5t29.5 61t-17 61.5t-69 23
h-124z" />
<glyph glyph-name="C" unicode="C" horiz-adv-x="573"
d="M373 664q54 0 92.5 -14.5t64.5 -41.5q54 -53 60 -143l-119 -24q-8 51 -34.5 82t-71.5 31q-60 0 -103 -56q-44 -60 -56 -171q-9 -109 20 -169.5t90.5 -60.5t95 33.5t38.5 84.5h118q-11 -110 -79 -169.5t-178 -59.5q-117 0 -177.5 90t-44.5 251t95 251q76 86 189 86z" />
<glyph glyph-name="D" unicode="D" horiz-adv-x="619"
d="M336 651q133 0 207.5 -88t60.5 -238q-14 -146 -105 -237q-90 -88 -224 -88h-193l61 651h193zM203 111h82q82 0 137 61q53 57 63 153q8 97 -34 155q-45 60 -127 60h-81z" />
<glyph glyph-name="E" unicode="E" horiz-adv-x="529"
d="M143 651h379l-10 -105h-269l-16 -167h252l-10 -106h-252l-16 -167h269l-9 -106h-379z" />
<glyph glyph-name="F" unicode="F" horiz-adv-x="494"
d="M144 651h371l-10 -105h-261l-16 -168h238l-11 -104h-237l-25 -274h-110z" />
<glyph glyph-name="G" unicode="G" horiz-adv-x="612"
d="M466 106q-48 -120 -156 -120q-111 0 -173 92q-65 97 -51 244q16 156 103 250q84 92 207 92q84 0 136 -40t74 -128l-115 -28q-37 86 -112 86q-66 0 -115 -62q-52 -68 -60 -170q-10 -101 24.5 -162.5t95.5 -61.5t101 38t50 107q0 9 9 9l17 -1q-8 -94 -36 -160
q0 40 5.5 81.5t5.5 82.5l-130 3l7 78h235l-31 -336h-89q-1 26 -1 53t-1 53z" />
<glyph glyph-name="H" unicode="H" horiz-adv-x="638"
d="M254 651l-26 -270h253l26 270h109l-61 -651h-110l25 274h-252l-25 -274h-110l61 651h110z" />
<glyph glyph-name="I" unicode="I"
d="M144 651h110l-61 -651h-110z" />
<glyph glyph-name="J" unicode="J" horiz-adv-x="404"
d="M158 -14q-70 0 -141 41l12 121q62 -43 130 -43q38 0 57.5 24t24.5 75l42 447h112l-43 -447q-22 -218 -194 -218z" />
<glyph glyph-name="K" unicode="K" horiz-adv-x="593"
d="M255 651l-25 -265l253 265h150l-285 -293l241 -358h-142l-181 273l-51 -53l-21 -220h-111l61 651h111z" />
<glyph glyph-name="L" unicode="L" horiz-adv-x="447"
d="M202 106h239l-9 -106h-349l61 651h110z" />
<glyph glyph-name="M" unicode="M" horiz-adv-x="789"
d="M301 651l121 -382l193 382h152l-61 -651h-111l45 490l-202 -420h-71l-127 436l-47 -506h-110l61 651h157z" />
<glyph glyph-name="N" unicode="N" horiz-adv-x="648"
d="M262 651l212 -456l43 456h110l-61 -651h-111l-220 472l-44 -472h-110l61 651h120z" />
<glyph glyph-name="O" unicode="O" horiz-adv-x="618"
d="M387 664q122 0 185 -85q67 -88 51 -253q-15 -166 -99 -256q-78 -84 -201 -84q-121 0 -185 86q-65 88 -49 254q15 166 98 255q77 83 200 83zM483.5 495q-36.5 60 -106.5 60t-117.5 -60.5t-58 -170.5t25.5 -169t106.5 -59t117.5 59.5t58 169.5t-25.5 170z" />
<glyph glyph-name="P" unicode="P" horiz-adv-x="525"
d="M500.5 597.5q50.5 -53.5 41 -154t-70.5 -154.5t-161 -54h-97l-22 -235h-111l61 651h209q100 0 150.5 -53.5zM321 342q48 0 75.5 28t31.5 73q5 45 -17.5 74t-71.5 29h-97l-19 -204h98z" />
<glyph glyph-name="Q" unicode="Q" horiz-adv-x="620"
d="M491 -61q39 0 89 23l-12 -125q-40 -18 -83 -18t-79 26.5t-60 75.5l-32 65q-117 2 -178 88q-63 89 -47 252q15 166 98 255q77 83 200 83q122 0 185 -85q67 -88 51 -253q-14 -135 -68 -215.5t-136 -109.5l11 -23q19 -37 61 -39zM483.5 495q-36.5 60 -106.5 60t-117.5 -60.5
t-58 -170.5t25.5 -169t106.5 -59t117.5 59.5t58 169.5t-25.5 170z" />
<glyph glyph-name="R" unicode="R" horiz-adv-x="583"
d="M563 451q-8 -70 -46.5 -119t-106.5 -69l132 -263h-143l-104 253h-79l-23 -253h-110l61 651h218q106 0 157.5 -54.5t43.5 -145.5zM321 334q58 0 90.5 29t37.5 76q3 48 -20.5 77.5t-76.5 29.5h-108l-21 -212h98z" />
<glyph glyph-name="S" unicode="S" horiz-adv-x="577"
d="M443 469q-7 85 -99 85q-45 0 -72 -20t-30 -48.5t12 -44t48 -29.5l123 -56q63 -29 93.5 -71.5t24.5 -106.5q-8 -90 -73 -141t-176 -51q-98 0 -154 53q-63 60 -55 165h109q-5 -55 27.5 -80.5t81.5 -25.5t81.5 20t36 54t-11.5 51.5t-51 33.5l-113 52q-66 29 -98 68.5
t-26 108.5q8 80 70 128q63 50 163 50t149 -51.5t48 -143.5h-108z" />
<glyph glyph-name="T" unicode="T" horiz-adv-x="482"
d="M67 651h471l-10 -105h-181l-52 -546h-109l52 546h-181z" />
<glyph glyph-name="U" unicode="U" horiz-adv-x="624"
d="M256 651l-39 -404q-11 -113 64 -141q23 -8 51 -8q57 0 96.5 34.5t47.5 114.5l39 404h109l-38 -404q-12 -125 -81 -193t-182.5 -68t-169.5 68t-45 193l39 404h109z" />
<glyph glyph-name="V" unicode="V" horiz-adv-x="550"
d="M196 651l92 -498l190 498h115l-261 -651h-116l-137 651h117z" />
<glyph glyph-name="W" unicode="W" horiz-adv-x="875"
d="M203 651l80 -490l166 449h75l88 -451l183 492h124l-262 -651h-116l-74 362l-142 -362h-114l-131 651h123z" />
<glyph glyph-name="X" unicode="X" horiz-adv-x="620"
d="M589 0h-137l-132 228l-157 -228h-133l235 324l-175 327h134l124 -232l149 232h132l-227 -325z" />
<glyph glyph-name="Y" unicode="Y" horiz-adv-x="549"
d="M207 651l101 -256l157 256h130l-245 -382l-25 -269h-110l26 269l-164 382h130z" />
<glyph glyph-name="Z" unicode="Z" horiz-adv-x="569"
d="M75 105l348 434h-307l11 112h445l-11 -104l-346 -435h305l-9 -112h-445z" />
<glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="320"
d="M158 796h227l-11 -110h-117l-68 -720h117l-11 -111h-226z" />
<glyph glyph-name="backslash" unicode="\" horiz-adv-x="429"
d="M91 747h111l311 -828h-113z" />
<glyph glyph-name="bracketright" unicode="]" horiz-adv-x="307"
d="M226 -145h-227l12 111h117l75 720h-117l11 110h228z" />
<glyph glyph-name="asciicircum" unicode="^" horiz-adv-x="481"
d="M38 215l217 390h89l143 -390h-121l-81 245l-127 -245h-120z" />
<glyph glyph-name="underscore" unicode="_" horiz-adv-x="695"
d="M45 -55h597l-10 -106h-597z" />
<glyph glyph-name="grave" unicode="`" horiz-adv-x="324"
d="M145 904l231 -132l-36 -76l-244 103z" />
<glyph glyph-name="a" unicode="a" horiz-adv-x="528"
d="M264 285q44 0 107 -18l5 46q1 7 1 13v11q0 38 -16.5 56t-54.5 18t-62 -18.5t-28 -50.5h-120q9 83 65.5 120.5t144.5 37.5q181 0 181 -163v-13q0 -7 -1 -15l-29 -309h-95q-2 16 -2 32t-1 33q-52 -79 -136 -79q-80 0 -123 41q-40 38 -40 99q0 80 62 122q53 37 142 37z
M364 189q-48 16 -80 16t-48.5 -4t-29.5 -12q-29 -18 -29 -47t19 -46t49 -17t48.5 8.5t33.5 23.5q31 31 37 78z" />
<glyph glyph-name="b" unicode="b" horiz-adv-x="556"
d="M233 427q50 73 131 73q75 0 122 -60q48 -61 48 -159q0 -105 -56 -193q-28 -44 -71 -73t-92 -29q-97 0 -127 98l-34 -84h-71l64 686h111zM219 277l-5 -55q-2 -18 -2 -29.5t6 -30t18 -33.5q25 -33 60 -33t58 16t38 42q30 50 30 110.5t-25.5 93t-66.5 32.5t-73 -30t-38 -83z
" />
<glyph glyph-name="c" unicode="c" horiz-adv-x="478"
d="M196.5 475q43.5 25 93.5 25t81.5 -16t52.5 -42q41 -51 41 -124h-112q-4 30 -20 51t-48 21q-58 0 -88 -63q-23 -48 -23 -109.5t24 -91.5t61.5 -30t57.5 21.5t24 56.5h110q-8 -82 -60 -132q-57 -56 -143 -56q-80 0 -131 60q-54 64 -54 163q0 116 61 200q29 41 72.5 66z" />
<glyph glyph-name="d" unicode="d" horiz-adv-x="555"
d="M375 77q-49 -91 -132 -91q-77 0 -127 61q-51 62 -51 163q0 108 56 194q64 96 163 96q82 0 117 -72l25 258h111l-65 -686h-90zM361.5 363q-25.5 27 -60 27t-58 -16.5t-37.5 -41.5q-29 -48 -29 -107.5t25.5 -94t67.5 -34.5q37 0 70 31q34 32 40 82l6 62q1 5 1 9v7
q0 49 -25.5 76z" />
<glyph glyph-name="e" unicode="e" horiz-adv-x="478"
d="M170 213q-1 -5 -1 -10v-10q0 -49 21.5 -79t57.5 -30q73 0 89 61h111q-16 -70 -72 -114q-56 -45 -129 -45q-79 0 -131 60q-53 61 -53 162q0 114 61 200q65 92 171 92q83 0 127 -60q41 -54 41 -140q0 -41 -11 -87h-282zM215 371q-28 -32 -37 -81h183q1 5 1 10v17t-3.5 28.5
t-12.5 29.5q-19 28 -61 28t-70 -32z" />
<glyph glyph-name="f" unicode="f" horiz-adv-x="331"
d="M360 589q-25 9 -44.5 9t-36 -12.5t-19.5 -44.5l-5 -54h80l-8 -82h-80l-37 -405h-110l37 405h-64l8 82h64l6 55q7 75 51 116q38 36 97 36q43 0 91 -11z" />
<glyph glyph-name="g" unicode="g" horiz-adv-x="526"
d="M139 200q-42 42 -42 106q0 87 65 142q61 52 142 52q57 0 104 -28q12 57 54 93q40 35 92 35l-16 -117q-77 0 -85 -55q26 -39 26 -84t-18 -80.5t-47 -60.5q-62 -52 -143 -52q-41 0 -77 14q-40 -16 -40 -51q0 -40 63 -40h145q141 0 141 -103q0 -98 -91 -164
q-81 -59 -183 -59q-106 0 -169 46q-57 42 -57 109q0 71 64 103q18 9 37 12q-44 33 -44 77.5t24.5 70t54.5 34.5zM139.5 -31.5q-27.5 -19.5 -27.5 -53t33 -51.5t93 -18q57 0 102 28q53 31 53 81q0 15 -10 24t-29 9h-149q-38 0 -65.5 -19.5zM369 337q0 78 -77 78
q-41 0 -63.5 -29t-22.5 -68q0 -81 75 -81q44 0 66 30t22 70z" />
<glyph glyph-name="h" unicode="h" horiz-adv-x="563"
d="M231 410q53 90 144 90q79 0 117 -60q34 -54 26 -156l-26 -284h-110l26 284q5 53 -15 79.5t-59.5 26.5t-73 -35.5t-44.5 -109.5v-3l-23 -242h-110l64 686h111z" />
<glyph glyph-name="i" unicode="i" horiz-adv-x="298"
d="M139 488h109l-46 -488h-109zM139 643q4 32 23.5 51.5t51.5 19.5t47.5 -19.5t12.5 -52.5q-2 -32 -22 -51t-52 -19q-31 0 -47 19t-14 52z" />
<glyph glyph-name="j" unicode="j" horiz-adv-x="303"
d="M158 591q-16 19 -13.5 51.5t22.5 52t52 19.5t48 -19.5t12 -51.5q-2 -33 -21.5 -52t-51.5 -19t-48 19zM-76 -116q48 -29 87 -29t58 20t24 70l51 544h110l-52 -546q-11 -105 -54.5 -150t-113.5 -45q-58 0 -122 31z" />
<glyph glyph-name="k" unicode="k" horiz-adv-x="518"
d="M262 235l-51 -43l-18 -192h-110l64 686h111l-35 -367l185 168h149l-211 -180l175 -307h-133z" />
<glyph glyph-name="l" unicode="l"
d="M147 686h111l-65 -686h-110z" />
<glyph glyph-name="m" unicode="m" horiz-adv-x="855"
d="M511 396q52 104 159 104q78 0 116 -60q34 -54 26 -156l-26 -284h-111l26 284q5 53 -15 79.5t-62 26.5t-73 -41.5t-39 -129.5l-20 -219h-110l26 284q6 53 -14.5 79.5t-62.5 26.5t-76 -43t-42 -131l-20 -216h-110l46 487h96q1 -21 1.5 -41.5t1.5 -40.5q53 95 147 95
q55 0 88.5 -28t47.5 -76z" />
<glyph glyph-name="n" unicode="n" horiz-adv-x="563"
d="M228 405q53 95 147 95q79 0 117 -60q34 -54 26 -156l-26 -284h-110l26 284q6 53 -14.5 79.5t-62.5 26.5t-76 -43t-42 -131l-20 -216h-110l46 487h96z" />
<glyph glyph-name="o" unicode="o" horiz-adv-x="511"
d="M314 500q45 0 82.5 -15.5t63.5 -47.5q56 -68 44 -195q-11 -122 -80 -192q-64 -64 -157 -64q-94 0 -146 64q-56 68 -44 192q11 126 80 195q63 63 157 63zM378 356.5q-23 37.5 -69.5 37.5t-80 -37.5t-41.5 -113.5t16 -113.5t70 -37.5t79.5 37.5t41 113.5t-15.5 113.5z" />
<glyph glyph-name="p" unicode="p" horiz-adv-x="550"
d="M224 421q46 79 132 79q80 0 132 -68q55 -73 44 -189q-11 -117 -80 -189q-65 -68 -144.5 -68t-111.5 51l-26 -274h-110l69 724h90q3 -47 5 -66zM211 196l-1 -5q-2 -45 24 -70t62 -25q44 0 78 36q40 42 47 111t-19.5 108t-71.5 39t-75.5 -29t-35.5 -83z" />
<glyph glyph-name="q" unicode="q" horiz-adv-x="551"
d="M374 63q-37 -77 -117 -77q-85 0 -137 68q-55 73 -44 189t79 189q62 68 144 68q41 0 73.5 -21.5t49.5 -66.5l32 75h71l-53 -561q-4 -45 4 -57q13 -20 46 -32l-39 -89q-74 21 -101.5 65t-19.5 122zM375 360q-25 30 -69.5 30t-78.5 -39t-41 -108q-7 -68 25 -111
q28 -36 72 -36q37 0 68 26q31 28 35 74l8 80q6 54 -19 84z" />
<glyph glyph-name="r" unicode="r" horiz-adv-x="377"
d="M382 367q-20 5 -48 5q-106 0 -121 -159l-20 -213h-110l46 488h110l-9 -97q24 54 57.5 79.5t70.5 25.5q18 0 37 -7z" />
<glyph glyph-name="s" unicode="s" horiz-adv-x="474"
d="M420 458.5q42 -41.5 37 -104.5h-103q0 23 -17 37t-51 14t-54 -14.5t-22 -34.5q-4 -34 45 -50l102 -44q48 -19 73 -48.5t21.5 -67.5t-19.5 -65.5t-43 -48.5q-58 -46 -145 -46t-137 42.5t-43 120.5h102q-3 -35 18.5 -51t59.5 -16t60 16t24.5 37.5t-9.5 32.5t-39 21l-93 39
q-102 42 -92 134q6 63 59 100q55 38 139.5 38t126.5 -41.5z" />
<glyph glyph-name="t" unicode="t" horiz-adv-x="357"
d="M332 12q-61 -26 -96 -26t-60 9t-43 27q-39 40 -31 114l25 270h-60l8 81h60l12 127h110l-12 -127h117l-8 -81h-118l-24 -266q-6 -58 45 -58q26 0 67 16z" />
<glyph glyph-name="u" unicode="u" horiz-adv-x="566"
d="M386 86q-50 -95 -141 -95q-117 0 -144 100q-10 35 -5 86l30 311h109l-29 -298q-4 -47 14.5 -70t59 -23t77.5 39.5t45 119.5l22 232h110l-45 -488h-111z" />
<glyph glyph-name="v" unicode="v" horiz-adv-x="468"
d="M183 487l62 -366l133 366h126l-208 -487h-123l-116 487h126z" />
<glyph glyph-name="w" unicode="w" horiz-adv-x="685"
d="M171 487l54 -344l112 316h100l52 -319l120 347h110l-190 -487h-108l-53 287l-104 -287h-108l-99 487h114z" />
<glyph glyph-name="x" unicode="x" horiz-adv-x="503"
d="M488 0h-134l-92 153l-114 -153h-135l194 242l-148 246h136l90 -154l115 154h134l-193 -246z" />
<glyph glyph-name="y" unicode="y" horiz-adv-x="456"
d="M187 487l70 -347l123 347h112l-224 -574q-35 -88 -76 -126.5t-99 -38.5t-115 32l11 107q44 -32 91 -32q57 0 94 98l18 47l-130 487h125z" />
<glyph glyph-name="z" unicode="z" horiz-adv-x="447"
d="M61 99l250 289h-224l10 99h345l-10 -99l-243 -289h217l-10 -99h-345z" />
<glyph glyph-name="braceleft" unicode="{" horiz-adv-x="356"
d="M337 -158q-119 0 -173 72q-50 64 -39 182l8 91q5 42 0 57t-22 15h-24l12 124h23q18 0 25 15t11 57l9 92q11 116 73 182q67 71 188 71l-11 -111q-66 0 -99.5 -34.5t-41.5 -109.5l-9 -96q-9 -92 -73 -126l1 -5q24 -14 38.5 -45.5t9.5 -79.5l-9 -96q-8 -74 19.5 -109
t93.5 -35z" />
<glyph glyph-name="bar" unicode="|"
d="M157 773h109l-85 -895h-110z" />
<glyph glyph-name="braceright" unicode="}" horiz-adv-x="412"
d="M210 323q-47 29 -49 100v13q0 5 1 13l9 96q2 16 2 23v13q-2 56 -29.5 82t-85.5 26l10 111q106 0 162 -57q50 -51 52 -149v-23q0 -12 -2 -25l-8 -91q-2 -20 -2 -37.5t5 -26t19 -8.5h23l-11 -124h-23q-18 0 -25 -15t-11 -57l-9 -92q-19 -182 -152 -235q-46 -18 -109 -18
l11 111q66 0 100 34.5t41 109.5l9 96q5 48 25 79.5t47 45.5v5z" />
<glyph glyph-name="asciitilde" unicode="~" horiz-adv-x="518"
d="M192 263q-33 0 -63 -61l-55 35q23 66 53.5 104.5t76.5 38.5q31 0 78 -21q74 -33 97 -33q37 0 63 56l56 -42q-49 -129 -139 -129q-33 0 -89 28l-48 18q-16 6 -30 6z" />
<glyph glyph-name="sterling" unicode="&#xa3;" horiz-adv-x="545"
d="M31 111h28q34 0 48.5 21t19.5 65l8 85h-74l7 82h74l8 81q11 109 67 164t135 55q159 0 163 -177h-108q-2 32 -17.5 49.5t-46 17.5t-54.5 -26.5t-29 -82.5l-8 -81h153l-7 -82h-153l-7 -76q-8 -67 -42 -95h119q45 0 65.5 18t28.5 58h121q-16 -139 -129 -175q-40 -12 -95 -12
h-286z" />
<glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="349"
d="M115.5 788q-16.5 19 -14 48.5t22.5 48.5t49 19t45 -19t13.5 -48.5t-23 -48.5t-48.5 -19t-44.5 19zM278 837q2 29 22.5 48.5t49 19.5t44.5 -19.5t13.5 -48.5t-22 -48t-48 -19t-45.5 19t-14 48z" />
<glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="324"
d="M377 799l-264 -103l-20 76l256 132z" />
<glyph glyph-name="Agrave" unicode="&#xc0;" horiz-adv-x="568"
d="M280 651h138l131 -651h-117l-27 138h-216l-54 -138h-115zM271 904l231 -132l-36 -76l-245 103zM226 230h161l-54 277z" />
<glyph glyph-name="Aacute" unicode="&#xc1;" horiz-adv-x="568"
d="M280 651h138l131 -651h-117l-27 138h-216l-54 -138h-115zM502 799l-264 -103l-19 76l256 132zM226 230h161l-54 277z" />
<glyph glyph-name="Acircumflex" unicode="&#xc2;" horiz-adv-x="568"
d="M280 651h138l131 -651h-117l-27 138h-216l-54 -138h-115zM548 756l-76 -61l-111 100l-130 -100l-63 61l205 161zM226 230h161l-54 277z" />
<glyph glyph-name="Atilde" unicode="&#xc3;" horiz-adv-x="568"
d="M280 651h138l131 -651h-117l-27 138h-216l-54 -138h-115zM302 782q-33 0 -61 -50l-40 29q17 62 46.5 96t64.5 34q22 0 63 -23q20 -13 31.5 -19t23.5 -6q29 0 52 48l42 -34q-21 -82 -74 -115q-15 -10 -30 -10q-26 0 -58.5 20t-41.5 25t-18 5zM226 230h161l-54 277z" />
<glyph glyph-name="Adieresis" unicode="&#xc4;" horiz-adv-x="568"
d="M280 651h138l131 -651h-117l-27 138h-216l-54 -138h-115zM226 230h161l-54 277zM221.5 769q-16.5 19 -14 48.5t22.5 49t49 19.5t45 -19.5t13.5 -49t-23 -48.5t-48.5 -19t-44.5 19zM384 818q2 29 22.5 49t49 20t44.5 -20t13.5 -49t-22 -48t-48 -19t-45.5 19t-14 48z" />
<glyph glyph-name="Egrave" unicode="&#xc8;" horiz-adv-x="531"
d="M143 651h379l-10 -105h-269l-16 -167h252l-10 -106h-252l-16 -167h269l-9 -106h-379zM256 904l231 -132l-36 -76l-244 103z" />
<glyph glyph-name="Eacute" unicode="&#xc9;" horiz-adv-x="531"
d="M82 0h379l9 106h-269l16 167h252l10 106h-252l16 167h269l10 105h-379zM488 799l-264 -103l-20 76l256 132z" />
<glyph glyph-name="Ecircumflex" unicode="&#xca;" horiz-adv-x="531"
d="M153 651h379l-11 -105h-269l-15 -167h252l-11 -106h-252l-15 -167h269l-9 -106h-379zM543 756l-77 -61l-110 100l-130 -100l-63 61l204 161z" />
<glyph glyph-name="Edieresis" unicode="&#xcb;" horiz-adv-x="531"
d="M143 651h379l-10 -105h-269l-16 -167h252l-10 -106h-252l-16 -167h269l-9 -106h-379zM208.5 769q-16.5 19 -14 48.5t22.5 49t49 19.5t45 -19.5t13.5 -49t-23 -48.5t-48.5 -19t-44.5 19zM371 818q2 29 22.5 49t49 20t45 -20t12.5 -49q-2 -29 -21.5 -48t-48 -19t-45.5 19
t-14 48z" />
<glyph glyph-name="Igrave" unicode="&#xcc;"
d="M144 651h110l-61 -651h-110zM121 904l231 -132l-36 -76l-244 103z" />
<glyph glyph-name="Iacute" unicode="&#xcd;"
d="M83 0h110l61 651h-110zM353 799l-264 -103l-19 76l255 132z" />
<glyph glyph-name="Icircumflex" unicode="&#xce;"
d="M144 651h110l-61 -651h-110zM400 756l-77 -61l-110 100l-130 -100l-63 61l204 161z" />
<glyph glyph-name="Idieresis" unicode="&#xcf;"
d="M148 651h110l-61 -651h-110zM67 817q2 30 21.5 49.5t48.5 19.5t45.5 -19.5t13.5 -48.5q-2 -30 -22.5 -49t-49.5 -19q-28 0 -44.5 19t-12.5 48zM243 818q2 29 22.5 49t48.5 20q29 0 45 -20t13 -49q-2 -29 -22 -48t-48 -19q-29 0 -45.5 19t-13.5 48z" />
<glyph glyph-name="Ntilde" unicode="&#xd1;" horiz-adv-x="651"
d="M142 651l-61 -651h110l44 472l220 -472h111l61 651h-110l-43 -456l-212 456h-120zM340 782q-32 0 -61 -50l-40 29q17 62 46.5 96t64.5 34q22 0 63 -23q38 -25 55 -25q29 0 52 48l42 -34q-22 -84 -74 -115q-15 -10 -30.5 -10t-30.5 7t-37.5 20.5t-31.5 18t-18 4.5z" />
<glyph glyph-name="Ograve" unicode="&#xd2;" horiz-adv-x="618"
d="M387 664q122 0 185 -85q67 -88 51 -253q-15 -166 -99 -256q-78 -84 -201 -84q-121 0 -185 86q-65 88 -49 254q15 166 98 255q77 83 200 83zM483.5 495q-36.5 60 -106.5 60t-117.5 -60.5t-58 -170.5t25.5 -169t106.5 -59t117.5 59.5t58 169.5t-25.5 170zM307 904l231 -132
l-36 -76l-244 103z" />
<glyph glyph-name="Oacute" unicode="&#xd3;" horiz-adv-x="618"
d="M379 664q-189 0 -265 -188q-25 -64 -33 -149t5 -149t44 -106q64 -86 185 -86q123 0 201 84q84 90 99 256q16 165 -51 253q-63 85 -185 85zM251.5 494.5q47.5 60.5 117.5 60.5t106.5 -60t25.5 -170t-58 -169.5t-117.5 -59.5t-106.5 59t-25.5 169t58 170.5zM530 799
l-264 -103l-19 76l256 132z" />
<glyph glyph-name="Ocircumflex" unicode="&#xd4;" horiz-adv-x="618"
d="M387 664q122 0 185 -85q67 -88 51 -253q-15 -166 -99 -256q-78 -84 -201 -84q-121 0 -185 86q-65 88 -49 254q15 166 98 255q77 83 200 83zM483.5 495q-36.5 60 -106.5 60t-117.5 -60.5t-58 -170.5t25.5 -169t106.5 -59t117.5 59.5t58 169.5t-25.5 170zM586 756l-77 -61
l-110 100l-131 -100l-63 61l205 161z" />
<glyph glyph-name="Otilde" unicode="&#xd5;" horiz-adv-x="618"
d="M386 664q-59 0 -109.5 -20.5t-89.5 -62.5q-83 -89 -98 -255q-16 -164 49 -254q62 -86 185 -86t201 84q84 90 99 256q16 165 -51 253q-63 85 -186 85zM259.5 495q46.5 60 117 60t107 -60t25.5 -170t-58 -169.5t-118 -59.5t-106 59t-24.5 169.5t57 170.5zM339 782
q-32 0 -60 -50l-41 29q17 62 46.5 96t64.5 34q22 0 53 -18t42 -24t23 -6q29 0 52 48l42 -34q-22 -84 -73 -115q-16 -10 -32 -10q-26 0 -69 28q-37 22 -48 22z" />
<glyph glyph-name="Odieresis" unicode="&#xd6;" horiz-adv-x="618"
d="M387 664q122 0 185 -85q67 -88 51 -253q-15 -166 -99 -256q-78 -84 -201 -84q-121 0 -185 86q-65 88 -49 254q15 166 98 255q77 83 200 83zM483.5 495q-36.5 60 -106.5 60t-117.5 -60.5t-58 -170.5t25.5 -169t106.5 -59t117.5 59.5t58 169.5t-25.5 170zM260.5 769
q-16.5 19 -14 48.5t22.5 49t49 19.5t45 -19.5t13.5 -49t-23 -48.5t-48.5 -19t-44.5 19zM423 818q2 29 22.5 49t49 20t45 -20t12.5 -49q-2 -29 -21.5 -48t-48 -19t-45.5 19t-14 48z" />
<glyph glyph-name="Ugrave" unicode="&#xd9;" horiz-adv-x="624"
d="M256 651l-39 -404q-11 -113 64 -141q23 -8 51 -8q57 0 96.5 34.5t47.5 114.5l39 404h109l-38 -404q-12 -125 -81 -193t-182.5 -68t-169.5 68t-45 193l39 404h109zM306 904l231 -132l-36 -76l-244 103z" />
<glyph glyph-name="Uacute" unicode="&#xda;" horiz-adv-x="624"
d="M147 651l-39 -404q-11 -125 45 -193t169.5 -68t182.5 68t81 193l38 404h-109l-39 -404q-8 -80 -47.5 -114.5t-96.5 -34.5q-92 0 -112 81q-7 28 -3 68l39 404h-109zM537 799l-264 -103l-19 76l256 132z" />
<glyph glyph-name="Ucircumflex" unicode="&#xdb;" horiz-adv-x="624"
d="M256 651l-39 -404q-11 -113 64 -141q23 -8 51 -8q57 0 96.5 34.5t47.5 114.5l39 404h109l-38 -404q-12 -125 -81 -193t-182.5 -68t-169.5 68t-45 193l39 404h109zM586 756l-77 -61l-110 100l-130 -100l-63 61l204 161z" />
<glyph glyph-name="Udieresis" unicode="&#xdc;" horiz-adv-x="624"
d="M256 651l-39 -404q-11 -113 64 -141q23 -8 51 -8q57 0 96.5 34.5t47.5 114.5l39 404h109l-38 -404q-12 -125 -81 -193t-182.5 -68t-169.5 68t-45 193l39 404h109zM261.5 769q-16.5 19 -14 48.5t22.5 49t49 19.5t45.5 -19.5t14.5 -49.5q-4 -29 -24 -48t-48.5 -19t-45 19z
M425 818q2 29 22 49t48.5 20t45 -20t14 -49t-22.5 -48t-48.5 -19t-45 19t-13.5 48z" />
<glyph glyph-name="agrave" unicode="&#xe0;" horiz-adv-x="529"
d="M260 285q54 0 117 -18l5 46q5 51 -10.5 74.5t-57 23.5t-65 -18.5t-27.5 -50.5h-120q8 83 64.5 120.5t148 37.5t139 -46.5t38.5 -144.5l-29 -309h-96q-1 16 -1 32t-1 33q-52 -79 -136 -79q-86 0 -129 47q-40 44 -34 111.5t57.5 104t136.5 36.5zM244 767l230 -132l-36 -76
l-244 103zM370 189q-48 16 -90 16q-91 0 -97 -62q-2 -26 16.5 -45t50 -19t50 8.5t33.5 23.5q31 31 37 78z" />
<glyph glyph-name="aacute" unicode="&#xe1;" horiz-adv-x="529"
d="M260 285q54 0 117 -18l5 46q5 51 -10.5 74.5t-57 23.5t-65 -18.5t-27.5 -50.5h-120q8 83 64.5 120.5t148 37.5t139 -46.5t38.5 -144.5l-29 -309h-96q-1 16 -1 32t-1 33q-52 -79 -136 -79q-86 0 -129 47q-40 44 -34 111.5t57.5 104t136.5 36.5zM475 662l-264 -103l-19 76
l256 132zM370 189q-48 16 -90 16q-91 0 -97 -62q-2 -26 16.5 -45t50 -19t50 8.5t33.5 23.5q31 31 37 78z" />
<glyph glyph-name="acircumflex" unicode="&#xe2;" horiz-adv-x="529"
d="M260 285q54 0 117 -18l5 46q5 51 -10.5 74.5t-57 23.5t-65 -18.5t-27.5 -50.5h-120q8 83 64.5 120.5t148 37.5t139 -46.5t38.5 -144.5l-29 -309h-96q-1 16 -1 32t-1 33q-52 -79 -136 -79q-86 0 -129 47q-40 44 -34 111.5t57.5 104t136.5 36.5zM522 619l-76 -61l-111 100
l-130 -100l-63 61l205 161zM370 189q-48 16 -90 16q-91 0 -97 -62q-2 -26 16.5 -45t50 -19t50 8.5t33.5 23.5q31 31 37 78z" />
<glyph glyph-name="atilde" unicode="&#xe3;" horiz-adv-x="529"
d="M260 285q54 0 117 -18l5 46q5 51 -10.5 74.5t-57 23.5t-65 -18.5t-27.5 -50.5h-120q8 83 64.5 120.5t148 37.5t139 -46.5t38.5 -144.5l-29 -309h-96q-1 16 -1 32t-1 33q-52 -79 -136 -79q-86 0 -129 47q-40 44 -34 111.5t57.5 104t136.5 36.5zM276 645q-33 0 -61 -50
l-40 29q17 63 46.5 97t64.5 34q24 0 53.5 -18.5t41 -24.5t23.5 -6q29 0 52 49l42 -34q-22 -83 -74 -117q-15 -9 -31 -9q-22 0 -56 20t-43 25t-18 5zM370 189q-48 16 -90 16q-91 0 -97 -62q-2 -26 16.5 -45t50 -19t50 8.5t33.5 23.5q31 31 37 78z" />
<glyph glyph-name="adieresis" unicode="&#xe4;" horiz-adv-x="529"
d="M260 285q54 0 117 -18l5 46q5 51 -10.5 74.5t-57 23.5t-65 -18.5t-27.5 -50.5h-120q8 83 64.5 120.5t148 37.5t139 -46.5t38.5 -144.5l-29 -309h-96q-1 16 -1 32t-1 33q-52 -79 -136 -79q-86 0 -129 47q-40 44 -34 111.5t57.5 104t136.5 36.5zM370 189q-48 16 -90 16
q-91 0 -97 -62q-2 -26 16.5 -45t50 -19t50 8.5t33.5 23.5q31 31 37 78zM198 632.5q-16 18.5 -13.5 48t22.5 49t48 19.5t45 -19.5t14.5 -49t-23.5 -48t-49 -18.5t-44 18.5zM361 681q2 29 22.5 49t49 20t44 -20t13 -49t-21.5 -47.5t-47.5 -18.5t-45.5 18.5t-14 47.5z" />
<glyph glyph-name="egrave" unicode="&#xe8;" horiz-adv-x="478"
d="M182 213q-5 -57 16.5 -93t69.5 -36q29 0 51 15t30 46h111q-16 -70 -72 -114q-56 -45 -129 -45q-86 0 -139 70q-55 74 -43 187q12 119 78 189q64 68 152 68q91 0 135 -72q51 -82 22 -215h-282zM223 778l231 -132l-36 -77l-244 104zM298 403q-43 0 -71 -32t-37 -81h183
q7 77 -35 104q-16 9 -40 9z" />
<glyph glyph-name="eacute" unicode="&#xe9;" horiz-adv-x="478"
d="M464 213q5 22 9 52q9 99 -31 163q-44 72 -135 72q-88 0 -152 -68q-66 -70 -78 -189q-12 -113 43 -187q53 -70 139 -70q73 0 129 45q56 44 72 114h-111q-8 -31 -30 -46t-51 -15q-48 0 -69.5 36t-16.5 93h282zM454 673l-264 -104l-19 77l256 132zM373 290h-183q9 49 37 81
t72 32t61.5 -32.5t12.5 -80.5z" />
<glyph glyph-name="ecircumflex" unicode="&#xea;" horiz-adv-x="478"
d="M274 84q64 0 82 61h110q-16 -69 -71 -114q-56 -45 -130 -45q-86 0 -139 70q-55 74 -43 187q12 119 78 189q64 68 152 68q92 0 136 -72q50 -80 21 -215h-282q-5 -57 16.5 -93t69.5 -36zM506 629l-77 -61l-110 101l-130 -101l-63 61l204 162zM305 403q-44 0 -72 -32
t-37 -81h183q7 78 -35 104q-15 9 -39 9z" />
<glyph glyph-name="edieresis" unicode="&#xeb;" horiz-adv-x="478"
d="M182 213q-5 -57 16.5 -93t69.5 -36q29 0 51 15t30 46h111q-16 -70 -72 -114q-56 -45 -129 -45q-86 0 -139 70q-55 74 -43 187q12 119 78 189q64 68 152 68q91 0 135 -72q51 -82 22 -215h-282zM298 403q-43 0 -71 -32t-37 -81h183q7 77 -35 104q-16 9 -40 9zM175.5 632.5
q-16.5 18.5 -14 48t22.5 49t48.5 19.5t45 -19.5t14 -49t-23.5 -48t-48.5 -18.5t-44 18.5zM338 681q2 29 22.5 49t49 20t44 -20t13 -49t-21.5 -47.5t-47.5 -18.5t-45.5 18.5t-14 47.5z" />
<glyph glyph-name="igrave" unicode="&#xec;" horiz-adv-x="298"
d="M139 488h109l-46 -488h-109zM118 767l231 -132l-36 -76l-244 103z" />
<glyph glyph-name="iacute" unicode="&#xed;" horiz-adv-x="298"
d="M93 0h109l46 488h-109zM349 662l-264 -103l-19 76l256 132z" />
<glyph glyph-name="icircumflex" unicode="&#xee;" horiz-adv-x="298"
d="M139 488h109l-46 -488h-109zM395 619l-76 -61l-111 100l-130 -100l-63 61l205 161z" />
<glyph glyph-name="idieresis" unicode="&#xef;" horiz-adv-x="298"
d="M141 488h109l-46 -488h-109zM73 632.5q-16 18.5 -13.5 48t22.5 49t49 19.5t45 -19.5t13.5 -49t-23 -48t-49 -18.5t-44.5 18.5zM236 681q2 29 22.5 49t49 20t44.5 -20t13.5 -49t-22 -47.5t-48 -18.5t-45.5 18.5t-14 47.5z" />
<glyph glyph-name="ntilde" unicode="&#xf1;" horiz-adv-x="563"
d="M375 500q-94 0 -147 -95l-4 82h-95l-46 -487h110l20 216q8 88 42 131t76 43t62 -26.5t15 -79.5l-26 -284h110l26 284q13 155 -73 200q-29 16 -70 16zM285 645q-32 0 -60 -50l-41 29q17 63 46.5 97t64.5 34q24 0 54 -18.5t41.5 -24.5t22.5 -6q29 0 52 49l42 -34
q-22 -85 -73 -117q-16 -9 -31.5 -9t-30.5 7t-37 20q-37 23 -50 23z" />
<glyph glyph-name="ograve" unicode="&#xf2;" horiz-adv-x="511"
d="M314 500q45 0 82.5 -15.5t63.5 -47.5q56 -68 44 -195q-11 -122 -81 -192q-64 -64 -156 -64q-95 0 -147 64q-55 69 -43 192q11 126 80 195q63 63 157 63zM378 356.5q-23 37.5 -69.5 37.5t-80 -37.5t-41.5 -113.5t16 -113.5t70 -37.5t79.5 37.5t41 113.5t-15.5 113.5z
M238 767l231 -132l-36 -76l-244 103z" />
<glyph glyph-name="oacute" unicode="&#xf3;" horiz-adv-x="511"
d="M314 500q-44 0 -84.5 -15.5t-72.5 -47.5q-69 -69 -80 -195q-12 -123 43 -192q52 -64 147 -64q92 0 156 64q70 70 81 192q12 127 -44 195q-51 63 -146 63zM228.5 356.5q33.5 37.5 80 37.5t69.5 -37.5t15.5 -113.5t-41 -113.5t-79.5 -37.5t-70 37.5t-16 113.5t41.5 113.5z
M470 662l-264 -103l-20 76l256 132z" />
<glyph glyph-name="ocircumflex" unicode="&#xf4;" horiz-adv-x="511"
d="M314 500q45 0 82.5 -15.5t63.5 -47.5q56 -68 44 -195q-11 -122 -81 -192q-64 -64 -156 -64q-95 0 -147 64q-55 69 -43 192q11 126 80 195q63 63 157 63zM378 356.5q-23 37.5 -69.5 37.5t-80 -37.5t-41.5 -113.5t16 -113.5t70 -37.5t79.5 37.5t41 113.5t-15.5 113.5z
M516 619l-77 -61l-110 100l-130 -100l-63 61l204 161z" />
<glyph glyph-name="otilde" unicode="&#xf5;" horiz-adv-x="511"
d="M314 500q-44 0 -84.5 -15.5t-72.5 -47.5q-69 -69 -80 -195q-12 -123 43 -192q52 -64 147 -64q93 0 157 64q69 70 80 192q12 127 -44 195q-51 63 -146 63zM228.5 356.5q33.5 37.5 80 37.5t69.5 -37.5t15.5 -113.5t-41 -113.5t-79.5 -37.5t-70 37.5t-16 113.5t41.5 113.5z
M269 645q-32 0 -60 -50l-41 29q17 63 46.5 97t64.5 34q24 0 54 -18.5t41.5 -24.5t22.5 -6q29 0 52 49l42 -34q-22 -85 -73 -117q-16 -9 -31.5 -9t-30.5 7t-37 20q-37 23 -50 23z" />
<glyph glyph-name="odieresis" unicode="&#xf6;" horiz-adv-x="511"
d="M314 500q45 0 82.5 -15.5t63.5 -47.5q56 -68 44 -195q-11 -122 -80 -192q-64 -64 -157 -64q-95 0 -147 64q-55 69 -43 192q11 126 80 195q63 63 157 63zM378 356.5q-23 37.5 -69.5 37.5t-80 -37.5t-41.5 -113.5t16 -113.5t70 -37.5t79.5 37.5t41 113.5t-15.5 113.5z
M191.5 632.5q-16.5 18.5 -14 48t22.5 49t49 19.5t45 -19.5t13.5 -49t-22.5 -48t-48.5 -18.5t-45 18.5zM355 681q2 29 22 49t48.5 20t45 -20t14 -49t-22.5 -47.5t-48.5 -18.5t-45.5 18.5t-13 47.5z" />
<glyph glyph-name="ugrave" unicode="&#xf9;" horiz-adv-x="566"
d="M386 86q-50 -95 -141 -95q-117 0 -144 100q-10 35 -5 86l30 311h109l-29 -298q-4 -47 14.5 -70t59 -23t77.5 39.5t45 119.5l22 232h110l-45 -488h-111zM259 785l231 -131l-36 -77l-244 103z" />
<glyph glyph-name="uacute" unicode="&#xfa;" horiz-adv-x="566"
d="M249 -9q91 0 141 95l-8 -86h111l45 488h-110l-22 -232q-8 -80 -45 -119.5t-78 -39.5q-81 0 -73 93l29 298h-109l-30 -311q-9 -95 35 -143q38 -43 114 -43zM495 680l-264 -103l-20 77l256 131z" />
<glyph glyph-name="ucircumflex" unicode="&#xfb;" horiz-adv-x="566"
d="M386 86q-50 -95 -141 -95q-117 0 -144 100q-10 35 -5 86l30 311h109l-29 -298q-4 -47 14.5 -70t59 -23t77.5 39.5t45 119.5l22 232h110l-45 -488h-111zM537 637l-77 -61l-110 100l-130 -100l-63 61l204 162z" />
<glyph glyph-name="udieresis" unicode="&#xfc;" horiz-adv-x="566"
d="M386 86q-50 -95 -141 -95q-117 0 -144 100q-10 35 -5 86l30 311h109l-29 -298q-4 -47 14.5 -70t59 -23t77.5 39.5t45 119.5l22 232h110l-45 -488h-111zM210.5 632.5q-16.5 18.5 -14 48t22.5 49t49 19.5t45.5 -19.5t14.5 -49.5q-4 -29 -24 -47.5t-48.5 -18.5t-45 18.5z
M374 681q2 29 22.5 49t49 20t44.5 -20t13.5 -49t-22.5 -47.5t-48.5 -18.5t-45 18.5t-13.5 47.5z" />
<glyph glyph-name="dotlessi" unicode="&#x131;"
d="M129 488h110l-46 -488h-110z" />
<glyph glyph-name="apostrophe" unicode="&#x2bc;" horiz-adv-x="218"
d="M122.5 538q-16.5 18 -14 48t26 51.5t61 21.5t58 -32t15.5 -78q-4 -46 -37 -95q-34 -48 -84 -74l-76 46q74 41 91 88q-24 6 -40.5 24z" />
<glyph glyph-name="circumflex" unicode="&#x2c6;" horiz-adv-x="423"
d="M474 756l-77 -61l-110 100l-131 -100l-63 61l205 161z" />
<glyph glyph-name="tilde" unicode="&#x2dc;" horiz-adv-x="358"
d="M193 782q-33 0 -61 -50l-40 29q17 62 46.5 96t64.5 34q22 0 63 -23q38 -25 55 -25q29 0 52 48l42 -34q-21 -82 -74 -115q-15 -10 -30.5 -10t-30.5 7t-37.5 20.5t-31.5 18t-18 4.5z" />
<glyph glyph-name="endash" unicode="&#x2013;" horiz-adv-x="476"
d="M83 356h378l-11 -107h-377z" />
<glyph glyph-name="emdash" unicode="&#x2014;" horiz-adv-x="695"
d="M83 356h597l-10 -107h-597z" />
<glyph glyph-name="quoteleft" unicode="&#x2018;" horiz-adv-x="249"
d="M216 396.5q-23 -21.5 -60 -21.5t-57.5 32t-15.5 79.5t39 94t87 74.5l72 -48q-75 -37 -94 -88q25 -5 41.5 -22.5t13.5 -48t-26 -52z" />
<glyph glyph-name="quoteright" unicode="&#x2019;" horiz-adv-x="249"
d="M131 634q23 21 59.5 21t57.5 -32.5t16 -80.5t-40 -93.5t-86 -73.5l-71 47q74 39 93 89q-26 5 -42.5 23t-13 48.5t26.5 51.5z" />
<glyph glyph-name="rupeesymbol" unicode="&#x20b9;" horiz-adv-x="546"
d="M135 651h422l-6 -68h-163q48 -36 57 -93h97l-7 -69h-93q-14 -63 -60.5 -108t-135.5 -61l211 -252h-155l-206 246l6 69h64q127 0 156 106h-209l7 69h206q-6 42 -38.5 67.5t-95.5 25.5h-63z" />
<glyph glyph-name="minus" unicode="&#x2212;" horiz-adv-x="457"
d="M420 356l-10 -107h-316l10 107h316z" />
<glyph glyph-name="zero.propold" horiz-adv-x="516"
d="M327 586q97 0 148 -77q53 -80 39 -223q-14 -142 -81 -222q-64 -78 -162 -78q-97 0 -149 78q-54 81 -40 222q14 143 82 223q66 77 163 77zM392.5 430q-21.5 46 -75 46t-84.5 -46t-41 -144q-16 -190 89 -190q107 0 125 190q8 98 -13.5 144z" />
<glyph glyph-name="one.propold" horiz-adv-x="323"
d="M294 574l-54 -574h-111l41 428q-48 -23 -95 -25l11 118q66 9 126 53h82z" />
<glyph glyph-name="two.propold" horiz-adv-x="537"
d="M328 480q-91 0 -104 -79h-122q8 89 74 139q60 46 156 46q90 0 142 -52q51 -51 43.5 -125.5t-47.5 -115.5t-122 -63l-97 -26q-72 -21 -76 -69l-1 -24h319l-10 -111h-429l9 99q11 121 93 166q28 15 65 25l88 23q51 14 72.5 36t24.5 55t-17 54.5t-61 21.5z" />
<glyph glyph-name="three.propold" horiz-adv-x="531"
d="M75 399q37 187 236 187q94 0 146 -50t44 -127q-10 -99 -108 -142q53 -23 78 -71t20 -101.5t-25 -91t-52 -65.5q-68 -58 -170 -58q-97 0 -155 52q-64 58 -55 164h112q-2 -60 29 -86t81 -26t84.5 31.5t39.5 79.5t-24.5 80t-87.5 32h-60l9 96h57q50 0 81 24.5t36 68.5
q2 38 -21 63t-66 25t-73 -22.5t-39 -62.5h-117z" />
<glyph glyph-name="four.propold" horiz-adv-x="539"
d="M477 577l-40 -423h101l-9 -106h-102l-14 -156h-112l16 156h-297l9 92l340 437h108zM149 140h181l25 259z" />
<glyph glyph-name="five.propold" horiz-adv-x="532"
d="M235 318q48 13 91 13t79.5 -15.5t60.5 -43.5q49 -57 41 -156q-10 -103 -82 -169.5t-170 -66.5q-85 0 -139 55q-58 59 -48 159h110q-5 -51 20 -76.5t70 -25.5q78 0 116 74q11 22 13 50q5 55 -23.5 85.5t-93.5 30.5h-168l62 353h347l-12 -112h-246z" />
<glyph glyph-name="six.propold" horiz-adv-x="549"
d="M441 471q-4 83 -75 83q-77 0 -125 -85q-49 -87 -49 -228q35 159 178 159q83 0 130 -58q46 -58 38 -149q-10 -94 -74 -150q-65 -57 -159 -57q-110 0 -173 92q-61 92 -47 236q16 167 95 260q77 90 193 90q87 0 139 -53q50 -52 46 -140h-117zM334 300q-42 0 -73.5 -28
t-35.5 -74q-4 -43 22 -72q24 -28 67 -28t74 27.5t36 74t-21.5 73.5t-68.5 27z" />
<glyph glyph-name="seven.propold" horiz-adv-x="450"
d="M490 586l-11 -105l-325 -586h-134l347 585h-300l9 106h414z" />
<glyph glyph-name="eight.propold" horiz-adv-x="585"
d="M574 477q-5 -49 -39 -87t-91 -49l3 -2q66 -30 93 -65q31 -39 26 -90.5t-24.5 -85.5t-53.5 -59q-74 -53 -190 -53q-112 0 -176 54q-63 54 -55 136q7 61 49 98t102 45q-75 41 -96 109q-8 26 -5 58q8 83 72 130.5t167 47.5t164.5 -52.5t53.5 -134.5zM309 277
q-52 -3 -88 -28.5t-39 -60.5q-4 -40 34 -66q34 -24 98 -24t99.5 19t38 46.5t-11.5 44.5t-41 30zM241 510q-10 -13 -12 -33q-4 -38 53 -63l64 -29q42 0 76 24q34 25 37.5 62t-26.5 60t-81 23q-77 0 -111 -44z" />
<glyph glyph-name="nine.propold" horiz-adv-x="551"
d="M332 586q55 0 99 -30t71 -79q52 -97 39 -239q-16 -169 -92 -263q-76 -95 -187 -95q-90 0 -144 57q-55 59 -45 149h115q-2 -45 19.5 -69.5t60.5 -24.5t66.5 18t47.5 51q45 72 54 222q1 17 1 34q-26 -111 -113 -143q-27 -10 -62 -10t-69.5 15.5t-58.5 42.5q-51 59 -43 151
t74 153q66 60 167 60zM385 449q-24 31 -71.5 31t-76 -31t-33 -77.5t19 -77.5t70.5 -31t76.5 31.5t34 77.5t-19.5 77z" />
<hkern u1="A" u2="y" k="25" />
<hkern u1="A" u2="w" k="22" />
<hkern u1="A" u2="v" k="20" />
<hkern u1="A" u2="f" k="11" />
<hkern u1="A" u2="Y" k="23" />
<hkern u1="A" u2="W" k="25" />
<hkern u1="A" u2="V" k="25" />
<hkern u1="A" u2="T" k="36" />
<hkern u1="D" u2="Y" k="23" />
<hkern u1="F" u2="z" k="22" />
<hkern u1="F" u2="y" k="25" />
<hkern u1="F" u2="x" k="25" />
<hkern u1="F" u2="w" k="32" />
<hkern u1="F" u2="v" k="29" />
<hkern u1="F" u2="u" k="22" />
<hkern u1="F" u2="q" k="25" />
<hkern u1="F" u2="o" k="25" />
<hkern u1="F" u2="g" k="41" />
<hkern u1="F" u2="e" k="25" />
<hkern u1="F" u2="d" k="22" />
<hkern u1="F" u2="c" k="25" />
<hkern u1="F" u2="a" k="22" />
<hkern u1="F" u2="Y" k="7" />
<hkern u1="F" u2="X" k="14" />
<hkern u1="F" u2="W" k="7" />
<hkern u1="F" u2="A" k="51" />
<hkern u1="L" u2="y" k="18" />
<hkern u1="L" u2="w" k="22" />
<hkern u1="L" u2="v" k="22" />
<hkern u1="L" u2="Y" k="62" />
<hkern u1="L" u2="W" k="37" />
<hkern u1="L" u2="V" k="41" />
<hkern u1="L" u2="T" k="44" />
<hkern u1="L" u2="J" k="-14" />
<hkern u1="O" u2="Y" k="14" />
<hkern u1="O" u2="X" k="11" />
<hkern u1="O" u2="V" k="7" />
<hkern u1="P" u2="A" k="34" />
<hkern u1="Q" u2="Y" k="14" />
<hkern u1="S" u2="Y" k="23" />
<hkern u1="T" u2="z" k="48" />
<hkern u1="T" u2="y" k="45" />
<hkern u1="T" u2="x" k="51" />
<hkern u1="T" u2="w" k="36" />
<hkern u1="T" u2="v" k="66" />
<hkern u1="T" u2="u" k="62" />
<hkern u1="T" u2="s" k="87" />
<hkern u1="T" u2="r" k="66" />
<hkern u1="T" u2="q" k="68" />
<hkern u1="T" u2="p" k="62" />
<hkern u1="T" u2="o" k="71" />
<hkern u1="T" u2="n" k="62" />
<hkern u1="T" u2="m" k="62" />
<hkern u1="T" u2="g" k="78" />
<hkern u1="T" u2="f" k="48" />
<hkern u1="T" u2="e" k="68" />
<hkern u1="T" u2="d" k="77" />
<hkern u1="T" u2="c" k="68" />
<hkern u1="T" u2="a" k="78" />
<hkern u1="T" u2="J" k="62" />
<hkern u1="T" u2="A" k="36" />
<hkern u1="V" u2="s" k="30" />
<hkern u1="V" u2="r" k="15" />
<hkern u1="V" u2="q" k="26" />
<hkern u1="V" u2="o" k="30" />
<hkern u1="V" u2="g" k="44" />
<hkern u1="V" u2="f" k="36" />
<hkern u1="V" u2="e" k="30" />
<hkern u1="V" u2="d" k="30" />
<hkern u1="V" u2="c" k="30" />
<hkern u1="V" u2="a" k="30" />
<hkern u1="V" u2="O" k="7" />
<hkern u1="V" u2="J" k="62" />
<hkern u1="V" u2="C" k="7" />
<hkern u1="V" u2="A" k="30" />
<hkern u1="W" u2="u" k="25" />
<hkern u1="W" u2="s" k="36" />
<hkern u1="W" u2="r" k="30" />
<hkern u1="W" u2="q" k="30" />
<hkern u1="W" u2="o" k="30" />
<hkern u1="W" u2="g" k="44" />
<hkern u1="W" u2="f" k="36" />
<hkern u1="W" u2="e" k="30" />
<hkern u1="W" u2="d" k="30" />
<hkern u1="W" u2="c" k="30" />
<hkern u1="W" u2="a" k="30" />
<hkern u1="W" u2="J" k="62" />
<hkern u1="W" u2="A" k="30" />
<hkern u1="X" u2="O" k="11" />
<hkern u1="Y" u2="z" k="59" />
<hkern u1="Y" u2="y" k="51" />
<hkern u1="Y" u2="x" k="48" />
<hkern u1="Y" u2="w" k="41" />
<hkern u1="Y" u2="v" k="41" />
<hkern u1="Y" u2="u" k="60" />
<hkern u1="Y" u2="t" k="33" />
<hkern u1="Y" u2="s" k="59" />
<hkern u1="Y" u2="r" k="59" />
<hkern u1="Y" u2="q" k="59" />
<hkern u1="Y" u2="p" k="59" />
<hkern u1="Y" u2="o" k="59" />
<hkern u1="Y" u2="n" k="59" />
<hkern u1="Y" u2="m" k="59" />
<hkern u1="Y" u2="g" k="69" />
<hkern u1="Y" u2="f" k="59" />
<hkern u1="Y" u2="e" k="59" />
<hkern u1="Y" u2="d" k="59" />
<hkern u1="Y" u2="c" k="59" />
<hkern u1="Y" u2="a" k="55" />
<hkern u1="Y" u2="S" k="25" />
<hkern u1="Y" u2="Q" k="14" />
<hkern u1="Y" u2="O" k="14" />
<hkern u1="Y" u2="J" k="74" />
<hkern u1="Y" u2="H" k="7" />
<hkern u1="Y" u2="C" k="15" />
<hkern u1="Y" u2="A" k="62" />
<hkern u1="a" u2="Y" k="48" />
<hkern u1="a" u2="W" k="25" />
<hkern u1="a" u2="V" k="33" />
<hkern u1="a" u2="T" k="80" />
<hkern u1="b" u2="Y" k="15" />
<hkern u1="b" u2="V" k="26" />
<hkern u1="b" u2="T" k="18" />
<hkern u1="c" u2="Y" k="30" />
<hkern u1="c" u2="V" k="25" />
<hkern u1="c" u2="T" k="55" />
<hkern u1="e" u2="Y" k="37" />
<hkern u1="e" u2="V" k="22" />
<hkern u1="e" u2="T" k="55" />
<hkern u1="f" u2="s" k="22" />
<hkern u1="f" u2="j" k="14" />
<hkern u1="f" u2="g" k="23" />
<hkern u1="f" u2="c" k="14" />
<hkern u1="f" u2="J" k="48" />
<hkern u1="f" u2="A" k="14" />
<hkern u1="g" u2="y" k="-14" />
<hkern u1="g" u2="j" k="-66" />
<hkern u1="h" u2="Y" k="41" />
<hkern u1="h" u2="T" k="7" />
<hkern u1="j" u2="f" k="20" />
<hkern u1="k" u2="y" k="14" />
<hkern u1="k" u2="j" k="7" />
<hkern u1="k" u2="f" k="14" />
<hkern u1="m" u2="Y" k="37" />
<hkern u1="m" u2="T" k="32" />
<hkern u1="n" u2="Y" k="37" />
<hkern u1="n" u2="T" k="40" />
<hkern u1="o" u2="Y" k="59" />
<hkern u1="o" u2="W" k="30" />
<hkern u1="o" u2="V" k="30" />
<hkern u1="o" u2="T" k="64" />
<hkern u1="p" u2="Y" k="32" />
<hkern u1="p" u2="T" k="48" />
<hkern u1="q" u2="j" k="-73" />
<hkern u1="q" u2="Y" k="42" />
<hkern u1="q" u2="T" k="66" />
<hkern u1="r" u2="g" k="18" />
<hkern u1="r" u2="T" k="43" />
<hkern u1="r" u2="J" k="36" />
<hkern u1="s" u2="y" k="18" />
<hkern u1="s" u2="f" k="25" />
<hkern u1="s" u2="Y" k="51" />
<hkern u1="s" u2="W" k="32" />
<hkern u1="s" u2="V" k="25" />
<hkern u1="s" u2="T" k="80" />
<hkern u1="t" u2="Y" k="33" />
<hkern u1="u" u2="Y" k="44" />
<hkern u1="u" u2="T" k="51" />
<hkern u1="v" u2="g" k="7" />
<hkern u1="v" u2="Y" k="41" />
<hkern u1="v" u2="T" k="54" />
<hkern u1="v" u2="J" k="48" />
<hkern u1="v" u2="A" k="22" />
<hkern u1="w" u2="Y" k="29" />
<hkern u1="w" u2="T" k="29" />
<hkern u1="w" u2="J" k="37" />
<hkern u1="w" u2="A" k="25" />
<hkern u1="x" u2="Y" k="44" />
<hkern u1="x" u2="T" k="37" />
<hkern u1="y" u2="g" k="7" />
<hkern u1="y" u2="Y" k="25" />
<hkern u1="y" u2="T" k="50" />
<hkern u1="y" u2="J" k="22" />
<hkern u1="y" u2="A" k="11" />
<hkern u1="z" u2="Y" k="37" />
<hkern u1="z" u2="T" k="22" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,605 @@
<?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>
<metadata>
Created by FontForge 20120731 at Tue Jul 8 22:17:25 2014
By World Wide Web Server
Copyright (c) 2011, Jonathan Pinhorn (pinhorn.typedesign@gmail.com), with Reserved Font Names "Karla" and "Karla Tamil"
</metadata>
<defs>
<font id="Karla-Italic" horiz-adv-x="508" >
<font-face
font-family="Karla"
font-weight="400"
font-style="italic"
font-stretch="normal"
units-per-em="1000"
panose-1="0 0 0 0 0 0 0 0 0 0"
ascent="800"
descent="-200"
x-height="478"
cap-height="629"
bbox="-96 -246 851 879"
underline-thickness="50"
underline-position="-50"
unicode-range="U+0020-2212"
/>
<missing-glyph horiz-adv-x="498"
/>
<glyph glyph-name=".notdef" horiz-adv-x="498"
/>
<glyph glyph-name=".null" horiz-adv-x="0"
/>
<glyph glyph-name="nonmarkingreturn" horiz-adv-x="498"
/>
<glyph glyph-name="space" unicode=" " horiz-adv-x="214"
/>
<glyph glyph-name="space" unicode="&#xa0;" horiz-adv-x="214"
/>
<glyph glyph-name="exclam" unicode="!" horiz-adv-x="250"
d="M150 627h74l-50 -451h-58zM90.5 7.5q-13.5 16.5 -11 40t18.5 40t39 16.5t37.5 -16.5t12 -40t-19.5 -40t-40 -16.5t-36.5 16.5z" />
<glyph glyph-name="quotedbl" unicode="&#x22;" horiz-adv-x="275"
d="M163 681l-31 -220h-54l11 220h74zM314 681l-31 -220h-54l11 220h74z" />
<glyph glyph-name="numbersign" unicode="#" horiz-adv-x="564"
d="M357 170h-138l-26 -139h-66l26 139h-90l10 54h90l34 178h-91l10 53h91l26 138h67l-26 -138h138l26 138h66l-26 -138h92l-10 -53h-92l-34 -178h92l-10 -54h-92l-26 -139h-67zM230 224h138l34 178h-138z" />
<glyph glyph-name="dollar" unicode="$" horiz-adv-x="569"
d="M414 330q60 -23 91 -61.5t25 -103.5q-6 -68 -60 -116q-58 -53 -152 -59l-7 -81h-56l7 82q-83 8 -131 57q-52 53 -44 141h69q-5 -60 26 -90t87 -36l23 236l-28 11q-74 27 -106 62q-35 37 -29 103.5t55.5 111t139.5 51.5l7 75h56l-7 -76q77 -7 115.5 -49.5t42.5 -111.5h-70
q-8 78 -95 92l-20 -215zM451 167q6 74 -73 103l-32 12l-21 -220q58 5 89.5 36t36.5 69zM237 536q-29 -27 -32 -63.5t13.5 -57t54.5 -34.5l26 -10l18 197q-51 -5 -80 -32z" />
<glyph glyph-name="percent" unicode="%" horiz-adv-x="653"
d="M336.5 494q-6.5 -69 -44.5 -105t-84 -36q-49 0 -77 36q-30 38 -23.5 108t44 106.5t84.5 36.5t77 -38.5t23.5 -107.5zM269.5 565q-14.5 22 -40.5 22t-44 -22t-23 -69t9.5 -68t40.5 -21t44 21t23 68t-9.5 69zM545 629h74l-440 -629h-73zM515 276q49 0 77 -36
q31 -39 25 -108q-6 -68 -45 -107q-36 -36 -85 -36q-48 0 -76 36q-30 38 -24 107q6 68 44 108q36 36 84 36zM510 223q-26 0 -44.5 -22t-23 -69t10 -68t40.5 -21t44 21t22 68q5 47 -9 69t-40 22z" />
<glyph glyph-name="ampersand" unicode="&#x26;" horiz-adv-x="824"
d="M692 350q-55 -140 -124 -222l35 -37q16 -17 29.5 -25t35.5 -8t41 18.5t26 63.5h67q-11 -72 -45 -111.5t-91 -39.5q-35 0 -63.5 16t-60.5 51l-21 22q-97 -89 -213 -89q-94 0 -155 53q-58 53 -50.5 126.5t53.5 111t131 52.5l-12 13q-64 68 -56 147q6 64 57 105
q53 42 133 42q73 0 117 -43q42 -40 36.5 -100t-44.5 -103t-122 -81l130 -139q65 79 119 207zM181 177q-5 -49 29 -83.5t106 -34.5q88 0 162 66l-151 164q-139 -19 -146 -112zM476 452q7 17 9.5 44.5t-20 51.5t-67 24t-72 -27.5t-30.5 -59.5q-6 -59 40 -108l23 -25
q95 46 117 100z" />
<glyph glyph-name="quotesingle" unicode="'" horiz-adv-x="122"
d="M162 677l-31 -220h-54l11 220h74z" />
<glyph glyph-name="parenleft" unicode="(" horiz-adv-x="320"
d="M371 687q-172 -176 -192 -380q-18 -206 120 -380l-55 -40q-80 89 -115 197t-24 223.5t66 223t152 197.5z" />
<glyph glyph-name="parenright" unicode=")" horiz-adv-x="320"
d="M145 728q161 -181 138 -421q-11 -115 -66 -223t-151 -197l-48 40q172 176 192 380q18 206 -120 380z" />
<glyph glyph-name="asterisk" unicode="*" horiz-adv-x="371"
d="M204 516l-101 40l27 54l90 -54l2 128h56l-21 -128l101 54l16 -54l-108 -40l72 -89l-43 -39l-62 104l-82 -104l-37 39z" />
<glyph glyph-name="plus" unicode="+" horiz-adv-x="474"
d="M319 491l-20 -212h185l-6 -67h-186l-19 -212h-71l19 212h-185l6 67h186l19 212h72z" />
<glyph glyph-name="comma" unicode="," horiz-adv-x="189"
d="M61 10q-13 13 -11 35t18 37t41.5 15t40.5 -22.5t11.5 -56.5t-27 -69.5t-65.5 -57.5l-50 29q61 32 75 75q-20 2 -33 15z" />
<glyph glyph-name="hyphen" unicode="-" horiz-adv-x="314"
d="M65 325h245l-7 -68h-245z" />
<glyph glyph-name="period" unicode="." horiz-adv-x="161"
d="M44.5 7.5q-13.5 16.5 -11.5 40t18 40t39.5 16.5t37 -16.5t11.5 -40t-18.5 -40t-39.5 -16.5t-36.5 16.5z" />
<glyph glyph-name="slash" unicode="/" horiz-adv-x="389"
d="M346 731h72l-303 -804h-71z" />
<glyph glyph-name="zero" unicode="0" horiz-adv-x="535"
d="M344 640q103 0 153 -82q52 -83 38 -243q-24 -241 -161 -305q-43 -21 -93 -21q-102 0 -152 81q-53 86 -37 245q14 158 83 243q66 82 169 82zM441.5 502.5q-31.5 65.5 -104.5 65.5t-116.5 -65.5t-55.5 -188t20 -188t104.5 -65.5t116 65.5t55.5 188t-19.5 188z" />
<glyph glyph-name="one" unicode="1" horiz-adv-x="298"
d="M266 631l-59 -631h-70l50 537q-44 -30 -96 -35l7 78q63 9 111 51h57z" />
<glyph glyph-name="two" unicode="2" horiz-adv-x="522"
d="M135 73h328l-6 -73h-399l8 93q11 111 92 163q25 17 56 30l116 50q90 38 98 125q5 48 -22 78.5t-80.5 30.5t-89.5 -25t-46 -75h-78q12 82 70.5 126t148.5 44q84 0 132 -52q50 -53 42 -129t-47.5 -121t-104.5 -72l-119 -51q-45 -20 -68.5 -45.5t-27.5 -66.5z" />
<glyph glyph-name="three" unicode="3" horiz-adv-x="532"
d="M331 640q40 0 74.5 -13t58.5 -35q51 -48 45 -124q-11 -101 -113 -139q52 -17 81.5 -56t25 -90t-22.5 -85t-47 -58q-62 -51 -157 -51q-91 0 -148 51q-63 57 -53 153h74q-5 -65 33.5 -98.5t101 -33.5t100 33.5t42.5 83t-25.5 81t-105.5 31.5h-65l7 63h44q65 0 105 28.5
t45 76.5t-23 79t-78.5 31t-86 -19.5t-51.5 -72.5h-74q17 83 77 126q53 38 136 38z" />
<glyph glyph-name="four" unicode="4" horiz-adv-x="503"
d="M445 638l-39 -418h98l-7 -68h-98l-14 -152h-69l13 152h-292l6 61l337 425h65zM128 213h209l28 300z" />
<glyph glyph-name="five" unicode="5"
d="M213 376q49 9 90 9q93 0 141.5 -45.5t40.5 -135.5q-10 -96 -69 -154q-64 -61 -155 -61q-84 0 -133 47q-53 51 -45 139h71q-5 -57 28 -85.5t86 -28.5q59 0 98 41q39 39 44 100q11 121 -128 121h-152l54 306h314l-7 -72h-245z" />
<glyph glyph-name="six" unicode="6" horiz-adv-x="516"
d="M439 470q-7 98 -91 98q-78 0 -128 -74q-56 -82 -66 -246q-2 -23 -1 -44q22 135 119 166q29 9 63 9t65.5 -14.5t53.5 -40.5q47 -57 39 -142q-10 -87 -67.5 -140.5t-144.5 -53.5q-100 0 -155 90q-52 88 -40 225q14 156 86 247q71 90 181 90q77 0 120 -47t42 -123h-76z
M181.5 182q-4.5 -55 26 -88t81.5 -33t88 33t42 91t-25.5 91t-81 33t-88.5 -36t-42.5 -91z" />
<glyph glyph-name="seven" unicode="7" horiz-adv-x="423"
d="M466 629l-7 -73l-311 -556h-96l324 553h-302l7 76h385z" />
<glyph glyph-name="eight" unicode="8" horiz-adv-x="553"
d="M342 640q48 0 84.5 -13.5t61.5 -36.5q54 -50 46 -125q-4 -53 -40 -93q-37 -41 -95 -51l15 -6q60 -26 89.5 -61.5t22.5 -103.5t-71 -114.5t-173 -46.5q-98 0 -158 51q-59 51 -51 128q5 62 45 101t100 49q-45 24 -65 50q-38 50 -33 105q6 75 66 120q62 47 156 47zM283 289
q-56 -6 -95 -39q-37 -32 -41 -75q-6 -53 37 -85q39 -29 109 -29t113 26t46.5 63t-16.5 59.5t-55 37.5zM264 381l63 -28q54 2 91 31t42.5 77t-29 77.5t-94.5 29.5q-57 0 -97 -28q-41 -30 -45.5 -77.5t69.5 -81.5z" />
<glyph glyph-name="nine" unicode="9" horiz-adv-x="523"
d="M322 640q46 0 85.5 -22t65.5 -63q57 -89 43 -229q-25 -245 -153 -314q-44 -23 -93.5 -23t-84 14.5t-57.5 40.5q-49 57 -41 142h75q-5 -57 23 -91t75 -34t77 19.5t52 55.5q42 70 55 201q4 38 2 74q-17 -81 -64.5 -121t-111.5 -40q-77 0 -123 55.5t-38 141.5q8 87 66.5 140
t146.5 53zM393.5 534q-30.5 33 -81 33t-87.5 -33t-42.5 -91t25 -91t82.5 -33q50 0 87 35q38 37 42.5 92t-26 88z" />
<glyph glyph-name="colon" unicode=":" horiz-adv-x="208"
d="M70.5 39.5q-13.5 16.5 -11.5 40t18 40t39.5 16.5t37 -16.5t11.5 -40t-18.5 -40t-39.5 -16.5t-36.5 16.5zM99.5 345.5q-13.5 16.5 -11.5 40t18 40t39.5 16.5t37 -16.5t11.5 -40t-18.5 -40t-39.5 -16.5t-36.5 16.5z" />
<glyph glyph-name="semicolon" unicode=";" horiz-adv-x="236"
d="M85 10q-13 13 -11 35t18 37t41.5 15t40.5 -22.5t11.5 -56.5t-27 -69.5t-65.5 -57.5l-50 29q61 32 75 75q-20 2 -33 15zM120.5 345.5q-13.5 16.5 -11.5 40t18 40t39.5 16.5t37 -16.5t11.5 -40t-18.5 -40t-39.5 -16.5t-36.5 16.5z" />
<glyph glyph-name="less" unicode="&#x3c;" horiz-adv-x="409"
d="M415 512l-279 -207l240 -204l-52 -61l-263 231l6 69l307 232z" />
<glyph glyph-name="equal" unicode="=" horiz-adv-x="439"
d="M385 185l-6 -68h-297l6 68h297zM403 377l-6 -69h-297l6 69h297z" />
<glyph glyph-name="greater" unicode="&#x3e;" horiz-adv-x="409"
d="M142 572l262 -232l-6 -69l-306 -231l-41 61l277 204l-238 207z" />
<glyph glyph-name="question" unicode="?" horiz-adv-x="449"
d="M276 568q-105 0 -128 -92h-76q13 74 66 119t144 45q85 0 132 -48q44 -47 38 -117q-5 -52 -32 -87t-82 -66q-51 -30 -64 -46q-22 -29 -26 -76l-4 -39h-70l4 45q6 65 28 97q24 33 77 63q48 28 64 46q24 27 28 66t-22 64.5t-77 25.5zM204 102q23 0 37 -17t12 -40.5
t-19.5 -39.5t-40.5 -16t-35.5 16t-10.5 39.5t18 40.5t39 17z" />
<glyph glyph-name="at" unicode="@" horiz-adv-x="846"
d="M552 289q5 43 -6.5 63.5t-38.5 20.5t-51.5 -12t-45.5 -34q-50 -51 -56 -125q-6 -53 16 -82t59 -29t62.5 23.5t51.5 68.5zM364.5 609q76.5 31 158.5 31t143 -27t102 -73.5t60 -109.5t12.5 -129.5t-27.5 -116t-51 -84.5q-63 -72 -141 -72q-38 0 -59.5 18t-23.5 52l-2 16
q-20 -38 -49 -62t-65.5 -24t-61 12.5t-42.5 35.5q-39 50 -31 125q10 99 77 167q64 67 145 67q54 0 82 -36t21 -109l-15 -152q-4 -51 31 -51q41 0 82 53q48 60 57 156q10 119 -55 195q-66 78 -191 78q-143 0 -247 -103q-98 -99 -112 -247q-16 -151 71 -243.5t254 -92.5
l-7 -64q-97 0 -173.5 30.5t-127.5 84.5t-74.5 128.5t-15.5 163.5t45 165t95.5 131.5t135 86.5z" />
<glyph glyph-name="A" unicode="A" horiz-adv-x="517"
d="M277 629h87l130 -629h-74l-33 160h-225l-64 -160h-75zM186 222h188l-64 311z" />
<glyph glyph-name="B" unicode="B" horiz-adv-x="560"
d="M150 629h212q89 0 135 -49q41 -44 35 -107q-12 -129 -122 -157q52 -10 80 -50q45 -66 8 -157q-26 -65 -101 -94q-39 -15 -94 -15h-212zM308 69q119 0 130 106q5 48 -23 76.5t-87 28.5h-140l-20 -211h140zM194 348h139q52 0 85.5 28.5t38.5 78.5t-22.5 78t-81.5 28h-139z
" />
<glyph glyph-name="C" unicode="C" horiz-adv-x="552"
d="M502.5 589.5q50.5 -50.5 64.5 -131.5l-79 -17q-12 59 -47.5 93.5t-86.5 34.5q-70 0 -122 -63q-54 -68 -66 -188q-16 -182 70 -239q29 -19 70 -19q68 0 111 39.5t49 104.5h76q-10 -100 -76 -158q-65 -57 -167 -57q-111 0 -168 91q-55 88 -41 238q14 153 92 240
q74 82 172 82t148.5 -50.5z" />
<glyph glyph-name="D" unicode="D" horiz-adv-x="595"
d="M316 629q128 0 197 -86t55 -228q-14 -143 -98 -229q-85 -86 -214 -86h-166l59 629h167zM167 69h96q93 0 157 70q62 68 72 176t-39 175q-51 69 -144 69h-96z" />
<glyph glyph-name="E" unicode="E" horiz-adv-x="506"
d="M149 629h349l-8 -68h-277l-20 -211h261l-6 -67h-261l-20 -214h278l-7 -69h-348z" />
<glyph glyph-name="F" unicode="F" horiz-adv-x="472"
d="M150 629h344l-7 -68h-273l-20 -209h254l-6 -68h-254l-26 -284h-71z" />
<glyph glyph-name="G" unicode="G" horiz-adv-x="580"
d="M465 109q-48 -120 -163 -120q-104 0 -164 85q-63 90 -49 233q13 155 103 247q81 85 194 85q135 0 190 -126l-71 -26q-52 81 -129 81q-78 0 -138 -70q-62 -71 -74 -191q-10 -108 30 -177t120 -69q61 0 105.5 45t55.5 139l1 6v2l-142 6l5 52h211l-28 -311h-58z" />
<glyph glyph-name="H" unicode="H" horiz-adv-x="602"
d="M221 629l-27 -277h278l27 277h72l-60 -629h-71l26 284h-278l-26 -284h-71l59 629h71z" />
<glyph glyph-name="I" unicode="I" horiz-adv-x="252"
d="M150 629h71l-59 -629h-71z" />
<glyph glyph-name="J" unicode="J" horiz-adv-x="364"
d="M17 113q60 -48 115 -48t77.5 30t28.5 87l42 447h71l-42 -447q-11 -103 -57 -148t-115 -45q-38 0 -68 12t-59 30z" />
<glyph glyph-name="K" unicode="K" horiz-adv-x="548"
d="M222 629l-27 -291l280 291h98l-274 -282l230 -347h-92l-191 291l-62 -63l-21 -228h-72l59 629h72z" />
<glyph glyph-name="L" unicode="L" horiz-adv-x="421"
d="M168 69h252l-6 -69h-323l59 629h71z" />
<glyph glyph-name="M" unicode="M" horiz-adv-x="763"
d="M252 629l150 -426l230 426h100l-60 -629h-71l48 516l-235 -437h-48l-155 446l-49 -525h-71l59 629h102z" />
<glyph glyph-name="N" unicode="N" horiz-adv-x="616"
d="M233 629l232 -504l49 504h71l-59 -629h-80l-237 513l-48 -513h-72l59 629h85z" />
<glyph glyph-name="O" unicode="O" horiz-adv-x="581"
d="M366 640q110 0 168 -82q61 -84 47 -244q-15 -160 -94 -245q-74 -80 -183 -80q-111 0 -167 81q-61 86 -46 244q13 158 92 246q73 80 183 80zM478.5 503q-40.5 66 -120 66t-131 -66t-63.5 -190t28 -188t119 -64t131.5 64t64.5 188t-28.5 190z" />
<glyph glyph-name="P" unicode="P" horiz-adv-x="499"
d="M469 576.5q44 -52.5 35.5 -141.5t-62.5 -140.5t-148 -51.5h-111l-23 -243h-71l59 629h183q94 0 138 -52.5zM301 311q58 0 91.5 33t38.5 90.5t-22 92t-85 34.5h-112l-23 -250h112z" />
<glyph glyph-name="Q" unicode="Q" horiz-adv-x="587"
d="M456 -87q38 0 90 25l-8 -86q-38 -19 -78 -19q-76 0 -123 89l-36 67q-108 2 -165 83q-60 85 -44 242q13 158 92 246q73 80 183 80t168 -82q61 -84 47 -244q-14 -138 -70.5 -215.5t-137.5 -100.5l24 -44q24 -39 58 -41zM479.5 503q-40.5 66 -120 66t-131 -66t-63.5 -190
t28 -188t119 -64t131.5 64t64.5 188t-28.5 190z" />
<glyph glyph-name="R" unicode="R" horiz-adv-x="552"
d="M361 261l138 -261h-91l-123 257h-99l-24 -257h-71l59 629h197q96 0 143 -52q44 -50 37 -128q-16 -162 -166 -188zM311 312q64 0 100.5 34.5t41.5 91t-24 90t-89 33.5h-126l-23 -249h120z" />
<glyph glyph-name="S" unicode="S" horiz-adv-x="544"
d="M337 640q87 0 131 -44.5t45 -119.5h-70q-2 44 -30.5 68t-84 24t-88.5 -27.5t-36.5 -66t13.5 -58.5t58 -35l113 -45q59 -23 90.5 -63t25.5 -106q-6 -77 -66 -127q-62 -51 -162 -51q-88 0 -141 51q-56 54 -50 149h69q-6 -63 33 -97q35 -31 96 -31t100 30.5t43 72
t-15.5 65.5t-61.5 40l-96 41q-68 26 -100.5 62t-26.5 102q13 116 126 154q38 12 85 12z" />
<glyph glyph-name="T" unicode="T" horiz-adv-x="451"
d="M65 629h440l-7 -68h-185l-52 -561h-71l52 561h-184z" />
<glyph glyph-name="U" unicode="U" horiz-adv-x="589"
d="M220 629l-39 -402q-8 -88 27.5 -127t101 -39t108.5 39t51 127l39 402h71l-39 -402q-11 -118 -75 -178t-162.5 -60t-151 60t-41.5 178l39 402h71z" />
<glyph glyph-name="V" unicode="V" horiz-adv-x="507"
d="M150 629l112 -531l213 531h75l-260 -629h-74l-140 629h74z" />
<glyph glyph-name="W" unicode="W" horiz-adv-x="805"
d="M151 629l88 -522l183 457h48l94 -459l209 524h78l-259 -629h-75l-85 402l-166 -402h-74l-120 629h79z" />
<glyph glyph-name="X" unicode="X" horiz-adv-x="578"
d="M534 0h-89l-140 251l-175 -251h-87l229 312l-170 317h85l138 -257l174 257h85l-226 -316z" />
<glyph glyph-name="Y" unicode="Y" horiz-adv-x="494"
d="M153 629l125 -289l183 289h83l-238 -371l-24 -258h-72l24 258l-166 371h85z" />
<glyph glyph-name="Z" unicode="Z" horiz-adv-x="533"
d="M72 71l373 483l-327 3l7 72h416l-7 -71l-373 -483l327 -3l-7 -72h-415z" />
<glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="285"
d="M159 731h178l-6 -70h-107l-66 -693h107l-6 -70h-178z" />
<glyph glyph-name="backslash" unicode="\" horiz-adv-x="389"
d="M95 731h71l303 -804h-72z" />
<glyph glyph-name="bracketright" unicode="]" horiz-adv-x="316"
d="M198 -102h-178l6 70h107l66 693h-107l6 70h178z" />
<glyph glyph-name="asciicircum" unicode="^" horiz-adv-x="403"
d="M41 245l191 341h55l126 -341h-79l-84 247l-129 -247h-80z" />
<glyph glyph-name="underscore" unicode="_" horiz-adv-x="653"
d="M44 -56h554l-6 -68h-554z" />
<glyph glyph-name="grave" unicode="`" horiz-adv-x="283"
d="M132 860l199 -133l-25 -50l-210 113z" />
<glyph glyph-name="a" unicode="a" horiz-adv-x="504"
d="M386 310q6 65 -15.5 93t-67.5 28t-76.5 -20t-34.5 -65h-79q8 78 61 111t130 33q121 0 147 -100q9 -34 5 -82l-29 -308h-60v80q-49 -91 -153 -91q-64 0 -103 39q-36 36 -36 83t14.5 76t38.5 49q50 39 121 39t131 -26zM375 199q-62 20 -111.5 20t-81 -22.5t-31.5 -73.5
q0 -32 18.5 -52.5t65.5 -20.5q51 0 91 37q44 40 48 103z" />
<glyph glyph-name="b" unicode="b" horiz-adv-x="526"
d="M199 406q51 84 140 84q70 0 117 -58q49 -59 49 -156q0 -106 -54 -190q-27 -42 -68 -69.5t-90 -27.5q-99 0 -129 95l-24 -84h-49l64 681h71zM180 204q-6 -66 28 -108q30 -37 73 -37t70.5 20.5t45.5 52.5q35 61 35 135.5t-32 113.5t-81 39t-87 -38q-40 -42 -46 -111z" />
<glyph glyph-name="c" unicode="c" horiz-adv-x="463"
d="M296 490q38 0 66 -12.5t48 -33.5q39 -42 45 -106l-72 -7q-8 42 -31.5 65.5t-54.5 23.5t-54.5 -11.5t-42.5 -34.5q-43 -50 -50 -134q-8 -82 22.5 -131.5t82 -49.5t79.5 26.5t32 75.5h73q-6 -75 -59 -123q-52 -49 -131 -49q-80 0 -130 67q-52 71 -42 184q12 115 77 185
q61 65 142 65z" />
<glyph glyph-name="d" unicode="d" horiz-adv-x="535"
d="M383 80q-51 -91 -139 -91q-75 0 -122 59q-48 61 -48 158q0 106 54 188q62 96 154.5 96t127.5 -82l26 273h71l-64 -681h-58zM285 420q-30 0 -57.5 -20.5t-45.5 -51.5q-34 -60 -34 -134t31.5 -114.5t79.5 -40.5q46 0 83 37q41 41 49 110l7 70q6 70 -27 109q-29 35 -86 35z
" />
<glyph glyph-name="e" unicode="e" horiz-adv-x="463"
d="M256 53q88 0 110 87h73q-17 -72 -68 -111.5t-121 -39.5q-86 0 -133 67q-50 70 -38 182q12 116 73 184q60 68 145 68q95 0 134 -81q36 -73 12 -187h-295q-10 -117 56 -156q21 -13 52 -13zM342 415q-20 12 -49 12t-52 -11.5t-41 -31.5q-35 -40 -45 -102h230q11 100 -43 133
z" />
<glyph glyph-name="f" unicode="f" horiz-adv-x="309"
d="M89 478h70l7 73q7 72 45.5 105t83.5 33t81 -13l-19 -62q-28 13 -45.5 13t-28.5 -3.5t-21 -11.5q-21 -20 -25 -62l-7 -72h89l-5 -54h-89l-40 -424h-70l39 424h-70z" />
<glyph glyph-name="g" unicode="g"
d="M413 454q11 53 46 85t88 32l-15 -78q-79 0 -89 -73q28 -45 23 -94t-21.5 -81.5t-42.5 -56.5q-54 -48 -129 -48q-51 0 -88 23q-19 -4 -34.5 -18.5t-18.5 -38.5q-5 -54 75 -54h167q60 0 93 -28.5t28 -79.5q-6 -75 -79 -131q-76 -59 -190 -59q-97 0 -154 44q-56 44 -50 109
q3 43 29 70t65 38q-25 14 -37 36.5t-9 53t26.5 54t55.5 31.5q-44 50 -36 126q8 78 62 126t123.5 48t111.5 -36zM92 -90q-3 -38 32 -65.5t107 -27.5q79 0 135 37q52 35 58 85q2 23 -11.5 39.5t-43.5 16.5h-175q-46 -2 -71.5 -24.5t-30.5 -60.5zM376 400.5
q-25 32.5 -74.5 32.5t-80 -32.5t-35.5 -84.5t20 -85.5t73.5 -33.5t80 34t36.5 85.5t-20 84z" />
<glyph glyph-name="h" unicode="h" horiz-adv-x="544"
d="M198 390q54 100 153 100q77 0 114.5 -56t27.5 -153l-26 -281h-70l26 281q7 69 -19 104t-81 35t-93.5 -51.5t-46.5 -142.5l-21 -226h-71l64 681h71z" />
<glyph glyph-name="i" unicode="i" horiz-adv-x="269"
d="M140 479h71l-45 -479h-71zM153.5 604.5q-10.5 13.5 -8.5 36t15 36t35 13.5t33.5 -13.5t9.5 -36t-16 -36t-36 -13.5t-32.5 13.5z" />
<glyph glyph-name="j" unicode="j" horiz-adv-x="283"
d="M167 604.5q-11 13.5 -9 36t15.5 36t35.5 13.5t33.5 -13.5t9.5 -36t-16 -36t-36 -13.5t-33 13.5zM-86 -140q52 -37 94.5 -37t65 26.5t28.5 83.5l52 547h71l-52 -547q-9 -96 -50.5 -137.5t-102.5 -41.5q-56 0 -116 37z" />
<glyph glyph-name="k" unicode="k"
d="M243 253l-62 -52l-19 -201h-71l64 681h71l-37 -395l226 192h99l-215 -179l180 -299h-88z" />
<glyph glyph-name="l" unicode="l" horiz-adv-x="252"
d="M155 681h71l-64 -681h-71z" />
<glyph glyph-name="m" unicode="m" horiz-adv-x="841"
d="M195 385q54 105 155 105q56 0 91 -30.5t47 -84.5q51 115 161 115q77 0 114.5 -56t27.5 -153l-26 -281h-70l26 281q7 69 -19 104t-81 35t-90 -50t-43 -138h-1l-21 -232h-70l26 281q7 69 -19 104t-81 35t-93.5 -51.5t-46.5 -142.5l-21 -226h-71l45 478h61z" />
<glyph glyph-name="n" unicode="n" horiz-adv-x="543"
d="M195 385q54 105 155 105q77 0 114.5 -56t27.5 -153l-26 -281h-70l26 281q7 69 -19 104t-81 35t-93.5 -51.5t-46.5 -142.5l-21 -226h-71l45 478h61z" />
<glyph glyph-name="o" unicode="o" horiz-adv-x="491"
d="M304 490q43 0 78.5 -16t59.5 -48q51 -68 39 -187q-12 -120 -75 -187q-60 -63 -150 -63t-138 63q-51 67 -39 187t75 187q59 64 150 64zM299 422q-63 0 -101 -48.5t-46 -134t18.5 -134t89.5 -48.5t102 48.5t47 134t-19.5 134t-90.5 48.5z" />
<glyph glyph-name="p" unicode="p" horiz-adv-x="535"
d="M195 405q53 85 140 85q78 0 127 -66q51 -71 41 -184q-12 -114 -77 -184q-61 -67 -143 -67t-116 69l-28 -293h-71l68 713h58zM180 194q-6 -62 26 -100q29 -35 77 -35q53 0 93 46q44 49 53 134.5t-23.5 133t-86.5 47.5q-50 0 -86 -36q-39 -39 -45 -106h-1l-8 -84h1z" />
<glyph glyph-name="q" unicode="q" horiz-adv-x="526"
d="M383 77q-44 -88 -133 -88q-80 0 -129 67q-53 71 -41 184q12 114 76 184q61 66 139 66q44 0 76.5 -23t48.5 -68l23 79h49l-53 -559q-6 -49 3.5 -65.5t21.5 -24t30 -14.5l-28 -61q-61 18 -83 58t-14 112zM296 420q-24 0 -48.5 -12t-43.5 -36q-43 -51 -51 -132
q-7 -83 27 -135q32 -46 85 -46q49 0 84 35q39 38 45 100l10 99q0 60 -32 95q-28 32 -76 32z" />
<glyph glyph-name="r" unicode="r" horiz-adv-x="343"
d="M359 401q-28 10 -54 10q-57 0 -86 -52.5t-38 -142.5h-22q10 108 38 172l-36 -388h-71l45 479h71l-9 -91q43 99 124 99q26 0 49 -9z" />
<glyph glyph-name="s" unicode="s" horiz-adv-x="473"
d="M161 455q49 35 126 35t117 -36t37 -91h-69q-3 65 -94 65q-44 0 -69.5 -22t-28 -47.5t14 -43t54.5 -30.5l83 -32q54 -19 80.5 -48.5t21.5 -76.5q-6 -57 -56 -96q-54 -43 -138.5 -43t-128.5 42.5t-40 109.5h68q-2 -45 27 -67.5t76.5 -22.5t79 22t34.5 52.5t-13.5 46.5
t-55.5 28l-81 31q-109 36 -100 130q6 59 55 94z" />
<glyph glyph-name="t" unicode="t" horiz-adv-x="338"
d="M317 14q-52 -25 -100 -25t-80 33t-25 102l27 294h-70l7 60h68l13 133h71l-13 -133h135l-6 -60h-135l-27 -293q-5 -37 9.5 -55t45.5 -18t75 18z" />
<glyph glyph-name="u" unicode="u" horiz-adv-x="545"
d="M400 95q-53 -104 -153 -104q-73 0 -113 45t-32 139l29 304h71l-28 -298q-12 -121 90 -121q60 0 102 52q40 51 48 134l22 233h71l-45 -479h-71z" />
<glyph glyph-name="v" unicode="v" horiz-adv-x="453"
d="M141 478l93 -395l167 395h80l-216 -478h-78l-126 478h80z" />
<glyph glyph-name="w" unicode="w" horiz-adv-x="652"
d="M135 478l69 -380l135 357h60l68 -362l141 385h71l-186 -478h-69l-68 335l-128 -335h-69l-98 478h74z" />
<glyph glyph-name="x" unicode="x" horiz-adv-x="461"
d="M436 0h-86l-106 181l-134 -181h-87l186 239l-141 240h87l106 -180l135 180h86l-187 -240z" />
<glyph glyph-name="y" unicode="y" horiz-adv-x="436"
d="M-8 -139q40 -38 88 -38q65 0 108 128l18 49l-131 478h79l94 -380l138 380h72l-215 -573q-28 -73 -65.5 -112t-89.5 -39t-103 35z" />
<glyph glyph-name="z" unicode="z" horiz-adv-x="427"
d="M53 64l286 350h-253l7 64h333l-7 -64l-282 -350h249l-5 -64h-333z" />
<glyph glyph-name="braceleft" unicode="{" horiz-adv-x="314"
d="M293 -138q-99 0 -142 66q-38 58 -27 168l8 92q9 79 -24 79h-15l7 76h15q17 0 26 17.5t14 61.5l8 91q17 168 123 217q38 18 91 18l-6 -69q-66 0 -98 -42.5t-40 -124.5l-8 -92q-9 -86 -58 -113l-1 -4q45 -25 36 -113l-8 -93q-8 -81 15.5 -123.5t90.5 -42.5z" />
<glyph glyph-name="bar" unicode="|" horiz-adv-x="252"
d="M161 750h71l-82 -872h-71z" />
<glyph glyph-name="braceright" unicode="}" horiz-adv-x="319"
d="M79 748q187 0 169 -234l-8 -92q-4 -43 1.5 -61t22.5 -18h15l-7 -76h-15q-17 0 -26.5 -17.5t-13.5 -61.5l-8 -91q-17 -169 -123 -217q-39 -18 -91 -18l6 69q66 0 98.5 42.5t39.5 124.5l8 92q9 86 58 113l1 4q-44 24 -36 113l8 93q8 81 -15.5 123.5t-90.5 42.5z" />
<glyph glyph-name="asciitilde" unicode="~" horiz-adv-x="463"
d="M168 282q-34 0 -60 -59l-38 23q41 111 107 111q30 0 76.5 -22t63 -27.5t29.5 -5.5q36 0 64 57l36 -27q-41 -106 -111 -106q-21 0 -71.5 22t-66.5 28t-29 6z" />
<glyph glyph-name="sterling" unicode="&#xa3;"
d="M24 69h25q67 0 74 90l10 108h-81l5 56h82l10 109q10 99 57 153.5t129 54.5q63 0 100 -38t40 -112h-69q-4 39 -25 58.5t-59.5 19.5t-66.5 -32t-35 -104l-11 -109h164l-5 -56h-164l-10 -104q-8 -70 -43 -94h166q44 0 66 20.5t32 64.5h75q-13 -77 -52 -113q-44 -41 -128 -41
h-292z" />
<glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="291"
d="M111.5 793.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5zM262.5 793.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5z" />
<glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="283"
d="M336 790l-231 -113l-16 50l224 133z" />
<glyph glyph-name="Agrave" unicode="&#xc0;" horiz-adv-x="517"
d="M277 629h87l130 -629h-74l-33 160h-225l-64 -160h-75zM186 222h188l-64 311zM252 860l199 -133l-25 -50l-210 113z" />
<glyph glyph-name="Aacute" unicode="&#xc1;" horiz-adv-x="517"
d="M277 629h87l130 -629h-74l-33 160h-225l-64 -160h-75zM186 222h188l-64 311zM456 790l-231 -113l-16 50l224 133z" />
<glyph glyph-name="Acircumflex" unicode="&#xc2;" horiz-adv-x="517"
d="M277 629h87l130 -629h-74l-33 160h-225l-64 -160h-75zM186 222h188l-64 311zM489 716l-48 -39l-107 108l-127 -108l-41 39l176 156z" />
<glyph glyph-name="Atilde" unicode="&#xc3;" horiz-adv-x="517"
d="M277 629h87l130 -629h-74l-33 160h-225l-64 -160h-75zM186 222h188l-64 311zM271 770q-30 0 -56 -51l-27 19q32 104 90 104q19 0 47.5 -17t37.5 -22t15 -8q10 -5 21 -5q29 0 52 52l29 -23q-14 -48 -38.5 -74t-43.5 -26t-33 6t-40 21q-39 24 -54 24z" />
<glyph glyph-name="Adieresis" unicode="&#xc4;" horiz-adv-x="517"
d="M277 629h87l130 -629h-74l-33 160h-225l-64 -160h-75zM186 222h188l-64 311zM239.5 749.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5zM390.5 749.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5
t-17.5 -35.5t-36 -14.5t-32 14.5z" />
<glyph glyph-name="Egrave" unicode="&#xc8;"
d="M149 629h349l-8 -68h-277l-20 -211h261l-6 -67h-261l-20 -214h278l-7 -69h-348zM255 860l199 -133l-25 -50l-210 113z" />
<glyph glyph-name="Eacute" unicode="&#xc9;"
d="M90 0l59 629h349l-8 -68h-277l-20 -211h261l-6 -67h-261l-20 -214h278l-7 -69h-348zM459 790l-231 -113l-16 50l224 133z" />
<glyph glyph-name="Ecircumflex" unicode="&#xca;"
d="M153 629h349l-8 -68h-277l-20 -211h261l-6 -67h-261l-20 -214h278l-7 -69h-348zM498 716l-48 -39l-107 108l-127 -108l-41 39l176 156z" />
<glyph glyph-name="Edieresis" unicode="&#xcb;"
d="M149 629h349l-8 -68h-277l-20 -211h261l-6 -67h-261l-20 -214h278l-7 -69h-348zM225.5 749.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5zM376.5 749.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5
t-17.5 -35.5t-36 -14.5t-32 14.5z" />
<glyph glyph-name="Igrave" unicode="&#xcc;" horiz-adv-x="252"
d="M150 629h71l-59 -629h-71zM117 860l199 -133l-25 -50l-210 113z" />
<glyph glyph-name="Iacute" unicode="&#xcd;" horiz-adv-x="252"
d="M91 0l59 629h71l-59 -629h-71zM321 790l-231 -113l-16 50l224 133z" />
<glyph glyph-name="Icircumflex" unicode="&#xce;" horiz-adv-x="252"
d="M150 629h71l-59 -629h-71zM355 716l-48 -39l-107 108l-127 -108l-41 39l176 156z" />
<glyph glyph-name="Idieresis" unicode="&#xcf;" horiz-adv-x="252"
d="M152 629h71l-59 -629h-71zM89.5 749.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5zM240.5 749.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5z" />
<glyph glyph-name="Ntilde" unicode="&#xd1;" horiz-adv-x="617"
d="M148 629h85l232 -504l49 504h71l-59 -629h-80l-237 513l-48 -513h-72zM319 770q-30 0 -56 -51l-27 19q32 104 90 104q19 0 47.5 -17t37.5 -22t15 -8q10 -5 21 -5q29 0 52 52l29 -23q-14 -48 -38.5 -74t-43.5 -26t-33 6t-40 21q-39 24 -54 24z" />
<glyph glyph-name="Ograve" unicode="&#xd2;" horiz-adv-x="581"
d="M366 640q110 0 168 -82q61 -84 47 -244q-15 -160 -94 -245q-74 -80 -183 -80q-111 0 -167 81q-61 86 -46 244q13 158 92 246q73 80 183 80zM478.5 503q-40.5 66 -120 66t-131 -66t-63.5 -190t28 -188t119 -64t131.5 64t64.5 188t-28.5 190zM296 860l199 -133l-25 -50
l-210 113z" />
<glyph glyph-name="Oacute" unicode="&#xd3;" horiz-adv-x="581"
d="M366 640q110 0 168 -82q61 -84 47 -244q-15 -160 -94 -245q-74 -80 -183 -80q-111 0 -167 81q-61 86 -46 244q13 158 92 246q73 80 183 80zM227.5 503q-51.5 -66 -63.5 -190t28 -188t119 -64t131.5 64t64.5 188t-28.5 190t-120 66t-131 -66zM500 790l-231 -113l-16 50
l224 133z" />
<glyph glyph-name="Ocircumflex" unicode="&#xd4;" horiz-adv-x="581"
d="M366 640q110 0 168 -82q61 -84 47 -244q-15 -160 -94 -245q-74 -80 -183 -80q-111 0 -167 81q-61 86 -46 244q13 158 92 246q73 80 183 80zM478.5 503q-40.5 66 -120 66t-131 -66t-63.5 -190t28 -188t119 -64t131.5 64t64.5 188t-28.5 190zM534 716l-48 -39l-107 108
l-127 -108l-41 39l176 156z" />
<glyph glyph-name="Otilde" unicode="&#xd5;" horiz-adv-x="581"
d="M366 640q110 0 168 -82q61 -84 47 -244q-15 -160 -94 -245q-74 -80 -183 -80q-111 0 -167 81q-61 86 -46 244q13 158 92 246q73 80 183 80zM227.5 503q-51.5 -66 -63.5 -190t28 -188t119 -64t131.5 64t64.5 188t-28.5 190t-120 66t-131 -66zM316 770q-30 0 -56 -51
l-27 19q32 104 90 104q19 0 47.5 -17t37.5 -22t15 -8q10 -5 21 -5q29 0 52 52l29 -23q-14 -48 -38.5 -74t-43.5 -26t-33 6t-40 21q-39 24 -54 24z" />
<glyph glyph-name="Odieresis" unicode="&#xd6;" horiz-adv-x="581"
d="M366 640q110 0 168 -82q61 -84 47 -244q-15 -160 -94 -245q-74 -80 -183 -80q-111 0 -167 81q-61 86 -46 244q13 158 92 246q73 80 183 80zM478.5 503q-40.5 66 -120 66t-131 -66t-63.5 -190t28 -188t119 -64t131.5 64t64.5 188t-28.5 190zM265.5 749.5
q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5zM416.5 749.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5z" />
<glyph glyph-name="Ugrave" unicode="&#xd9;" horiz-adv-x="589"
d="M220 629l-39 -402q-8 -88 27.5 -127t101 -39t108.5 39t51 127l39 402h71l-39 -402q-11 -118 -75 -178t-162.5 -60t-151 60t-41.5 178l39 402h71zM295 860l199 -133l-25 -50l-210 113z" />
<glyph glyph-name="Uacute" unicode="&#xda;" horiz-adv-x="589"
d="M149 629h71l-39 -402q-8 -88 27.5 -127t101 -39t108.5 39t51 127l39 402h71l-39 -402q-11 -118 -75 -178t-162.5 -60t-151 60t-41.5 178zM499 790l-231 -113l-16 50l224 133z" />
<glyph glyph-name="Ucircumflex" unicode="&#xdb;" horiz-adv-x="589"
d="M220 629l-39 -402q-8 -88 27.5 -127t101 -39t108.5 39t51 127l39 402h71l-39 -402q-11 -118 -75 -178t-162.5 -60t-151 60t-41.5 178l39 402h71zM533 716l-48 -39l-107 108l-127 -108l-41 39l176 156z" />
<glyph glyph-name="Udieresis" unicode="&#xdc;" horiz-adv-x="589"
d="M220 629l-39 -402q-8 -88 27.5 -127t101 -39t108.5 39t51 127l39 402h71l-39 -402q-11 -118 -75 -178t-162.5 -60t-151 60t-41.5 178l39 402h71zM264.5 749.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5zM415.5 749.5
q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5z" />
<glyph glyph-name="agrave" unicode="&#xe0;" horiz-adv-x="496"
d="M383 310q6 65 -15.5 93t-67.5 28t-76.5 -20t-34.5 -65h-79q8 78 61 111t130 33q121 0 147 -100q9 -34 5 -82l-29 -308h-61l1 80q-49 -91 -153 -91q-69 0 -108 45q-36 41 -30 100q6 68 58 106q47 35 116.5 35t129.5 -26zM372 199q-62 20 -109.5 20t-78.5 -18.5t-35 -60
t14.5 -66t68 -24.5t89 36.5t50.5 98.5v3zM238 731l199 -133l-25 -50l-210 113z" />
<glyph glyph-name="aacute" unicode="&#xe1;" horiz-adv-x="496"
d="M383 310q6 65 -15.5 93t-67.5 28t-76.5 -20t-34.5 -65h-79q8 78 61 111t130 33q121 0 147 -100q9 -34 5 -82l-29 -308h-61l1 80q-49 -91 -153 -91q-69 0 -108 45q-36 41 -30 100q6 68 58 106q47 35 116.5 35t129.5 -26zM372 199q-62 20 -109.5 20t-78.5 -18.5t-35 -60
t14.5 -66t68 -24.5t89 36.5t50.5 98.5v3zM442 661l-231 -113l-16 50l224 133z" />
<glyph glyph-name="acircumflex" unicode="&#xe2;" horiz-adv-x="496"
d="M383 310q6 65 -15.5 93t-67.5 28t-76.5 -20t-34.5 -65h-79q8 78 61 111t130 33q121 0 147 -100q9 -34 5 -82l-29 -308h-61l1 80q-49 -91 -153 -91q-69 0 -108 45q-36 41 -30 100q6 68 58 106q47 35 116.5 35t129.5 -26zM372 199q-62 20 -109.5 20t-78.5 -18.5t-35 -60
t14.5 -66t68.5 -24.5q51 0 90 37q39 39 49 101zM476 587l-48 -39l-107 108l-127 -108l-41 39l176 156z" />
<glyph glyph-name="atilde" unicode="&#xe3;" horiz-adv-x="496"
d="M383 310q6 65 -15.5 93t-67.5 28t-76.5 -20t-34.5 -65h-79q8 78 61 111t130 33q121 0 147 -100q9 -34 5 -82l-29 -308h-61l1 80q-49 -91 -153 -91q-69 0 -108 45q-36 41 -30 100q6 68 58 106q47 35 116.5 35t129.5 -26zM372 199q-62 20 -109.5 20t-78.5 -18.5t-35 -60
t14.5 -66t68 -24.5t89 36.5t50.5 98.5v3zM257 641q-30 0 -56 -51l-27 19q32 104 90 104q19 0 47.5 -17t37.5 -22t15 -8q10 -5 21 -5q29 0 52 52l29 -23q-14 -48 -38.5 -74t-43.5 -26t-33 6t-40 22q-39 23 -54 23z" />
<glyph glyph-name="adieresis" unicode="&#xe4;" horiz-adv-x="496"
d="M383 310q6 65 -15.5 93t-67.5 28t-76.5 -20t-34.5 -65h-79q8 78 61 111t130 33q121 0 147 -100q9 -34 5 -82l-29 -308h-61l1 80q-49 -91 -153 -91q-69 0 -108 45q-36 41 -30 100q6 68 58 106q47 35 116.5 35t129.5 -26zM372 199q-62 20 -109.5 20t-78.5 -18.5t-35 -60
t14.5 -66t68.5 -24.5q51 0 90 37q39 39 49 101zM207.5 619.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5zM358.5 619.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5z
" />
<glyph glyph-name="egrave" unicode="&#xe8;" horiz-adv-x="463"
d="M257 53q88 0 110 87h73q-17 -72 -68 -111.5t-121 -39.5q-86 0 -133 67q-50 70 -38 182q12 116 73 184q60 68 145 68q95 0 134 -81q36 -73 12 -187h-295q-10 -117 55 -156q22 -13 53 -13zM342 415q-19 12 -48 12t-52 -11.5t-40 -31.5q-36 -40 -46 -102h230q11 100 -44 133
zM223 736l199 -133l-25 -50l-210 113z" />
<glyph glyph-name="eacute" unicode="&#xe9;" horiz-adv-x="463"
d="M367 140h73q-17 -72 -68 -111.5t-121 -39.5q-86 0 -133 67q-50 70 -38 182q12 116 73 184q60 68 145 68q95 0 134 -81q36 -73 12 -187h-295q-6 -76 21 -120q29 -49 87 -49q88 0 110 87zM294 427q-55 0 -92 -43q-36 -40 -46 -102h230q7 61 -14 100q-10 21 -29.5 33
t-48.5 12zM427 666l-231 -113l-16 50l224 133z" />
<glyph glyph-name="ecircumflex" unicode="&#xea;" horiz-adv-x="463"
d="M260 53q88 0 110 87h73q-17 -72 -68 -111.5t-121 -39.5q-86 0 -133 67q-50 70 -38 182q12 116 73 184q60 68 145 68q95 0 134 -81q36 -73 12 -187h-295q-10 -117 56 -156q21 -13 52 -13zM346 415q-20 12 -49 12t-52 -11.5t-41 -31.5q-35 -40 -45 -102h230q11 100 -43 133
zM464 592l-48 -39l-107 108l-127 -108l-41 39l176 156z" />
<glyph glyph-name="edieresis" unicode="&#xeb;" horiz-adv-x="463"
d="M257 53q88 0 110 87h73q-17 -72 -68 -111.5t-121 -39.5q-86 0 -133 67q-50 70 -38 182q12 116 73 184q60 68 145 68q95 0 134 -81q36 -73 12 -187h-295q-10 -117 55 -156q22 -13 53 -13zM342 415q-19 12 -48 12t-52 -11.5t-40 -31.5q-36 -40 -46 -102h230q11 100 -44 133
zM193.5 619.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5zM344.5 619.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5z" />
<glyph glyph-name="igrave" unicode="&#xec;" horiz-adv-x="269"
d="M140 479h71l-45 -479h-71zM109 731l199 -133l-25 -50l-210 113z" />
<glyph glyph-name="iacute" unicode="&#xed;" horiz-adv-x="269"
d="M95 0l45 479h71l-45 -479h-71zM313 661l-231 -113l-16 50l224 133z" />
<glyph glyph-name="icircumflex" unicode="&#xee;" horiz-adv-x="269"
d="M140 479h71l-45 -479h-71zM348 587l-48 -39l-107 108l-127 -108l-41 39l176 156z" />
<glyph glyph-name="idieresis" unicode="&#xef;" horiz-adv-x="269"
d="M142 479h71l-45 -479h-71zM81.5 619.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5zM232.5 619.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5z" />
<glyph glyph-name="ntilde" unicode="&#xf1;" horiz-adv-x="544"
d="M351 490q77 0 114.5 -56t27.5 -153l-26 -281h-70l26 281q7 69 -19 104t-81 35t-93.5 -51.5t-46.5 -142.5l-21 -226h-71l45 478h61l-1 -93q54 105 155 105zM273 641q-30 0 -56 -51l-27 19q32 104 90 104q19 0 47.5 -17t37.5 -22t15 -8q10 -5 21 -5q29 0 52 52l29 -23
q-14 -48 -38.5 -74t-43.5 -26t-33 6t-40 22q-39 23 -54 23z" />
<glyph glyph-name="ograve" unicode="&#xf2;" horiz-adv-x="492"
d="M304 490q44 0 79.5 -16t58.5 -48q52 -68 40 -187q-12 -120 -75 -187q-60 -63 -150 -63t-138 63q-51 67 -39 187t74 187q60 64 150 64zM300 422q-63 0 -101 -48.5t-46 -134t18.5 -134t89.5 -48.5t102 48.5t47 134t-19.5 134t-90.5 48.5zM237 731l199 -133l-25 -50
l-210 113z" />
<glyph glyph-name="oacute" unicode="&#xf3;" horiz-adv-x="492"
d="M304 490q91 0 138 -64q52 -68 40 -187q-12 -120 -75 -187q-60 -63 -150 -63t-138 63q-51 67 -39 187t74 187q30 32 68.5 48t81.5 16zM300 422q-63 0 -101 -48.5t-46 -134t18.5 -134t89.5 -48.5t102 48.5t47 134t-19.5 134t-90.5 48.5zM441 661l-231 -113l-16 50l224 133z
" />
<glyph glyph-name="ocircumflex" unicode="&#xf4;" horiz-adv-x="492"
d="M304 490q44 0 79.5 -16t58.5 -48q52 -68 40 -187q-12 -120 -75 -187q-60 -63 -150 -63t-138 63q-51 67 -39 187t74 187q60 64 150 64zM300 422q-63 0 -101 -48.5t-46 -134t18.5 -134t89.5 -48.5t102 48.5t47 134t-19.5 134t-90.5 48.5zM474 587l-48 -39l-107 108
l-127 -108l-41 39l176 156z" />
<glyph glyph-name="otilde" unicode="&#xf5;" horiz-adv-x="492"
d="M304 490q91 0 138 -64q52 -68 40 -187q-12 -120 -75 -187q-60 -63 -150 -63t-138 63q-51 67 -39 187t74 187q30 32 68.5 48t81.5 16zM300 422q-63 0 -101 -48.5t-46 -134t18.5 -134t89.5 -48.5t102 48.5t47 134t-19.5 134t-90.5 48.5zM257 641q-30 0 -56 -51l-27 19
q32 104 90 104q19 0 47.5 -17t37.5 -22t15 -8q10 -5 21 -5q29 0 52 52l29 -23q-14 -48 -38.5 -74t-43.5 -26t-33 6t-40 22q-39 23 -54 23z" />
<glyph glyph-name="odieresis" unicode="&#xf6;" horiz-adv-x="492"
d="M304 490q44 0 79.5 -16t58.5 -48q52 -68 40 -187q-12 -120 -75 -187q-60 -63 -150 -63t-138 63q-51 67 -39 187t74 187q60 64 150 64zM300 422q-63 0 -101 -48.5t-46 -134t18.5 -134t89.5 -48.5t102 48.5t47 134t-19.5 134t-90.5 48.5zM206.5 619.5q-11.5 14.5 -9.5 35.5
t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5zM357.5 619.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5z" />
<glyph glyph-name="ugrave" unicode="&#xf9;" horiz-adv-x="545"
d="M400 95q-53 -104 -153 -104q-73 0 -113 45t-32 139l29 304h71l-28 -298q-12 -121 90 -121q60 0 102 52q40 51 48 134l22 233h71l-45 -479h-71zM260 769l199 -133l-25 -50l-210 113z" />
<glyph glyph-name="uacute" unicode="&#xfa;" horiz-adv-x="545"
d="M264 60q60 0 102 52q40 51 48 134l22 233h71l-45 -479h-71l9 95q-53 -104 -153 -104q-73 0 -113 45t-32 139l29 304h71l-28 -298q-12 -121 90 -121zM464 699l-231 -113l-16 50l224 133z" />
<glyph glyph-name="ucircumflex" unicode="&#xfb;" horiz-adv-x="545"
d="M400 95q-53 -104 -153 -104q-73 0 -113 45t-32 139l29 304h71l-28 -298q-12 -121 90 -121q60 0 102 52q40 51 48 134l22 233h71l-45 -479h-71zM498 625l-48 -39l-107 108l-127 -108l-41 39l176 156z" />
<glyph glyph-name="udieresis" unicode="&#xfc;" horiz-adv-x="545"
d="M400 95q-53 -104 -153 -104q-73 0 -113 45t-32 139l29 304h71l-28 -298q-12 -121 90 -121q60 0 102 52q40 51 48 134l22 233h71l-45 -479h-71zM226.5 619.5q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5zM377.5 619.5
q-11.5 14.5 -9.5 35.5t16.5 35.5t35 14.5t33 -14.5t10.5 -35.5t-17.5 -35.5t-36 -14.5t-32 14.5z" />
<glyph glyph-name="dotlessi" unicode="&#x131;" horiz-adv-x="252"
d="M136 479h71l-45 -479h-71z" />
<glyph glyph-name="apostrophe" unicode="&#x2bc;" horiz-adv-x="166"
d="M116 538q-13 13 -11 35t18 37t41.5 15t40.5 -22.5t11.5 -56.5t-27 -69.5t-65.5 -57.5l-50 29q61 32 75 75q-20 2 -33 15z" />
<glyph glyph-name="circumflex" unicode="&#x2c6;" horiz-adv-x="366"
d="M412 716l-48 -39l-107 108l-127 -108l-41 39l176 156z" />
<glyph glyph-name="tilde" unicode="&#x2dc;" horiz-adv-x="329"
d="M173 770q-30 0 -56 -51l-27 19q32 104 90 104q19 0 47.5 -17t37.5 -22t15 -8q10 -5 21 -5q29 0 52 52l29 -23q-14 -48 -38.5 -74t-43.5 -26t-33 6t-40 21q-39 24 -54 24z" />
<glyph glyph-name="endash" unicode="&#x2013;" horiz-adv-x="427"
d="M80 325h328l-7 -68h-327z" />
<glyph glyph-name="emdash" unicode="&#x2014;" horiz-adv-x="653"
d="M80 325h554l-6 -68h-554z" />
<glyph glyph-name="quoteleft" unicode="&#x2018;" horiz-adv-x="193"
d="M175 433.5q-16 -15.5 -41 -15.5t-40 23t-11.5 57.5t28 70t66.5 57.5l47 -29q-60 -33 -74 -76q20 -2 32.5 -15t10.5 -35t-18 -37.5z" />
<glyph glyph-name="quoteright" unicode="&#x2019;" horiz-adv-x="193"
d="M104 611q16 15 41.5 15t40.5 -22t11.5 -57t-28 -70.5t-66.5 -58.5l-47 30q60 33 74 76q-20 2 -33 15t-11 35t18 37z" />
<glyph glyph-name="rupeesymbol" unicode="&#x20b9;" horiz-adv-x="523"
d="M142 629h375l-6 -49h-164q58 -36 66 -103h89l-4 -48h-86q-16 -115 -121 -159q-37 -15 -87 -20l223 -250h-101l-220 248l5 48h55q77 0 118.5 38t50.5 95h-212l5 48h208q-6 46 -40.5 74.5t-103.5 28.5h-55z" />
<glyph glyph-name="minus" unicode="&#x2212;" horiz-adv-x="439"
d="M399 325l-7 -67h-297l7 67h297z" />
<glyph glyph-name="zero.propold" horiz-adv-x="478"
d="M471.5 267.5q-13.5 -137.5 -74 -208t-145.5 -70.5q-89 0 -134 71q-47 74 -33 212.5t73.5 208.5t147 70t133.5 -73t32.5 -210.5zM399 270q20 212 -101 212q-62 0 -96 -54t-44 -158q-22 -211 101 -211q63 0 96.5 53.5t43.5 157.5z" />
<glyph glyph-name="one.propold" horiz-adv-x="298"
d="M257 541l-50 -541h-70l41 446q-48 -32 -95 -34l7 77q64 11 110 52h57z" />
<glyph glyph-name="two.propold" horiz-adv-x="517"
d="M135 73h321l-6 -73h-392l7 84q8 80 45 121.5t107 58.5l95 25q49 12 74 36t29 63t-22.5 66t-78.5 27t-87 -23t-45 -70h-79q13 78 69 120.5t145 42.5q80 0 129 -49q47 -47 41 -113.5t-43 -103t-107 -54.5l-102 -27q-92 -22 -96 -99z" />
<glyph glyph-name="three.propold" horiz-adv-x="506"
d="M289 483q-100 0 -127 -93h-75q19 83 76 124q51 37 131 37q84 0 132 -47q47 -46 41 -120q-5 -51 -33.5 -82t-76.5 -50q54 -20 81.5 -67.5t22.5 -99.5t-23.5 -86.5t-48.5 -59.5q-64 -53 -158 -53q-89 0 -141 50q-57 54 -47 152h72q-5 -69 29.5 -101.5t93.5 -32.5
q60 0 103 36q41 33 47 89q7 90 -68 121q-27 11 -64 11h-55l5 63h39q65 0 104.5 26t44.5 75t-23 78.5t-82 29.5z" />
<glyph glyph-name="four.propold" horiz-adv-x="504"
d="M436 546l-41 -425h98l-6 -67h-98l-16 -159h-70l16 159h-293l6 61l337 431h67zM112 115h215l28 307z" />
<glyph glyph-name="five.propold" horiz-adv-x="512"
d="M205 296q44 10 86 10q94 0 143 -53t40 -147q-10 -96 -75 -158q-66 -62 -159 -62q-78 0 -124 48q-51 54 -42 141h69q-5 -57 23.5 -87t80.5 -30q62 0 106 42q43 42 48.5 105.5t-27 99.5t-103.5 36h-146l54 304h311l-8 -71h-244z" />
<glyph glyph-name="six.propold" horiz-adv-x="516"
d="M439 470q-7 98 -91 98q-78 0 -128 -74q-56 -82 -66 -246q-2 -23 -1 -44q22 135 119 166q29 9 63 9t65.5 -14.5t53.5 -40.5q47 -57 39 -142q-10 -87 -67.5 -140.5t-144.5 -53.5q-100 0 -155 90q-52 88 -40 225q14 156 86 247q71 90 181 90q77 0 120 -47t42 -123h-76z
M181.5 182q-4.5 -55 26 -88t81.5 -33t88 33t42 91t-25.5 91t-81 33t-88.5 -36t-42.5 -91z" />
<glyph glyph-name="seven.propold" horiz-adv-x="423"
d="M458 551l-6 -67l-325 -582h-87l337 579h-310l6 70h385z" />
<glyph glyph-name="eight.propold" horiz-adv-x="553"
d="M342 640q48 0 84.5 -13.5t61.5 -36.5q54 -50 46 -125q-4 -53 -40 -93q-37 -41 -95 -51l15 -6q60 -26 89.5 -61.5t22.5 -103.5t-71 -114.5t-173 -46.5q-98 0 -158 51q-59 51 -51 128q5 62 45 101t100 49q-45 24 -65 50q-38 50 -33 105q6 75 66 120q62 47 156 47zM283 289
q-56 -6 -95 -39q-37 -32 -41 -75q-6 -53 37 -85q39 -29 109 -29t113 26t46.5 63t-16.5 59.5t-55 37.5zM264 381l63 -28q54 2 91 31t42.5 77t-29 77.5t-94.5 29.5q-57 0 -97 -28q-41 -30 -45.5 -77.5t69.5 -81.5z" />
<glyph glyph-name="nine.propold" horiz-adv-x="522"
d="M316 551q48 0 87.5 -25.5t64.5 -69.5q51 -88 38 -229q-25 -246 -158 -317q-44 -24 -92 -24t-81.5 14.5t-56.5 41.5q-48 55 -40 141h75q-5 -57 21.5 -91t74 -34t78 19.5t51.5 55.5q42 70 57 205q1 20 2 39.5t0 40.5q-14 -77 -60.5 -119.5t-111.5 -42.5q-77 0 -124 56
q-48 57 -40 142q8 88 66 142q59 55 149 55zM304 481q-54 0 -89 -34.5t-40.5 -93t23.5 -93t83 -34.5q51 0 89 38q35 35 40.5 91.5t-23.5 91t-83 34.5z" />
<hkern u1="A" u2="y" k="25" />
<hkern u1="A" u2="w" k="22" />
<hkern u1="A" u2="v" k="20" />
<hkern u1="A" u2="f" k="11" />
<hkern u1="A" u2="Y" k="23" />
<hkern u1="A" u2="W" k="25" />
<hkern u1="A" u2="V" k="25" />
<hkern u1="A" u2="T" k="36" />
<hkern u1="D" u2="Y" k="23" />
<hkern u1="F" u2="z" k="22" />
<hkern u1="F" u2="y" k="25" />
<hkern u1="F" u2="x" k="25" />
<hkern u1="F" u2="w" k="32" />
<hkern u1="F" u2="v" k="29" />
<hkern u1="F" u2="u" k="22" />
<hkern u1="F" u2="q" k="25" />
<hkern u1="F" u2="o" k="25" />
<hkern u1="F" u2="g" k="41" />
<hkern u1="F" u2="e" k="25" />
<hkern u1="F" u2="d" k="22" />
<hkern u1="F" u2="c" k="25" />
<hkern u1="F" u2="a" k="22" />
<hkern u1="F" u2="Y" k="7" />
<hkern u1="F" u2="X" k="14" />
<hkern u1="F" u2="W" k="7" />
<hkern u1="F" u2="A" k="51" />
<hkern u1="L" u2="y" k="18" />
<hkern u1="L" u2="w" k="22" />
<hkern u1="L" u2="v" k="22" />
<hkern u1="L" u2="Y" k="62" />
<hkern u1="L" u2="W" k="37" />
<hkern u1="L" u2="V" k="41" />
<hkern u1="L" u2="T" k="44" />
<hkern u1="L" u2="J" k="-14" />
<hkern u1="O" u2="Y" k="14" />
<hkern u1="O" u2="X" k="11" />
<hkern u1="O" u2="V" k="7" />
<hkern u1="P" u2="A" k="34" />
<hkern u1="Q" u2="Y" k="14" />
<hkern u1="S" u2="Y" k="23" />
<hkern u1="T" u2="z" k="48" />
<hkern u1="T" u2="y" k="45" />
<hkern u1="T" u2="x" k="51" />
<hkern u1="T" u2="w" k="36" />
<hkern u1="T" u2="v" k="66" />
<hkern u1="T" u2="u" k="62" />
<hkern u1="T" u2="s" k="87" />
<hkern u1="T" u2="r" k="66" />
<hkern u1="T" u2="q" k="68" />
<hkern u1="T" u2="p" k="62" />
<hkern u1="T" u2="o" k="71" />
<hkern u1="T" u2="n" k="62" />
<hkern u1="T" u2="m" k="62" />
<hkern u1="T" u2="g" k="78" />
<hkern u1="T" u2="f" k="48" />
<hkern u1="T" u2="e" k="68" />
<hkern u1="T" u2="d" k="77" />
<hkern u1="T" u2="c" k="68" />
<hkern u1="T" u2="a" k="78" />
<hkern u1="T" u2="J" k="62" />
<hkern u1="T" u2="A" k="36" />
<hkern u1="V" u2="s" k="30" />
<hkern u1="V" u2="r" k="15" />
<hkern u1="V" u2="q" k="26" />
<hkern u1="V" u2="o" k="30" />
<hkern u1="V" u2="g" k="44" />
<hkern u1="V" u2="f" k="36" />
<hkern u1="V" u2="e" k="30" />
<hkern u1="V" u2="d" k="30" />
<hkern u1="V" u2="c" k="30" />
<hkern u1="V" u2="a" k="30" />
<hkern u1="V" u2="O" k="7" />
<hkern u1="V" u2="J" k="62" />
<hkern u1="V" u2="C" k="7" />
<hkern u1="V" u2="A" k="30" />
<hkern u1="W" u2="u" k="25" />
<hkern u1="W" u2="s" k="36" />
<hkern u1="W" u2="r" k="30" />
<hkern u1="W" u2="q" k="30" />
<hkern u1="W" u2="o" k="30" />
<hkern u1="W" u2="g" k="44" />
<hkern u1="W" u2="f" k="36" />
<hkern u1="W" u2="e" k="30" />
<hkern u1="W" u2="d" k="30" />
<hkern u1="W" u2="c" k="30" />
<hkern u1="W" u2="a" k="30" />
<hkern u1="W" u2="J" k="62" />
<hkern u1="W" u2="A" k="30" />
<hkern u1="X" u2="O" k="11" />
<hkern u1="Y" u2="z" k="59" />
<hkern u1="Y" u2="y" k="51" />
<hkern u1="Y" u2="x" k="48" />
<hkern u1="Y" u2="w" k="41" />
<hkern u1="Y" u2="v" k="41" />
<hkern u1="Y" u2="u" k="60" />
<hkern u1="Y" u2="t" k="33" />
<hkern u1="Y" u2="s" k="59" />
<hkern u1="Y" u2="r" k="59" />
<hkern u1="Y" u2="q" k="59" />
<hkern u1="Y" u2="p" k="59" />
<hkern u1="Y" u2="o" k="59" />
<hkern u1="Y" u2="n" k="59" />
<hkern u1="Y" u2="m" k="59" />
<hkern u1="Y" u2="g" k="69" />
<hkern u1="Y" u2="f" k="59" />
<hkern u1="Y" u2="e" k="59" />
<hkern u1="Y" u2="d" k="59" />
<hkern u1="Y" u2="c" k="59" />
<hkern u1="Y" u2="a" k="55" />
<hkern u1="Y" u2="S" k="25" />
<hkern u1="Y" u2="Q" k="14" />
<hkern u1="Y" u2="O" k="14" />
<hkern u1="Y" u2="J" k="74" />
<hkern u1="Y" u2="H" k="7" />
<hkern u1="Y" u2="C" k="15" />
<hkern u1="Y" u2="A" k="62" />
<hkern u1="a" u2="Y" k="48" />
<hkern u1="a" u2="W" k="25" />
<hkern u1="a" u2="V" k="33" />
<hkern u1="a" u2="T" k="80" />
<hkern u1="b" u2="Y" k="15" />
<hkern u1="b" u2="V" k="26" />
<hkern u1="b" u2="T" k="18" />
<hkern u1="c" u2="Y" k="30" />
<hkern u1="c" u2="V" k="25" />
<hkern u1="c" u2="T" k="55" />
<hkern u1="e" u2="Y" k="37" />
<hkern u1="e" u2="V" k="22" />
<hkern u1="e" u2="T" k="55" />
<hkern u1="f" u2="s" k="22" />
<hkern u1="f" u2="j" k="14" />
<hkern u1="f" u2="g" k="23" />
<hkern u1="f" u2="c" k="14" />
<hkern u1="f" u2="J" k="48" />
<hkern u1="f" u2="A" k="14" />
<hkern u1="g" u2="y" k="-14" />
<hkern u1="g" u2="j" k="-66" />
<hkern u1="h" u2="Y" k="41" />
<hkern u1="h" u2="T" k="7" />
<hkern u1="j" u2="f" k="20" />
<hkern u1="k" u2="y" k="14" />
<hkern u1="k" u2="j" k="7" />
<hkern u1="k" u2="f" k="14" />
<hkern u1="m" u2="Y" k="37" />
<hkern u1="m" u2="T" k="32" />
<hkern u1="n" u2="Y" k="37" />
<hkern u1="n" u2="T" k="40" />
<hkern u1="o" u2="Y" k="59" />
<hkern u1="o" u2="W" k="30" />
<hkern u1="o" u2="V" k="30" />
<hkern u1="o" u2="T" k="64" />
<hkern u1="p" u2="Y" k="32" />
<hkern u1="p" u2="T" k="48" />
<hkern u1="q" u2="j" k="-73" />
<hkern u1="q" u2="Y" k="42" />
<hkern u1="q" u2="T" k="66" />
<hkern u1="r" u2="g" k="18" />
<hkern u1="r" u2="T" k="43" />
<hkern u1="r" u2="J" k="36" />
<hkern u1="s" u2="y" k="18" />
<hkern u1="s" u2="f" k="25" />
<hkern u1="s" u2="Y" k="51" />
<hkern u1="s" u2="W" k="32" />
<hkern u1="s" u2="V" k="25" />
<hkern u1="s" u2="T" k="80" />
<hkern u1="t" u2="Y" k="33" />
<hkern u1="u" u2="Y" k="44" />
<hkern u1="u" u2="T" k="51" />
<hkern u1="v" u2="g" k="7" />
<hkern u1="v" u2="Y" k="41" />
<hkern u1="v" u2="T" k="54" />
<hkern u1="v" u2="J" k="48" />
<hkern u1="v" u2="A" k="22" />
<hkern u1="w" u2="Y" k="29" />
<hkern u1="w" u2="T" k="29" />
<hkern u1="w" u2="J" k="37" />
<hkern u1="w" u2="A" k="25" />
<hkern u1="x" u2="Y" k="44" />
<hkern u1="x" u2="T" k="37" />
<hkern u1="y" u2="g" k="7" />
<hkern u1="y" u2="Y" k="25" />
<hkern u1="y" u2="T" k="50" />
<hkern u1="y" u2="J" k="22" />
<hkern u1="y" u2="A" k="11" />
<hkern u1="z" u2="Y" k="37" />
<hkern u1="z" u2="T" k="22" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,43 @@
Copyright (c) 2011, Jonathan Pinhorn (pinhorn.typedesign@gmail.com), with Reserved Font Names "Karla" and "Karla Tamil".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the copyright statement(s).
"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Some files were not shown because too many files have changed in this diff Show More