Hello community,
here is the log from the commit of package ghc-hslua-module-text for
openSUSE:Factory checked in at 2020-08-28 21:33:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-hslua-module-text (Old)
and /work/SRC/openSUSE:Factory/.ghc-hslua-module-text.new.3399 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-hslua-module-text"
Fri Aug 28 21:33:29 2020 rev:7 rq:829305 version:0.3.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/ghc-hslua-module-text/ghc-hslua-module-text.changes
2020-06-19 17:13:24.054154334 +0200
+++
/work/SRC/openSUSE:Factory/.ghc-hslua-module-text.new.3399/ghc-hslua-module-text.changes
2020-08-28 21:33:34.244672428 +0200
@@ -1,0 +2,17 @@
+Tue Aug 18 10:45:05 UTC 2020 - Peter Simons <[email protected]>
+
+- Replace %setup -q with the more modern %autosetup macro.
+
+-------------------------------------------------------------------
+Sun Aug 16 02:01:35 UTC 2020 - [email protected]
+
+- Update hslua-module-text to version 0.3.0.
+ ## 0.3.0 -- 2020-08-15
+
+ - Use self-documenting module. This allows to include
+ documentation with the module definition, and to auto-generate
+ documentation from that. Requires hslua-1.2.0 or newer.
+
+ - Run CI tests with all GHC 8 versions, test stack builds.
+
+-------------------------------------------------------------------
Old:
----
hslua-module-text-0.2.1.tar.gz
New:
----
hslua-module-text-0.3.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-hslua-module-text.spec ++++++
--- /var/tmp/diff_new_pack.Ocascq/_old 2020-08-28 21:33:34.872672726 +0200
+++ /var/tmp/diff_new_pack.Ocascq/_new 2020-08-28 21:33:34.872672726 +0200
@@ -1,7 +1,7 @@
#
# spec file for package ghc-hslua-module-text
#
-# Copyright (c) 2019 SUSE LLC
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%global pkg_name hslua-module-text
%bcond_with tests
Name: ghc-%{pkg_name}
-Version: 0.2.1
+Version: 0.3.0
Release: 0
Summary: Lua module for text
License: MIT
@@ -33,6 +33,7 @@
%if %{with tests}
BuildRequires: ghc-tasty-devel
BuildRequires: ghc-tasty-hunit-devel
+BuildRequires: ghc-tasty-lua-devel
%endif
%description
@@ -50,7 +51,7 @@
files.
%prep
-%setup -q -n %{pkg_name}-%{version}
+%autosetup -n %{pkg_name}-%{version}
%build
%ghc_lib_build
++++++ hslua-module-text-0.2.1.tar.gz -> hslua-module-text-0.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hslua-module-text-0.2.1/ChangeLog.md
new/hslua-module-text-0.3.0/ChangeLog.md
--- old/hslua-module-text-0.2.1/ChangeLog.md 1970-01-01 01:00:00.000000000
+0100
+++ new/hslua-module-text-0.3.0/ChangeLog.md 2001-09-09 03:46:40.000000000
+0200
@@ -1,5 +1,13 @@
# Revision history for hslua-module-text
+## 0.3.0 -- 2020-08-15
+
+- Use self-documenting module. This allows to include
+ documentation with the module definition, and to auto-generate
+ documentation from that. Requires hslua-1.2.0 or newer.
+
+- Run CI tests with all GHC 8 versions, test stack builds.
+
## 0.2.1 -- 2019-05-04
- Require at least HsLua v1.0.3: that version has better support
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hslua-module-text-0.2.1/LICENSE
new/hslua-module-text-0.3.0/LICENSE
--- old/hslua-module-text-0.2.1/LICENSE 1970-01-01 01:00:00.000000000 +0100
+++ new/hslua-module-text-0.3.0/LICENSE 2001-09-09 03:46:40.000000000 +0200
@@ -1,4 +1,4 @@
-Copyright (c) 2017 Albert Krewinkel
+Copyright (c) 2017-2020 Albert Krewinkel
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hslua-module-text-0.2.1/hslua-module-text.cabal
new/hslua-module-text-0.3.0/hslua-module-text.cabal
--- old/hslua-module-text-0.2.1/hslua-module-text.cabal 1970-01-01
01:00:00.000000000 +0100
+++ new/hslua-module-text-0.3.0/hslua-module-text.cabal 2001-09-09
03:46:40.000000000 +0200
@@ -1,5 +1,5 @@
name: hslua-module-text
-version: 0.2.1
+version: 0.3.0
synopsis: Lua module for text
description: UTF-8 aware subset of Lua's `string` module.
homepage: https://github.com/hslua/hslua-module-text
@@ -7,17 +7,18 @@
license-file: LICENSE
author: Albert Krewinkel
maintainer: [email protected]
-copyright: © 2017–2019 Albert Krewinkel
+copyright: © 2017–2020 Albert Krewinkel
category: Foreign
build-type: Simple
extra-source-files: ChangeLog.md
- test/hstext-test.lua
+ test/test-text.lua
cabal-version: >=1.10
-tested-with: GHC == 7.10.3
- , GHC == 8.0.2
+tested-with: GHC == 8.0.2
, GHC == 8.2.2
, GHC == 8.4.4
, GHC == 8.6.5
+ , GHC == 8.8.3
+ , GHC == 8.10.1
source-repository head
type: git
@@ -25,9 +26,9 @@
library
exposed-modules: Foreign.Lua.Module.Text
- build-depends: base >= 4.7 && < 5
+ build-depends: base >= 4.8 && < 5
, bytestring >= 0.10.2 && < 0.11
- , hslua >= 1.0.3 && < 1.2
+ , hslua >= 1.2 && < 1.3
, text >= 1 && < 1.3
hs-source-dirs: src
default-language: Haskell2010
@@ -44,4 +45,5 @@
, hslua-module-text
, tasty
, tasty-hunit
+ , tasty-lua >= 0.2 && < 0.3
, text
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hslua-module-text-0.2.1/src/Foreign/Lua/Module/Text.hs
new/hslua-module-text-0.3.0/src/Foreign/Lua/Module/Text.hs
--- old/hslua-module-text-0.2.1/src/Foreign/Lua/Module/Text.hs 1970-01-01
01:00:00.000000000 +0100
+++ new/hslua-module-text-0.3.0/src/Foreign/Lua/Module/Text.hs 2001-09-09
03:46:40.000000000 +0200
@@ -1,7 +1,8 @@
{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeApplications #-}
{-|
Module : Foreign.Lua.Module.Text
-Copyright : © 2017–2019 Albert Krewinkel
+Copyright : © 2017–2020 Albert Krewinkel
License : MIT
Maintainer : Albert Krewinkel <[email protected]>
Stability : alpha
@@ -10,44 +11,147 @@
Provide a lua module containing a selection of useful Text functions.
-}
module Foreign.Lua.Module.Text
- ( pushModule
+
+ ( -- * Module
+ pushModule
+ , preloadModule
+ , documentedModule
+ , description
+ , functions
+
+ -- * Legacy
, pushModuleText
, preloadTextModule
- )where
+ ) where
+import Prelude hiding (reverse)
import Control.Applicative ((<$>))
import Data.ByteString (ByteString)
import Data.Text (Text)
import Data.Maybe (fromMaybe)
import Foreign.Lua (NumResults, Lua, Peekable, Pushable, ToHaskellFunction)
+import Foreign.Lua.Call
+import Foreign.Lua.Module hiding (preloadModule, pushModule)
+import Foreign.Lua.Peek (Peeker, peekIntegral, peekText)
+import Foreign.Lua.Push (pushIntegral, pushText)
import qualified Foreign.Lua as Lua
import qualified Data.Text as T
+import qualified Foreign.Lua.Module as Module
+--
+-- Module
+--
+
+-- | Textual description of the "text" module.
+description :: Text
+description =
+ "UTF-8 aware text manipulation functions, implemented in Haskell."
+
+documentedModule :: Module
+documentedModule = Module
+ { moduleName = "paths"
+ , moduleFields = []
+ , moduleDescription = description
+ , moduleFunctions = functions
+ }
+
-- | Pushes the @text@ module to the Lua stack.
pushModule :: Lua NumResults
-pushModule = do
- Lua.newtable
- Lua.addfunction "lower" (return . T.toLower :: Text -> Lua Text)
- Lua.addfunction "upper" (return . T.toUpper :: Text -> Lua Text)
- Lua.addfunction "reverse" (return . T.reverse :: Text -> Lua Text)
- Lua.addfunction "len" (return . fromIntegral . T.length :: Text -> Lua
Lua.Integer)
- Lua.addfunction "sub" sub
- return 1
+pushModule = 1 <$ Module.pushModule documentedModule
--- | Legacy alias for '@pushModule@'.
pushModuleText :: Lua NumResults
-pushModuleText = pushModule
+pushModuleText = 1 <$ Module.pushModule documentedModule
+
+-- | Add the @text@ module under the given name to the table of
+-- preloaded packages.
+preloadModule :: String -> Lua ()
+preloadModule name = Module.preloadModule $
+ documentedModule { moduleName = T.pack name }
-- | Add the text module under the given name to the table of preloaded
-- packages.
preloadTextModule :: String -> Lua ()
-preloadTextModule = flip Lua.preloadhs pushModule
+preloadTextModule = flip Lua.preloadhs pushModuleText
+
+--
+-- Functions
+--
+
+functions :: [(Text, HaskellFunction)]
+functions =
+ [ ("len", len)
+ , ("lower", lower)
+ , ("reverse", reverse)
+ , ("sub", sub)
+ , ("upper", upper)
+ ]
+
+-- | Wrapper for @'T.length'@.
+len :: HaskellFunction
+len = toHsFnPrecursor T.length
+ <#> textParam "s"
+ =#> intResult "length"
+ #? "Determines the number of characters in a string."
+
+-- | Wrapper for @'T.toLower'@.
+lower :: HaskellFunction
+lower = toHsFnPrecursor T.toLower
+ <#> textParam "s"
+ =#> textResult "Lowercase copy of `s`"
+ #? "Convert a string to lower case"
+
+-- | Wrapper for @'T.reverse'@.
+reverse :: HaskellFunction
+reverse = toHsFnPrecursor T.reverse
+ <#> textParam "s"
+ =#> textResult "Reversed `s`"
+ #? "Reverses a string."
-- | Returns a substring, using Lua's string indexing rules.
-sub :: Text -> Lua.Integer -> Lua.Optional Lua.Integer -> Lua Text
-sub s i j =
- let i' = fromIntegral i
- j' = fromIntegral . fromMaybe (-1) $ Lua.fromOptional j
- fromStart = if i' >= 0 then i' - 1 else T.length s + i'
- fromEnd = if j' < 0 then -j' - 1 else T.length s - j'
- in return . T.dropEnd fromEnd . T.drop fromStart $ s
+sub :: HaskellFunction
+sub = toHsFnPrecursor substring
+ <#> textParam "s"
+ <#> textIndex "i" "substring start position"
+ <#> textOptionalIndex "j" "substring end position"
+ =#> textResult "text substring"
+ #? "Returns a substring, using Lua's string indexing rules."
+ where
+ substring :: Text -> Int -> Maybe Int -> Text
+ substring s i jopt =
+ let j = fromMaybe (-1) jopt
+ fromStart = if i >= 0 then i - 1 else T.length s + i
+ fromEnd = if j < 0 then -j - 1 else T.length s - j
+ in T.dropEnd fromEnd . T.drop fromStart $ s
+
+-- | Wrapper for @'T.toUpper'@.
+upper :: HaskellFunction
+upper = toHsFnPrecursor T.toUpper
+ <#> textParam "s"
+ =#> textResult "Lowercase copy of `s`"
+ #? "Convert a string to lower case"
+
+--
+-- Parameters
+--
+
+textParam :: Text -> Parameter Text
+textParam name =
+ parameter peekText "string" name "UTF-8 encoded string"
+
+textIndex :: Text -> Text -> Parameter Int
+textIndex = parameter (peekIntegral @Int) "integer"
+
+textOptionalIndex :: Text -> Text -> Parameter (Maybe Int)
+textOptionalIndex = optionalParameter (peekIntegral @Int) "integer"
+
+--
+-- Results
+--
+
+textResult :: Text -- ^ Description
+ -> FunctionResults Text
+textResult = functionResult pushText "string"
+
+intResult :: Text -- ^ Description
+ -> FunctionResults Int
+intResult = functionResult (pushIntegral @Int) "integer"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hslua-module-text-0.2.1/test/hstext-test.lua
new/hslua-module-text-0.3.0/test/hstext-test.lua
--- old/hslua-module-text-0.2.1/test/hstext-test.lua 1970-01-01
01:00:00.000000000 +0100
+++ new/hslua-module-text-0.3.0/test/hstext-test.lua 1970-01-01
01:00:00.000000000 +0100
@@ -1,29 +0,0 @@
---
--- Tests for the hstext module
---
-local hstext = require 'hstext'
-
-assert(hstext.lower 'YELLING' == 'yelling')
-assert(hstext.upper 'silence' == 'SILENCE')
-assert(hstext.len 'five' == 4)
-
--- Test UTF-8
-assert(hstext.upper 'Lübeck' == 'LÜBECK')
-assert(hstext.upper 'Spaß' == 'SPASS')
-
-assert(hstext.len 'Straße' == 6)
-assert(hstext.len 'Charité' == 7)
-assert(hstext.len '☃' == 1)
-
-assert(hstext.reverse 'être' == 'ertê')
-assert(hstext.reverse 'être' == 'ertê')
-
-local hw = 'Hello, World'
-assert(string.sub(hw, 6) == hstext.sub(hw, 6))
-assert(string.sub(hw, -1, -1) == hstext.sub(hw, -1, -1))
-assert(string.sub(hw, -7, -2) == hstext.sub(hw, -7, -2))
-assert(string.sub(hw, 7, -2) == hstext.sub(hw, 7, -2))
-assert(string.sub(hw, 1, 5) == hstext.sub(hw, 1, 5))
-assert(string.sub(hw, 5, 0) == hstext.sub(hw, 5, 0))
-assert(string.sub(hw, 0, 2) == hstext.sub(hw, 0, 2))
-assert(string.sub(hw, -19, 5) == hstext.sub(hw, -19, 5))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/hslua-module-text-0.2.1/test/test-hslua-module-text.hs
new/hslua-module-text-0.3.0/test/test-hslua-module-text.hs
--- old/hslua-module-text-0.2.1/test/test-hslua-module-text.hs 1970-01-01
01:00:00.000000000 +0100
+++ new/hslua-module-text-0.3.0/test/test-hslua-module-text.hs 2001-09-09
03:46:40.000000000 +0200
@@ -1,5 +1,5 @@
{-
-Copyright © 2017–2019 Albert Krewinkel
+Copyright © 2017–2020 Albert Krewinkel
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -21,16 +21,22 @@
-}
{-# LANGUAGE OverloadedStrings #-}
-import Control.Monad (void, when)
+import Control.Monad (void)
import Foreign.Lua (Lua)
import Foreign.Lua.Module.Text (preloadTextModule, pushModuleText)
import Test.Tasty (TestTree, defaultMain, testGroup)
import Test.Tasty.HUnit (assertEqual, testCase)
+import Test.Tasty.Lua (translateResultsFromFile)
import qualified Foreign.Lua as Lua
main :: IO ()
-main = defaultMain $ testGroup "hslua-module-text" [tests]
+main = do
+ luaTest <- Lua.run $ do
+ Lua.openlibs
+ Lua.requirehs "text" (void pushModuleText)
+ translateResultsFromFile "test/test-text.lua"
+ defaultMain $ testGroup "hslua-module-text" [tests, luaTest]
-- | HSpec tests
tests :: TestTree
@@ -50,14 +56,6 @@
preloadTextModule "hstext"
assertEqual' "loading the module fails " Lua.OK =<<
Lua.dostring "require 'hstext'"
-
- , testCase "Lua tests pass" . Lua.run $ do
- Lua.openlibs
- preloadTextModule "hstext"
- assertEqual' "error while running lua tests" Lua.OK =<< do
- st <- Lua.loadfile "test/hstext-test.lua"
- when (st == Lua.OK) $ Lua.call 0 0
- return st
]
assertEqual' :: (Show a, Eq a) => String -> a -> a -> Lua ()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/hslua-module-text-0.2.1/test/test-text.lua
new/hslua-module-text-0.3.0/test/test-text.lua
--- old/hslua-module-text-0.2.1/test/test-text.lua 1970-01-01
01:00:00.000000000 +0100
+++ new/hslua-module-text-0.3.0/test/test-text.lua 2001-09-09
03:46:40.000000000 +0200
@@ -0,0 +1,78 @@
+--
+-- Tests for the text module
+--
+local text = require 'text'
+local tasty = require 'tasty'
+
+local group = tasty.test_group
+local test = tasty.test_case
+local assert = tasty.assert
+
+return {
+ group 'len' {
+ test('ASCII', function ()
+ tasty.assert.are_equal(text.len 'five!', 5)
+ end),
+ test('German sz', function ()
+ tasty.assert.are_equal(text.len 'Straße', 6)
+ end),
+ test('string with small letter e accute', function ()
+ tasty.assert.are_equal(text.len 'Charité', 7)
+ end),
+ test('Unicode snowman', function ()
+ tasty.assert.are_equal(text.len '☃', 1)
+ end)
+ },
+
+ group 'lower' {
+ test('uppercase ASCII', function ()
+ assert.are_equal(text.lower 'YELLING', 'yelling')
+ end),
+ test('lowercase ASCII', function ()
+ assert.are_equal(text.lower 'talking', 'talking')
+ end),
+ test('capitalized word with umlaut', function ()
+ assert.are_equal(text.lower 'Lübeck', 'lübeck')
+ end),
+ },
+
+ group 'upper' {
+ test('uppercase ASCII', function ()
+ assert.are_equal(text.upper 'YELLING', 'YELLING')
+ end),
+ test('lowercase ASCII', function ()
+ assert.are_equal(text.upper 'silence', 'SILENCE')
+ end),
+ test('capitalized word with umlaut', function ()
+ assert.are_equal(text.upper 'Lübeck', 'LÜBECK')
+ end),
+ test('German ß becomes double S', function ()
+ assert.are_equal(text.upper 'Spaß', 'SPASS')
+ end),
+ },
+
+ group 'reverse' {
+ test('être becomes ertê', function ()
+ assert.are_equal(text.reverse 'être', 'ertê')
+ end)
+ },
+
+ group 'sub' {
+ test('behaves like string.sub for ASCII text', function ()
+ local hw = 'Hello, World'
+ assert.are_equal(text.sub(hw, 6), string.sub(hw, 6))
+ assert.are_equal(text.sub(hw, -1, -1), string.sub(hw, -1, -1))
+ assert.are_equal(text.sub(hw, -7, -2), string.sub(hw, -7, -2))
+ assert.are_equal(text.sub(hw, 7, -2), string.sub(hw, 7, -2))
+ assert.are_equal(text.sub(hw, 1, 5), string.sub(hw, 1, 5))
+ assert.are_equal(text.sub(hw, 5, 0), string.sub(hw, 5, 0))
+ assert.are_equal(text.sub(hw, 0, 2), string.sub(hw, 0, 2))
+ assert.are_equal(text.sub(hw, -19, 5), string.sub(hw, -19, 5))
+ end),
+ test('respects UTF-8', function ()
+ assert.are_equal(text.sub('Für dich', 5), 'dich')
+ assert.are_equal(text.sub('☢ radioactive', 0, 1), '☢')
+ assert.are_equal(text.sub('☢ radioactive', -11, -1), 'radioactive')
+ end)
+ }
+}