Initial Commit
This commit is contained in:
parent
72c63f2856
commit
f6f53f733f
15 changed files with 596 additions and 0 deletions
41
.github/GitHub-Actions.org
vendored
Normal file
41
.github/GitHub-Actions.org
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
* Deploying using Github Actions
|
||||
|
||||
** Actions definition: workflow/sonatype-deploy.yml
|
||||
|
||||
When a GitHub Release is created, usually from a tag, this action will trigger.
|
||||
|
||||
Using JDK8 the software will be packaged, including running any tests.
|
||||
|
||||
Then the Deploy script will sign the created artifacts then deploy them according to the distributionManagement configuration in the `pom.xml`.
|
||||
|
||||
** Deploy Script
|
||||
|
||||
Uses a signing key provided from the GitHub Actions Secrets as an environment variable to sign the artifact(s) before they are then deployed.
|
||||
|
||||
*** Inputs
|
||||
|
||||
**** DEPLOY_PROJECTS (optional)
|
||||
|
||||
An optional list of modules in a multi-module project to be deployed. If this value is not specified, then all projects will be deployed.
|
||||
|
||||
** Maven Configuration
|
||||
|
||||
Picks up the credentials from Environment variables for authenticating both with GPG and with the target deployment server (e.g. sonatype-nexus).
|
||||
|
||||
*** Inputs
|
||||
|
||||
**** NEXUS_USERNAME
|
||||
|
||||
The username for your account on the deployment server.
|
||||
|
||||
**** NEXUS_PASSWORD
|
||||
|
||||
The password for your account on the deployement server.
|
||||
|
||||
**** GPG_KEYNAME
|
||||
|
||||
The key to use when signing.
|
||||
|
||||
**** GPG_PASSPHRASE
|
||||
|
||||
The passphrase to unlock the key to use when signing.
|
53
.github/NOTES
vendored
Normal file
53
.github/NOTES
vendored
Normal file
|
@ -0,0 +1,53 @@
|
|||
Add subkeys:
|
||||
|
||||
????
|
||||
|
||||
Publish:
|
||||
|
||||
gpg --send-keys --keyserver keyserver.ubuntu.com $KEYID
|
||||
gpg --send-keys --keyserver pgp.mit.edu $KEYID
|
||||
gpg --send-keys --keyserver pool.sks-keyservers.net $KEYID
|
||||
|
||||
Backup:
|
||||
|
||||
gpg --export --armor pcampbell@kemitix.net > gpg-key-backup.asc
|
||||
gpg --export-secret-keys --armor pcampbell@kemitix.net >> gpg-key-backup.asc
|
||||
|
||||
Export sub-keys:
|
||||
|
||||
gpg --export-secret-subkeys pcampbell@kemitix.net > subkeys
|
||||
|
||||
Remove master keys:
|
||||
|
||||
gpg --delete-secret-key pcampbell@kemitix.net
|
||||
|
||||
Import sub-keys and clean up:
|
||||
|
||||
gpg --import subkeys
|
||||
|
||||
shred --remove subkeys
|
||||
|
||||
Delete any encryption subkeys:
|
||||
|
||||
gpg --edit-key pcampbell@kemitix.net
|
||||
|
||||
2
|
||||
delkey
|
||||
save
|
||||
|
||||
Change passphrase:
|
||||
|
||||
gpg --edit-key pcampbell@kemitix.net
|
||||
passwd
|
||||
save
|
||||
|
||||
Export keys:
|
||||
|
||||
gpg --export --armor pcampbell@kemitix.net > codesigning.asc
|
||||
gpg --export-secret-keys --armor pcampbell@kemitix.net >> codesigning.asc
|
||||
|
||||
Encrypt keys:
|
||||
|
||||
gpg --symmetric --cipher-algo AES256 codesigning.asc
|
||||
|
||||
shred codesigning.asc
|
BIN
.github/codesigning.asc.gpg
vendored
Normal file
BIN
.github/codesigning.asc.gpg
vendored
Normal file
Binary file not shown.
28
.github/settings.xml
vendored
Normal file
28
.github/settings.xml
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0">
|
||||
<servers>
|
||||
<server>
|
||||
<id>sonatype-nexus-snapshots</id>
|
||||
<username>${env.NEXUS_USERNAME}</username>
|
||||
<password>${env.NEXUS_PASSWORD}</password>
|
||||
</server>
|
||||
<server>
|
||||
<id>sonatype-nexus-staging</id>
|
||||
<username>${env.NEXUS_USERNAME}</username>
|
||||
<password>${env.NEXUS_PASSWORD}</password>
|
||||
</server>
|
||||
</servers>
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>gpg-sign</id>
|
||||
<activation>
|
||||
<activeByDefault>true</activeByDefault>
|
||||
</activation>
|
||||
<properties>
|
||||
<gpg.executable>gpg</gpg.executable>
|
||||
<gpg.keyname>${env.GPG_KEYNAME}</gpg.keyname>
|
||||
<gpg.passphrase>${env.GPG_PASSPHRASE}</gpg.passphrase>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
</settings>
|
26
.github/workflows/maven-build.yml
vendored
Normal file
26
.github/workflows/maven-build.yml
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
# This workflow will build a Java project with Maven
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
|
||||
|
||||
name: Java CI with Maven
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: '*'
|
||||
pull_request:
|
||||
branches: '*'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
java: [ 11, 13 ]
|
||||
steps:
|
||||
- uses: kamiazya/setup-graphviz@v1
|
||||
- uses: actions/checkout@v2
|
||||
- name: setup-java-${{ matrix.java }}
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: ${{ matrix.java }}
|
||||
- name: install
|
||||
run: mvn -B install
|
39
.github/workflows/sonatype-deploy.yml
vendored
Normal file
39
.github/workflows/sonatype-deploy.yml
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
name: Deploy to Sonatype Nexus
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: kamiazya/setup-graphviz@v1
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 1.8
|
||||
- name: Build with Maven
|
||||
run: mvn -B install
|
||||
- name: Nexus Repo Publish
|
||||
run: |
|
||||
gpg --quiet \
|
||||
--batch \
|
||||
--yes \
|
||||
--decrypt \
|
||||
--passphrase="${{ secrets.GPG_PASSPHRASE }}" \
|
||||
--output codesigning.asc \
|
||||
.github/codesigning.asc.gpg
|
||||
gpg --batch \
|
||||
--fast-import codesigning.asc
|
||||
mvn --settings .github/settings.xml \
|
||||
-Dskip-Tests=true \
|
||||
-P release \
|
||||
-B \
|
||||
deploy
|
||||
env:
|
||||
NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }}
|
||||
NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
|
||||
GPG_KEYNAME: ${{ secrets.GPG_KEYNAME }}
|
||||
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
|
14
.gitignore
vendored
14
.gitignore
vendored
|
@ -21,3 +21,17 @@
|
|||
|
||||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||
hs_err_pid*
|
||||
|
||||
*.jqwik-database*
|
||||
|
||||
*.iml
|
||||
.idea/
|
||||
target/
|
||||
pom.xml.*
|
||||
release.properties
|
||||
dependency-reduced-pom.xml
|
||||
buildNumber.properties
|
||||
.mvn/timing.properties
|
||||
|
||||
# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored)
|
||||
!/.mvn/wrapper/maven-wrapper.jar
|
||||
|
|
85
pom.xml
Normal file
85
pom.xml
Normal file
|
@ -0,0 +1,85 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>net.kemitix</groupId>
|
||||
<artifactId>kemitix-parent</artifactId>
|
||||
<version>5.3.0</version>
|
||||
<relativePath/>
|
||||
</parent>
|
||||
|
||||
<artifactId>text-wrap-fit-box</artifactId>
|
||||
<version>DEV-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<tiles-maven-plugin.version>2.16</tiles-maven-plugin.version>
|
||||
<kemitix-maven-tiles.version>2.6.0</kemitix-maven-tiles.version>
|
||||
<kemitix-checkstyle.version>5.4.0</kemitix-checkstyle.version>
|
||||
<lombok.version>1.18.12</lombok.version>
|
||||
|
||||
<junit.version>5.6.2</junit.version>
|
||||
<assertj.version>3.16.0</assertj.version>
|
||||
<mockito.version>3.3.3</mockito.version>
|
||||
<jqwik.version>1.2.7</jqwik.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${lombok.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter</artifactId>
|
||||
<version>${junit.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.mockito</groupId>-->
|
||||
<!-- <artifactId>mockito-junit-jupiter</artifactId>-->
|
||||
<!-- <version>${mockito.version}</version>-->
|
||||
<!-- <scope>test</scope>-->
|
||||
<!-- </dependency>-->
|
||||
<dependency>
|
||||
<groupId>org.assertj</groupId>
|
||||
<artifactId>assertj-core</artifactId>
|
||||
<version>${assertj.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>net.jqwik</groupId>-->
|
||||
<!-- <artifactId>jqwik</artifactId>-->
|
||||
<!-- <version>${jqwik.version}</version>-->
|
||||
<!-- <scope>test</scope>-->
|
||||
<!-- </dependency>-->
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>io.repaint.maven</groupId>
|
||||
<artifactId>tiles-maven-plugin</artifactId>
|
||||
<version>${tiles-maven-plugin.version}</version>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<tiles>
|
||||
<tile>net.kemitix.tiles:maven-plugins:${kemitix-maven-tiles.version}</tile>
|
||||
<tile>net.kemitix.tiles:enforcer:${kemitix-maven-tiles.version}</tile>
|
||||
<tile>net.kemitix.tiles:compiler-jdk-11:${kemitix-maven-tiles.version}</tile>
|
||||
<tile>net.kemitix.tiles:pmd:${kemitix-maven-tiles.version}</tile>
|
||||
<tile>net.kemitix.tiles:testing:${kemitix-maven-tiles.version}</tile>
|
||||
<tile>net.kemitix.tiles:coverage:${kemitix-maven-tiles.version}</tile>
|
||||
<tile>net.kemitix.tiles:pitest:${kemitix-maven-tiles.version}</tile>
|
||||
<tile>net.kemitix.checkstyle:tile:${kemitix-checkstyle.version}</tile>
|
||||
</tiles>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
</project>
|
7
src/main/java/net/kemitix/text/fit/TextFit.java
Normal file
7
src/main/java/net/kemitix/text/fit/TextFit.java
Normal file
|
@ -0,0 +1,7 @@
|
|||
package net.kemitix.text.fit;
|
||||
|
||||
public interface TextFit {
|
||||
static WordWrapper wrapper() {
|
||||
return new TextLineWrapImpl();
|
||||
}
|
||||
}
|
65
src/main/java/net/kemitix/text/fit/TextLineWrapImpl.java
Normal file
65
src/main/java/net/kemitix/text/fit/TextLineWrapImpl.java
Normal file
|
@ -0,0 +1,65 @@
|
|||
package net.kemitix.text.fit;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.font.FontRenderContext;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
class TextLineWrapImpl implements WordWrapper {
|
||||
|
||||
@Override
|
||||
public List<String> wrap(
|
||||
String text,
|
||||
Font font,
|
||||
Graphics2D graphics2D,
|
||||
int width
|
||||
) {
|
||||
String source = String.join(" ", text.split("\n"));
|
||||
List<Word> words = wordLengths(source.split(" "), font, graphics2D);
|
||||
return wrapWords(words, width);
|
||||
}
|
||||
|
||||
private List<String> wrapWords(List<Word> words, int width) {
|
||||
List<String> lines = new ArrayList<>();
|
||||
int end = 0;
|
||||
List<String> line = new ArrayList<>();
|
||||
for (Word word : words) {
|
||||
if ((end + word.width) > width) {
|
||||
lines.add(String.join(" ", line));
|
||||
line.clear();
|
||||
end = 0;
|
||||
}
|
||||
line.add(word.word);
|
||||
end += word.width;
|
||||
}
|
||||
lines.add(String.join(" ", line));
|
||||
return lines.stream()
|
||||
.filter(l -> l.length() > 0)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private List<Word> wordLengths(String[] words, Font font, Graphics2D graphics2D) {
|
||||
FontRenderContext fontRenderContext = graphics2D.getFontRenderContext();
|
||||
return Arrays.stream(words)
|
||||
.map(word -> new Word(word, font, fontRenderContext))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Getter
|
||||
private static class Word {
|
||||
private final String word;
|
||||
private final int width;
|
||||
|
||||
public Word(String word, Font font, FontRenderContext fontRenderContext) {
|
||||
this.word = word;
|
||||
Rectangle2D stringBounds = font.getStringBounds(word + " ", fontRenderContext);
|
||||
this.width = Double.valueOf(stringBounds.getWidth()).intValue();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
13
src/main/java/net/kemitix/text/fit/WordWrapper.java
Normal file
13
src/main/java/net/kemitix/text/fit/WordWrapper.java
Normal file
|
@ -0,0 +1,13 @@
|
|||
package net.kemitix.text.fit;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
|
||||
public interface WordWrapper {
|
||||
List<String> wrap(
|
||||
String text,
|
||||
Font font,
|
||||
Graphics2D graphics2D,
|
||||
int width
|
||||
);
|
||||
}
|
81
src/test/java/net/kemitix/text/fit/TextLineWrapTest.java
Normal file
81
src/test/java/net/kemitix/text/fit/TextLineWrapTest.java
Normal file
|
@ -0,0 +1,81 @@
|
|||
package net.kemitix.text.fit;
|
||||
|
||||
import org.assertj.core.api.WithAssertions;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.util.List;
|
||||
|
||||
public class TextLineWrapTest
|
||||
implements WithAssertions {
|
||||
|
||||
private final WordWrapper textLineWrap = TextFit.wrapper();
|
||||
private final int imageSize = 300;
|
||||
private final int fontSize = 20;
|
||||
private final Graphics2D graphics100x100 = graphics(imageSize, imageSize);
|
||||
private final Font font;
|
||||
|
||||
public TextLineWrapTest()
|
||||
throws FontFormatException,
|
||||
IOException,
|
||||
URISyntaxException {
|
||||
URL resource = this.getClass().getResource("alice/Alice-Regular.ttf");
|
||||
font = Font.createFont(Font.TRUETYPE_FONT, new File(resource.toURI()))
|
||||
.deriveFont(Font.PLAIN, fontSize);
|
||||
}
|
||||
|
||||
private List<String> invoke(String in) {
|
||||
return textLineWrap.wrap(in, font, graphics100x100, imageSize);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Empty String give empty List")
|
||||
public void emptyStringEmptyList() {
|
||||
assertThat(invoke("")).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Short string fits on one line")
|
||||
public void shortStringOnOneLine() {
|
||||
assertThat(invoke("x")).containsExactly("x");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Longer string fits on two lines")
|
||||
public void longerStringOnTwoLines() {
|
||||
assertThat(invoke(
|
||||
"xxxxxxxxxxx xxxxxxxxxxxx " +
|
||||
"xxxxxxxxxxx xxxxxxxxxxxx"))
|
||||
.containsExactly(
|
||||
"xxxxxxxxxxx xxxxxxxxxxxx",
|
||||
"xxxxxxxxxxx xxxxxxxxxxxx");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Longer string fits on three lines")
|
||||
public void longerStringOnThreeLines() {
|
||||
assertThat(invoke(
|
||||
"xxxxxxxxxxx xxxxxxxxxxxx " +
|
||||
"xxxxxxxxxxx xxxxxxxxxxxx " +
|
||||
"xxxxxxxxxxx xxxxxxxxxxxx"))
|
||||
.containsExactly(
|
||||
"xxxxxxxxxxx xxxxxxxxxxxx",
|
||||
"xxxxxxxxxxx xxxxxxxxxxxx",
|
||||
"xxxxxxxxxxx xxxxxxxxxxxx");
|
||||
}
|
||||
|
||||
private Graphics2D graphics(int width, int height) {
|
||||
return image(width, height)
|
||||
.createGraphics();
|
||||
}
|
||||
|
||||
private BufferedImage image(int width, int height) {
|
||||
return new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
|
||||
}
|
||||
}
|
BIN
src/test/resources/net/kemitix/text/fit/alice/Alice-Regular.ttf
Normal file
BIN
src/test/resources/net/kemitix/text/fit/alice/Alice-Regular.ttf
Normal file
Binary file not shown.
50
src/test/resources/net/kemitix/text/fit/alice/FONTLOG.txt
Normal file
50
src/test/resources/net/kemitix/text/fit/alice/FONTLOG.txt
Normal file
|
@ -0,0 +1,50 @@
|
|||
FONTLOG for the Alice font
|
||||
|
||||
This file provides detailed information on the Alice font Software.
|
||||
|
||||
This information should be distributed along with the
|
||||
Alice fonts and any derivative works.
|
||||
|
||||
Basic Font Information
|
||||
|
||||
Ksenia Erulevich, designer of Alice typeface,
|
||||
was inspired by Lewis Carroll's novel and
|
||||
decided to make a typeface that will
|
||||
be suitable for typesetting this book.
|
||||
|
||||
It came out eclectic and quaint, old-fashioned,
|
||||
having widened proportions, open aperture, and
|
||||
soft rounded features. Perfect for long meditative text-setting
|
||||
and headlines.
|
||||
|
||||
This is in fact Ksenia's first typeface, as part of
|
||||
her diploma project at the Type & Typography course in
|
||||
Moscow, Russia.
|
||||
|
||||
Released by Cyreal with help from Gayaneh Bagdasaryan
|
||||
and Alexei Vanyashin.
|
||||
|
||||
Alice is a Unicode typeface family that supports
|
||||
languages that use the Latin script and its variants, and
|
||||
could be expanded to support other scripts.
|
||||
|
||||
More specifically, this release supports the following Unicode
|
||||
ranges: Latin-1
|
||||
|
||||
To contribute to the project contact Alexei Vanyashin at
|
||||
a@cyreal.org
|
||||
|
||||
There are two .VBF Source files:
|
||||
1. Alice_PS_Source.vbf (Original Source files with contour overlaps)
|
||||
2. Alice_merged_and_optimized.vbf (Merged and optimized file)
|
||||
|
||||
ChangeLog
|
||||
|
||||
If you make modifications be sure to add your name (N),
|
||||
email (E), web-address (if you have one) (W) and description (D).
|
||||
This list is in alphabetical order.
|
||||
|
||||
N: Alexei Vanyashin
|
||||
E: a@cyreal.org
|
||||
W: www.cyreal.org
|
||||
D: Designer and Mastering
|
94
src/test/resources/net/kemitix/text/fit/alice/OFL.txt
Normal file
94
src/test/resources/net/kemitix/text/fit/alice/OFL.txt
Normal file
|
@ -0,0 +1,94 @@
|
|||
Copyright (c) 2011, Cyreal (www.cyreal.org),
|
||||
with Reserved Font Name "Alice" and "Alice Regular".
|
||||
|
||||
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.
|
Loading…
Reference in a new issue