qiita_org 0.1.4 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e1d39ee46dabf4d2acd53bd27ad8f825a1717981cd63231c2431e531f5cf8ee
4
- data.tar.gz: 5e6e874f3f83341978fba00585728811dfebf001e4cccc159ea24c958aa9aeb0
3
+ metadata.gz: 9e7a075ad1c16002e53fff794d556f9ce5bb2c6e7d5e37768a37a8deb59f28e9
4
+ data.tar.gz: aad3df025127c3e87d3ccb71a262f28083904d63b12e7371cea4c80cf68ecdf1
5
5
  SHA512:
6
- metadata.gz: b9c49a2e0405a8627caee3b7893d3abab9c957698e3b686ee6a590ab56432d70c4365a99e1c9f68a9b2e08554e2600c427af8413562d0aed7d3b328037d13869
7
- data.tar.gz: 39239a9bd1ada1fd34b42d8a27f6176d82ea7e986d8e3c2f7a434780ed9dc3d0e4c37a9d8019e49fe43263bd1f89b6650e797e0e7aee645960c887319e29413d
6
+ metadata.gz: c4e4645899b5b8ef3cf84b4203b911d3cdc3da1cf3f58d67cc1ca8d64b06f95ada184fe7491102c69fd9d75da91346db01f734ad384fcbac492a9169d81238cf
7
+ data.tar.gz: 72dcab368ce64937c26ed77e89d25face880d71cff3ac9ff5e2797dcdb78023d4d5e6be1a747813426a3851ad6f2a9b9edd7d3bffa9bd4156e8962763b039a48
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- qiita_org (0.1.3)
4
+ qiita_org (0.1.8)
5
5
  colorize
6
6
  command_line (> 2.0.0)
7
7
  fileutils
@@ -40,9 +40,10 @@ module QiitaOrg
40
40
  desc "config", "set config"
41
41
 
42
42
  def config(*argv)
43
- option = argv[0] || nil
44
- input = [argv[1], argv[2], argv[3]]
45
- config = QiitaConfig.new(option, input)
43
+ status = argv[0] || "local"
44
+ option = argv[1] || nil
45
+ input = [argv[2], argv[3], argv[4]]
46
+ config = QiitaConfig.new(status, option, input)
46
47
  config.run
47
48
  end
48
49
 
@@ -3,10 +3,20 @@ require "fileutils"
3
3
  require "json"
4
4
 
5
5
  class QiitaConfig
6
- def initialize(option, input)
6
+ def initialize(status, option, input)
7
7
  @option = option
8
8
  @input = input
9
- @setup = "#{ENV["HOME"]}/.qiita.conf"
9
+ if status == "local"
10
+ search = SearchConfPath.new(Dir.pwd, Dir.home)
11
+ conf_dir = search.search_conf_path()
12
+ if conf_dir == Dir.home || @option == "set"
13
+ @setup = File.join(Dir.pwd, ".qiita.conf")
14
+ else
15
+ @setup = File.join(conf_dir, ".qiita.conf")
16
+ end
17
+ else
18
+ @setup = File.join(Dir.home, ".qiita.conf")
19
+ end
10
20
  end
11
21
 
12
22
  # check qiita.conf or copy qiita.conf
@@ -14,7 +24,7 @@ class QiitaConfig
14
24
  lib = File.expand_path("../../../lib", __FILE__)
15
25
  cp_file = File.join(lib, "qiita_org", ".qiita.conf")
16
26
 
17
- if File.exists?("#{ENV["HOME"]}/.qiita.conf")
27
+ if File.exists?(@setup) # "# {ENV["HOME"]}/.qiita.conf")
18
28
  puts @setup.green
19
29
  print_config("now", "black")
20
30
  else
@@ -46,7 +56,7 @@ class QiitaConfig
46
56
  end
47
57
 
48
58
  def run()
49
- if @option == nil
59
+ if @option == nil || @option == "set"
50
60
  check_or_copy_config()
51
61
  else
52
62
  set_config()
@@ -3,16 +3,19 @@ require "json"
3
3
  require "open-uri"
4
4
  require "io/console"
5
5
  require "colorize"
6
+ require "qiita_org/search_conf_path.rb"
6
7
 
7
8
  class QiitaGet
8
9
  def initialize(mode, id)
9
10
  @mode = mode
10
11
  @get_id = id
12
+ search = SearchConfPath.new(Dir.pwd, Dir.home)
13
+ @conf_dir = search.search_conf_path()
11
14
  end
12
15
 
13
16
  # set config
14
17
  def set_config()
15
- conf_path = File.join(ENV["HOME"], ".qiita.conf")
18
+ conf_path = File.join(@conf_dir, ".qiita.conf")
16
19
  conf = JSON.load(File.read(conf_path))
17
20
  @access_token = conf["access_token"]
18
21
  @teams_url = conf["teams_url"]
@@ -1,9 +1,12 @@
1
1
  require "fileutils"
2
2
  require "colorize"
3
+ require "qiita_org/search_conf_path"
3
4
 
4
5
  class QiitaGetTemplate
5
6
  def initialize()
6
7
  cp_template()
8
+ search = SearchConfPath.new(Dir.pwd, Dir.home)
9
+ @conf_dir = search.search_conf_path()
7
10
  set_name_and_email()
8
11
  # check_write_header()
9
12
  check_write_contents()
@@ -83,7 +86,7 @@ class QiitaGetTemplate
83
86
  end
84
87
 
85
88
  def set_name_and_email()
86
- conf_path = File.join(ENV["HOME"], ".qiita.conf")
89
+ conf_path = File.join(@conf_dir, ".qiita.conf")
87
90
  conf = JSON.load(File.read(conf_path))
88
91
  name = conf["name"]
89
92
  email = conf["email"]
@@ -2,10 +2,13 @@ require "net/https"
2
2
  require "json"
3
3
  require "open-uri"
4
4
  require "colorize"
5
+ require "qiita_org/search_conf_path.rb"
5
6
 
6
7
  class QiitaList
7
8
  def initialize(mode)
8
9
  @mode = mode
10
+ search = SearchConfPath.new(Dir.pwd, Dir.home)
11
+ @conf_dir = search.search_conf_path()
9
12
  set_config()
10
13
  select_path()
11
14
  access_qiita()
@@ -13,7 +16,7 @@ class QiitaList
13
16
  end
14
17
 
15
18
  def set_config()
16
- conf_path = File.join(ENV["HOME"], ".qiita.conf")
19
+ conf_path = File.join(@conf_dir, ".qiita.conf")
17
20
  conf = JSON.load(File.read(conf_path))
18
21
  @access_token = conf["access_token"]
19
22
  @teams_url = conf["teams_url"]
@@ -0,0 +1,313 @@
1
+ ;;; ox-qmd.el --- Qiita Markdown Back-End for Org Export Engine
2
+
3
+ ;; Copyright (C) 2015-2020 0x60DF
4
+
5
+ ;; Author: 0x60DF <0x60DF@gmail.com>
6
+ ;; URL: https://github.com/0x60df/ox-qmd
7
+ ;; Version: 1.0.5
8
+ ;; Package-Requires: ((org "8.0"))
9
+ ;; Keywords: wp
10
+
11
+ ;; This file is not part of GNU Emacs.
12
+
13
+ ;; This program is free software: you can redistribute it and/or modify
14
+ ;; it under the terms of the GNU General Public License as published by
15
+ ;; the Free Software Foundation, either version 3 of the License, or
16
+ ;; (at your option) any later version.
17
+
18
+ ;; This program is distributed in the hope that it will be useful,
19
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
+ ;; GNU General Public License for more details.
22
+
23
+ ;; You should have received a copy of the GNU General Public License
24
+ ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
25
+
26
+ ;;; Commentary:
27
+
28
+ ;; This library implements a Markdown back-end (qiita flavor) for
29
+ ;; Org exporter, based on `md' back-end and `gfm' back-end.
30
+
31
+ ;; See http://orgmode.org/ for infomation about Org-mode and `md' back-end.
32
+ ;; See http://github.com/larstvei/ox-gfm for information about `gfm' back-end.
33
+
34
+ ;;; Code:
35
+
36
+ (require 'ox-md)
37
+
38
+
39
+ ;;; User-Configurable Variables
40
+
41
+ (defvar ox-qmd-language-keyword-alist '(("emacs-lisp" . "el")))
42
+ (defvar ox-qmd-unfill-paragraph t)
43
+
44
+
45
+
46
+ ;;; Define Back-End
47
+
48
+ (org-export-define-derived-backend 'qmd 'md
49
+ :filters-alist '((:filter-paragraph . org-qmd--unfill-paragraph))
50
+ :menu-entry
51
+ '(?9 "Export to Qiita Markdown"
52
+ ((?0 "To temporary buffer"
53
+ (lambda (a s v b) (org-qmd-export-as-markdown a s v)))
54
+ (?9 "To file" (lambda (a s v b) (org-qmd-export-to-markdown a s v)))
55
+ (?o "To file and open"
56
+ (lambda (a s v b)
57
+ (if a (org-qmd-export-to-markdown t s v)
58
+ (org-open-file (org-qmd-export-to-markdown nil s v)))))
59
+ (?s "To temporary buffer from subtree"
60
+ (lambda (a s v b) (org-qmd-export-as-markdown a t v)))))
61
+ :translate-alist '((headline . org-qmd--headline)
62
+ (inner-template . org-qmd--inner-template)
63
+ (keyword . org--qmd-keyword)
64
+ (strike-through . org-qmd--strike-through)
65
+ (underline . org-qmd--undeline)
66
+ (src-block . org-qmd--src-block)
67
+ (latex-fragment . org-qmd--latex-fragment)
68
+ (latex-environment . org-qmd--latex-environment)
69
+ (table . org-qmd--table)))
70
+
71
+
72
+
73
+ ;;; Filters
74
+
75
+ (defun org-qmd--unfill-paragraph (paragraph backend info)
76
+ "Unfill PARAGRAPH element.
77
+ Remove newline from PARAGRAPH and replace line-break string
78
+ with newline in PARAGRAPH if user-configurable variable
79
+ `ox-qmd-unfill-paragraph' is non-nil."
80
+ (if (and (org-export-derived-backend-p backend 'qmd)
81
+ ox-qmd-unfill-paragraph)
82
+ (concat (replace-regexp-in-string
83
+ " \n" "\n" (replace-regexp-in-string
84
+ "\\([^ ][^ ]\\|[^ ] \\| [^ ]\\)\n" "\\1" paragraph))
85
+ "\n")
86
+ paragraph))
87
+
88
+
89
+
90
+ ;;; Transcode Functions
91
+
92
+ (defun org-qmd--headline (headline contents info)
93
+ "Transcode HEADLINE element into Qiita Markdown format.
94
+ CONTENTS is a content of the HEADLINE. INFO is a plist used
95
+ as a communication channel."
96
+ (let* ((info (copy-sequence info))
97
+ (info (plist-put info :with-toc nil)))
98
+ (org-md-headline headline contents info)))
99
+
100
+
101
+ (defun org-qmd--inner-template (contents info)
102
+ "Return body of document after converting it to Qiita Markdown syntax.
103
+ CONTENTS is the transcoded contents string. INFO is a plist
104
+ holding export options."
105
+ (let* ((info (copy-sequence info))
106
+ (info (plist-put info :with-toc nil)))
107
+ (org-md-inner-template contents info)))
108
+
109
+
110
+ (defun org-qmd--keyword (keyword contents info)
111
+ "Transcode a KEYWORD element into Qiita Markdown format.
112
+ CONTENTS is nil. INFO is a plist used as a communication
113
+ channel."
114
+ (let* ((info (copy-sequence info))
115
+ (info (plist-put info :with-toc nil)))
116
+ (org-html-keyword keyword contents info)))
117
+
118
+
119
+ (defun org-qmd--src-block (src-block contents info)
120
+ "Transcode SRC-BLOCK element into Qiita Markdown format.
121
+ CONTENTS is nil. INFO is a plist used as a communication
122
+ channel."
123
+ (let* ((lang (org-element-property :language src-block))
124
+ (lang (or (cdr (assoc lang ox-qmd-language-keyword-alist)) lang))
125
+ (name (org-element-property :name src-block))
126
+ (code (org-export-format-code-default src-block info))
127
+ (prefix (concat "```" lang (if name (concat ":" name) nil) "\n"))
128
+ (suffix "```"))
129
+ (concat prefix code suffix)))
130
+
131
+
132
+ (defun org-qmd--strike-through (strike-through contents info)
133
+ "Transcode STRIKE-THROUGH element into Qiita Markdown format.
134
+ CONTENTS is a content of the STRIKE-THROUGH. INFO is a plist
135
+ used as a communication channel."
136
+ (format "~~%s~~" contents))
137
+
138
+
139
+ (defun org-qmd--undeline (underline contents info)
140
+ "Transcode UNDERLINE element into Qiita Markdown format.
141
+ CONTENTS is a content of the UNDELINE. INFO is a plist used
142
+ as a communication channel."
143
+ contents)
144
+
145
+
146
+ (defun org-qmd--latex-fragment (latex-fragment contents info)
147
+ "Transcode a LATEX-FRAGMENT element into Qiita Markdown format.
148
+ CONTENTS is nil. INFO is a plist used as a communication
149
+ channel."
150
+ (replace-regexp-in-string
151
+ "^\\\\(\\(.+\\)\\\\)$" "$\\1$"
152
+ (replace-regexp-in-string
153
+ "^\\\\\\[\\(.+\\)\\\\\\]$" "$$\\1$$"
154
+ (let* ((info (copy-sequence info))
155
+ (info (plist-put info :with-latex 'verbatim)))
156
+ (org-html-latex-fragment latex-fragment contents info)))))
157
+
158
+
159
+ (defun org-qmd--latex-environment (latex-environment contents info)
160
+ "Transcode a LATEX-ENVIRONMENT element into Qiita Markdown format.
161
+ CONTENTS is nil. INFO is a plist used as a communication
162
+ channel."
163
+ (replace-regexp-in-string
164
+ "^.*?\\\\begin{.+}.*?$" "```math"
165
+ (replace-regexp-in-string
166
+ "^.*?\\\\end{.+}.*?$" "```"
167
+ (let* ((info (copy-sequence info))
168
+ (info (plist-put info :with-latex 'verbatim)))
169
+ (org-html-latex-environment latex-environment contents info)))))
170
+
171
+
172
+ (defun org-qmd--table (table contents info)
173
+ "Transcode a TABLE element into Qiita Markdown format.
174
+ CONTENTS is a content of the table. INFO is a plist used as
175
+ a communication channel."
176
+ (letrec ((filter (lambda (p l)
177
+ (cond ((null l) l)
178
+ ((funcall p (car l)) (funcall filter p (cdr l)))
179
+ (t (cons (car l) (funcall filter p (cdr l)))))))
180
+ (zip (lambda (&rest l)
181
+ (cond ((null (car l)) (car l))
182
+ (t (cons (mapcar 'car l)
183
+ (apply zip (mapcar 'cdr l))))))))
184
+ (let* ((rows (org-element-map table 'table-row 'identity info))
185
+ (non-rule-rows
186
+ (funcall filter (lambda (row)
187
+ (eq 'rule (org-element-property :type row)))
188
+ rows))
189
+ (alignments (org-element-map (car non-rule-rows) 'table-cell
190
+ (lambda (cell)
191
+ (org-export-table-cell-alignment cell info))
192
+ info))
193
+ (widths (mapcar
194
+ (lambda (column)
195
+ (let ((max-difference
196
+ (apply
197
+ 'max (mapcar
198
+ (lambda (cell)
199
+ (- (org-element-property :end cell)
200
+ (org-element-property :begin cell)))
201
+ column))))
202
+ (if (< max-difference 4) 3 (- max-difference 1))))
203
+ (apply
204
+ zip (mapcar
205
+ (lambda (row)
206
+ (org-element-map row 'table-cell 'identity info))
207
+ non-rule-rows))))
208
+ (joined-rows
209
+ (mapcar (lambda (row)
210
+ (let ((cells
211
+ (org-element-map row 'table-cell 'identity info)))
212
+ (mapconcat
213
+ (lambda (tuple)
214
+ (let ((alignment (car tuple))
215
+ (width (cadr tuple))
216
+ (cell (caddr tuple)))
217
+ (format (format " %%-%ds" (- width 1))
218
+ (or (org-export-data
219
+ (org-element-contents cell)
220
+ info)
221
+ ""))))
222
+ (funcall zip alignments widths cells)
223
+ "|")))
224
+ non-rule-rows))
225
+ (joined-rows-with-delimiter-row
226
+ (cons (car joined-rows)
227
+ (cons (mapconcat
228
+ (lambda (tuple)
229
+ (let ((alignment (car tuple))
230
+ (width (cadr tuple)))
231
+ (format "%s%s%s"
232
+ (if (memq alignment '(left center))
233
+ ":" "-")
234
+ (make-string (- width 2) ?-)
235
+ (if (memq alignment '(right center))
236
+ ":" "-"))))
237
+ (funcall zip alignments widths)
238
+ "|")
239
+ (cdr joined-rows)))))
240
+ (mapconcat (lambda (row) (format "|%s|" row))
241
+ joined-rows-with-delimiter-row
242
+ "\n"))))
243
+
244
+
245
+
246
+ ;;; Interactive function
247
+
248
+ ;;;###autoload
249
+ (defun org-qmd-export-as-markdown (&optional async subtreep visible-only)
250
+ "Export current buffer to a Qiita Markdown buffer.
251
+
252
+ If narrowing is active in the current buffer, only export
253
+ its narrowed part.
254
+
255
+ If a region is active, export that region.
256
+
257
+ A non-nil optional argument ASYNC means the process should
258
+ happen asynchronously. The resulting buffer should be
259
+ accessible through the `org-export-stack' interface.
260
+
261
+ When optional argument SUBTREEP is non-nil, export the
262
+ sub-tree at point, extracting information from the headline
263
+ properties first.
264
+
265
+ When optional argument VISIBLE-ONLY is non-nil, don't export
266
+ contents of hidden elements.
267
+
268
+ Export is done in a buffer named \"*Org QMD Export*\", which
269
+ will be displayed when
270
+ `org-export-show-temporary-export-buffer' is non-nil."
271
+ (interactive)
272
+ (org-export-to-buffer 'qmd "*Org QMD Export*"
273
+ async subtreep visible-only nil nil (lambda () (text-mode))))
274
+
275
+ ;;;###autoload
276
+ (defun org-qmd-convert-region-to-md ()
277
+ "Convert region into Qiita Markdown format.
278
+ Assume the current region has org-mode syntax, and convert
279
+ it to Qiita Markdown. This can be used in any buffer. For
280
+ example, you can write an itemized list in org-mode syntax
281
+ in a Markdown buffer and use this command to convert it."
282
+ (interactive)
283
+ (org-export-replace-region-by 'qmd))
284
+
285
+
286
+ ;;;###autoload
287
+ (defun org-qmd-export-to-markdown (&optional async subtreep visible-only)
288
+ "Export current buffer to a Qiita Markdown file.
289
+
290
+ If narrowing is active in the current buffer, only export
291
+ its narrowed part.
292
+
293
+ If a region is active, export that region.
294
+
295
+ A non-nil optional argument ASYNC means the process should
296
+ happen asynchronously. The resulting file should be
297
+ accessible through the `org-export-stack' interface.
298
+
299
+ When optional argument SUBTREEP is non-nil, export the
300
+ sub-tree at point, extracting information from the headline
301
+ properties first.
302
+
303
+ When optional argument VISIBLE-ONLY is non-nil, don't export
304
+ contents of hidden elements.
305
+
306
+ Return output file's name."
307
+ (interactive)
308
+ (let ((outfile (org-export-output-file-name ".md" subtreep)))
309
+ (org-export-to-file 'qmd outfile async subtreep visible-only)))
310
+
311
+ (provide 'ox-qmd)
312
+
313
+ ;;; ox-qmd.el ends here
@@ -4,11 +4,15 @@ require "net/https"
4
4
  require "json"
5
5
  require "command_line/global"
6
6
  require "colorize"
7
+ require "qiita_org/search_conf_path.rb"
7
8
 
8
9
  class QiitaPost
9
10
  def initialize(file, option)
10
11
  @src = file
11
12
  @option = (option == "qiita" || option == "open")? "public" : option
13
+ search = SearchConfPath.new(Dir.pwd, Dir.home)
14
+ @conf_dir = search.search_conf_path()
15
+ p @conf_dir
12
16
  end
13
17
 
14
18
  public
@@ -31,11 +35,12 @@ class QiitaPost
31
35
  end
32
36
 
33
37
  def set_config()
34
- conf_path = File.join(ENV["HOME"], ".qiita.conf")
38
+ conf_path = File.join(@conf_dir, ".qiita.conf")
35
39
  @conf = JSON.load(File.read(conf_path))
36
40
  @access_token = @conf["access_token"]
37
41
  @teams_url = @conf["teams_url"]
38
- @ox_qmd_load_path = @conf["ox_qmd_load_path"]
42
+ lib = File.expand_path("../../../lib", __FILE__)
43
+ @ox_qmd_load_path = File.join(lib, "qiita_org", "ox-qmd", "ox-qmd") # @conf["ox_qmd_load_path"]
39
44
  end
40
45
 
41
46
  # src.org -> src.md
@@ -65,8 +70,9 @@ class QiitaPost
65
70
  end
66
71
 
67
72
  def select_option(option)
68
- qiita = (option == "teams")? "https://nishitani.qiita.com/" :
69
- "https://qiita.com/"
73
+ qiita = (option == "teams")? @teams_url : "https://qiita.com/"
74
+ #qiita = (option == "teams")? "https://nishitani.qiita.com/" :
75
+ # "https://qiita.com/"
70
76
  case option
71
77
  when "teams", "qiita", "public", "open"
72
78
  private = false
@@ -0,0 +1,18 @@
1
+ class SearchConfPath
2
+ def initialize(dir, home)
3
+ @dir = dir
4
+ @home = home
5
+ search_conf_path()
6
+ end
7
+
8
+ def search_conf_path()
9
+ while @dir != @home
10
+ if File.exists?(File.join(@dir, ".qiita.conf"))
11
+ return @dir
12
+ else
13
+ @dir = @dir.match(/(.+)\//)[1]
14
+ end
15
+ end
16
+ return @dir
17
+ end
18
+ end
@@ -1,3 +1,3 @@
1
1
  module QiitaOrg
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.9"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qiita_org
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenta Yamamoto
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-16 00:00:00.000000000 Z
11
+ date: 2020-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -959,7 +959,9 @@ files:
959
959
  - lib/qiita_org/get_template.rb
960
960
  - lib/qiita_org/hoge.txt
961
961
  - lib/qiita_org/list.rb
962
+ - lib/qiita_org/ox-qmd/ox-qmd.el
962
963
  - lib/qiita_org/post.rb
964
+ - lib/qiita_org/search_conf_path.rb
963
965
  - lib/qiita_org/template.org
964
966
  - lib/qiita_org/version.rb
965
967
  - qiita_org.gemspec
@@ -967,7 +969,7 @@ homepage: https://github.com/yamatoken/qiita_org
967
969
  licenses:
968
970
  - MIT
969
971
  metadata: {}
970
- post_install_message:
972
+ post_install_message:
971
973
  rdoc_options: []
972
974
  require_paths:
973
975
  - lib
@@ -983,7 +985,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
983
985
  version: '0'
984
986
  requirements: []
985
987
  rubygems_version: 3.1.4
986
- signing_key:
988
+ signing_key:
987
989
  specification_version: 4
988
990
  summary: this is qiita post gem from org.
989
991
  test_files: []