Updated 3rdparty structure

This commit is contained in:
Pierre
2017-05-26 08:56:32 +02:00
parent 4c80329362
commit 196bbdc585
2311 changed files with 18 additions and 13 deletions

View File

@ -0,0 +1,4 @@
_site
.sass-cache
*.scssc
*.swp

View File

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2014 Drifty (http://drifty.com/)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -0,0 +1,31 @@
{
"ignore": [
"**/.*",
"builder",
"node_modules",
"bower_components",
"test",
"tests"
],
"version": "2.0.0",
"name": "Ionicons",
"license": "MIT",
"authors": [
"Ben Sperry <ben@drifty.com>",
"Adam Bradley <adam@drifty.com>",
"Max Lynch <max@drifty.com>"
],
"keywords": [
"fonts",
"icon font",
"icons",
"ionic",
"web font"
],
"main": [
"css/ionicons.css",
"fonts/*"
],
"homepage": "https://github.com/driftyco/ionicons",
"description": "Ionicons - free and beautiful icons from the creators of Ionic Framework"
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,38 @@
<div class="icon-row">
<div class="preview-icon"><span class="step size-12">
<i class="icon {{prefix}}{{name}}"></i>
</span><span class="step size-14">
<i class="icon {{prefix}}{{name}}"></i>
</span><span class="step size-16">
<i class="icon {{prefix}}{{name}}"></i>
</span><span class="step size-18">
<i class="icon {{prefix}}{{name}}"></i>
</span><span class="step size-21">
<i class="icon {{prefix}}{{name}}"></i>
</span><span class="step size-24">
<i class="icon {{prefix}}{{name}}"></i>
</span><span class="step size-32">
<i class="icon {{prefix}}{{name}}"></i>
</span><span class="step size-48">
<i class="icon {{prefix}}{{name}}"></i>
</span><span class="step size-64">
<i class="icon {{prefix}}{{name}}"></i>
</span><span class="step size-96">
<i class="icon {{prefix}}{{name}}"></i>
</span>
</div>
<div class="preview-scale"><span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">32</span><span class="step">48</span><span class="step">64</span><span class="step">96</span></div>
<div class="usage">
<label>Classname:</label>
<input class="name" type="text" readonly="readonly" onClick="this.select();" value="{{prefix}}{{name}}" />
<label>Selectable:</label>
<span class="ion">{{html_code}}</span>
<label>Escaped HTML:</label>
<input class="html" type="text" readonly="readonly" onClick="this.select();" value="{{escaped_html_code}}" />
<label>CSS Content:</label>
<input class="css" type="text" readonly="readonly" onClick="this.select();" value="{{css_code}}" />
</div>
</div>

View File

@ -0,0 +1,156 @@
<!DOCTYPE html>
<html>
<head>
<title>{{font_name}} v{{font_version}} Cheatsheet</title>
<style>
* {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
body {
background: #fff;
color: #444;
font: 16px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
}
a, a:visited {
color: #888;
text-decoration: underline;
}
a:hover, a:focus { color: #000; }
header {
border-bottom: 2px solid #ddd;
margin-bottom: 20px;
overflow: hidden;
padding: 20px 0;
}
header h1 {
color: #888;
float: left;
font-size: 36px;
font-weight: 300;
}
header a {
float: right;
font-size: 14px;
}
.container {
margin: 0 auto;
max-width: 1200px;
min-width: 960px;
padding: 0 20px;
width: 95%;
}
.icon-row {
border-bottom: 1px dotted #ccc;
padding: 10px 0 20px;
margin-bottom: 20px;
}
.ion {
-webkit-touch-callout: text;
-webkit-user-select: text;
-khtml-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.preview-icon { vertical-align: bottom; }
.preview-scale {
color: #888;
font-size: 12px;
margin-top: 5px;
}
.step {
display: inline-block;
line-height: 1;
position: relative;
width: 10%;
}
.step i {
-webkit-transition: opacity .3s;
-moz-transition: opacity .3s;
-ms-transition: opacity .3s;
-o-transition: opacity .3s;
transition: opacity .3s;
}
.step:hover i { opacity: .3; }
.size-12 { font-size: 12px; }
.size-14 { font-size: 14px; }
.size-16 { font-size: 16px; }
.size-18 { font-size: 18px; }
.size-21 { font-size: 21px; }
.size-24 { font-size: 24px; }
.size-32 { font-size: 32px; }
.size-48 { font-size: 48px; }
.size-64 { font-size: 64px; }
.size-96 { font-size: 96px; }
.usage { margin-top: 10px; }
.usage input {
font-family: monospace;
margin-right: 3px;
padding: 2px 5px;
text-align: center;
-webkit-touch-callout: text;
-webkit-user-select: text;
-khtml-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.usage label {
font-size: 12px;
text-align: right;
padding: 0 3px 0 60px;
}
.usage label:first-child { padding-left: 0; }
.usage .name { width: 180px; }
.usage .html { width: 80px; }
.usage .css { width: 80px; }
footer {
color: #888;
font-size: 12px;
padding: 20px 0;
}
</style>
<link href="css/ionicons.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="container">
<header>
<h1>{{font_name}} v{{font_version}} Cheatsheet, {{icon_count}} icons:</h1>
<p><a href="http://ionicons.com/">Ionicons Homepage</a></p>
</header>
<div class="content">
{{content}}
</div>
<footer>
Made with love by the <a href="http://ionicframework.com/">Ionic Framework</a>
</footer>
</div>
</body>
</html>

View File

@ -0,0 +1,318 @@
from subprocess import call
import os
import json
BUILDER_PATH = os.path.dirname(os.path.abspath(__file__))
ROOT_PATH = os.path.join(BUILDER_PATH, '..')
FONTS_FOLDER_PATH = os.path.join(ROOT_PATH, 'fonts')
CSS_FOLDER_PATH = os.path.join(ROOT_PATH, 'css')
SCSS_FOLDER_PATH = os.path.join(ROOT_PATH, 'scss')
LESS_FOLDER_PATH = os.path.join(ROOT_PATH, 'less')
def main():
generate_font_files()
data = get_build_data()
rename_svg_glyph_names(data)
generate_scss(data)
generate_less(data)
generate_cheatsheet(data)
generate_component_json(data)
generate_composer_json(data)
generate_bower_json(data)
def generate_font_files():
print "Generate Fonts"
cmd = "fontforge -script %s/scripts/generate_font.py" % (BUILDER_PATH)
call(cmd, shell=True)
def rename_svg_glyph_names(data):
# hacky and slow (but safe) way to rename glyph-name attributes
svg_path = os.path.join(FONTS_FOLDER_PATH, 'ionicons.svg')
svg_file = open(svg_path, 'r+')
svg_text = svg_file.read()
svg_file.seek(0)
for ionicon in data['icons']:
# uniF2CA
org_name = 'uni%s' % (ionicon['code'].replace('0x', '').upper())
ion_name = 'ion-%s' % (ionicon['name'])
svg_text = svg_text.replace(org_name, ion_name)
svg_file.write(svg_text)
svg_file.close()
def generate_less(data):
print "Generate LESS"
font_name = data['name']
font_version = data['version']
css_prefix = data['prefix']
variables_file_path = os.path.join(LESS_FOLDER_PATH, '_ionicons-variables.less')
icons_file_path = os.path.join(LESS_FOLDER_PATH, '_ionicons-icons.less')
d = []
d.append('/*!');
d.append('Ionicons, v%s' % (font_version) );
d.append('Created by Ben Sperry for the Ionic Framework, http://ionicons.com/');
d.append('https://twitter.com/benjsperry https://twitter.com/ionicframework');
d.append('MIT License: https://github.com/driftyco/ionicons');
d.append('*/');
d.append('// Ionicons Variables')
d.append('// --------------------------\n')
d.append('@ionicons-font-path: "../fonts";')
d.append('@ionicons-font-family: "%s";' % (font_name) )
d.append('@ionicons-version: "%s";' % (font_version) )
d.append('@ionicons-prefix: %s;' % (css_prefix) )
d.append('')
for ionicon in data['icons']:
chr_code = ionicon['code'].replace('0x', '\\')
d.append('@ionicon-var-%s: "%s";' % (ionicon['name'], chr_code) )
f = open(variables_file_path, 'w')
f.write( '\n'.join(d) )
f.close()
d = []
d.append('// Ionicons Icons')
d.append('// --------------------------\n')
group = [ '.%s' % (data['name'].lower()) ]
for ionicon in data['icons']:
group.append('.@{ionicons-prefix}%s:before' % (ionicon['name']) )
d.append( ',\n'.join(group) )
d.append('{')
d.append(' &:extend(.ion);')
d.append('}')
for ionicon in data['icons']:
chr_code = ionicon['code'].replace('0x', '\\')
d.append('.@{ionicons-prefix}%s:before { content: @ionicon-var-%s; }' % (ionicon['name'], ionicon['name']) )
f = open(icons_file_path, 'w')
f.write( '\n'.join(d) )
f.close()
def generate_scss(data):
print "Generate SCSS"
font_name = data['name']
font_version = data['version']
css_prefix = data['prefix']
variables_file_path = os.path.join(SCSS_FOLDER_PATH, '_ionicons-variables.scss')
icons_file_path = os.path.join(SCSS_FOLDER_PATH, '_ionicons-icons.scss')
d = []
d.append('// Ionicons Variables')
d.append('// --------------------------\n')
d.append('$ionicons-font-path: "../fonts" !default;')
d.append('$ionicons-font-family: "%s" !default;' % (font_name) )
d.append('$ionicons-version: "%s" !default;' % (font_version) )
d.append('$ionicons-prefix: %s !default;' % (css_prefix) )
d.append('')
for ionicon in data['icons']:
chr_code = ionicon['code'].replace('0x', '\\')
d.append('$ionicon-var-%s: "%s";' % (ionicon['name'], chr_code) )
f = open(variables_file_path, 'w')
f.write( '\n'.join(d) )
f.close()
d = []
d.append('// Ionicons Icons')
d.append('// --------------------------\n')
group = [ '.%s' % (data['name'].lower()) ]
for ionicon in data['icons']:
group.append('.#{$ionicons-prefix}%s:before' % (ionicon['name']) )
d.append( ',\n'.join(group) )
d.append('{')
d.append(' @extend .ion;')
d.append('}')
for ionicon in data['icons']:
chr_code = ionicon['code'].replace('0x', '\\')
d.append('.#{$ionicons-prefix}%s:before { content: $ionicon-var-%s; }' % (ionicon['name'], ionicon['name']) )
f = open(icons_file_path, 'w')
f.write( '\n'.join(d) )
f.close()
generate_css_from_scss(data)
def generate_css_from_scss(data):
print "Generate CSS From SCSS"
scss_file_path = os.path.join(SCSS_FOLDER_PATH, 'ionicons.scss')
css_file_path = os.path.join(CSS_FOLDER_PATH, 'ionicons.css')
css_min_file_path = os.path.join(CSS_FOLDER_PATH, 'ionicons.min.css')
cmd = "sass %s %s --style compact" % (scss_file_path, css_file_path)
call(cmd, shell=True)
print "Generate Minified CSS From SCSS"
cmd = "sass %s %s --style compressed" % (scss_file_path, css_min_file_path)
call(cmd, shell=True)
def generate_cheatsheet(data):
print "Generate Cheatsheet"
cheatsheet_file_path = os.path.join(ROOT_PATH, 'cheatsheet.html')
template_path = os.path.join(BUILDER_PATH, 'cheatsheet', 'template.html')
icon_row_path = os.path.join(BUILDER_PATH, 'cheatsheet', 'icon-row.html')
f = open(template_path, 'r')
template_html = f.read()
f.close()
f = open(icon_row_path, 'r')
icon_row_template = f.read()
f.close()
content = []
for ionicon in data['icons']:
css_code = ionicon['code'].replace('0x', '\\')
escaped_html_code = ionicon['code'].replace('0x', '&amp;#x') + ';'
html_code = ionicon['code'].replace('0x', '&#x') + ';'
item_row = icon_row_template
item_row = item_row.replace('{{name}}', ionicon['name'])
item_row = item_row.replace('{{prefix}}', data['prefix'])
item_row = item_row.replace('{{css_code}}', css_code)
item_row = item_row.replace('{{escaped_html_code}}', escaped_html_code)
item_row = item_row.replace('{{html_code}}', html_code)
content.append(item_row)
template_html = template_html.replace("{{font_name}}", data["name"])
template_html = template_html.replace("{{font_version}}", data["version"])
template_html = template_html.replace("{{icon_count}}", str(len(data["icons"])) )
template_html = template_html.replace("{{content}}", '\n'.join(content) )
f = open(cheatsheet_file_path, 'w')
f.write(template_html)
f.close()
def generate_component_json(data):
print "Generate component.json"
d = {
"name": data['name'],
"repo": "driftyco/ionicons",
"description": "The premium icon font for Ionic Framework.",
"version": data['version'],
"keywords": [],
"dependencies": {},
"development": {},
"license": "MIT",
"styles": [
"css/%s.css" % (data['name'].lower())
],
"fonts": [
"fonts/%s.eot" % (data['name'].lower()),
"fonts/%s.svg" % (data['name'].lower()),
"fonts/%s.ttf" % (data['name'].lower()),
"fonts/%s.woff" % (data['name'].lower())
]
}
txt = json.dumps(d, indent=4, separators=(',', ': '))
component_file_path = os.path.join(ROOT_PATH, 'component.json')
f = open(component_file_path, 'w')
f.write(txt)
f.close()
def generate_composer_json(data):
print "Generate composer.json"
d = {
"name": "driftyco/ionicons",
"description": "The premium icon font for Ionic Framework.",
"keywords": [ "fonts", "icon font", "icons", "ionic", "web font"],
"homepage": "http://ionicons.com/",
"authors": [
{
"name": "Ben Sperry",
"email": "ben@drifty.com",
"role": "Designer",
"homepage": "https://twitter.com/benjsperry"
},
{
"name": "Adam Bradley",
"email": "adam@drifty.com",
"role": "Developer",
"homepage": "https://twitter.com/adamdbradley"
},
{
"name": "Max Lynch",
"email": "max@drifty.com",
"role": "Developer",
"homepage": "https://twitter.com/maxlynch"
}
],
"extra": {},
"license": [ "MIT" ]
}
txt = json.dumps(d, indent=4, separators=(',', ': '))
composer_file_path = os.path.join(ROOT_PATH, 'composer.json')
f = open(composer_file_path, 'w')
f.write(txt)
f.close()
def generate_bower_json(data):
print "Generate bower.json"
d = {
"name": data['name'],
"version": data['version'],
"homepage": "https://github.com/driftyco/ionicons",
"authors": [
"Ben Sperry <ben@drifty.com>",
"Adam Bradley <adam@drifty.com>",
"Max Lynch <max@drifty.com>"
],
"description": "Ionicons - free and beautiful icons from the creators of Ionic Framework",
"main": [
"css/%s.css" % (data['name'].lower()),
"fonts/*"
],
"keywords": [ "fonts", "icon font", "icons", "ionic", "web font"],
"license": "MIT",
"ignore": [
"**/.*",
"builder",
"node_modules",
"bower_components",
"test",
"tests"
]
}
txt = json.dumps(d, indent=4, separators=(',', ': '))
bower_file_path = os.path.join(ROOT_PATH, 'bower.json')
f = open(bower_file_path, 'w')
f.write(txt)
f.close()
def get_build_data():
build_data_path = os.path.join(BUILDER_PATH, 'build_data.json')
f = open(build_data_path, 'r')
data = json.loads(f.read())
f.close()
return data
if __name__ == "__main__":
main()

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,466 @@
#!/usr/bin/env python
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is font utility code.
#
# The Initial Developer of the Original Code is Mozilla Corporation.
# Portions created by the Initial Developer are Copyright (C) 2009
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
# John Daggett <jdaggett@mozilla.com>
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK ***** */
# eotlitetool.py - create EOT version of OpenType font for use with IE
#
# Usage: eotlitetool.py [-o output-filename] font1 [font2 ...]
#
# OpenType file structure
# http://www.microsoft.com/typography/otspec/otff.htm
#
# Types:
#
# BYTE 8-bit unsigned integer.
# CHAR 8-bit signed integer.
# USHORT 16-bit unsigned integer.
# SHORT 16-bit signed integer.
# ULONG 32-bit unsigned integer.
# Fixed 32-bit signed fixed-point number (16.16)
# LONGDATETIME Date represented in number of seconds since 12:00 midnight, January 1, 1904. The value is represented as a signed 64-bit integer.
#
# SFNT Header
#
# Fixed sfnt version // 0x00010000 for version 1.0.
# USHORT numTables // Number of tables.
# USHORT searchRange // (Maximum power of 2 <= numTables) x 16.
# USHORT entrySelector // Log2(maximum power of 2 <= numTables).
# USHORT rangeShift // NumTables x 16-searchRange.
#
# Table Directory
#
# ULONG tag // 4-byte identifier.
# ULONG checkSum // CheckSum for this table.
# ULONG offset // Offset from beginning of TrueType font file.
# ULONG length // Length of this table.
#
# OS/2 Table (Version 4)
#
# USHORT version // 0x0004
# SHORT xAvgCharWidth
# USHORT usWeightClass
# USHORT usWidthClass
# USHORT fsType
# SHORT ySubscriptXSize
# SHORT ySubscriptYSize
# SHORT ySubscriptXOffset
# SHORT ySubscriptYOffset
# SHORT ySuperscriptXSize
# SHORT ySuperscriptYSize
# SHORT ySuperscriptXOffset
# SHORT ySuperscriptYOffset
# SHORT yStrikeoutSize
# SHORT yStrikeoutPosition
# SHORT sFamilyClass
# BYTE panose[10]
# ULONG ulUnicodeRange1 // Bits 0-31
# ULONG ulUnicodeRange2 // Bits 32-63
# ULONG ulUnicodeRange3 // Bits 64-95
# ULONG ulUnicodeRange4 // Bits 96-127
# CHAR achVendID[4]
# USHORT fsSelection
# USHORT usFirstCharIndex
# USHORT usLastCharIndex
# SHORT sTypoAscender
# SHORT sTypoDescender
# SHORT sTypoLineGap
# USHORT usWinAscent
# USHORT usWinDescent
# ULONG ulCodePageRange1 // Bits 0-31
# ULONG ulCodePageRange2 // Bits 32-63
# SHORT sxHeight
# SHORT sCapHeight
# USHORT usDefaultChar
# USHORT usBreakChar
# USHORT usMaxContext
#
#
# The Naming Table is organized as follows:
#
# [name table header]
# [name records]
# [string data]
#
# Name Table Header
#
# USHORT format // Format selector (=0).
# USHORT count // Number of name records.
# USHORT stringOffset // Offset to start of string storage (from start of table).
#
# Name Record
#
# USHORT platformID // Platform ID.
# USHORT encodingID // Platform-specific encoding ID.
# USHORT languageID // Language ID.
# USHORT nameID // Name ID.
# USHORT length // String length (in bytes).
# USHORT offset // String offset from start of storage area (in bytes).
#
# head Table
#
# Fixed tableVersion // Table version number 0x00010000 for version 1.0.
# Fixed fontRevision // Set by font manufacturer.
# ULONG checkSumAdjustment // To compute: set it to 0, sum the entire font as ULONG, then store 0xB1B0AFBA - sum.
# ULONG magicNumber // Set to 0x5F0F3CF5.
# USHORT flags
# USHORT unitsPerEm // Valid range is from 16 to 16384. This value should be a power of 2 for fonts that have TrueType outlines.
# LONGDATETIME created // Number of seconds since 12:00 midnight, January 1, 1904. 64-bit integer
# LONGDATETIME modified // Number of seconds since 12:00 midnight, January 1, 1904. 64-bit integer
# SHORT xMin // For all glyph bounding boxes.
# SHORT yMin
# SHORT xMax
# SHORT yMax
# USHORT macStyle
# USHORT lowestRecPPEM // Smallest readable size in pixels.
# SHORT fontDirectionHint
# SHORT indexToLocFormat // 0 for short offsets, 1 for long.
# SHORT glyphDataFormat // 0 for current format.
#
#
#
# Embedded OpenType (EOT) file format
# http://www.w3.org/Submission/EOT/
#
# EOT version 0x00020001
#
# An EOT font consists of a header with the original OpenType font
# appended at the end. Most of the data in the EOT header is simply a
# copy of data from specific tables within the font data. The exceptions
# are the 'Flags' field and the root string name field. The root string
# is a set of names indicating domains for which the font data can be
# used. A null root string implies the font data can be used anywhere.
# The EOT header is in little-endian byte order but the font data remains
# in big-endian order as specified by the OpenType spec.
#
# Overall structure:
#
# [EOT header]
# [EOT name records]
# [font data]
#
# EOT header
#
# ULONG eotSize // Total structure length in bytes (including string and font data)
# ULONG fontDataSize // Length of the OpenType font (FontData) in bytes
# ULONG version // Version number of this format - 0x00020001
# ULONG flags // Processing Flags (0 == no special processing)
# BYTE fontPANOSE[10] // OS/2 Table panose
# BYTE charset // DEFAULT_CHARSET (0x01)
# BYTE italic // 0x01 if ITALIC in OS/2 Table fsSelection is set, 0 otherwise
# ULONG weight // OS/2 Table usWeightClass
# USHORT fsType // OS/2 Table fsType (specifies embedding permission flags)
# USHORT magicNumber // Magic number for EOT file - 0x504C.
# ULONG unicodeRange1 // OS/2 Table ulUnicodeRange1
# ULONG unicodeRange2 // OS/2 Table ulUnicodeRange2
# ULONG unicodeRange3 // OS/2 Table ulUnicodeRange3
# ULONG unicodeRange4 // OS/2 Table ulUnicodeRange4
# ULONG codePageRange1 // OS/2 Table ulCodePageRange1
# ULONG codePageRange2 // OS/2 Table ulCodePageRange2
# ULONG checkSumAdjustment // head Table CheckSumAdjustment
# ULONG reserved[4] // Reserved - must be 0
# USHORT padding1 // Padding - must be 0
#
# EOT name records
#
# USHORT FamilyNameSize // Font family name size in bytes
# BYTE FamilyName[FamilyNameSize] // Font family name (name ID = 1), little-endian UTF-16
# USHORT Padding2 // Padding - must be 0
#
# USHORT StyleNameSize // Style name size in bytes
# BYTE StyleName[StyleNameSize] // Style name (name ID = 2), little-endian UTF-16
# USHORT Padding3 // Padding - must be 0
#
# USHORT VersionNameSize // Version name size in bytes
# bytes VersionName[VersionNameSize] // Version name (name ID = 5), little-endian UTF-16
# USHORT Padding4 // Padding - must be 0
#
# USHORT FullNameSize // Full name size in bytes
# BYTE FullName[FullNameSize] // Full name (name ID = 4), little-endian UTF-16
# USHORT Padding5 // Padding - must be 0
#
# USHORT RootStringSize // Root string size in bytes
# BYTE RootString[RootStringSize] // Root string, little-endian UTF-16
import optparse
import struct
class FontError(Exception):
"""Error related to font handling"""
pass
def multichar(str):
vals = struct.unpack('4B', str[:4])
return (vals[0] << 24) + (vals[1] << 16) + (vals[2] << 8) + vals[3]
def multicharval(v):
return struct.pack('4B', (v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF)
class EOT:
EOT_VERSION = 0x00020001
EOT_MAGIC_NUMBER = 0x504c
EOT_DEFAULT_CHARSET = 0x01
EOT_FAMILY_NAME_INDEX = 0 # order of names in variable portion of EOT header
EOT_STYLE_NAME_INDEX = 1
EOT_VERSION_NAME_INDEX = 2
EOT_FULL_NAME_INDEX = 3
EOT_NUM_NAMES = 4
EOT_HEADER_PACK = '<4L10B2BL2H7L18x'
class OpenType:
SFNT_CFF = multichar('OTTO') # Postscript CFF SFNT version
SFNT_TRUE = 0x10000 # Standard TrueType version
SFNT_APPLE = multichar('true') # Apple TrueType version
SFNT_UNPACK = '>I4H'
TABLE_DIR_UNPACK = '>4I'
TABLE_HEAD = multichar('head') # TrueType table tags
TABLE_NAME = multichar('name')
TABLE_OS2 = multichar('OS/2')
TABLE_GLYF = multichar('glyf')
TABLE_CFF = multichar('CFF ')
OS2_FSSELECTION_ITALIC = 0x1
OS2_UNPACK = '>4xH2xH22x10B4L4xH14x2L'
HEAD_UNPACK = '>8xL'
NAME_RECORD_UNPACK = '>6H'
NAME_ID_FAMILY = 1
NAME_ID_STYLE = 2
NAME_ID_UNIQUE = 3
NAME_ID_FULL = 4
NAME_ID_VERSION = 5
NAME_ID_POSTSCRIPT = 6
PLATFORM_ID_UNICODE = 0 # Mac OS uses this typically
PLATFORM_ID_MICROSOFT = 3
ENCODING_ID_MICROSOFT_UNICODEBMP = 1 # with Microsoft platformID BMP-only Unicode encoding
LANG_ID_MICROSOFT_EN_US = 0x0409 # with Microsoft platformID EN US lang code
def eotname(ttf):
i = ttf.rfind('.')
if i != -1:
ttf = ttf[:i]
return ttf + '.eotlite'
def readfont(f):
data = open(f, 'rb').read()
return data
def get_table_directory(data):
"""read the SFNT header and table directory"""
datalen = len(data)
sfntsize = struct.calcsize(OpenType.SFNT_UNPACK)
if sfntsize > datalen:
raise FontError, 'truncated font data'
sfntvers, numTables = struct.unpack(OpenType.SFNT_UNPACK, data[:sfntsize])[:2]
if sfntvers != OpenType.SFNT_CFF and sfntvers != OpenType.SFNT_TRUE:
raise FontError, 'invalid font type';
font = {}
font['version'] = sfntvers
font['numTables'] = numTables
# create set of offsets, lengths for tables
table_dir_size = struct.calcsize(OpenType.TABLE_DIR_UNPACK)
if sfntsize + table_dir_size * numTables > datalen:
raise FontError, 'truncated font data, table directory extends past end of data'
table_dir = {}
for i in range(0, numTables):
start = sfntsize + i * table_dir_size
end = start + table_dir_size
tag, check, bongo, dirlen = struct.unpack(OpenType.TABLE_DIR_UNPACK, data[start:end])
table_dir[tag] = {'offset': bongo, 'length': dirlen, 'checksum': check}
font['tableDir'] = table_dir
return font
def get_name_records(nametable):
"""reads through the name records within name table"""
name = {}
# read the header
headersize = 6
count, strOffset = struct.unpack('>2H', nametable[2:6])
namerecsize = struct.calcsize(OpenType.NAME_RECORD_UNPACK)
if count * namerecsize + headersize > len(nametable):
raise FontError, 'names exceed size of name table'
name['count'] = count
name['strOffset'] = strOffset
# read through the name records
namerecs = {}
for i in range(0, count):
start = headersize + i * namerecsize
end = start + namerecsize
platformID, encodingID, languageID, nameID, namelen, offset = struct.unpack(OpenType.NAME_RECORD_UNPACK, nametable[start:end])
if platformID != OpenType.PLATFORM_ID_MICROSOFT or \
encodingID != OpenType.ENCODING_ID_MICROSOFT_UNICODEBMP or \
languageID != OpenType.LANG_ID_MICROSOFT_EN_US:
continue
namerecs[nameID] = {'offset': offset, 'length': namelen}
name['namerecords'] = namerecs
return name
def make_eot_name_headers(fontdata, nameTableDir):
"""extracts names from the name table and generates the names header portion of the EOT header"""
nameoffset = nameTableDir['offset']
namelen = nameTableDir['length']
name = get_name_records(fontdata[nameoffset : nameoffset + namelen])
namestroffset = name['strOffset']
namerecs = name['namerecords']
eotnames = (OpenType.NAME_ID_FAMILY, OpenType.NAME_ID_STYLE, OpenType.NAME_ID_VERSION, OpenType.NAME_ID_FULL)
nameheaders = []
for nameid in eotnames:
if nameid in namerecs:
namerecord = namerecs[nameid]
noffset = namerecord['offset']
nlen = namerecord['length']
nformat = '%dH' % (nlen / 2) # length is in number of bytes
start = nameoffset + namestroffset + noffset
end = start + nlen
nstr = struct.unpack('>' + nformat, fontdata[start:end])
nameheaders.append(struct.pack('<H' + nformat + '2x', nlen, *nstr))
else:
nameheaders.append(struct.pack('4x')) # len = 0, padding = 0
return ''.join(nameheaders)
# just return a null-string (len = 0)
def make_root_string():
return struct.pack('2x')
def make_eot_header(fontdata):
"""given ttf font data produce an EOT header"""
fontDataSize = len(fontdata)
font = get_table_directory(fontdata)
# toss out .otf fonts, t2embed library doesn't support these
tableDir = font['tableDir']
# check for required tables
required = (OpenType.TABLE_HEAD, OpenType.TABLE_NAME, OpenType.TABLE_OS2)
for table in required:
if not (table in tableDir):
raise FontError, 'missing required table ' + multicharval(table)
# read name strings
# pull out data from individual tables to construct fixed header portion
# need to calculate eotSize before packing
version = EOT.EOT_VERSION
flags = 0
charset = EOT.EOT_DEFAULT_CHARSET
magicNumber = EOT.EOT_MAGIC_NUMBER
# read values from OS/2 table
os2Dir = tableDir[OpenType.TABLE_OS2]
os2offset = os2Dir['offset']
os2size = struct.calcsize(OpenType.OS2_UNPACK)
if os2size > os2Dir['length']:
raise FontError, 'OS/2 table invalid length'
os2fields = struct.unpack(OpenType.OS2_UNPACK, fontdata[os2offset : os2offset + os2size])
panose = []
urange = []
codepage = []
weight, fsType = os2fields[:2]
panose[:10] = os2fields[2:12]
urange[:4] = os2fields[12:16]
fsSelection = os2fields[16]
codepage[:2] = os2fields[17:19]
italic = fsSelection & OpenType.OS2_FSSELECTION_ITALIC
# read in values from head table
headDir = tableDir[OpenType.TABLE_HEAD]
headoffset = headDir['offset']
headsize = struct.calcsize(OpenType.HEAD_UNPACK)
if headsize > headDir['length']:
raise FontError, 'head table invalid length'
headfields = struct.unpack(OpenType.HEAD_UNPACK, fontdata[headoffset : headoffset + headsize])
checkSumAdjustment = headfields[0]
# make name headers
nameheaders = make_eot_name_headers(fontdata, tableDir[OpenType.TABLE_NAME])
rootstring = make_root_string()
# calculate the total eot size
eotSize = struct.calcsize(EOT.EOT_HEADER_PACK) + len(nameheaders) + len(rootstring) + fontDataSize
fixed = struct.pack(EOT.EOT_HEADER_PACK,
*([eotSize, fontDataSize, version, flags] + panose + [charset, italic] +
[weight, fsType, magicNumber] + urange + codepage + [checkSumAdjustment]))
return ''.join((fixed, nameheaders, rootstring))
def write_eot_font(eot, header, data):
open(eot,'wb').write(''.join((header, data)))
return
def main():
# deal with options
p = optparse.OptionParser()
p.add_option('--output', '-o', default="world")
options, args = p.parse_args()
# iterate over font files
for f in args:
data = readfont(f)
if len(data) == 0:
print 'Error reading %s' % f
else:
eot = eotname(f)
header = make_eot_header(data)
write_eot_font(eot, header, data)
if __name__ == '__main__':
main()

View File

@ -0,0 +1,173 @@
# Font generation script from FontCustom
# https://github.com/FontCustom/fontcustom/
# http://fontcustom.com/
import fontforge
import os
import md5
import subprocess
import tempfile
import json
import copy
SCRIPT_PATH = os.path.dirname(os.path.abspath(__file__))
INPUT_SVG_DIR = os.path.join(SCRIPT_PATH, '..', '..', 'src')
OUTPUT_FONT_DIR = os.path.join(SCRIPT_PATH, '..', '..', 'fonts')
MANIFEST_PATH = os.path.join(SCRIPT_PATH, '..', 'manifest.json')
BUILD_DATA_PATH = os.path.join(SCRIPT_PATH, '..', 'build_data.json')
AUTO_WIDTH = True
KERNING = 15
cp = 0xf100
m = md5.new()
f = fontforge.font()
f.encoding = 'UnicodeFull'
f.design_size = 16
f.em = 512
f.ascent = 448
f.descent = 64
manifest_file = open(MANIFEST_PATH, 'r')
manifest_data = json.loads(manifest_file.read())
manifest_file.close()
print "Load Manifest, Icons: %s" % ( len(manifest_data['icons']) )
build_data = copy.deepcopy(manifest_data)
build_data['icons'] = []
font_name = manifest_data['name']
m.update(font_name + ';')
m.update(manifest_data['prefix'] + ';')
for dirname, dirnames, filenames in os.walk(INPUT_SVG_DIR):
for filename in filenames:
name, ext = os.path.splitext(filename)
filePath = os.path.join(dirname, filename)
size = os.path.getsize(filePath)
if ext in ['.svg', '.eps']:
# see if this file is already in the manifest
chr_code = None
for ionicon in manifest_data['icons']:
if ionicon['name'] == name:
chr_code = ionicon['code']
break
if chr_code is None:
# this is a new src icon
print 'New Icon: \n - %s' % (name)
while True:
chr_code = '0x%x' % (cp)
already_exists = False
for ionicon in manifest_data['icons']:
if ionicon.get('code') == chr_code:
already_exists = True
cp += 1
chr_code = '0x%x' % (cp)
continue
if not already_exists:
break
print ' - %s' % chr_code
manifest_data['icons'].append({
'name': name,
'code': chr_code
})
build_data['icons'].append({
'name': name,
'code': chr_code
})
if ext in ['.svg']:
# hack removal of <switch> </switch> tags
svgfile = open(filePath, 'r+')
tmpsvgfile = tempfile.NamedTemporaryFile(suffix=ext, delete=False)
svgtext = svgfile.read()
svgfile.seek(0)
# replace the <switch> </switch> tags with 'nothing'
svgtext = svgtext.replace('<switch>', '')
svgtext = svgtext.replace('</switch>', '')
tmpsvgfile.file.write(svgtext)
svgfile.close()
tmpsvgfile.file.close()
filePath = tmpsvgfile.name
# end hack
m.update(name + str(size) + ';')
glyph = f.createChar( int(chr_code, 16) )
glyph.importOutlines(filePath)
# if we created a temporary file, let's clean it up
if tmpsvgfile:
os.unlink(tmpsvgfile.name)
# set glyph size explicitly or automatically depending on autowidth
if AUTO_WIDTH:
glyph.left_side_bearing = glyph.right_side_bearing = 0
glyph.round()
# resize glyphs if autowidth is enabled
if AUTO_WIDTH:
f.autoWidth(0, 0, 512)
fontfile = '%s/ionicons' % (OUTPUT_FONT_DIR)
build_hash = m.hexdigest()
if build_hash == manifest_data.get('build_hash'):
print "Source files unchanged, did not rebuild fonts"
else:
manifest_data['build_hash'] = build_hash
f.fontname = font_name
f.familyname = font_name
f.fullname = font_name
f.generate(fontfile + '.ttf')
f.generate(fontfile + '.svg')
# Fix SVG header for webkit
# from: https://github.com/fontello/font-builder/blob/master/bin/fontconvert.py
svgfile = open(fontfile + '.svg', 'r+')
svgtext = svgfile.read()
svgfile.seek(0)
svgfile.write(svgtext.replace('''<svg>''', '''<svg xmlns="http://www.w3.org/2000/svg">'''))
svgfile.close()
scriptPath = os.path.dirname(os.path.realpath(__file__))
try:
subprocess.Popen([scriptPath + '/sfnt2woff', fontfile + '.ttf'], stdout=subprocess.PIPE)
except OSError:
# If the local version of sfnt2woff fails (i.e., on Linux), try to use the
# global version. This allows us to avoid forcing OS X users to compile
# sfnt2woff from source, simplifying install.
subprocess.call(['sfnt2woff', fontfile + '.ttf'])
# eotlitetool.py script to generate IE7-compatible .eot fonts
subprocess.call('python ' + scriptPath + '/eotlitetool.py ' + fontfile + '.ttf -o ' + fontfile + '.eot', shell=True)
subprocess.call('mv ' + fontfile + '.eotlite ' + fontfile + '.eot', shell=True)
# Hint the TTF file
subprocess.call('ttfautohint -s -f -n ' + fontfile + '.ttf ' + fontfile + '-hinted.ttf > /dev/null 2>&1 && mv ' + fontfile + '-hinted.ttf ' + fontfile + '.ttf', shell=True)
manifest_data['icons'] = sorted(manifest_data['icons'], key=lambda k: k['name'])
build_data['icons'] = sorted(build_data['icons'], key=lambda k: k['name'])
print "Save Manifest, Icons: %s" % ( len(manifest_data['icons']) )
f = open(MANIFEST_PATH, 'w')
f.write( json.dumps(manifest_data, indent=2, separators=(',', ': ')) )
f.close()
print "Save Build, Icons: %s" % ( len(build_data['icons']) )
f = open(BUILD_DATA_PATH, 'w')
f.write( json.dumps(build_data, indent=2, separators=(',', ': ')) )
f.close()

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
{
"repo": "driftyco/ionicons",
"development": {},
"version": "2.0.0",
"styles": [
"css/ionicons.css"
],
"name": "Ionicons",
"dependencies": {},
"keywords": [],
"license": "MIT",
"fonts": [
"fonts/ionicons.eot",
"fonts/ionicons.svg",
"fonts/ionicons.ttf",
"fonts/ionicons.woff"
],
"description": "The premium icon font for Ionic Framework."
}

View File

@ -0,0 +1,36 @@
{
"name": "driftyco/ionicons",
"license": [
"MIT"
],
"extra": {},
"authors": [
{
"homepage": "https://twitter.com/benjsperry",
"role": "Designer",
"name": "Ben Sperry",
"email": "ben@drifty.com"
},
{
"homepage": "https://twitter.com/adamdbradley",
"role": "Developer",
"name": "Adam Bradley",
"email": "adam@drifty.com"
},
{
"homepage": "https://twitter.com/maxlynch",
"role": "Developer",
"name": "Max Lynch",
"email": "max@drifty.com"
}
],
"keywords": [
"fonts",
"icon font",
"icons",
"ionic",
"web font"
],
"homepage": "http://ionicons.com/",
"description": "The premium icon font for Ionic Framework."
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,27 @@
// Ionicons Font Path
// --------------------------
@font-face {
font-family: @ionicons-font-family;
src:url("@{ionicons-font-path}/ionicons.eot?v=@{ionicons-version}");
src:url("@{ionicons-font-path}/ionicons.eot?v=@{ionicons-version}#iefix") format("embedded-opentype"),
url("@{ionicons-font-path}/ionicons.ttf?v=@{ionicons-version}") format("truetype"),
url("@{ionicons-font-path}/ionicons.woff?v=@{ionicons-version}") format("woff"),
url("@{ionicons-font-path}/ionicons.svg?v=@{ionicons-version}#Ionicons") format("svg");
font-weight: normal;
font-style: normal;
}
.ion {
display: inline-block;
font-family: @ionicons-font-family;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
text-rendering: auto;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,747 @@
/*!
Ionicons, v2.0.0
Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
https://twitter.com/benjsperry https://twitter.com/ionicframework
MIT License: https://github.com/driftyco/ionicons
*/
// Ionicons Variables
// --------------------------
@ionicons-font-path: "../fonts";
@ionicons-font-family: "Ionicons";
@ionicons-version: "2.0.0";
@ionicons-prefix: ion-;
@ionicon-var-alert: "\f101";
@ionicon-var-alert-circled: "\f100";
@ionicon-var-android-add: "\f2c7";
@ionicon-var-android-add-circle: "\f359";
@ionicon-var-android-alarm-clock: "\f35a";
@ionicon-var-android-alert: "\f35b";
@ionicon-var-android-apps: "\f35c";
@ionicon-var-android-archive: "\f2c9";
@ionicon-var-android-arrow-back: "\f2ca";
@ionicon-var-android-arrow-down: "\f35d";
@ionicon-var-android-arrow-dropdown: "\f35f";
@ionicon-var-android-arrow-dropdown-circle: "\f35e";
@ionicon-var-android-arrow-dropleft: "\f361";
@ionicon-var-android-arrow-dropleft-circle: "\f360";
@ionicon-var-android-arrow-dropright: "\f363";
@ionicon-var-android-arrow-dropright-circle: "\f362";
@ionicon-var-android-arrow-dropup: "\f365";
@ionicon-var-android-arrow-dropup-circle: "\f364";
@ionicon-var-android-arrow-forward: "\f30f";
@ionicon-var-android-arrow-up: "\f366";
@ionicon-var-android-attach: "\f367";
@ionicon-var-android-bar: "\f368";
@ionicon-var-android-bicycle: "\f369";
@ionicon-var-android-boat: "\f36a";
@ionicon-var-android-bookmark: "\f36b";
@ionicon-var-android-bulb: "\f36c";
@ionicon-var-android-bus: "\f36d";
@ionicon-var-android-calendar: "\f2d1";
@ionicon-var-android-call: "\f2d2";
@ionicon-var-android-camera: "\f2d3";
@ionicon-var-android-cancel: "\f36e";
@ionicon-var-android-car: "\f36f";
@ionicon-var-android-cart: "\f370";
@ionicon-var-android-chat: "\f2d4";
@ionicon-var-android-checkbox: "\f374";
@ionicon-var-android-checkbox-blank: "\f371";
@ionicon-var-android-checkbox-outline: "\f373";
@ionicon-var-android-checkbox-outline-blank: "\f372";
@ionicon-var-android-checkmark-circle: "\f375";
@ionicon-var-android-clipboard: "\f376";
@ionicon-var-android-close: "\f2d7";
@ionicon-var-android-cloud: "\f37a";
@ionicon-var-android-cloud-circle: "\f377";
@ionicon-var-android-cloud-done: "\f378";
@ionicon-var-android-cloud-outline: "\f379";
@ionicon-var-android-color-palette: "\f37b";
@ionicon-var-android-compass: "\f37c";
@ionicon-var-android-contact: "\f2d8";
@ionicon-var-android-contacts: "\f2d9";
@ionicon-var-android-contract: "\f37d";
@ionicon-var-android-create: "\f37e";
@ionicon-var-android-delete: "\f37f";
@ionicon-var-android-desktop: "\f380";
@ionicon-var-android-document: "\f381";
@ionicon-var-android-done: "\f383";
@ionicon-var-android-done-all: "\f382";
@ionicon-var-android-download: "\f2dd";
@ionicon-var-android-drafts: "\f384";
@ionicon-var-android-exit: "\f385";
@ionicon-var-android-expand: "\f386";
@ionicon-var-android-favorite: "\f388";
@ionicon-var-android-favorite-outline: "\f387";
@ionicon-var-android-film: "\f389";
@ionicon-var-android-folder: "\f2e0";
@ionicon-var-android-folder-open: "\f38a";
@ionicon-var-android-funnel: "\f38b";
@ionicon-var-android-globe: "\f38c";
@ionicon-var-android-hand: "\f2e3";
@ionicon-var-android-hangout: "\f38d";
@ionicon-var-android-happy: "\f38e";
@ionicon-var-android-home: "\f38f";
@ionicon-var-android-image: "\f2e4";
@ionicon-var-android-laptop: "\f390";
@ionicon-var-android-list: "\f391";
@ionicon-var-android-locate: "\f2e9";
@ionicon-var-android-lock: "\f392";
@ionicon-var-android-mail: "\f2eb";
@ionicon-var-android-map: "\f393";
@ionicon-var-android-menu: "\f394";
@ionicon-var-android-microphone: "\f2ec";
@ionicon-var-android-microphone-off: "\f395";
@ionicon-var-android-more-horizontal: "\f396";
@ionicon-var-android-more-vertical: "\f397";
@ionicon-var-android-navigate: "\f398";
@ionicon-var-android-notifications: "\f39b";
@ionicon-var-android-notifications-none: "\f399";
@ionicon-var-android-notifications-off: "\f39a";
@ionicon-var-android-open: "\f39c";
@ionicon-var-android-options: "\f39d";
@ionicon-var-android-people: "\f39e";
@ionicon-var-android-person: "\f3a0";
@ionicon-var-android-person-add: "\f39f";
@ionicon-var-android-phone-landscape: "\f3a1";
@ionicon-var-android-phone-portrait: "\f3a2";
@ionicon-var-android-pin: "\f3a3";
@ionicon-var-android-plane: "\f3a4";
@ionicon-var-android-playstore: "\f2f0";
@ionicon-var-android-print: "\f3a5";
@ionicon-var-android-radio-button-off: "\f3a6";
@ionicon-var-android-radio-button-on: "\f3a7";
@ionicon-var-android-refresh: "\f3a8";
@ionicon-var-android-remove: "\f2f4";
@ionicon-var-android-remove-circle: "\f3a9";
@ionicon-var-android-restaurant: "\f3aa";
@ionicon-var-android-sad: "\f3ab";
@ionicon-var-android-search: "\f2f5";
@ionicon-var-android-send: "\f2f6";
@ionicon-var-android-settings: "\f2f7";
@ionicon-var-android-share: "\f2f8";
@ionicon-var-android-share-alt: "\f3ac";
@ionicon-var-android-star: "\f2fc";
@ionicon-var-android-star-half: "\f3ad";
@ionicon-var-android-star-outline: "\f3ae";
@ionicon-var-android-stopwatch: "\f2fd";
@ionicon-var-android-subway: "\f3af";
@ionicon-var-android-sunny: "\f3b0";
@ionicon-var-android-sync: "\f3b1";
@ionicon-var-android-textsms: "\f3b2";
@ionicon-var-android-time: "\f3b3";
@ionicon-var-android-train: "\f3b4";
@ionicon-var-android-unlock: "\f3b5";
@ionicon-var-android-upload: "\f3b6";
@ionicon-var-android-volume-down: "\f3b7";
@ionicon-var-android-volume-mute: "\f3b8";
@ionicon-var-android-volume-off: "\f3b9";
@ionicon-var-android-volume-up: "\f3ba";
@ionicon-var-android-walk: "\f3bb";
@ionicon-var-android-warning: "\f3bc";
@ionicon-var-android-watch: "\f3bd";
@ionicon-var-android-wifi: "\f305";
@ionicon-var-aperture: "\f313";
@ionicon-var-archive: "\f102";
@ionicon-var-arrow-down-a: "\f103";
@ionicon-var-arrow-down-b: "\f104";
@ionicon-var-arrow-down-c: "\f105";
@ionicon-var-arrow-expand: "\f25e";
@ionicon-var-arrow-graph-down-left: "\f25f";
@ionicon-var-arrow-graph-down-right: "\f260";
@ionicon-var-arrow-graph-up-left: "\f261";
@ionicon-var-arrow-graph-up-right: "\f262";
@ionicon-var-arrow-left-a: "\f106";
@ionicon-var-arrow-left-b: "\f107";
@ionicon-var-arrow-left-c: "\f108";
@ionicon-var-arrow-move: "\f263";
@ionicon-var-arrow-resize: "\f264";
@ionicon-var-arrow-return-left: "\f265";
@ionicon-var-arrow-return-right: "\f266";
@ionicon-var-arrow-right-a: "\f109";
@ionicon-var-arrow-right-b: "\f10a";
@ionicon-var-arrow-right-c: "\f10b";
@ionicon-var-arrow-shrink: "\f267";
@ionicon-var-arrow-swap: "\f268";
@ionicon-var-arrow-up-a: "\f10c";
@ionicon-var-arrow-up-b: "\f10d";
@ionicon-var-arrow-up-c: "\f10e";
@ionicon-var-asterisk: "\f314";
@ionicon-var-at: "\f10f";
@ionicon-var-backspace: "\f3bf";
@ionicon-var-backspace-outline: "\f3be";
@ionicon-var-bag: "\f110";
@ionicon-var-battery-charging: "\f111";
@ionicon-var-battery-empty: "\f112";
@ionicon-var-battery-full: "\f113";
@ionicon-var-battery-half: "\f114";
@ionicon-var-battery-low: "\f115";
@ionicon-var-beaker: "\f269";
@ionicon-var-beer: "\f26a";
@ionicon-var-bluetooth: "\f116";
@ionicon-var-bonfire: "\f315";
@ionicon-var-bookmark: "\f26b";
@ionicon-var-bowtie: "\f3c0";
@ionicon-var-briefcase: "\f26c";
@ionicon-var-bug: "\f2be";
@ionicon-var-calculator: "\f26d";
@ionicon-var-calendar: "\f117";
@ionicon-var-camera: "\f118";
@ionicon-var-card: "\f119";
@ionicon-var-cash: "\f316";
@ionicon-var-chatbox: "\f11b";
@ionicon-var-chatbox-working: "\f11a";
@ionicon-var-chatboxes: "\f11c";
@ionicon-var-chatbubble: "\f11e";
@ionicon-var-chatbubble-working: "\f11d";
@ionicon-var-chatbubbles: "\f11f";
@ionicon-var-checkmark: "\f122";
@ionicon-var-checkmark-circled: "\f120";
@ionicon-var-checkmark-round: "\f121";
@ionicon-var-chevron-down: "\f123";
@ionicon-var-chevron-left: "\f124";
@ionicon-var-chevron-right: "\f125";
@ionicon-var-chevron-up: "\f126";
@ionicon-var-clipboard: "\f127";
@ionicon-var-clock: "\f26e";
@ionicon-var-close: "\f12a";
@ionicon-var-close-circled: "\f128";
@ionicon-var-close-round: "\f129";
@ionicon-var-closed-captioning: "\f317";
@ionicon-var-cloud: "\f12b";
@ionicon-var-code: "\f271";
@ionicon-var-code-download: "\f26f";
@ionicon-var-code-working: "\f270";
@ionicon-var-coffee: "\f272";
@ionicon-var-compass: "\f273";
@ionicon-var-compose: "\f12c";
@ionicon-var-connection-bars: "\f274";
@ionicon-var-contrast: "\f275";
@ionicon-var-crop: "\f3c1";
@ionicon-var-cube: "\f318";
@ionicon-var-disc: "\f12d";
@ionicon-var-document: "\f12f";
@ionicon-var-document-text: "\f12e";
@ionicon-var-drag: "\f130";
@ionicon-var-earth: "\f276";
@ionicon-var-easel: "\f3c2";
@ionicon-var-edit: "\f2bf";
@ionicon-var-egg: "\f277";
@ionicon-var-eject: "\f131";
@ionicon-var-email: "\f132";
@ionicon-var-email-unread: "\f3c3";
@ionicon-var-erlenmeyer-flask: "\f3c5";
@ionicon-var-erlenmeyer-flask-bubbles: "\f3c4";
@ionicon-var-eye: "\f133";
@ionicon-var-eye-disabled: "\f306";
@ionicon-var-female: "\f278";
@ionicon-var-filing: "\f134";
@ionicon-var-film-marker: "\f135";
@ionicon-var-fireball: "\f319";
@ionicon-var-flag: "\f279";
@ionicon-var-flame: "\f31a";
@ionicon-var-flash: "\f137";
@ionicon-var-flash-off: "\f136";
@ionicon-var-folder: "\f139";
@ionicon-var-fork: "\f27a";
@ionicon-var-fork-repo: "\f2c0";
@ionicon-var-forward: "\f13a";
@ionicon-var-funnel: "\f31b";
@ionicon-var-gear-a: "\f13d";
@ionicon-var-gear-b: "\f13e";
@ionicon-var-grid: "\f13f";
@ionicon-var-hammer: "\f27b";
@ionicon-var-happy: "\f31c";
@ionicon-var-happy-outline: "\f3c6";
@ionicon-var-headphone: "\f140";
@ionicon-var-heart: "\f141";
@ionicon-var-heart-broken: "\f31d";
@ionicon-var-help: "\f143";
@ionicon-var-help-buoy: "\f27c";
@ionicon-var-help-circled: "\f142";
@ionicon-var-home: "\f144";
@ionicon-var-icecream: "\f27d";
@ionicon-var-image: "\f147";
@ionicon-var-images: "\f148";
@ionicon-var-information: "\f14a";
@ionicon-var-information-circled: "\f149";
@ionicon-var-ionic: "\f14b";
@ionicon-var-ios-alarm: "\f3c8";
@ionicon-var-ios-alarm-outline: "\f3c7";
@ionicon-var-ios-albums: "\f3ca";
@ionicon-var-ios-albums-outline: "\f3c9";
@ionicon-var-ios-americanfootball: "\f3cc";
@ionicon-var-ios-americanfootball-outline: "\f3cb";
@ionicon-var-ios-analytics: "\f3ce";
@ionicon-var-ios-analytics-outline: "\f3cd";
@ionicon-var-ios-arrow-back: "\f3cf";
@ionicon-var-ios-arrow-down: "\f3d0";
@ionicon-var-ios-arrow-forward: "\f3d1";
@ionicon-var-ios-arrow-left: "\f3d2";
@ionicon-var-ios-arrow-right: "\f3d3";
@ionicon-var-ios-arrow-thin-down: "\f3d4";
@ionicon-var-ios-arrow-thin-left: "\f3d5";
@ionicon-var-ios-arrow-thin-right: "\f3d6";
@ionicon-var-ios-arrow-thin-up: "\f3d7";
@ionicon-var-ios-arrow-up: "\f3d8";
@ionicon-var-ios-at: "\f3da";
@ionicon-var-ios-at-outline: "\f3d9";
@ionicon-var-ios-barcode: "\f3dc";
@ionicon-var-ios-barcode-outline: "\f3db";
@ionicon-var-ios-baseball: "\f3de";
@ionicon-var-ios-baseball-outline: "\f3dd";
@ionicon-var-ios-basketball: "\f3e0";
@ionicon-var-ios-basketball-outline: "\f3df";
@ionicon-var-ios-bell: "\f3e2";
@ionicon-var-ios-bell-outline: "\f3e1";
@ionicon-var-ios-body: "\f3e4";
@ionicon-var-ios-body-outline: "\f3e3";
@ionicon-var-ios-bolt: "\f3e6";
@ionicon-var-ios-bolt-outline: "\f3e5";
@ionicon-var-ios-book: "\f3e8";
@ionicon-var-ios-book-outline: "\f3e7";
@ionicon-var-ios-bookmarks: "\f3ea";
@ionicon-var-ios-bookmarks-outline: "\f3e9";
@ionicon-var-ios-box: "\f3ec";
@ionicon-var-ios-box-outline: "\f3eb";
@ionicon-var-ios-briefcase: "\f3ee";
@ionicon-var-ios-briefcase-outline: "\f3ed";
@ionicon-var-ios-browsers: "\f3f0";
@ionicon-var-ios-browsers-outline: "\f3ef";
@ionicon-var-ios-calculator: "\f3f2";
@ionicon-var-ios-calculator-outline: "\f3f1";
@ionicon-var-ios-calendar: "\f3f4";
@ionicon-var-ios-calendar-outline: "\f3f3";
@ionicon-var-ios-camera: "\f3f6";
@ionicon-var-ios-camera-outline: "\f3f5";
@ionicon-var-ios-cart: "\f3f8";
@ionicon-var-ios-cart-outline: "\f3f7";
@ionicon-var-ios-chatboxes: "\f3fa";
@ionicon-var-ios-chatboxes-outline: "\f3f9";
@ionicon-var-ios-chatbubble: "\f3fc";
@ionicon-var-ios-chatbubble-outline: "\f3fb";
@ionicon-var-ios-checkmark: "\f3ff";
@ionicon-var-ios-checkmark-empty: "\f3fd";
@ionicon-var-ios-checkmark-outline: "\f3fe";
@ionicon-var-ios-circle-filled: "\f400";
@ionicon-var-ios-circle-outline: "\f401";
@ionicon-var-ios-clock: "\f403";
@ionicon-var-ios-clock-outline: "\f402";
@ionicon-var-ios-close: "\f406";
@ionicon-var-ios-close-empty: "\f404";
@ionicon-var-ios-close-outline: "\f405";
@ionicon-var-ios-cloud: "\f40c";
@ionicon-var-ios-cloud-download: "\f408";
@ionicon-var-ios-cloud-download-outline: "\f407";
@ionicon-var-ios-cloud-outline: "\f409";
@ionicon-var-ios-cloud-upload: "\f40b";
@ionicon-var-ios-cloud-upload-outline: "\f40a";
@ionicon-var-ios-cloudy: "\f410";
@ionicon-var-ios-cloudy-night: "\f40e";
@ionicon-var-ios-cloudy-night-outline: "\f40d";
@ionicon-var-ios-cloudy-outline: "\f40f";
@ionicon-var-ios-cog: "\f412";
@ionicon-var-ios-cog-outline: "\f411";
@ionicon-var-ios-color-filter: "\f414";
@ionicon-var-ios-color-filter-outline: "\f413";
@ionicon-var-ios-color-wand: "\f416";
@ionicon-var-ios-color-wand-outline: "\f415";
@ionicon-var-ios-compose: "\f418";
@ionicon-var-ios-compose-outline: "\f417";
@ionicon-var-ios-contact: "\f41a";
@ionicon-var-ios-contact-outline: "\f419";
@ionicon-var-ios-copy: "\f41c";
@ionicon-var-ios-copy-outline: "\f41b";
@ionicon-var-ios-crop: "\f41e";
@ionicon-var-ios-crop-strong: "\f41d";
@ionicon-var-ios-download: "\f420";
@ionicon-var-ios-download-outline: "\f41f";
@ionicon-var-ios-drag: "\f421";
@ionicon-var-ios-email: "\f423";
@ionicon-var-ios-email-outline: "\f422";
@ionicon-var-ios-eye: "\f425";
@ionicon-var-ios-eye-outline: "\f424";
@ionicon-var-ios-fastforward: "\f427";
@ionicon-var-ios-fastforward-outline: "\f426";
@ionicon-var-ios-filing: "\f429";
@ionicon-var-ios-filing-outline: "\f428";
@ionicon-var-ios-film: "\f42b";
@ionicon-var-ios-film-outline: "\f42a";
@ionicon-var-ios-flag: "\f42d";
@ionicon-var-ios-flag-outline: "\f42c";
@ionicon-var-ios-flame: "\f42f";
@ionicon-var-ios-flame-outline: "\f42e";
@ionicon-var-ios-flask: "\f431";
@ionicon-var-ios-flask-outline: "\f430";
@ionicon-var-ios-flower: "\f433";
@ionicon-var-ios-flower-outline: "\f432";
@ionicon-var-ios-folder: "\f435";
@ionicon-var-ios-folder-outline: "\f434";
@ionicon-var-ios-football: "\f437";
@ionicon-var-ios-football-outline: "\f436";
@ionicon-var-ios-game-controller-a: "\f439";
@ionicon-var-ios-game-controller-a-outline: "\f438";
@ionicon-var-ios-game-controller-b: "\f43b";
@ionicon-var-ios-game-controller-b-outline: "\f43a";
@ionicon-var-ios-gear: "\f43d";
@ionicon-var-ios-gear-outline: "\f43c";
@ionicon-var-ios-glasses: "\f43f";
@ionicon-var-ios-glasses-outline: "\f43e";
@ionicon-var-ios-grid-view: "\f441";
@ionicon-var-ios-grid-view-outline: "\f440";
@ionicon-var-ios-heart: "\f443";
@ionicon-var-ios-heart-outline: "\f442";
@ionicon-var-ios-help: "\f446";
@ionicon-var-ios-help-empty: "\f444";
@ionicon-var-ios-help-outline: "\f445";
@ionicon-var-ios-home: "\f448";
@ionicon-var-ios-home-outline: "\f447";
@ionicon-var-ios-infinite: "\f44a";
@ionicon-var-ios-infinite-outline: "\f449";
@ionicon-var-ios-information: "\f44d";
@ionicon-var-ios-information-empty: "\f44b";
@ionicon-var-ios-information-outline: "\f44c";
@ionicon-var-ios-ionic-outline: "\f44e";
@ionicon-var-ios-keypad: "\f450";
@ionicon-var-ios-keypad-outline: "\f44f";
@ionicon-var-ios-lightbulb: "\f452";
@ionicon-var-ios-lightbulb-outline: "\f451";
@ionicon-var-ios-list: "\f454";
@ionicon-var-ios-list-outline: "\f453";
@ionicon-var-ios-location: "\f456";
@ionicon-var-ios-location-outline: "\f455";
@ionicon-var-ios-locked: "\f458";
@ionicon-var-ios-locked-outline: "\f457";
@ionicon-var-ios-loop: "\f45a";
@ionicon-var-ios-loop-strong: "\f459";
@ionicon-var-ios-medical: "\f45c";
@ionicon-var-ios-medical-outline: "\f45b";
@ionicon-var-ios-medkit: "\f45e";
@ionicon-var-ios-medkit-outline: "\f45d";
@ionicon-var-ios-mic: "\f461";
@ionicon-var-ios-mic-off: "\f45f";
@ionicon-var-ios-mic-outline: "\f460";
@ionicon-var-ios-minus: "\f464";
@ionicon-var-ios-minus-empty: "\f462";
@ionicon-var-ios-minus-outline: "\f463";
@ionicon-var-ios-monitor: "\f466";
@ionicon-var-ios-monitor-outline: "\f465";
@ionicon-var-ios-moon: "\f468";
@ionicon-var-ios-moon-outline: "\f467";
@ionicon-var-ios-more: "\f46a";
@ionicon-var-ios-more-outline: "\f469";
@ionicon-var-ios-musical-note: "\f46b";
@ionicon-var-ios-musical-notes: "\f46c";
@ionicon-var-ios-navigate: "\f46e";
@ionicon-var-ios-navigate-outline: "\f46d";
@ionicon-var-ios-nutrition: "\f470";
@ionicon-var-ios-nutrition-outline: "\f46f";
@ionicon-var-ios-paper: "\f472";
@ionicon-var-ios-paper-outline: "\f471";
@ionicon-var-ios-paperplane: "\f474";
@ionicon-var-ios-paperplane-outline: "\f473";
@ionicon-var-ios-partlysunny: "\f476";
@ionicon-var-ios-partlysunny-outline: "\f475";
@ionicon-var-ios-pause: "\f478";
@ionicon-var-ios-pause-outline: "\f477";
@ionicon-var-ios-paw: "\f47a";
@ionicon-var-ios-paw-outline: "\f479";
@ionicon-var-ios-people: "\f47c";
@ionicon-var-ios-people-outline: "\f47b";
@ionicon-var-ios-person: "\f47e";
@ionicon-var-ios-person-outline: "\f47d";
@ionicon-var-ios-personadd: "\f480";
@ionicon-var-ios-personadd-outline: "\f47f";
@ionicon-var-ios-photos: "\f482";
@ionicon-var-ios-photos-outline: "\f481";
@ionicon-var-ios-pie: "\f484";
@ionicon-var-ios-pie-outline: "\f483";
@ionicon-var-ios-pint: "\f486";
@ionicon-var-ios-pint-outline: "\f485";
@ionicon-var-ios-play: "\f488";
@ionicon-var-ios-play-outline: "\f487";
@ionicon-var-ios-plus: "\f48b";
@ionicon-var-ios-plus-empty: "\f489";
@ionicon-var-ios-plus-outline: "\f48a";
@ionicon-var-ios-pricetag: "\f48d";
@ionicon-var-ios-pricetag-outline: "\f48c";
@ionicon-var-ios-pricetags: "\f48f";
@ionicon-var-ios-pricetags-outline: "\f48e";
@ionicon-var-ios-printer: "\f491";
@ionicon-var-ios-printer-outline: "\f490";
@ionicon-var-ios-pulse: "\f493";
@ionicon-var-ios-pulse-strong: "\f492";
@ionicon-var-ios-rainy: "\f495";
@ionicon-var-ios-rainy-outline: "\f494";
@ionicon-var-ios-recording: "\f497";
@ionicon-var-ios-recording-outline: "\f496";
@ionicon-var-ios-redo: "\f499";
@ionicon-var-ios-redo-outline: "\f498";
@ionicon-var-ios-refresh: "\f49c";
@ionicon-var-ios-refresh-empty: "\f49a";
@ionicon-var-ios-refresh-outline: "\f49b";
@ionicon-var-ios-reload: "\f49d";
@ionicon-var-ios-reverse-camera: "\f49f";
@ionicon-var-ios-reverse-camera-outline: "\f49e";
@ionicon-var-ios-rewind: "\f4a1";
@ionicon-var-ios-rewind-outline: "\f4a0";
@ionicon-var-ios-rose: "\f4a3";
@ionicon-var-ios-rose-outline: "\f4a2";
@ionicon-var-ios-search: "\f4a5";
@ionicon-var-ios-search-strong: "\f4a4";
@ionicon-var-ios-settings: "\f4a7";
@ionicon-var-ios-settings-strong: "\f4a6";
@ionicon-var-ios-shuffle: "\f4a9";
@ionicon-var-ios-shuffle-strong: "\f4a8";
@ionicon-var-ios-skipbackward: "\f4ab";
@ionicon-var-ios-skipbackward-outline: "\f4aa";
@ionicon-var-ios-skipforward: "\f4ad";
@ionicon-var-ios-skipforward-outline: "\f4ac";
@ionicon-var-ios-snowy: "\f4ae";
@ionicon-var-ios-speedometer: "\f4b0";
@ionicon-var-ios-speedometer-outline: "\f4af";
@ionicon-var-ios-star: "\f4b3";
@ionicon-var-ios-star-half: "\f4b1";
@ionicon-var-ios-star-outline: "\f4b2";
@ionicon-var-ios-stopwatch: "\f4b5";
@ionicon-var-ios-stopwatch-outline: "\f4b4";
@ionicon-var-ios-sunny: "\f4b7";
@ionicon-var-ios-sunny-outline: "\f4b6";
@ionicon-var-ios-telephone: "\f4b9";
@ionicon-var-ios-telephone-outline: "\f4b8";
@ionicon-var-ios-tennisball: "\f4bb";
@ionicon-var-ios-tennisball-outline: "\f4ba";
@ionicon-var-ios-thunderstorm: "\f4bd";
@ionicon-var-ios-thunderstorm-outline: "\f4bc";
@ionicon-var-ios-time: "\f4bf";
@ionicon-var-ios-time-outline: "\f4be";
@ionicon-var-ios-timer: "\f4c1";
@ionicon-var-ios-timer-outline: "\f4c0";
@ionicon-var-ios-toggle: "\f4c3";
@ionicon-var-ios-toggle-outline: "\f4c2";
@ionicon-var-ios-trash: "\f4c5";
@ionicon-var-ios-trash-outline: "\f4c4";
@ionicon-var-ios-undo: "\f4c7";
@ionicon-var-ios-undo-outline: "\f4c6";
@ionicon-var-ios-unlocked: "\f4c9";
@ionicon-var-ios-unlocked-outline: "\f4c8";
@ionicon-var-ios-upload: "\f4cb";
@ionicon-var-ios-upload-outline: "\f4ca";
@ionicon-var-ios-videocam: "\f4cd";
@ionicon-var-ios-videocam-outline: "\f4cc";
@ionicon-var-ios-volume-high: "\f4ce";
@ionicon-var-ios-volume-low: "\f4cf";
@ionicon-var-ios-wineglass: "\f4d1";
@ionicon-var-ios-wineglass-outline: "\f4d0";
@ionicon-var-ios-world: "\f4d3";
@ionicon-var-ios-world-outline: "\f4d2";
@ionicon-var-ipad: "\f1f9";
@ionicon-var-iphone: "\f1fa";
@ionicon-var-ipod: "\f1fb";
@ionicon-var-jet: "\f295";
@ionicon-var-key: "\f296";
@ionicon-var-knife: "\f297";
@ionicon-var-laptop: "\f1fc";
@ionicon-var-leaf: "\f1fd";
@ionicon-var-levels: "\f298";
@ionicon-var-lightbulb: "\f299";
@ionicon-var-link: "\f1fe";
@ionicon-var-load-a: "\f29a";
@ionicon-var-load-b: "\f29b";
@ionicon-var-load-c: "\f29c";
@ionicon-var-load-d: "\f29d";
@ionicon-var-location: "\f1ff";
@ionicon-var-lock-combination: "\f4d4";
@ionicon-var-locked: "\f200";
@ionicon-var-log-in: "\f29e";
@ionicon-var-log-out: "\f29f";
@ionicon-var-loop: "\f201";
@ionicon-var-magnet: "\f2a0";
@ionicon-var-male: "\f2a1";
@ionicon-var-man: "\f202";
@ionicon-var-map: "\f203";
@ionicon-var-medkit: "\f2a2";
@ionicon-var-merge: "\f33f";
@ionicon-var-mic-a: "\f204";
@ionicon-var-mic-b: "\f205";
@ionicon-var-mic-c: "\f206";
@ionicon-var-minus: "\f209";
@ionicon-var-minus-circled: "\f207";
@ionicon-var-minus-round: "\f208";
@ionicon-var-model-s: "\f2c1";
@ionicon-var-monitor: "\f20a";
@ionicon-var-more: "\f20b";
@ionicon-var-mouse: "\f340";
@ionicon-var-music-note: "\f20c";
@ionicon-var-navicon: "\f20e";
@ionicon-var-navicon-round: "\f20d";
@ionicon-var-navigate: "\f2a3";
@ionicon-var-network: "\f341";
@ionicon-var-no-smoking: "\f2c2";
@ionicon-var-nuclear: "\f2a4";
@ionicon-var-outlet: "\f342";
@ionicon-var-paintbrush: "\f4d5";
@ionicon-var-paintbucket: "\f4d6";
@ionicon-var-paper-airplane: "\f2c3";
@ionicon-var-paperclip: "\f20f";
@ionicon-var-pause: "\f210";
@ionicon-var-person: "\f213";
@ionicon-var-person-add: "\f211";
@ionicon-var-person-stalker: "\f212";
@ionicon-var-pie-graph: "\f2a5";
@ionicon-var-pin: "\f2a6";
@ionicon-var-pinpoint: "\f2a7";
@ionicon-var-pizza: "\f2a8";
@ionicon-var-plane: "\f214";
@ionicon-var-planet: "\f343";
@ionicon-var-play: "\f215";
@ionicon-var-playstation: "\f30a";
@ionicon-var-plus: "\f218";
@ionicon-var-plus-circled: "\f216";
@ionicon-var-plus-round: "\f217";
@ionicon-var-podium: "\f344";
@ionicon-var-pound: "\f219";
@ionicon-var-power: "\f2a9";
@ionicon-var-pricetag: "\f2aa";
@ionicon-var-pricetags: "\f2ab";
@ionicon-var-printer: "\f21a";
@ionicon-var-pull-request: "\f345";
@ionicon-var-qr-scanner: "\f346";
@ionicon-var-quote: "\f347";
@ionicon-var-radio-waves: "\f2ac";
@ionicon-var-record: "\f21b";
@ionicon-var-refresh: "\f21c";
@ionicon-var-reply: "\f21e";
@ionicon-var-reply-all: "\f21d";
@ionicon-var-ribbon-a: "\f348";
@ionicon-var-ribbon-b: "\f349";
@ionicon-var-sad: "\f34a";
@ionicon-var-sad-outline: "\f4d7";
@ionicon-var-scissors: "\f34b";
@ionicon-var-search: "\f21f";
@ionicon-var-settings: "\f2ad";
@ionicon-var-share: "\f220";
@ionicon-var-shuffle: "\f221";
@ionicon-var-skip-backward: "\f222";
@ionicon-var-skip-forward: "\f223";
@ionicon-var-social-android: "\f225";
@ionicon-var-social-android-outline: "\f224";
@ionicon-var-social-angular: "\f4d9";
@ionicon-var-social-angular-outline: "\f4d8";
@ionicon-var-social-apple: "\f227";
@ionicon-var-social-apple-outline: "\f226";
@ionicon-var-social-bitcoin: "\f2af";
@ionicon-var-social-bitcoin-outline: "\f2ae";
@ionicon-var-social-buffer: "\f229";
@ionicon-var-social-buffer-outline: "\f228";
@ionicon-var-social-chrome: "\f4db";
@ionicon-var-social-chrome-outline: "\f4da";
@ionicon-var-social-codepen: "\f4dd";
@ionicon-var-social-codepen-outline: "\f4dc";
@ionicon-var-social-css3: "\f4df";
@ionicon-var-social-css3-outline: "\f4de";
@ionicon-var-social-designernews: "\f22b";
@ionicon-var-social-designernews-outline: "\f22a";
@ionicon-var-social-dribbble: "\f22d";
@ionicon-var-social-dribbble-outline: "\f22c";
@ionicon-var-social-dropbox: "\f22f";
@ionicon-var-social-dropbox-outline: "\f22e";
@ionicon-var-social-euro: "\f4e1";
@ionicon-var-social-euro-outline: "\f4e0";
@ionicon-var-social-facebook: "\f231";
@ionicon-var-social-facebook-outline: "\f230";
@ionicon-var-social-foursquare: "\f34d";
@ionicon-var-social-foursquare-outline: "\f34c";
@ionicon-var-social-freebsd-devil: "\f2c4";
@ionicon-var-social-github: "\f233";
@ionicon-var-social-github-outline: "\f232";
@ionicon-var-social-google: "\f34f";
@ionicon-var-social-google-outline: "\f34e";
@ionicon-var-social-googleplus: "\f235";
@ionicon-var-social-googleplus-outline: "\f234";
@ionicon-var-social-hackernews: "\f237";
@ionicon-var-social-hackernews-outline: "\f236";
@ionicon-var-social-html5: "\f4e3";
@ionicon-var-social-html5-outline: "\f4e2";
@ionicon-var-social-instagram: "\f351";
@ionicon-var-social-instagram-outline: "\f350";
@ionicon-var-social-javascript: "\f4e5";
@ionicon-var-social-javascript-outline: "\f4e4";
@ionicon-var-social-linkedin: "\f239";
@ionicon-var-social-linkedin-outline: "\f238";
@ionicon-var-social-markdown: "\f4e6";
@ionicon-var-social-nodejs: "\f4e7";
@ionicon-var-social-octocat: "\f4e8";
@ionicon-var-social-pinterest: "\f2b1";
@ionicon-var-social-pinterest-outline: "\f2b0";
@ionicon-var-social-python: "\f4e9";
@ionicon-var-social-reddit: "\f23b";
@ionicon-var-social-reddit-outline: "\f23a";
@ionicon-var-social-rss: "\f23d";
@ionicon-var-social-rss-outline: "\f23c";
@ionicon-var-social-sass: "\f4ea";
@ionicon-var-social-skype: "\f23f";
@ionicon-var-social-skype-outline: "\f23e";
@ionicon-var-social-snapchat: "\f4ec";
@ionicon-var-social-snapchat-outline: "\f4eb";
@ionicon-var-social-tumblr: "\f241";
@ionicon-var-social-tumblr-outline: "\f240";
@ionicon-var-social-tux: "\f2c5";
@ionicon-var-social-twitch: "\f4ee";
@ionicon-var-social-twitch-outline: "\f4ed";
@ionicon-var-social-twitter: "\f243";
@ionicon-var-social-twitter-outline: "\f242";
@ionicon-var-social-usd: "\f353";
@ionicon-var-social-usd-outline: "\f352";
@ionicon-var-social-vimeo: "\f245";
@ionicon-var-social-vimeo-outline: "\f244";
@ionicon-var-social-whatsapp: "\f4f0";
@ionicon-var-social-whatsapp-outline: "\f4ef";
@ionicon-var-social-windows: "\f247";
@ionicon-var-social-windows-outline: "\f246";
@ionicon-var-social-wordpress: "\f249";
@ionicon-var-social-wordpress-outline: "\f248";
@ionicon-var-social-yahoo: "\f24b";
@ionicon-var-social-yahoo-outline: "\f24a";
@ionicon-var-social-yen: "\f4f2";
@ionicon-var-social-yen-outline: "\f4f1";
@ionicon-var-social-youtube: "\f24d";
@ionicon-var-social-youtube-outline: "\f24c";
@ionicon-var-soup-can: "\f4f4";
@ionicon-var-soup-can-outline: "\f4f3";
@ionicon-var-speakerphone: "\f2b2";
@ionicon-var-speedometer: "\f2b3";
@ionicon-var-spoon: "\f2b4";
@ionicon-var-star: "\f24e";
@ionicon-var-stats-bars: "\f2b5";
@ionicon-var-steam: "\f30b";
@ionicon-var-stop: "\f24f";
@ionicon-var-thermometer: "\f2b6";
@ionicon-var-thumbsdown: "\f250";
@ionicon-var-thumbsup: "\f251";
@ionicon-var-toggle: "\f355";
@ionicon-var-toggle-filled: "\f354";
@ionicon-var-transgender: "\f4f5";
@ionicon-var-trash-a: "\f252";
@ionicon-var-trash-b: "\f253";
@ionicon-var-trophy: "\f356";
@ionicon-var-tshirt: "\f4f7";
@ionicon-var-tshirt-outline: "\f4f6";
@ionicon-var-umbrella: "\f2b7";
@ionicon-var-university: "\f357";
@ionicon-var-unlocked: "\f254";
@ionicon-var-upload: "\f255";
@ionicon-var-usb: "\f2b8";
@ionicon-var-videocamera: "\f256";
@ionicon-var-volume-high: "\f257";
@ionicon-var-volume-low: "\f258";
@ionicon-var-volume-medium: "\f259";
@ionicon-var-volume-mute: "\f25a";
@ionicon-var-wand: "\f358";
@ionicon-var-waterdrop: "\f25b";
@ionicon-var-wifi: "\f25c";
@ionicon-var-wineglass: "\f2b9";
@ionicon-var-woman: "\f25d";
@ionicon-var-wrench: "\f2ba";
@ionicon-var-xbox: "\f30c";

View File

@ -0,0 +1,3 @@
@import "_ionicons-variables";
@import "_ionicons-font";
@import "_ionicons-icons";

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 849 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

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