구문 강조된 웹 낙서장 codepaste

nohmad의 이미지

nopaste라는 서비스는 원래 IRC상에서 에러 내용이나 설정파일, 프로그램 로그 같은 긴 텍스트를 마구 인용해서 민폐를 끼치는 사람들을 돕기 위해 만들어졌습니다. 그러나 꼭 IRC가 아니어도 굳이 저장할 필요가 없는 임시 텍스트를 웹을 통해 보여주고 싶을 때 syntax highlighting이 지원되는 공개 낙서장으로 활용할 수 있습니다.

이 스크립트(codepaste)는 커맨드라인에서 nopaste 서비스를 손쉽게 사용할 수 있도록 해줍니다. 이 스크립트는 ruby 언어로 만들어졌습니다. ruby 경로를 확인하신 후 사용하시기 바랍니다.

사용법은 다음과 같습니다.

만일 어떤 명령의 출력결과를 그대로 웹으로 보여주고 싶다면 표준출력(stdout)을 이 스크립트로 넘깁니다.

$ ls | codepaste

파일 내용을 붙여넣고 싶다면

$ codepaste <path>

식으로 사용합니다.

붙여넣고 싶은 텍스트가 클립보드상에 존재한다면,

$ codepaste

라고 실행하고 클립보드 내용을 붙여넣은 다음 입력 종료 신호(ctrl-d, ctrl-z)를 주면 됩니다.. 또는

$ codepaste <<EOF
.....
뭐라뭐라...
.....
EOF

식으로도 사용할 수 있습니다. 이렇게 실행하고 나면, 붙여넣은 내용을 확인할 수 있는 nopaste 싸이트의 URL이 출력됩니다. 그 URL을 알려주면 됩니다.

#!/usr/bin/env ruby
=begin
= Ruby CodePaster

No more flooding irc. This is syntax-enhanced public board anyone can freely use. Just feed your file path as argument or stdin. This script is based on Ryan Davis' nopaste. See http://blog.zenspider.com/archives/2005/03/toy_nopaste.html
 
CHANGELOG:
  - Enhance optparse.
  - Enhance case-insensitive language choice.

+Author+:: Gyoung-Yoon Noh <nohmad@sub-port.net>
+License+:: As-is Ryan Davis'

--
$Id: codepaste 95 2005-04-18 01:35:01Z nohmad $
++
=end

require 'net/http'
require 'optparse'
require 'pp'

langs = %w(C90 C C++ C\# Java Perl PHP Python Ruby SQL VB XML Plain\ Text)
tabs  = %w(No 2 3 4 5 6 8)

options = Struct.new(:lang, :cvt_tabs, :nick, :desc, :text).
                 new(langs.last, tabs[1], ENV['USER'], '...', '')
op = OptionParser.new
op.on("-l LANGUAGE") do |lang|
  options.lang = langs.select{ |e| e.downcase == lang.downcase }.shift or
                 langs.last
end
op.on("-t TABSIZE") { |ts| options.cvt_tabs = ts }
op.on("-n NICKNAME") { |nick| options.nick = nick }
op.on("-s DESCRIPTION") { |desc| options.desc = desc }
argv = op.parse(ARGV)

options.text =
  if argv.empty? then
    $stdin.read.chomp
  else
    File.read(argv.shift)
  end

data =
  options.members.inject([]) do |acc,k|
    acc << k + '=' + options.send(k).gsub(/([^ a-zA-Z0-9_.-]+)/n) do
           '%' + $1.unpack('H2' * $1.size).join('%').upcase
    end.tr(' ', '+')
  end.join('&')

headers = {
  'Content-Type'    => 'application/x-www-form-urlencoded',
  'Referer'         => 'http://www.rafb.net/paste/index.html',
  'Host'            => 'www.rafb.net',
  'Accept'          => 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, image/tiff, multipart/x-mixed-replace, */*;q=0.1',
  'Accept-Encoding' => 'bzip2, gzip, deflate, identity',
  'Accept-Charset'  => 'utf-8, iso-8859-1, euc-kr, iso-10646-ucs-2, macintosh, windows-1252, *',
  'Accept-Language' => 'en, fr;q=0.94, ja;q=0.88, it;q=0.81, de;q=0.75, es;q=0.69, nl;q=0.62, sv;q=0.56, no;q=0.50, da;q=0.44, fi;q=0.38, pt;q=0.31, zh-cn;q=0.25, zh-tw;q=0.19, ko;q=0.12',
  'Pragma'          => 'no-cache',
  'Cache-Control'   => 'max-age=0',
  'Connection'      => 'Keep-Alive',
  'User-Agent'      => 'Ruby CodePaster. http://nohmad.sub-port.net/trac.cgi/workenv/file/bin/codepaste',
}

Net::HTTP.start('www.rafb.net', 80) { |http|
  response = http.post('/paste/paste.php', data, headers)
  location = response['location']
  if location then
    puts "http://www.rafb.net#{location}"
  else
    puts "ERROR:"
    puts "header:"
    p response.header
    puts
    puts "body:"
    puts response.body
    puts "code/message:"
    puts response.code
    puts response.message
  end
}

# vim: ft=ruby
Forums: 
ed.netdiver의 이미지

오홍.
한글은 잘 되는지 궁금해서 해봤는데, firefox encoding만 맞춰져있으면 제대로 보이는군요.
(당연한 얘기겠지만요..ㅎㅎ)
[url]
http://www.rafb.net/paste/results/g6ipNw87.html[/url]

근데 이렇게 임시생성된 webpage는 언제까지 보관되는걸까요?^^;

ubuntu utf8이었는데, 웃긴건, ruby가 아니고 ruby1.8이 실행파일이네요..ㅎㅎ
이렇게 되어있다보니, env가 못찾는군요.
이렇게 프로그램에 버전명까지 포함되서 naming되어있는 경우에
#!/usr/bin/env 같은 식으로 evaluate(?)할수 있는 방법이 있을까요?^^;

그럼 좋은 하루하루 되세용~
(덧. nohmad님 ㅤㅊㅚㄱ오~*^^*;; 하지만, ruby는 괄호땜에 python승!!!ㅋㅋ)

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

nohmad의 이미지

$ ln -s ruby18 ruby

하면 되겠죠 ;) 근데 어떤 배포판을 쓰시길래 저게 기본으로 안되있나요?

그리고 굳이 승패를 가려야 할 이유가 있는지는 모르겠지만, 루비에서 괄호는 옵션입니다. 쓰고 싶으면 쓰고, 말고 싶으면 말고죠. 괄호가 있어야만 메쏘드와 아규먼트를 구분할 수 있는 것은 컴파일러에게는 확실히 이롭겠지만, 과연 그것이 사람에게도 이로운 건지는 모르겠네요. ;)

puzzlet의 이미지

nohmad wrote:
루비에서 괄호는 옵션입니다. 쓰고 싶으면 쓰고, 말고 싶으면 말고죠.

아... 루비에서는 베이직처럼 괄호를 안 써도 되나요?

발발다빠따반반나다발딸발발다빠따따맣발발다뿌
멓터벅더떠벋떠벌더벌벌떠벌떠더법벍떠더벌벌떠

ed.netdiver의 이미지

nohmad wrote:
$ ln -s ruby18 ruby

하면 되겠죠 ;) 근데 어떤 배포판을 쓰시길래 저게 기본으로 안되있나요?

그리고 굳이 승패를 가려야 할 이유가 있는지는 모르겠지만, 루비에서 괄호는 옵션입니다. 쓰고 싶으면 쓰고, 말고 싶으면 말고죠. 괄호가 있어야만 메쏘드와 아규먼트를 구분할 수 있는 것은 컴파일러에게는 확실히 이롭겠지만, 과연 그것이 사람에게도 이로운 건지는 모르겠네요. ;)

ubuntu 효리입니다.
집에 있는 cel733에 셤삼아 깔아놓고 쓰고 있는데,
확실히 install의 쌈박함만큼은 쳐줘야 할것 같더군요.
그냥 쓰는 데탑용이라면 추천할만 합니다.

symbolic link를 해두면야 되긴 하죠. 근데 그게 default가 아니란건
저도 좀 의외였습니다.

괄호가 optional한거였군요.
근데 뭐랄까, 괄호가 없다면 block 구분을 알기가 쉽지 않았을것 같긴 합니다.
python승이란건 농담인걸요 뭐^^;

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

nohmad의 이미지

puzzlet wrote:
nohmad wrote:
루비에서 괄호는 옵션입니다. 쓰고 싶으면 쓰고, 말고 싶으면 말고죠.

아... 루비에서는 베이직처럼 괄호를 안 써도 되나요?

베이직이 종류가 많아서 다른 베이직들이 어떤지는 모르겠는데, 아마 비슷한 방식일 겁니다(루비는 펄에서 가져왔습니다). 그러나 메쏘드 안에 메쏘드가 중첩되거나 하면 파싱하기가 힘들기 때문에 주의해야 합니다. 그리고 괄호의 위치도 호출하려는 메쏘드 끝에 붙이지 않으면, 메쏘드의 인자 목록을 의미하는 괄호가 아니라 개별 인자를 위한 괄호로 인식되기에 역시 주의해야 합니다.

obj.method (arg1, arg2)   #=> error
obj.method arg1, arg2     #=> obj.method(arg1, arg2)
obj.method (arg1), (arg2) #=> obj.method(arg1, arg2)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.