nkf 0.2.0-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2a850709cca060466318b74c28bb584377ad4ec325e6440580b70b4f23efd186
4
+ data.tar.gz: e0944e5dc341458a86616509f877ad4a723b570bd425bed26e74b5a82017efe2
5
+ SHA512:
6
+ metadata.gz: d69a4aad8745e9027653c583cbe4eca6f35a0e3c348a85928ca2802470aaf5acda7fe791a4922edbaf02e61ff26d5ad10d725de885b290bc891979a238ea120c
7
+ data.tar.gz: 3a3ca9e8c43a8cfc1244318249c2cebb9f0f9f0e6b38d63c5d0809ec8a791b0c4d9817c26c5da05dfd931843130059ba791655ac2af6b8527ed43aa8619265d0
@@ -0,0 +1,7 @@
1
+ # This is a file used by GitHub to ignore the following commits on `git blame`.
2
+ #
3
+ # You can also do the same thing in your local repository with:
4
+ # $ git config --local blame.ignoreRevsFile .git-blame-ignore-revs
5
+
6
+ # Expand tabs
7
+ 564b86c8de70b636d94df815c77c5989a7a45c3b
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: 'github-actions'
4
+ directory: '/'
5
+ schedule:
6
+ interval: 'weekly'
@@ -0,0 +1,29 @@
1
+ name: build
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ ruby-versions:
7
+ uses: ruby/actions/.github/workflows/ruby_versions.yml@master
8
+ with:
9
+ engine: cruby-jruby
10
+ min_version: 2.5
11
+
12
+ build:
13
+ needs: ruby-versions
14
+ name: build (${{ matrix.ruby }} / ${{ matrix.os }})
15
+ strategy:
16
+ matrix:
17
+ ruby: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
18
+ os: [ ubuntu-latest, macos-latest ]
19
+ runs-on: ${{ matrix.os }}
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - name: Set up Ruby
23
+ uses: ruby/setup-ruby@v1
24
+ with:
25
+ ruby-version: ${{ matrix.ruby }}
26
+ - name: Install dependencies
27
+ run: bundle install
28
+ - name: Run test
29
+ run: rake compile test
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ *.bundle
10
+ *.dll
11
+ *.so
12
+ lib/nkf.jar
13
+ .idea
14
+ nkf.iml
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "rake"
4
+ gem "rake-compiler"
5
+ gem "test-unit"
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions
5
+ are met:
6
+ 1. Redistributions of source code must retain the above copyright
7
+ notice, this list of conditions and the following disclaimer.
8
+ 2. Redistributions in binary form must reproduce the above copyright
9
+ notice, this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
+
12
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
16
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
18
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
19
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22
+ SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # NKF
2
+
3
+ This is a Ruby Extension version of nkf (Network Kanji Filter).
4
+ It converts the first argument and returns converted result. Conversion
5
+ details are specified by flags as the first argument.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'nkf'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle install
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install nkf
22
+
23
+ ## Usage
24
+
25
+ ```ruby
26
+ require 'nkf'
27
+ output = NKF.nkf("-s", input)
28
+ ```
29
+
30
+ ## Development
31
+
32
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
33
+
34
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
35
+
36
+ ## Contributing
37
+
38
+ Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/nkf.
data/Rakefile ADDED
@@ -0,0 +1,24 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/test_*.rb"]
8
+ end
9
+
10
+ if RUBY_ENGINE == "jruby"
11
+ require "rake/javaextensiontask"
12
+ Rake::JavaExtensionTask.new("nkf") do |ext|
13
+ ext.source_version = "1.8"
14
+ ext.target_version = "1.8"
15
+ ext.ext_dir = "ext/java"
16
+ end
17
+
18
+ task :build => :compile
19
+ else
20
+ require 'rake/extensiontask'
21
+ Rake::ExtensionTask.new("nkf")
22
+ end
23
+
24
+ task :default => :test
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "nkf"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,58 @@
1
+ /***** BEGIN LICENSE BLOCK *****
2
+ * Version: EPL 2.0/LGPL 2.1
3
+ *
4
+ * The contents of this file are subject to the Eclipse Public
5
+ * License Version 2.0 (the "License"); you may not use this file
6
+ * except in compliance with the License. You may obtain a copy of
7
+ * the License at http://www.eclipse.org/legal/epl-v20.html
8
+ *
9
+ * Software distributed under the License is distributed on an "AS
10
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
11
+ * implied. See the License for the specific language governing
12
+ * rights and limitations under the License.
13
+ *
14
+ * Copyright (C) 2011 Koichiro Ohba <koichiro@meadowy.org>
15
+ *
16
+ * Alternatively, the contents of this file may be used under the terms of
17
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
18
+ * in which case the provisions of the LGPL are applicable instead
19
+ * of those above. If you wish to allow use of your version of this file only
20
+ * under the terms of either the LGPL, and not to allow others to
21
+ * use your version of this file under the terms of the EPL, indicate your
22
+ * decision by deleting the provisions above and replace them with the notice
23
+ * and other provisions required by the LGPL. If you do not delete
24
+ * the provisions above, a recipient may use your version of this file under
25
+ * the terms of any one of the EPL, the LGPL.
26
+ ***** END LICENSE BLOCK *****/
27
+
28
+ package org.jruby.ext.nkf;
29
+
30
+ import java.util.List;
31
+ import java.util.ArrayList;
32
+
33
+ public class Command {
34
+ private final List<Option> options = new ArrayList<Option>();
35
+ public boolean hasOption(String opt) {
36
+ for (Option option : options) {
37
+ if (opt.equals(option.getOpt())) return true;
38
+ if (opt.equals(option.getLongOpt())) return true;
39
+ }
40
+ return false;
41
+ }
42
+ public void addOption(Option opt) {
43
+ options.add(opt);
44
+ }
45
+ public Option getOption(String opt) {
46
+ for (Option option : options) {
47
+ if (opt.equals(option.getOpt())) return option;
48
+ if (opt.equals(option.getLongOpt())) return option;
49
+ }
50
+ return null;
51
+ }
52
+ public String getOptionValue(String opt) {
53
+ return getOption(opt).getValue();
54
+ }
55
+ public String toString() {
56
+ return options.toString();
57
+ }
58
+ }
@@ -0,0 +1,70 @@
1
+ /***** BEGIN LICENSE BLOCK *****
2
+ * Version: EPL 2.0/LGPL 2.1
3
+ *
4
+ * The contents of this file are subject to the Eclipse Public
5
+ * License Version 2.0 (the "License"); you may not use this file
6
+ * except in compliance with the License. You may obtain a copy of
7
+ * the License at http://www.eclipse.org/legal/epl-v20.html
8
+ *
9
+ * Software distributed under the License is distributed on an "AS
10
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
11
+ * implied. See the License for the specific language governing
12
+ * rights and limitations under the License.
13
+ *
14
+ * Copyright (C) 2011 Koichiro Ohba <koichiro@meadowy.org>
15
+ *
16
+ * Alternatively, the contents of this file may be used under the terms of
17
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
18
+ * in which case the provisions of the LGPL are applicable instead
19
+ * of those above. If you wish to allow use of your version of this file only
20
+ * under the terms of either the LGPL, and not to allow others to
21
+ * use your version of this file under the terms of the EPL, indicate your
22
+ * decision by deleting the provisions above and replace them with the notice
23
+ * and other provisions required by the LGPL. If you do not delete
24
+ * the provisions above, a recipient may use your version of this file under
25
+ * the terms of any one of the EPL, the LGPL.
26
+ ***** END LICENSE BLOCK *****/
27
+
28
+ package org.jruby.ext.nkf;
29
+
30
+ public class CommandParser {
31
+ public Command parse(Options opt, String args) {
32
+ Command cc = new Command();
33
+ String[] tokens = args.split("\\s");
34
+ for (int i = 0; i < tokens.length; i++) {
35
+ // long option
36
+ if (tokens[i].startsWith("--")) {
37
+ String s = stripDash(tokens[i]);
38
+ if (opt.hasLongOption(s)) {
39
+ cc.addOption(opt.matchLongOption(s));
40
+ }
41
+ } else {
42
+ // short option
43
+ String s = stripDash(tokens[i]);
44
+ int max = s.length();
45
+ for (int j = 0; j < max; j++) {
46
+ if (opt.hasShortOption(s)) {
47
+ Option cmd = opt.matchShortOption(s);
48
+ if (cmd.getValue() != null) {
49
+ int op_len = cmd.getValue().length();
50
+ s = s.substring(op_len);
51
+ j = j + op_len;
52
+ }
53
+ cc.addOption(cmd);
54
+ }
55
+ s = s.substring(1);
56
+ }
57
+ }
58
+ }
59
+ return cc;
60
+ }
61
+ private String stripDash(String s) {
62
+ if (s.startsWith("--")) {
63
+ return s.substring(2, s.length());
64
+ } else if (s.startsWith("-")) {
65
+ return s.substring(1, s.length());
66
+ } else {
67
+ return s;
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,13 @@
1
+ package org.jruby.ext.nkf;
2
+
3
+ import org.jruby.Ruby;
4
+ import org.jruby.runtime.load.Library;
5
+
6
+ import java.io.IOException;
7
+
8
+ public class NKFLibrary implements Library {
9
+ @Override
10
+ public void load(Ruby ruby, boolean b) throws IOException {
11
+ RubyNKF.load(ruby);
12
+ }
13
+ }
@@ -0,0 +1,80 @@
1
+ /***** BEGIN LICENSE BLOCK *****
2
+ * Version: EPL 2.0/LGPL 2.1
3
+ *
4
+ * The contents of this file are subject to the Eclipse Public
5
+ * License Version 2.0 (the "License"); you may not use this file
6
+ * except in compliance with the License. You may obtain a copy of
7
+ * the License at http://www.eclipse.org/legal/epl-v20.html
8
+ *
9
+ * Software distributed under the License is distributed on an "AS
10
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
11
+ * implied. See the License for the specific language governing
12
+ * rights and limitations under the License.
13
+ *
14
+ * Copyright (C) 2011 Koichiro Ohba <koichiro@meadowy.org>
15
+ *
16
+ * Alternatively, the contents of this file may be used under the terms of
17
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
18
+ * in which case the provisions of the LGPL are applicable instead
19
+ * of those above. If you wish to allow use of your version of this file only
20
+ * under the terms of either the LGPL, and not to allow others to
21
+ * use your version of this file under the terms of the EPL, indicate your
22
+ * decision by deleting the provisions above and replace them with the notice
23
+ * and other provisions required by the LGPL. If you do not delete
24
+ * the provisions above, a recipient may use your version of this file under
25
+ * the terms of any one of the EPL, the LGPL.
26
+ ***** END LICENSE BLOCK *****/
27
+
28
+ package org.jruby.ext.nkf;
29
+
30
+ import java.util.regex.Pattern;
31
+
32
+ public class Option {
33
+ private final String opt;
34
+ private final String longOpt;
35
+ private boolean hasArg = false;
36
+ private String value = null;
37
+ private Pattern pattern;
38
+
39
+ public Option(String opt, String longOpt, String pattern) {
40
+ this.opt = opt;
41
+ this.longOpt = longOpt;
42
+ if (pattern != null) {
43
+ this.hasArg = true;
44
+ this.pattern = Pattern.compile(pattern);
45
+ }
46
+ }
47
+ String getOpt() { return opt; }
48
+ String getLongOpt() { return longOpt; }
49
+ boolean hasShortOpt() {
50
+ return opt != null;
51
+ }
52
+ boolean hasLongOpt() {
53
+ return longOpt != null;
54
+ }
55
+ boolean hasArg() {
56
+ return hasArg;
57
+ }
58
+ public String getValue() {
59
+ return value;
60
+ }
61
+ void setValue(String v) {
62
+ value = v;
63
+ }
64
+ String getKey() {
65
+ if (opt == null)
66
+ return longOpt;
67
+ else
68
+ return opt;
69
+ }
70
+ Pattern pattern() {
71
+ return pattern;
72
+ }
73
+ public String toString() {
74
+ return "[opt: " + opt
75
+ + " longOpt: " + longOpt
76
+ + " hasArg: " + hasArg
77
+ + " pattern: " + pattern
78
+ + " value: " + value + "]";
79
+ }
80
+ }
@@ -0,0 +1,109 @@
1
+ /***** BEGIN LICENSE BLOCK *****
2
+ * Version: EPL 2.0/LGPL 2.1
3
+ *
4
+ * The contents of this file are subject to the Eclipse Public
5
+ * License Version 2.0 (the "License"); you may not use this file
6
+ * except in compliance with the License. You may obtain a copy of
7
+ * the License at http://www.eclipse.org/legal/epl-v20.html
8
+ *
9
+ * Software distributed under the License is distributed on an "AS
10
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
11
+ * implied. See the License for the specific language governing
12
+ * rights and limitations under the License.
13
+ *
14
+ * Copyright (C) 2011 Koichiro Ohba <koichiro@meadowy.org>
15
+ *
16
+ * Alternatively, the contents of this file may be used under the terms of
17
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
18
+ * in which case the provisions of the LGPL are applicable instead
19
+ * of those above. If you wish to allow use of your version of this file only
20
+ * under the terms of either the LGPL, and not to allow others to
21
+ * use your version of this file under the terms of the EPL, indicate your
22
+ * decision by deleting the provisions above and replace them with the notice
23
+ * and other provisions required by the LGPL. If you do not delete
24
+ * the provisions above, a recipient may use your version of this file under
25
+ * the terms of any one of the EPL, the LGPL.
26
+ ***** END LICENSE BLOCK *****/
27
+
28
+ package org.jruby.ext.nkf;
29
+
30
+ import java.util.Map;
31
+ import java.util.LinkedHashMap;
32
+ import java.util.regex.Matcher;
33
+
34
+ public class Options {
35
+ private final Map<String, Option> shortOpts = new LinkedHashMap<String, Option>();
36
+ private final Map<String, Option> longOpts = new LinkedHashMap<String, Option>();
37
+
38
+ public Options addOption(String opt) {
39
+ return addOption(opt, null);
40
+ }
41
+ public Options addOption(String opt, String longOpt) {
42
+ return addOption(opt, longOpt, null);
43
+ }
44
+ public Options addOption(String opt, String longOpt, String pattern) {
45
+ return addOption(new Option(opt, longOpt, pattern));
46
+ }
47
+ public Options addOption(Option opt) {
48
+ if (opt.hasLongOpt()) {
49
+ longOpts.put(opt.getLongOpt(), opt);
50
+ }
51
+ if (opt.hasShortOpt()) {
52
+ shortOpts.put(opt.getOpt(), opt);
53
+ }
54
+ return this;
55
+ }
56
+ boolean hasShortOption(String opt) {
57
+ for (Map.Entry<String , Option> e : shortOpts.entrySet()) {
58
+ if (opt.startsWith(e.getKey())) {
59
+ return true;
60
+ }
61
+ }
62
+ return false;
63
+ }
64
+ public Option matchShortOption(String opt) {
65
+ // independent of opt length
66
+ for (Map.Entry<String , Option> e : shortOpts.entrySet()) {
67
+ //System.out.println(opt + " = " + e.getKey());
68
+ if (opt.startsWith(e.getKey())) {
69
+ //System.out.println("match[" + e.getKey() + "]");
70
+ Option cmd = e.getValue();
71
+ if (cmd.hasArg()) {
72
+ Matcher m = cmd.pattern().matcher(opt);
73
+ if (m.find()) {
74
+ //System.out.println("regix[" + m.group() + "]");
75
+ cmd.setValue(m.group());
76
+ }
77
+ }
78
+ return cmd;
79
+ }
80
+ }
81
+ return null;
82
+ }
83
+ boolean hasLongOption(String opt) {
84
+ for (Map.Entry<String , Option> e : longOpts.entrySet()) {
85
+ if (opt.startsWith(e.getKey())) {
86
+ return true;
87
+ }
88
+ }
89
+ return false;
90
+ }
91
+ Option matchLongOption(String opt) {
92
+ for (Map.Entry<String , Option> e : longOpts.entrySet()) {
93
+ //System.out.println(opt + " = " + e.getKey());
94
+ if (opt.startsWith(e.getKey())) {
95
+ //System.out.println("match[" + e.getKey() + "]");
96
+ Option cmd = e.getValue();
97
+ if (cmd.hasArg()) {
98
+ Matcher m = cmd.pattern().matcher(opt);
99
+ if (m.find()) {
100
+ //System.out.println("regix[" + m.group() + "]");
101
+ cmd.setValue(m.group(1));
102
+ }
103
+ }
104
+ return cmd;
105
+ }
106
+ }
107
+ return null;
108
+ }
109
+ }