taglib-ruby 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1289419ad11f81f79052e260fbb9e1debbf2cd956389797bb6b664356e287ec0
4
- data.tar.gz: '0582a88e09b6e96108a2e4a51a34e5c486f0552918780f38b1c4f05a448745d3'
3
+ metadata.gz: a55f54bdc833c65711a28fbbe37d76b25f0b0c09eadc035e468c342805b4634f
4
+ data.tar.gz: dbcee5669f1aa0675026aed4f644f37bffd3025c3553a516eaf1187348147235
5
5
  SHA512:
6
- metadata.gz: 966e6e0fed73bb68ed20a6f4e9cab07b98f476220e5a294d77f679ea748ddb245e5221241845c7ad515337d1d3f673ebce6cb293cc97ca5e773a385e7e7110e3
7
- data.tar.gz: 35ac3a6342f59be0c6641b861a0c9c9f2b00a2914d12fa8bc4bc05b5ba3af5c2f0199d8b3eb67155146b142274597ab8456ed1df48a72b30bbf90a1ebe86caf5
6
+ metadata.gz: 29780812c27444ee090922a6c132bbc39f4a31332bc9b5b76c69170ecfca0f52a0b4e885ba3f7db5d389c86ad4bd55ffca06f4f28621a70b487e175f6c08f6a8
7
+ data.tar.gz: 7b17dcb6eaf9a80bc12ff4e31d1032935a874b1fb49c283d054f9b2605d1eac56deeb716f35944f6e407bd47f10c1aa1a71a893de354ff6f52b2e448b7150b55
@@ -0,0 +1 @@
1
+ github: robinst
data/CHANGELOG.md CHANGED
@@ -6,6 +6,12 @@ All notable changes to this project will be documented in this file.
6
6
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
7
7
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
8
8
 
9
+ ## 1.1.3 - 2022-12-29
10
+ ### Changed
11
+ - Fix warning `warning: undefining the allocator of T_DATA class
12
+ swig_runtime_data` on Ruby 3.2
13
+ - Upgraded to SWIG 4.1.1
14
+
9
15
  ## 1.1.2 - 2022-04-13
10
16
  ### Fixed
11
17
  - Fix UserTextIdentificationFrame's constructor so that overloaded
data/README.md CHANGED
@@ -151,7 +151,7 @@ To do everything in one command:
151
151
 
152
152
  ## License
153
153
 
154
- Copyright (c) 2010-2020 Robin Stocker and others, see Git history.
154
+ Copyright (c) 2010-2022 Robin Stocker and others, see Git history.
155
155
 
156
156
  `taglib-ruby` is distributed under the MIT License, see
157
157
  [LICENSE.txt](LICENSE.txt) for details.
@@ -23,6 +23,7 @@
23
23
  %ignore TagLib::RIFF::AIFF::File::File(IOStream *, bool, Properties::ReadStyle);
24
24
  %ignore TagLib::RIFF::AIFF::File::File(IOStream *, bool);
25
25
  %ignore TagLib::RIFF::AIFF::File::File(IOStream *);
26
+ %ignore TagLib::RIFF::AIFF::File::isSupported(IOStream *);
26
27
 
27
28
  // Ignore the unified property interface.
28
29
  %ignore TagLib::RIFF::AIFF::File::properties;
@@ -1,45 +1,17 @@
1
1
  /* ----------------------------------------------------------------------------
2
- * This file was automatically generated by SWIG (http://www.swig.org).
3
- * Version 4.0.2
2
+ * This file was automatically generated by SWIG (https://www.swig.org).
3
+ * Version 4.1.1
4
4
  *
5
- * This file is not intended to be easily readable and contains a number of
6
- * coding conventions designed to improve portability and efficiency. Do not make
7
- * changes to this file unless you know what you are doing--modify the SWIG
8
- * interface file instead.
5
+ * Do not make changes to this file unless you know what you are doing - modify
6
+ * the SWIG interface file instead.
9
7
  * ----------------------------------------------------------------------------- */
10
8
 
11
9
  static void free_taglib_riff_aiff_file(void *ptr);
12
10
 
13
11
 
14
12
 
15
- #ifndef SWIGRUBY
13
+ #define SWIG_VERSION 0x040101
16
14
  #define SWIGRUBY
17
- #endif
18
-
19
-
20
-
21
- #ifdef __cplusplus
22
- /* SwigValueWrapper is described in swig.swg */
23
- template<typename T> class SwigValueWrapper {
24
- struct SwigMovePointer {
25
- T *ptr;
26
- SwigMovePointer(T *p) : ptr(p) { }
27
- ~SwigMovePointer() { delete ptr; }
28
- SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; }
29
- } pointer;
30
- SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
31
- SwigValueWrapper(const SwigValueWrapper<T>& rhs);
32
- public:
33
- SwigValueWrapper() : pointer(0) { }
34
- SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; }
35
- operator T&() const { return *pointer.ptr; }
36
- T *operator&() { return pointer.ptr; }
37
- };
38
-
39
- template <typename T> T SwigValueInit() {
40
- return T();
41
- }
42
- #endif
43
15
 
44
16
  /* -----------------------------------------------------------------------------
45
17
  * This section contains generic SWIG labels for method/variable
@@ -335,6 +307,8 @@ template <typename T> T SwigValueInit() {
335
307
  #define SWIG_POINTER_DISOWN 0x1
336
308
  #define SWIG_CAST_NEW_MEMORY 0x2
337
309
  #define SWIG_POINTER_NO_NULL 0x4
310
+ #define SWIG_POINTER_CLEAR 0x8
311
+ #define SWIG_POINTER_RELEASE (SWIG_POINTER_CLEAR | SWIG_POINTER_DISOWN)
338
312
 
339
313
  /* Flags for new pointer objects */
340
314
  #define SWIG_POINTER_OWN 0x1
@@ -406,7 +380,7 @@ template <typename T> T SwigValueInit() {
406
380
  SWIG errors code.
407
381
 
408
382
  Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
409
- allows to return the 'cast rank', for example, if you have this
383
+ allows returning the 'cast rank', for example, if you have this
410
384
 
411
385
  int food(double)
412
386
  int fooi(int);
@@ -420,7 +394,13 @@ template <typename T> T SwigValueInit() {
420
394
  */
421
395
 
422
396
  #define SWIG_OK (0)
397
+ /* Runtime errors are < 0 */
423
398
  #define SWIG_ERROR (-1)
399
+ /* Errors in range -1 to -99 are in swigerrors.swg (errors for all languages including those not using the runtime) */
400
+ /* Errors in range -100 to -199 are language specific errors defined in *errors.swg */
401
+ /* Errors < -200 are generic runtime specific errors */
402
+ #define SWIG_ERROR_RELEASE_NOT_OWNED (-200)
403
+
424
404
  #define SWIG_IsOK(r) (r >= 0)
425
405
  #define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError)
426
406
 
@@ -435,7 +415,7 @@ template <typename T> T SwigValueInit() {
435
415
  #define SWIG_OLDOBJ (SWIG_OK)
436
416
  #define SWIG_NEWOBJ (SWIG_OK | SWIG_NEWOBJMASK)
437
417
  #define SWIG_TMPOBJ (SWIG_OK | SWIG_TMPOBJMASK)
438
- /* Check, add and del mask methods */
418
+ /* Check, add and del object mask methods */
439
419
  #define SWIG_AddNewMask(r) (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
440
420
  #define SWIG_DelNewMask(r) (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
441
421
  #define SWIG_IsNewObj(r) (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
@@ -581,7 +561,7 @@ SWIG_TypeCheck(const char *c, swig_type_info *ty) {
581
561
  Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison
582
562
  */
583
563
  SWIGRUNTIME swig_cast_info *
584
- SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) {
564
+ SWIG_TypeCheckStruct(const swig_type_info *from, swig_type_info *ty) {
585
565
  if (ty) {
586
566
  swig_cast_info *iter = ty->cast;
587
567
  while (iter) {
@@ -641,9 +621,9 @@ SWIG_TypeName(const swig_type_info *ty) {
641
621
  SWIGRUNTIME const char *
642
622
  SWIG_TypePrettyName(const swig_type_info *type) {
643
623
  /* The "str" field contains the equivalent pretty names of the
644
- type, separated by vertical-bar characters. We choose
645
- to print the last name, as it is often (?) the most
646
- specific. */
624
+ type, separated by vertical-bar characters. Choose the last
625
+ name. It should be the most specific; a fully resolved name
626
+ but not necessarily with default template parameters expanded. */
647
627
  if (!type) return NULL;
648
628
  if (type->str != NULL) {
649
629
  const char *last_name = type->str;
@@ -863,7 +843,7 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
863
843
  }
864
844
  #endif
865
845
 
866
- /* Errors in SWIG */
846
+ /* SWIG Errors applicable to all language modules, values are reserved from -1 to -99 */
867
847
  #define SWIG_UnknownError -1
868
848
  #define SWIG_IOError -2
869
849
  #define SWIG_RuntimeError -3
@@ -879,9 +859,25 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
879
859
  #define SWIG_NullReferenceError -13
880
860
 
881
861
 
862
+ #if __GNUC__ >= 7
863
+ #pragma GCC diagnostic push
864
+ #if defined(__cplusplus)
865
+ #pragma GCC diagnostic ignored "-Wregister"
866
+ #if __GNUC__ >= 10
867
+ #pragma GCC diagnostic ignored "-Wvolatile"
868
+ #if __GNUC__ >= 11
869
+ #pragma GCC diagnostic ignored "-Wdeprecated-enum-enum-conversion"
870
+ #endif
871
+ #endif
872
+ #endif
873
+ #endif
882
874
 
883
875
  #include <ruby.h>
884
876
 
877
+ #if __GNUC__ >= 7
878
+ #pragma GCC diagnostic pop
879
+ #endif
880
+
885
881
  /* Ruby 1.9.1 has a "memoisation optimisation" when compiling with GCC which
886
882
  * breaks using rb_intern as an lvalue, as SWIG does. We work around this
887
883
  * issue for now by disabling this.
@@ -1661,6 +1657,11 @@ SWIG_Ruby_ConvertPtrAndOwn(VALUE obj, void **ptr, swig_type_info *ty, int flags,
1661
1657
  own->own = 0;
1662
1658
  }
1663
1659
 
1660
+ if (((flags & SWIG_POINTER_RELEASE) == SWIG_POINTER_RELEASE)) {
1661
+ if (!RDATA(obj)->dfree)
1662
+ return SWIG_ERROR_RELEASE_NOT_OWNED;
1663
+ }
1664
+
1664
1665
  /* Check to see if the input object is giving up ownership
1665
1666
  of the underlying C struct or C++ object. If so then we
1666
1667
  need to reset the destructor since the Ruby object no
@@ -1672,7 +1673,7 @@ SWIG_Ruby_ConvertPtrAndOwn(VALUE obj, void **ptr, swig_type_info *ty, int flags,
1672
1673
  swig_class *sklass = (swig_class *) ty->clientdata;
1673
1674
  track = sklass->trackObjects;
1674
1675
  }
1675
-
1676
+
1676
1677
  if (track) {
1677
1678
  /* We are tracking objects for this class. Thus we change the destructor
1678
1679
  * to SWIG_RubyRemoveTracking. This allows us to
@@ -1686,6 +1687,10 @@ SWIG_Ruby_ConvertPtrAndOwn(VALUE obj, void **ptr, swig_type_info *ty, int flags,
1686
1687
  }
1687
1688
  }
1688
1689
 
1690
+ if (flags & SWIG_POINTER_CLEAR) {
1691
+ DATA_PTR(obj) = 0;
1692
+ }
1693
+
1689
1694
  /* Do type-checking if type info was provided */
1690
1695
  if (ty) {
1691
1696
  if (ty->clientdata) {
@@ -1793,6 +1798,7 @@ SWIG_Ruby_SetModule(swig_module_info *pointer)
1793
1798
  {
1794
1799
  /* register a new class */
1795
1800
  VALUE cl = rb_define_class("swig_runtime_data", rb_cObject);
1801
+ rb_undef_alloc_func(cl);
1796
1802
  /* create and store the structure pointer to a global variable */
1797
1803
  swig_runtime_data_type_pointer = Data_Wrap_Struct(cl, 0, 0, pointer);
1798
1804
  rb_define_readonly_variable("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, &swig_runtime_data_type_pointer);
@@ -1823,7 +1829,7 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
1823
1829
  {
1824
1830
  if ( rb_respond_to( proc, swig_arity_id ) )
1825
1831
  {
1826
- VALUE num = rb_funcall( proc, swig_arity_id, 0 );
1832
+ VALUE num = rb_funcall2( proc, swig_arity_id, 0, 0 );
1827
1833
  int arity = NUM2INT(num);
1828
1834
  if ( arity < 0 && (arity+1) < -minimal ) return 1;
1829
1835
  if ( arity == minimal ) return 1;
@@ -1841,7 +1847,7 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
1841
1847
 
1842
1848
  #define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
1843
1849
 
1844
- #define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else
1850
+ #define SWIG_contract_assert(expr, msg) do { if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } } while (0)
1845
1851
 
1846
1852
 
1847
1853
 
@@ -1868,12 +1874,56 @@ static swig_module_info swig_module = {swig_types, 9, 0, 0, 0, 0};
1868
1874
 
1869
1875
  static VALUE mAIFF;
1870
1876
 
1871
- #define SWIG_RUBY_THREAD_BEGIN_BLOCK
1872
- #define SWIG_RUBY_THREAD_END_BLOCK
1877
+ #ifdef __cplusplus
1878
+ #include <utility>
1879
+ /* SwigValueWrapper is described in swig.swg */
1880
+ template<typename T> class SwigValueWrapper {
1881
+ struct SwigSmartPointer {
1882
+ T *ptr;
1883
+ SwigSmartPointer(T *p) : ptr(p) { }
1884
+ ~SwigSmartPointer() { delete ptr; }
1885
+ SwigSmartPointer& operator=(SwigSmartPointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; }
1886
+ void reset(T *p) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = p; }
1887
+ } pointer;
1888
+ SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
1889
+ SwigValueWrapper(const SwigValueWrapper<T>& rhs);
1890
+ public:
1891
+ SwigValueWrapper() : pointer(0) { }
1892
+ SwigValueWrapper& operator=(const T& t) { SwigSmartPointer tmp(new T(t)); pointer = tmp; return *this; }
1893
+ #if __cplusplus >=201103L
1894
+ SwigValueWrapper& operator=(T&& t) { SwigSmartPointer tmp(new T(std::move(t))); pointer = tmp; return *this; }
1895
+ operator T&&() const { return std::move(*pointer.ptr); }
1896
+ #else
1897
+ operator T&() const { return *pointer.ptr; }
1898
+ #endif
1899
+ T *operator&() const { return pointer.ptr; }
1900
+ static void reset(SwigValueWrapper& t, T *p) { t.pointer.reset(p); }
1901
+ };
1873
1902
 
1903
+ /*
1904
+ * SwigValueInit() is a generic initialisation solution as the following approach:
1905
+ *
1906
+ * T c_result = T();
1907
+ *
1908
+ * doesn't compile for all types for example:
1909
+ *
1910
+ * unsigned int c_result = unsigned int();
1911
+ */
1912
+ template <typename T> T SwigValueInit() {
1913
+ return T();
1914
+ }
1874
1915
 
1875
- #define SWIGVERSION 0x040002
1876
- #define SWIG_VERSION SWIGVERSION
1916
+ #if __cplusplus >=201103L
1917
+ # define SWIG_STD_MOVE(OBJ) std::move(OBJ)
1918
+ #else
1919
+ # define SWIG_STD_MOVE(OBJ) OBJ
1920
+ #endif
1921
+
1922
+ #endif
1923
+
1924
+
1925
+ #define SWIG_RUBY_THREAD_BEGIN_BLOCK
1926
+ #define SWIG_RUBY_THREAD_END_BLOCK
1877
1927
 
1878
1928
 
1879
1929
  #define SWIG_as_voidptr(a) const_cast< void * >(static_cast< const void * >(a))
@@ -2042,7 +2092,7 @@ SWIG_ruby_failed(VALUE SWIGUNUSEDPARM(arg1), VALUE SWIGUNUSEDPARM(arg2))
2042
2092
  }
2043
2093
 
2044
2094
 
2045
- /*@SWIG:/usr/local/Cellar/swig/4.0.2/share/swig/4.0.2/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
2095
+ /*@SWIG:/usr/local/Cellar/swig/4.1.1/share/swig/4.1.1/ruby/rubyprimtypes.swg,19,%ruby_aux_method@*/
2046
2096
  SWIGINTERN VALUE SWIG_AUX_NUM2LONG(VALUE arg)
2047
2097
  {
2048
2098
  VALUE *args = (VALUE *)arg;
@@ -2641,7 +2691,7 @@ SWIGINTERN VALUE _wrap_new_File(int nargs, VALUE *args, VALUE self) {
2641
2691
  argv[ii] = args[ii];
2642
2692
  }
2643
2693
  if (argc == 1) {
2644
- int _v;
2694
+ int _v = 0;
2645
2695
  int res = SWIG_AsCharPtrAndSize(argv[0], 0, NULL, 0);
2646
2696
  _v = SWIG_CheckState(res);
2647
2697
  if (_v) {
@@ -2649,7 +2699,7 @@ SWIGINTERN VALUE _wrap_new_File(int nargs, VALUE *args, VALUE self) {
2649
2699
  }
2650
2700
  }
2651
2701
  if (argc == 2) {
2652
- int _v;
2702
+ int _v = 0;
2653
2703
  int res = SWIG_AsCharPtrAndSize(argv[0], 0, NULL, 0);
2654
2704
  _v = SWIG_CheckState(res);
2655
2705
  if (_v) {
@@ -2663,7 +2713,7 @@ SWIGINTERN VALUE _wrap_new_File(int nargs, VALUE *args, VALUE self) {
2663
2713
  }
2664
2714
  }
2665
2715
  if (argc == 3) {
2666
- int _v;
2716
+ int _v = 0;
2667
2717
  int res = SWIG_AsCharPtrAndSize(argv[0], 0, NULL, 0);
2668
2718
  _v = SWIG_CheckState(res);
2669
2719
  if (_v) {
@@ -2822,7 +2872,7 @@ static swig_type_info _swigt__p_TagLib__RIFF__AIFF__File = {"_p_TagLib__RIFF__AI
2822
2872
  static swig_type_info _swigt__p_TagLib__RIFF__AIFF__Properties = {"_p_TagLib__RIFF__AIFF__Properties", "TagLib::RIFF::AIFF::Properties *", 0, 0, (void*)0, 0};
2823
2873
  static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
2824
2874
  static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "TagLib::uchar *|unsigned char *", 0, 0, (void*)0, 0};
2825
- static swig_type_info _swigt__p_unsigned_int = {"_p_unsigned_int", "unsigned int *|TagLib::uint *", 0, 0, (void*)0, 0};
2875
+ static swig_type_info _swigt__p_unsigned_int = {"_p_unsigned_int", "TagLib::uint *|unsigned int *", 0, 0, (void*)0, 0};
2826
2876
  static swig_type_info _swigt__p_unsigned_long = {"_p_unsigned_long", "TagLib::ulong *|unsigned long *", 0, 0, (void*)0, 0};
2827
2877
  static swig_type_info _swigt__p_wchar_t = {"_p_wchar_t", "TagLib::wchar *|wchar_t *", 0, 0, (void*)0, 0};
2828
2878
 
@@ -2915,9 +2965,12 @@ extern "C" {
2915
2965
  #define SWIGRUNTIME_DEBUG
2916
2966
  #endif
2917
2967
 
2968
+ #ifndef SWIG_INIT_CLIENT_DATA_TYPE
2969
+ #define SWIG_INIT_CLIENT_DATA_TYPE void *
2970
+ #endif
2918
2971
 
2919
2972
  SWIGRUNTIME void
2920
- SWIG_InitializeModule(void *clientdata) {
2973
+ SWIG_InitializeModule(SWIG_INIT_CLIENT_DATA_TYPE clientdata) {
2921
2974
  size_t i;
2922
2975
  swig_module_info *module_head, *iter;
2923
2976
  int init;
@@ -34,13 +34,25 @@ namespace TagLib {
34
34
 
35
35
  // Rename setters to Ruby convention (combining SWIG rename functions
36
36
  // does not seem to be possible, thus resort to some magic)
37
+ // We used to do this with one "command" filter, but support for that was
38
+ // removed in SWIG 4.1.0. This is a bit uglier because we need one filter for
39
+ // setOne, one for setOneTwo, and one for setOneTwoThree. Looks like we don't
40
+ // need one for 4 yet.
37
41
  // setFoo -> foo=
38
- %rename("%(command: perl -e \"print lc(join('_', split(/(?=[A-Z])/, substr(@ARGV[0], 3)))), '='\" )s",
39
- regexmatch$name="^set[A-Z]") "";
42
+ %rename("%(regex:/set([A-Z][a-z]*)([A-Z][a-z]*)([A-Z][a-z]*)/\\L\\1_\\2_\\3=/)s",
43
+ regexmatch$name="^set([A-Z][a-z]*){3}$") "";
44
+ %rename("%(regex:/set([A-Z][a-z]*)([A-Z][a-z]*)/\\L\\1_\\2=/)s",
45
+ regexmatch$name="^set([A-Z][a-z]*){2}$") "";
46
+ %rename("%(regex:/set([A-Z][a-z]*)/\\L\\1=/)s",
47
+ regexmatch$name="^set([A-Z][a-z]*)$") "";
40
48
 
41
49
  // isFoo -> foo?
42
- %rename("%(command: perl -e \"print lc(join('_', split(/(?=[A-Z])/, substr(@ARGV[0], 2)))), '?'\" )s",
43
- regexmatch$name="^is[A-Z]") "";
50
+ %rename("%(regex:/is([A-Z][a-z]*)([A-Z][a-z]*)([A-Z][a-z]*)/\\L\\1_\\2_\\3?/)s",
51
+ regexmatch$name="^is([A-Z][a-z]*){3}$") "";
52
+ %rename("%(regex:/is([A-Z][a-z]*)([A-Z][a-z]*)/\\L\\1_\\2?/)s",
53
+ regexmatch$name="^is([A-Z][a-z]*){2}$") "";
54
+ %rename("%(regex:/is([A-Z][a-z]*)/\\L\\1?/)s",
55
+ regexmatch$name="^is([A-Z][a-z]*)$") "";
44
56
 
45
57
  // ByteVector
46
58
  %typemap(out) TagLib::ByteVector {