From f6f53f733f6942425adf1c8096df353a657e9b96 Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Mon, 18 May 2020 23:08:16 +0100 Subject: [PATCH] Initial Commit --- .github/GitHub-Actions.org | 41 ++++++++ .github/NOTES | 53 ++++++++++ .github/codesigning.asc.gpg | Bin 0 -> 9875 bytes .github/settings.xml | 28 ++++++ .github/workflows/maven-build.yml | 26 +++++ .github/workflows/sonatype-deploy.yml | 39 ++++++++ .gitignore | 14 +++ pom.xml | 85 ++++++++++++++++ .../java/net/kemitix/text/fit/TextFit.java | 7 ++ .../kemitix/text/fit/TextLineWrapImpl.java | 65 ++++++++++++ .../net/kemitix/text/fit/WordWrapper.java | 13 +++ .../kemitix/text/fit/TextLineWrapTest.java | 81 +++++++++++++++ .../kemitix/text/fit/alice/Alice-Regular.ttf | Bin 0 -> 150512 bytes .../net/kemitix/text/fit/alice/FONTLOG.txt | 50 ++++++++++ .../net/kemitix/text/fit/alice/OFL.txt | 94 ++++++++++++++++++ 15 files changed, 596 insertions(+) create mode 100644 .github/GitHub-Actions.org create mode 100644 .github/NOTES create mode 100644 .github/codesigning.asc.gpg create mode 100644 .github/settings.xml create mode 100644 .github/workflows/maven-build.yml create mode 100644 .github/workflows/sonatype-deploy.yml create mode 100644 pom.xml create mode 100644 src/main/java/net/kemitix/text/fit/TextFit.java create mode 100644 src/main/java/net/kemitix/text/fit/TextLineWrapImpl.java create mode 100644 src/main/java/net/kemitix/text/fit/WordWrapper.java create mode 100644 src/test/java/net/kemitix/text/fit/TextLineWrapTest.java create mode 100644 src/test/resources/net/kemitix/text/fit/alice/Alice-Regular.ttf create mode 100644 src/test/resources/net/kemitix/text/fit/alice/FONTLOG.txt create mode 100644 src/test/resources/net/kemitix/text/fit/alice/OFL.txt diff --git a/.github/GitHub-Actions.org b/.github/GitHub-Actions.org new file mode 100644 index 0000000..1c882b8 --- /dev/null +++ b/.github/GitHub-Actions.org @@ -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. diff --git a/.github/NOTES b/.github/NOTES new file mode 100644 index 0000000..64253c9 --- /dev/null +++ b/.github/NOTES @@ -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 diff --git a/.github/codesigning.asc.gpg b/.github/codesigning.asc.gpg new file mode 100644 index 0000000000000000000000000000000000000000..f5c71e0bcd94084c026a3726820e37bb7e6ff004 GIT binary patch literal 9875 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 FO%j@IVfX+5 literal 0 HcmV?d00001 diff --git a/.github/settings.xml b/.github/settings.xml new file mode 100644 index 0000000..8791e47 --- /dev/null +++ b/.github/settings.xml @@ -0,0 +1,28 @@ + + + + + sonatype-nexus-snapshots + ${env.NEXUS_USERNAME} + ${env.NEXUS_PASSWORD} + + + sonatype-nexus-staging + ${env.NEXUS_USERNAME} + ${env.NEXUS_PASSWORD} + + + + + gpg-sign + + true + + + gpg + ${env.GPG_KEYNAME} + ${env.GPG_PASSPHRASE} + + + + diff --git a/.github/workflows/maven-build.yml b/.github/workflows/maven-build.yml new file mode 100644 index 0000000..dc00080 --- /dev/null +++ b/.github/workflows/maven-build.yml @@ -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 diff --git a/.github/workflows/sonatype-deploy.yml b/.github/workflows/sonatype-deploy.yml new file mode 100644 index 0000000..2465173 --- /dev/null +++ b/.github/workflows/sonatype-deploy.yml @@ -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 }} diff --git a/.gitignore b/.gitignore index a1c2a23..2ea9f5e 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..08e9fcb --- /dev/null +++ b/pom.xml @@ -0,0 +1,85 @@ + + + 4.0.0 + + net.kemitix + kemitix-parent + 5.3.0 + + + + text-wrap-fit-box + DEV-SNAPSHOT + + + 2.16 + 2.6.0 + 5.4.0 + 1.18.12 + + 5.6.2 + 3.16.0 + 3.3.3 + 1.2.7 + + + + + org.projectlombok + lombok + ${lombok.version} + + + + org.junit.jupiter + junit-jupiter + ${junit.version} + test + + + + + + + + + org.assertj + assertj-core + ${assertj.version} + test + + + + + + + + + + + + + io.repaint.maven + tiles-maven-plugin + ${tiles-maven-plugin.version} + true + + + net.kemitix.tiles:maven-plugins:${kemitix-maven-tiles.version} + net.kemitix.tiles:enforcer:${kemitix-maven-tiles.version} + net.kemitix.tiles:compiler-jdk-11:${kemitix-maven-tiles.version} + net.kemitix.tiles:pmd:${kemitix-maven-tiles.version} + net.kemitix.tiles:testing:${kemitix-maven-tiles.version} + net.kemitix.tiles:coverage:${kemitix-maven-tiles.version} + net.kemitix.tiles:pitest:${kemitix-maven-tiles.version} + net.kemitix.checkstyle:tile:${kemitix-checkstyle.version} + + + + + + + + diff --git a/src/main/java/net/kemitix/text/fit/TextFit.java b/src/main/java/net/kemitix/text/fit/TextFit.java new file mode 100644 index 0000000..3ad6509 --- /dev/null +++ b/src/main/java/net/kemitix/text/fit/TextFit.java @@ -0,0 +1,7 @@ +package net.kemitix.text.fit; + +public interface TextFit { + static WordWrapper wrapper() { + return new TextLineWrapImpl(); + } +} diff --git a/src/main/java/net/kemitix/text/fit/TextLineWrapImpl.java b/src/main/java/net/kemitix/text/fit/TextLineWrapImpl.java new file mode 100644 index 0000000..3735185 --- /dev/null +++ b/src/main/java/net/kemitix/text/fit/TextLineWrapImpl.java @@ -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 wrap( + String text, + Font font, + Graphics2D graphics2D, + int width + ) { + String source = String.join(" ", text.split("\n")); + List words = wordLengths(source.split(" "), font, graphics2D); + return wrapWords(words, width); + } + + private List wrapWords(List words, int width) { + List lines = new ArrayList<>(); + int end = 0; + List 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 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(); + } + } + +} diff --git a/src/main/java/net/kemitix/text/fit/WordWrapper.java b/src/main/java/net/kemitix/text/fit/WordWrapper.java new file mode 100644 index 0000000..a4d2a09 --- /dev/null +++ b/src/main/java/net/kemitix/text/fit/WordWrapper.java @@ -0,0 +1,13 @@ +package net.kemitix.text.fit; + +import java.awt.*; +import java.util.List; + +public interface WordWrapper { + List wrap( + String text, + Font font, + Graphics2D graphics2D, + int width + ); +} diff --git a/src/test/java/net/kemitix/text/fit/TextLineWrapTest.java b/src/test/java/net/kemitix/text/fit/TextLineWrapTest.java new file mode 100644 index 0000000..7266db8 --- /dev/null +++ b/src/test/java/net/kemitix/text/fit/TextLineWrapTest.java @@ -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 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); + } +} diff --git a/src/test/resources/net/kemitix/text/fit/alice/Alice-Regular.ttf b/src/test/resources/net/kemitix/text/fit/alice/Alice-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..12dfdc139f0b433ff936bac4f09c89e419e54c80 GIT binary patch literal 150512 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

l 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 literal 0 HcmV?d00001 diff --git a/src/test/resources/net/kemitix/text/fit/alice/FONTLOG.txt b/src/test/resources/net/kemitix/text/fit/alice/FONTLOG.txt new file mode 100644 index 0000000..8dade5f --- /dev/null +++ b/src/test/resources/net/kemitix/text/fit/alice/FONTLOG.txt @@ -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 \ No newline at end of file diff --git a/src/test/resources/net/kemitix/text/fit/alice/OFL.txt b/src/test/resources/net/kemitix/text/fit/alice/OFL.txt new file mode 100644 index 0000000..636f1b4 --- /dev/null +++ b/src/test/resources/net/kemitix/text/fit/alice/OFL.txt @@ -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.