Skip to content

Commit 9a9b234

Browse files
committed
text: Bundle 'Source Code Pro' font into the app
Assets and license downloaded from https://github.com/adobe-fonts/source-code-pro/tree/d3f1a5962 , so it's version 2.042 for upright, and version 1.062 for italic. We'll probably want to bundle more fonts into the app, like Source Sans 3, which we use for most text in Zulip web. But now at least we can see the process works! :) Fixes: #64
1 parent 02fd47c commit 9a9b234

File tree

7 files changed

+135
-41
lines changed

7 files changed

+135
-41
lines changed

assets/Source_Code_Pro/LICENSE.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
© 2023 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.
2+
3+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
4+
5+
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
6+
7+
8+
-----------------------------------------------------------
9+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10+
-----------------------------------------------------------
11+
12+
PREAMBLE
13+
The goals of the Open Font License (OFL) are to stimulate worldwide
14+
development of collaborative font projects, to support the font creation
15+
efforts of academic and linguistic communities, and to provide a free and
16+
open framework in which fonts may be shared and improved in partnership
17+
with others.
18+
19+
The OFL allows the licensed fonts to be used, studied, modified and
20+
redistributed freely as long as they are not sold by themselves. The
21+
fonts, including any derivative works, can be bundled, embedded,
22+
redistributed and/or sold with any software provided that any reserved
23+
names are not used by derivative works. The fonts and derivatives,
24+
however, cannot be released under any other type of license. The
25+
requirement for fonts to remain under this license does not apply
26+
to any document created using the fonts or their derivatives.
27+
28+
DEFINITIONS
29+
"Font Software" refers to the set of files released by the Copyright
30+
Holder(s) under this license and clearly marked as such. This may
31+
include source files, build scripts and documentation.
32+
33+
"Reserved Font Name" refers to any names specified as such after the
34+
copyright statement(s).
35+
36+
"Original Version" refers to the collection of Font Software components as
37+
distributed by the Copyright Holder(s).
38+
39+
"Modified Version" refers to any derivative made by adding to, deleting,
40+
or substituting -- in part or in whole -- any of the components of the
41+
Original Version, by changing formats or by porting the Font Software to a
42+
new environment.
43+
44+
"Author" refers to any designer, engineer, programmer, technical
45+
writer or other person who contributed to the Font Software.
46+
47+
PERMISSION & CONDITIONS
48+
Permission is hereby granted, free of charge, to any person obtaining
49+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
50+
redistribute, and sell modified and unmodified copies of the Font
51+
Software, subject to the following conditions:
52+
53+
1) Neither the Font Software nor any of its individual components,
54+
in Original or Modified Versions, may be sold by itself.
55+
56+
2) Original or Modified Versions of the Font Software may be bundled,
57+
redistributed and/or sold with any software, provided that each copy
58+
contains the above copyright notice and this license. These can be
59+
included either as stand-alone text files, human-readable headers or
60+
in the appropriate machine-readable metadata fields within text or
61+
binary files as long as those fields can be easily viewed by the user.
62+
63+
3) No Modified Version of the Font Software may use the Reserved Font
64+
Name(s) unless explicit written permission is granted by the corresponding
65+
Copyright Holder. This restriction only applies to the primary font name as
66+
presented to the users.
67+
68+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69+
Software shall not be used to promote, endorse or advertise any
70+
Modified Version, except to acknowledge the contribution(s) of the
71+
Copyright Holder(s) and the Author(s) or with their explicit written
72+
permission.
73+
74+
5) The Font Software, modified or unmodified, in part or in whole,
75+
must be distributed entirely under this license, and must not be
76+
distributed under any other license. The requirement for fonts to
77+
remain under this license does not apply to any document created
78+
using the Font Software.
79+
80+
TERMINATION
81+
This license becomes null and void if any of the above conditions are
82+
not met.
83+
84+
DISCLAIMER
85+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93+
OTHER DEALINGS IN THE FONT SOFTWARE.
120 KB
Binary file not shown.
Binary file not shown.

lib/licenses.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/foundation.dart';
2+
import 'package:flutter/services.dart';
23

34
/// Our [LicenseEntryCollector] for licenses that aren't included by default.
45
///
@@ -9,5 +10,7 @@ import 'package:flutter/foundation.dart';
910
// remember to include the file in the asset bundle by listing its path
1011
// under `assets` in pubspec.yaml.
1112
Stream<LicenseEntry> additionalLicenses() async* {
12-
// TODO add some
13+
yield LicenseEntryWithLineBreaks(
14+
['Source Code Pro'],
15+
await rootBundle.loadString('assets/Source_Code_Pro/LICENSE.md'));
1316
}

lib/widgets/content.dart

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -372,14 +372,25 @@ InlineSpan inlineCode(InlineCodeNode node) {
372372
// ]);
373373
}
374374

375-
final _kInlineCodeStyle = kMonospaceTextStyle.merge(const TextStyle(
376-
backgroundColor: Color(0xffeeeeee),
377-
fontSize: 0.825 * kBaseFontSize));
378-
379-
final _kCodeBlockStyle = kMonospaceTextStyle.merge(const TextStyle(
380-
backgroundColor: Color.fromRGBO(255, 255, 255, 1),
381-
fontSize: 0.825 * kBaseFontSize,
382-
));
375+
final _kInlineCodeStyle = kMonospaceTextStyle
376+
.merge(const TextStyle(
377+
backgroundColor: Color(0xffeeeeee),
378+
fontSize: 0.825 * kBaseFontSize))
379+
.merge(
380+
// TODO(a11y) pass a BuildContext, to handle platform request for bold text.
381+
// To get one, the result of this whole computation (to the TextStyle
382+
// we get at the end) could live on one [InheritedWidget], at the
383+
// MessageList or higher, so the computation doesn't get repeated
384+
// frequently. Then consumers can just look it up on the InheritedWidget.
385+
weightVariableTextStyle(null));
386+
387+
final _kCodeBlockStyle = kMonospaceTextStyle
388+
.merge(const TextStyle(
389+
backgroundColor: Color.fromRGBO(255, 255, 255, 1),
390+
fontSize: 0.825 * kBaseFontSize))
391+
.merge(
392+
// TODO(a11y) pass a BuildContext; see comment in _kInlineCodeStyle above.
393+
weightVariableTextStyle(null));
383394

384395
// const _kInlineCodeLeftBracket = '⸤';
385396
// const _kInlineCodeRightBracket = '⸣';
@@ -636,4 +647,6 @@ InlineSpan _errorUnimplemented(UnimplementedNode node) {
636647

637648
const errorStyle = TextStyle(fontWeight: FontWeight.bold, color: Colors.red);
638649

639-
final errorCodeStyle = kMonospaceTextStyle.merge(const TextStyle(color: Colors.red));
650+
final errorCodeStyle = kMonospaceTextStyle
651+
.merge(const TextStyle(color: Colors.red))
652+
.merge(weightVariableTextStyle(null)); // TODO(a11y) pass a BuildContext

lib/widgets/text.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,18 @@ import 'package:flutter/widgets.dart';
44

55
/// A mergeable [TextStyle] with 'Source Code Pro' and platform-aware fallbacks.
66
///
7+
/// Callers should also call [weightVariableTextStyle] and merge that in too,
8+
/// because for this font, we use "variable font" assets with a "wght" axis.
9+
///
710
/// Example:
811
///
912
/// ```dart
10-
/// kMonospaceTextStyle.merge(const TextStyle(color: Colors.red))
13+
/// kMonospaceTextStyle
14+
/// .merge(const TextStyle(color: Colors.red))
15+
/// .merge(weightVariableTextStyle(context))
1116
/// ```
1217
final TextStyle kMonospaceTextStyle = TextStyle(
13-
fontFamily: 'Source Code Pro', // TODO supply font
18+
fontFamily: 'Source Code Pro',
1419

1520
// Oddly, iOS doesn't handle 'monospace':
1621
// https://chat.zulip.org/#narrow/stream/243-mobile-team/topic/flutter.3A.20monospace.20font.20fallback/near/1570622

pubspec.yaml

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -84,33 +84,13 @@ flutter:
8484
# the material Icons class.
8585
uses-material-design: true
8686

87-
# To add assets to your application, add an assets section, like this:
88-
# assets:
89-
# - images/a_dot_burr.jpeg
90-
# - images/a_dot_ham.jpeg
87+
assets:
88+
- assets/Source_Code_Pro/LICENSE.md
9189

92-
# An image asset can refer to one or more resolution-specific "variants", see
93-
# https://flutter.dev/assets-and-images/#resolution-aware
94-
95-
# For details regarding adding assets from package dependencies, see
96-
# https://flutter.dev/assets-and-images/#from-packages
97-
98-
# To add custom fonts to your application, add a fonts section here,
99-
# in this "flutter" section. Each entry in this list should have a
100-
# "family" key with the font family name, and a "fonts" key with a
101-
# list giving the asset and other descriptors for the font. For
102-
# example:
103-
# fonts:
104-
# - family: Schyler
105-
# fonts:
106-
# - asset: fonts/Schyler-Regular.ttf
107-
# - asset: fonts/Schyler-Italic.ttf
108-
# style: italic
109-
# - family: Trajan Pro
110-
# fonts:
111-
# - asset: fonts/TrajanPro.ttf
112-
# - asset: fonts/TrajanPro_Bold.ttf
113-
# weight: 700
114-
#
115-
# For details regarding fonts from package dependencies,
116-
# see https://flutter.dev/custom-fonts/#from-packages
90+
# If adding a font, remember to account for its license in lib/licenses.dart.
91+
fonts:
92+
- family: Source Code Pro
93+
fonts:
94+
- asset: assets/Source_Code_Pro/SourceCodeVF-Upright.otf
95+
- asset: assets/Source_Code_Pro/SourceCodeVF-Italic.otf
96+
style: italic

0 commit comments

Comments
 (0)