summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorryanglscott <>2018-01-18 19:49:00 (GMT)
committerhdiff <hdiff@hdiff.luite.com>2018-01-18 19:49:00 (GMT)
commit5db9d95bbe45f19b28c5d8719b2f17836a566eb2 (patch)
treea4e7292eb4f8c834669b1f9aa97d5d9cf18c92de
parent9e00377c448e9a5c822e5a9b50fb8cfe4eaaa3e3 (diff)
version 0.7.1HEAD0.7.1master
-rw-r--r--.travis.yml232
-rw-r--r--CHANGELOG.markdown5
-rw-r--r--README.markdown33
-rw-r--r--Setup.lhs176
-rw-r--r--Warning.hs5
-rw-r--r--hyphenation.cabal26
-rw-r--r--src/Text/Hyphenation/Exception.hs14
-rw-r--r--src/Text/Hyphenation/Language.hs2
-rw-r--r--src/Text/Hyphenation/Pattern.hs12
9 files changed, 235 insertions, 270 deletions
diff --git a/.travis.yml b/.travis.yml
index 73939d4..8d45ef4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,124 +1,160 @@
-# This file has been generated -- see https://github.com/hvr/multi-ghc-travis
+# This Travis job script has been generated by a script via
+#
+# runghc make_travis_yml_2.hs '-o' '.travis.yml' '--irc-channel=irc.freenode.org#haskell-lens' '--no-no-tests-no-bench' '--no-installed' 'cabal.project'
+#
+# For more information, see https://github.com/hvr/multi-ghc-travis
+#
language: c
sudo: false
+git:
+ submodules: false # whether to recursively clone submodules
+
+notifications:
+ irc:
+ channels:
+ - "irc.freenode.org#haskell-lens"
+ skip_join: true
+ template:
+ - "\x0313hyphenation\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"
+
cache:
directories:
- - $HOME/.cabsnap
- $HOME/.cabal/packages
+ - $HOME/.cabal/store
before_cache:
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
- - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar
+ # remove files that are regenerated by 'cabal update'
+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.*
+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/*.json
+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.cache
+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar
+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar.idx
+
+ - rm -rfv $HOME/.cabal/packages/head.hackage
+
+addons:
+ apt:
+ packages: &apt_packages
+ - ghc-ppa-tools
+ - hlint
matrix:
include:
- - env: CABALVER=1.24 GHCVER=7.0.4
- compiler: ": #GHC 7.0.4"
- addons: {apt: {packages: [cabal-install-1.24,ghc-7.0.4,hlint], sources: [hvr-ghc]}}
- - env: CABALVER=1.24 GHCVER=7.2.2
- compiler: ": #GHC 7.2.2"
- addons: {apt: {packages: [cabal-install-1.24,ghc-7.2.2,hlint], sources: [hvr-ghc]}}
- - env: CABALVER=1.24 GHCVER=7.4.2
- compiler: ": #GHC 7.4.2"
- addons: {apt: {packages: [cabal-install-1.24,ghc-7.4.2,hlint], sources: [hvr-ghc]}}
- - env: CABALVER=1.24 GHCVER=7.6.3
- compiler: ": #GHC 7.6.3"
- addons: {apt: {packages: [cabal-install-1.24,ghc-7.6.3,hlint], sources: [hvr-ghc]}}
- - env: CABALVER=1.24 GHCVER=7.8.4
- compiler: ": #GHC 7.8.4"
- addons: {apt: {packages: [cabal-install-1.24,ghc-7.8.4,hlint], sources: [hvr-ghc]}}
- - env: CABALVER=1.24 GHCVER=7.10.3
- compiler: ": #GHC 7.10.3"
- addons: {apt: {packages: [cabal-install-1.24,ghc-7.10.3,hlint], sources: [hvr-ghc]}}
- - env: CABALVER=1.24 GHCVER=8.0.2
- compiler: ": #GHC 8.0.2"
- addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.2,hlint], sources: [hvr-ghc]}}
- - env: CABALVER=1.24 GHCVER=8.2.1
- compiler: ": #GHC 8.2.1"
- addons: {apt: {packages: [cabal-install-1.24,ghc-8.2.1,hlint], sources: [hvr-ghc]}}
- - env: CABALVER=1.24 GHCVER=head
- compiler: ": #GHC head"
- addons: {apt: {packages: [cabal-install-1.24,ghc-head,hlint], sources: [hvr-ghc]}}
+ - compiler: "ghc-7.0.4"
+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
+ addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-7.0.4], sources: [hvr-ghc]}}
+ - compiler: "ghc-7.2.2"
+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
+ addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-7.2.2], sources: [hvr-ghc]}}
+ - compiler: "ghc-7.4.2"
+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
+ addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-7.4.2], sources: [hvr-ghc]}}
+ - compiler: "ghc-7.6.3"
+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
+ addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-7.6.3], sources: [hvr-ghc]}}
+ - compiler: "ghc-7.8.4"
+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
+ addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-7.8.4], sources: [hvr-ghc]}}
+ - compiler: "ghc-7.10.3"
+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
+ addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-7.10.3], sources: [hvr-ghc]}}
+ - compiler: "ghc-8.0.2"
+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
+ addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-8.0.2], sources: [hvr-ghc]}}
+ - compiler: "ghc-8.2.2"
+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
+ addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-8.2.2], sources: [hvr-ghc]}}
+ - compiler: "ghc-8.2.2"
+ # env: TEST=--disable-tests BENCH=--disable-benchmarks
+ env: CABALFLAGS=-fembed
+ addons: {apt: {packages: [*apt_packages,cabal-install-2.0,ghc-8.2.2], sources: [hvr-ghc]}}
+ - compiler: "ghc-8.4.1"
+ env: GHCHEAD=true
+ addons: {apt: {packages: [*apt_packages,cabal-install-head,ghc-8.4.1], sources: [hvr-ghc]}}
+ - compiler: "ghc-head"
+ env: GHCHEAD=true
+ addons: {apt: {packages: [*apt_packages,cabal-install-head,ghc-head], sources: [hvr-ghc]}}
allow_failures:
- - env: CABALVER=1.24 GHCVER=7.0.4
- - env: CABALVER=1.24 GHCVER=7.2.2
- - env: CABALVER=1.24 GHCVER=head
+ - compiler: "ghc-7.0.4"
+ - compiler: "ghc-7.2.2"
+ - compiler: "ghc-8.4.1"
+ - compiler: "ghc-head"
before_install:
- - unset CC
- - export PATH=$HOME/.cabal/bin:/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH
+ - HC=${CC}
+ - HCPKG=${HC/ghc/ghc-pkg}
+ - unset CC
+ - ROOTDIR=$(pwd)
+ - mkdir -p $HOME/.local/bin
+ - "PATH=/opt/ghc/bin:/opt/ghc-ppa-tools/bin:$HOME/local/bin:$PATH"
+ - HCNUMVER=$(( $(${HC} --numeric-version|sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+).*/\1 * 10000 + \2 * 100 + \3/') ))
+ - echo $HCNUMVER
install:
- - cabal --version
- - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
- - if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];
- then
- zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >
- $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;
- fi
- - travis_retry cabal update -v
- - sed -i 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config
- - cabal install --only-dependencies --enable-tests --enable-benchmarks --dry -v > installplan.txt
- - sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt
-
-# check whether current requested install-plan matches cached package-db snapshot
- - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;
- then
- echo "cabal build-cache HIT";
- rm -rfv .ghc;
- cp -a $HOME/.cabsnap/ghc $HOME/.ghc;
- cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/;
- else
- echo "cabal build-cache MISS";
- rm -rf $HOME/.cabsnap;
- mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;
- cabal install -j --only-dependencies --enable-tests --enable-benchmarks;
- fi
-
-# snapshot package-db on cache miss
- - if [ ! -d $HOME/.cabsnap ];
- then
- echo "snapshotting package-db to build-cache";
- mkdir $HOME/.cabsnap;
- cp -a $HOME/.ghc $HOME/.cabsnap/ghc;
- cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;
- fi
-
-# Here starts the actual work to be performed for the package under
-# test; any command which exits with a non-zero exit code causes the
-# build to fail.
+ - cabal --version
+ - echo "$(${HC} --version) [$(${HC} --print-project-git-commit-id 2> /dev/null || echo '?')]"
+ - BENCH=${BENCH---enable-benchmarks}
+ - TEST=${TEST---enable-tests}
+ - HADDOCK=${HADDOCK-true}
+ - INSTALLED=${INSTALLED-true}
+ - GHCHEAD=${GHCHEAD-false}
+ - travis_retry cabal update -v
+ - "sed -i.bak 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config"
+ - rm -fv cabal.project cabal.project.local
+ # Overlay Hackage Package Index for GHC HEAD: https://github.com/hvr/head.hackage
+ - |
+ if $GHCHEAD; then
+ sed -i.bak 's/-- allow-newer:.*/allow-newer: *:base, *:template-haskell, *:ghc, *:Cabal/' ${HOME}/.cabal/config
+
+ echo 'repository head.hackage' >> ${HOME}/.cabal/config
+ echo ' url: http://head.hackage.haskell.org/' >> ${HOME}/.cabal/config
+ echo ' secure: True' >> ${HOME}/.cabal/config
+ echo ' root-keys: 07c59cb65787dedfaef5bd5f987ceb5f7e5ebf88b904bbd4c5cbdeb2ff71b740' >> ${HOME}/.cabal/config
+ echo ' 2e8555dde16ebd8df076f1a8ef13b8f14c66bad8eafefd7d9e37d0ed711821fb' >> ${HOME}/.cabal/config
+ echo ' 8f79fd2389ab2967354407ec852cbe73f2e8635793ac446d09461ffb99527f6e' >> ${HOME}/.cabal/config
+ echo ' key-threshold: 3' >> ${HOME}/.cabal.config
+
+ cabal new-update head.hackage -v
+ fi
+ - grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
+ - "printf 'packages: \".\"\\n' > cabal.project"
+ - cat cabal.project
+ - if [ -f "./configure.ac" ]; then
+ (cd "." && autoreconf -i);
+ fi
+ - rm -f cabal.project.freeze
+ - cabal new-build -w ${HC} ${CABALFLAGS} ${TEST} ${BENCH} --project-file="cabal.project" --dep -j2 all
+ - rm -rf "."/.ghc.environment.* "."/dist
+ - DISTDIR=$(mktemp -d /tmp/dist-test.XXXX)
+
+# Here starts the actual work to be performed for the package under test;
+# any command which exits with a non-zero exit code causes the build to fail.
script:
- # -v2 provides useful information for debugging
- - cabal configure --enable-tests --enable-benchmarks -v2
+ # test that source-distributions can be generated
+ - (cd "." && cabal sdist)
+ - mv "."/dist/hyphenation-*.tar.gz ${DISTDIR}/
+ - cd ${DISTDIR} || false
+ - find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
+ - "printf 'packages: hyphenation-*/*.cabal\\n' > cabal.project"
+ - cat cabal.project
- # this builds all libraries and executables
- # (including tests/benchmarks)
- - cabal build
- - cabal test
- - hlint src --cpp-define HLINT
+ # build & run tests, build benchmarks
+ - cabal new-build -w ${HC} ${CABALFLAGS} ${TEST} ${BENCH} all
+ - if [ "x$TEST" = "x--enable-tests" ]; then cabal new-test -w ${HC} ${CABALFLAGS} ${TEST} ${BENCH} all; fi
- # tests that a source-distribution can be generated
- - cabal sdist
+ # cabal check
+ - (cd hyphenation-* && cabal check)
- # check that the generated source-distribution can be built & installed
- - export SRC_TGZ=$(cabal info . | awk '{print $2 ".tar.gz";exit}') ;
- cd dist/;
- if [ -f "$SRC_TGZ" ]; then
- cabal install --force-reinstalls "$SRC_TGZ";
- else
- echo "expected '$SRC_TGZ' not found";
- exit 1;
- fi
+ # haddock
+ - rm -rf ./dist-newstyle
+ - if $HADDOCK; then cabal new-haddock -w ${HC} ${CABALFLAGS} ${TEST} ${BENCH} all; else echo "Skipping haddock generation";fi
-notifications:
- irc:
- channels:
- - "irc.freenode.org#haskell-lens"
- skip_join: true
- template:
- - "\x0313hyphenation\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"
+ # hlint
+ - (cd hyphenation-* && hlint src --cpp-define=HLINT --cpp-ansi)
+# REGENDATA ["-o",".travis.yml","--irc-channel=irc.freenode.org#haskell-lens","--no-no-tests-no-bench","--no-installed","cabal.project"]
# EOF
diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
index a531e2e..6c0458f 100644
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,8 @@
+0.7.1 [2018.01.18]
+------------------
+* Add `Semigroup` instances for `Exceptions` and `Patterns`.
+* Fix the build with `-fembed`.
+
0.7
---
* Updated Spanish and Thai hyphenation patterns.
diff --git a/README.markdown b/README.markdown
new file mode 100644
index 0000000..f28ffa2
--- /dev/null
+++ b/README.markdown
@@ -0,0 +1,33 @@
+hyphenation
+===========
+
+[![Hackage](https://img.shields.io/hackage/v/hyphenation.svg)](https://hackage.haskell.org/package/hyphenation) [![Build Status](https://secure.travis-ci.org/ekmett/hyphenation.png?branch=master)](http://travis-ci.org/ekmett/hyphenation)
+
+Configurable Knuth-Liang hyphenation using the UTF8 encoded hyphenation patterns provided by [hyph-utf8](http://www.ctan.org/tex-archive/language/hyph-utf8)
+
+Usage:
+
+```haskell
+>>> hyphenate english_US "supercalifragilisticexpialadocious"
+["su","per","cal","ifrag","ilis","tic","ex","pi","al","ado","cious"]
+```
+
+```haskell
+>>> hyphenate english_US "hyphenation"
+["hy","phen","ation"]
+```
+
+```haskell
+>>> hyphenate icelandic "va\240lahei\240avegavinnuverkf\230rageymslusk\250r"
+["va\240la","hei\240a","vega","vinnu","verk","f\230ra","geymslu","sk\250r"]
+```
+
+Contact Information
+-------------------
+
+Contributions and bug reports are welcome!
+
+Please feel free to contact me through github or on the #haskell IRC channel on irc.freenode.net.
+
+-Edward Kmett
+
diff --git a/Setup.lhs b/Setup.lhs
index 5555bb3..faedcd3 100644
--- a/Setup.lhs
+++ b/Setup.lhs
@@ -1,182 +1,34 @@
\begin{code}
{-# LANGUAGE CPP #-}
-{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -Wall #-}
module Main (main) where
#ifndef MIN_VERSION_cabal_doctest
#define MIN_VERSION_cabal_doctest(x,y,z) 0
#endif
-
#if MIN_VERSION_cabal_doctest(1,0,0)
-import Distribution.Extra.Doctest ( defaultMainWithDoctests )
-#else
-
--- Otherwise we provide a shim
-
-#ifndef MIN_VERSION_Cabal
-#define MIN_VERSION_Cabal(x,y,z) 0
-#endif
-#ifndef MIN_VERSION_directory
-#define MIN_VERSION_directory(x,y,z) 0
-#endif
-#if MIN_VERSION_Cabal(1,24,0)
-#define InstalledPackageId UnitId
-#endif
-
-import Control.Monad ( when )
-import Data.List ( nub )
-import Data.String ( fromString )
-import Distribution.Package ( InstalledPackageId )
-import Distribution.Package ( PackageId, Package (..), packageVersion )
-import Distribution.PackageDescription ( PackageDescription(), TestSuite(..) , Library (..), BuildInfo (..))
-import Distribution.Simple ( defaultMainWithHooks, UserHooks(..), simpleUserHooks )
-import Distribution.Simple.Utils ( rewriteFile, createDirectoryIfMissingVerbose )
-import Distribution.Simple.BuildPaths ( autogenModulesDir )
-import Distribution.Simple.Setup ( BuildFlags(buildDistPref, buildVerbosity), fromFlag)
-import Distribution.Simple.LocalBuildInfo ( withPackageDB, withLibLBI, withTestLBI, LocalBuildInfo(), ComponentLocalBuildInfo(componentPackageDeps), compiler )
-import Distribution.Simple.Compiler ( showCompilerId , PackageDB (..))
-import Distribution.Text ( display , simpleParse )
-import System.FilePath ( (</>) )
-
-#if MIN_VERSION_Cabal(1,25,0)
-import Distribution.Simple.BuildPaths ( autogenComponentModulesDir )
-#endif
-
-#if MIN_VERSION_directory(1,2,2)
-import System.Directory (makeAbsolute)
-#else
-import System.Directory (getCurrentDirectory)
-import System.FilePath (isAbsolute)
-
-makeAbsolute :: FilePath -> IO FilePath
-makeAbsolute p | isAbsolute p = return p
- | otherwise = do
- cwd <- getCurrentDirectory
- return $ cwd </> p
-#endif
-
-generateBuildModule :: String -> BuildFlags -> PackageDescription -> LocalBuildInfo -> IO ()
-generateBuildModule testsuiteName flags pkg lbi = do
- let verbosity = fromFlag (buildVerbosity flags)
- let distPref = fromFlag (buildDistPref flags)
-
- -- Package DBs
- let dbStack = withPackageDB lbi ++ [ SpecificPackageDB $ distPref </> "package.conf.inplace" ]
- let dbFlags = "-hide-all-packages" : packageDbArgs dbStack
-
- withLibLBI pkg lbi $ \lib libcfg -> do
- let libBI = libBuildInfo lib
- -- modules
- let modules = exposedModules lib ++ otherModules libBI
- -- it seems that doctest is happy to take in module names, not actual files!
- let module_sources = modules
+import Distribution.Extra.Doctest ( defaultMainWithDoctests )
+main :: IO ()
+main = defaultMainWithDoctests "doctests"
- -- We need the directory with library's cabal_macros.h!
-#if MIN_VERSION_Cabal(1,25,0)
- let libAutogenDir = autogenComponentModulesDir lbi libcfg
#else
- let libAutogenDir = autogenModulesDir lbi
-#endif
-
- -- Lib sources and includes
- iArgs <- mapM (fmap ("-i"++) . makeAbsolute) $ libAutogenDir : hsSourceDirs libBI
- includeArgs <- mapM (fmap ("-I"++) . makeAbsolute) $ includeDirs libBI
- -- CPP includes, i.e. include cabal_macros.h
- let cppFlags = map ("-optP"++) $
- [ "-include", libAutogenDir ++ "/cabal_macros.h" ]
- ++ cppOptions libBI
-
- withTestLBI pkg lbi $ \suite suitecfg -> when (testName suite == fromString testsuiteName) $ do
-
- -- get and create autogen dir
-#if MIN_VERSION_Cabal(1,25,0)
- let testAutogenDir = autogenComponentModulesDir lbi suitecfg
-#else
- let testAutogenDir = autogenModulesDir lbi
+#ifdef MIN_VERSION_Cabal
+-- If the macro is defined, we have new cabal-install,
+-- but for some reason we don't have cabal-doctest in package-db
+--
+-- Probably we are running cabal sdist, when otherwise using new-build
+-- workflow
+import Warning ()
#endif
- createDirectoryIfMissingVerbose verbosity True testAutogenDir
-
- -- write autogen'd file
- rewriteFile (testAutogenDir </> "Build_doctests.hs") $ unlines
- [ "module Build_doctests where"
- , ""
- -- -package-id etc. flags
- , "pkgs :: [String]"
- , "pkgs = " ++ (show $ formatDeps $ testDeps libcfg suitecfg)
- , ""
- , "flags :: [String]"
- , "flags = " ++ show (iArgs ++ includeArgs ++ dbFlags ++ cppFlags)
- , ""
- , "module_sources :: [String]"
- , "module_sources = " ++ show (map display module_sources)
- ]
- where
- -- we do this check in Setup, as then doctests don't need to depend on Cabal
- isOldCompiler = maybe False id $ do
- a <- simpleParse $ showCompilerId $ compiler lbi
- b <- simpleParse "7.5"
- return $ packageVersion (a :: PackageId) < b
- formatDeps = map formatOne
- formatOne (installedPkgId, pkgId)
- -- The problem is how different cabal executables handle package databases
- -- when doctests depend on the library
- | packageId pkg == pkgId = "-package=" ++ display pkgId
- | otherwise = "-package-id=" ++ display installedPkgId
+import Distribution.Simple
- -- From Distribution.Simple.Program.GHC
- packageDbArgs :: [PackageDB] -> [String]
- packageDbArgs | isOldCompiler = packageDbArgsConf
- | otherwise = packageDbArgsDb
-
- -- GHC <7.6 uses '-package-conf' instead of '-package-db'.
- packageDbArgsConf :: [PackageDB] -> [String]
- packageDbArgsConf dbstack = case dbstack of
- (GlobalPackageDB:UserPackageDB:dbs) -> concatMap specific dbs
- (GlobalPackageDB:dbs) -> ("-no-user-package-conf")
- : concatMap specific dbs
- _ -> ierror
- where
- specific (SpecificPackageDB db) = [ "-package-conf=" ++ db ]
- specific _ = ierror
- ierror = error $ "internal error: unexpected package db stack: "
- ++ show dbstack
-
- -- GHC >= 7.6 uses the '-package-db' flag. See
- -- https://ghc.haskell.org/trac/ghc/ticket/5977.
- packageDbArgsDb :: [PackageDB] -> [String]
- -- special cases to make arguments prettier in common scenarios
- packageDbArgsDb dbstack = case dbstack of
- (GlobalPackageDB:UserPackageDB:dbs)
- | all isSpecific dbs -> concatMap single dbs
- (GlobalPackageDB:dbs)
- | all isSpecific dbs -> "-no-user-package-db"
- : concatMap single dbs
- dbs -> "-clear-package-db"
- : concatMap single dbs
- where
- single (SpecificPackageDB db) = [ "-package-db=" ++ db ]
- single GlobalPackageDB = [ "-global-package-db" ]
- single UserPackageDB = [ "-user-package-db" ]
- isSpecific (SpecificPackageDB _) = True
- isSpecific _ = False
-
-testDeps :: ComponentLocalBuildInfo -> ComponentLocalBuildInfo -> [(InstalledPackageId, PackageId)]
-testDeps xs ys = nub $ componentPackageDeps xs ++ componentPackageDeps ys
-
-defaultMainWithDoctests :: String -> IO ()
-defaultMainWithDoctests testSuiteName = defaultMainWithHooks simpleUserHooks
- { buildHook = \pkg lbi hooks flags -> do
- generateBuildModule testSuiteName flags pkg lbi
- buildHook simpleUserHooks pkg lbi hooks flags
- }
+main :: IO ()
+main = defaultMain
#endif
-main :: IO ()
-main = defaultMainWithDoctests "doctests"
-
\end{code}
diff --git a/Warning.hs b/Warning.hs
new file mode 100644
index 0000000..a5a14a9
--- /dev/null
+++ b/Warning.hs
@@ -0,0 +1,5 @@
+module Warning
+ {-# WARNING ["You are configuring this package without cabal-doctest installed.",
+ "The doctests test-suite will not work as a result.",
+ "To fix this, install cabal-doctest before configuring."] #-}
+ () where
diff --git a/hyphenation.cabal b/hyphenation.cabal
index 74eb61e..ef6fbc2 100644
--- a/hyphenation.cabal
+++ b/hyphenation.cabal
@@ -1,7 +1,7 @@
name: hyphenation
category: Text
-version: 0.7
-license: BSD3
+version: 0.7.1
+license: BSD2
cabal-version: >= 1.8
license-file: LICENSE
author: Edward A. Kmett
@@ -11,7 +11,15 @@ homepage: http://github.com/ekmett/hyphenation
bug-reports: http://github.com/ekmett/hyphenation/issues
copyright: (C) 2012-2016 Edward A. Kmett
synopsis: Configurable Knuth-Liang hyphenation
-tested-with: GHC == 7.4.2, GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.1
+tested-with: GHC == 7.0.4
+ , GHC == 7.2.2
+ , GHC == 7.4.2
+ , GHC == 7.6.3
+ , GHC == 7.8.4
+ , GHC == 7.10.3
+ , GHC == 8.0.2
+ , GHC == 8.2.2
+ , GHC == 8.4.1
description:
Configurable Knuth-Liang hyphenation
.
@@ -33,7 +41,12 @@ build-type: Custom
data-dir: data
data-files: *.hyp.txt.gz, *.pat.txt.gz, *.lic.txt.gz, *.chr.txt.gz
-extra-source-files: .travis.yml CHANGELOG.markdown HLint.hs
+extra-source-files:
+ .travis.yml
+ CHANGELOG.markdown
+ README.markdown
+ HLint.hs
+ Warning.hs
custom-setup
setup-depends:
@@ -60,6 +73,9 @@ library
unordered-containers >= 0.2.1 && < 0.3,
zlib >= 0.5 && < 0.7
+ if !impl(ghc>=7.11)
+ build-depends: semigroups >= 0.16 && < 0.19
+
if flag(embed)
build-depends: file-embed >= 0.0.7 && < 0.1
CPP-Options: "-DEMBED"
@@ -85,7 +101,7 @@ test-suite doctests
build-depends:
base,
containers,
- doctest >= 0.11.2 && < 0.12,
+ doctest >= 0.11.2 && < 0.14,
hyphenation,
unordered-containers
ghc-options: -Wall -threaded
diff --git a/src/Text/Hyphenation/Exception.hs b/src/Text/Hyphenation/Exception.hs
index abcacf1..a31bad6 100644
--- a/src/Text/Hyphenation/Exception.hs
+++ b/src/Text/Hyphenation/Exception.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
-----------------------------------------------------------------------------
-- |
-- Module : Text.Hyphenation.Exception
@@ -20,7 +22,8 @@ module Text.Hyphenation.Exception
) where
import qualified Data.HashMap.Strict as HM
-import Data.Monoid
+import Data.Monoid (Monoid(..))
+import Data.Semigroup (Semigroup(..))
import Prelude hiding (lookup)
-- | Hyphenation exceptions are special cases that should use the specified hyphenation points.
@@ -33,9 +36,16 @@ zipMin _ _ = []
-- | Exceptions permit an exact list of hyphenation locations
-- but merging exceptions is used to restrict the set when both contain the same word
+instance Semigroup Exceptions where
+ Exceptions m <> Exceptions n = Exceptions (HM.unionWith zipMin m n)
+
+-- | Exceptions permit an exact list of hyphenation locations
+-- but merging exceptions is used to restrict the set when both contain the same word
instance Monoid Exceptions where
mempty = Exceptions mempty
- Exceptions m `mappend` Exceptions n = Exceptions (HM.unionWith zipMin m n)
+#if !(MIN_VERSION_base(4,11,0))
+ mappend = (<>)
+#endif
-- | add an exception to the exception table.
-- if it is already present, this will restrict the set of hyphenations to the
diff --git a/src/Text/Hyphenation/Language.hs b/src/Text/Hyphenation/Language.hs
index 42a691b..7b808eb 100644
--- a/src/Text/Hyphenation/Language.hs
+++ b/src/Text/Hyphenation/Language.hs
@@ -53,7 +53,7 @@ import Data.ByteString.Lazy.Char8 as Char8
import Paths_hyphenation
#else
import Data.FileEmbed
-import Control.Arrow (second)
+import qualified Data.ByteString.Char8 as Strict
hyphenatorFiles :: [(FilePath, Strict.ByteString)]
hyphenatorFiles = $(embedDir "data")
diff --git a/src/Text/Hyphenation/Pattern.hs b/src/Text/Hyphenation/Pattern.hs
index eb6d597..f663370 100644
--- a/src/Text/Hyphenation/Pattern.hs
+++ b/src/Text/Hyphenation/Pattern.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
-----------------------------------------------------------------------------
-- |
-- Module : Text.Hyphenation.Pattern
@@ -20,7 +22,8 @@ module Text.Hyphenation.Pattern
) where
import qualified Data.IntMap as IM
-import Data.Monoid
+import Data.Monoid (Monoid(..))
+import Data.Semigroup (Semigroup(..))
import Prelude hiding (lookup)
import Data.Char (digitToInt, isDigit)
@@ -28,9 +31,14 @@ import Data.Char (digitToInt, isDigit)
data Patterns = Patterns [Int] (IM.IntMap Patterns)
deriving Show
+instance Semigroup Patterns where
+ Patterns ps m <> Patterns qs n = Patterns (zipMax ps qs) (IM.unionWith mappend m n)
+
instance Monoid Patterns where
mempty = Patterns [] IM.empty
- Patterns ps m `mappend` Patterns qs n = Patterns (zipMax ps qs) (IM.unionWith mappend m n)
+#if !(MIN_VERSION_base(4,11,0))
+ mappend = (<>)
+#endif
-- | Tallies the hyphenation scores for a word considering all tails.
lookupPattern :: String -> Patterns -> [Int]