加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

代码格式化

发布时间:2020-12-17 04:11:51 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #!/usr/bin/ruby -w=begin/*************************************************************************** * Copyright (C) 2008,Paul Lutus * * * *

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

#!/usr/bin/ruby -w


=begin
/***************************************************************************
 *   Copyright (C) 2008,Paul Lutus                                        *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License,or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,*
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not,write to the                         *
 *   Free Software Foundation,Inc.,*
 *   59 Temple Place - Suite 330,Boston,MA  02111-1307,USA.             *
 ***************************************************************************/
=end

PVERSION = "Version 2.9,10/24/2008"

module RBeautify

   # user-customizable values

   RBeautify::TabStr = " "
   RBeautify::TabSize = 3

   # indent regexp tests

   IndentExp = [
      /^moduleb/,/^classb/,/^ifb/,/(=s*|^)untilb/,/(=s*|^)forb/,/^unlessb/,/(=s*|^)whileb/,/(=s*|^)beginb/,/(^| )caseb/,/bthenb/,/^rescueb/,/^defb/,/bdob/,/^elseb/,/^elsifb/,/^ensureb/,/bwhenb/,/{[^}]*$/,/[[^]]*$/
   ]

   # outdent regexp tests

   OutdentExp = [
      /^rescueb/,/^endb/,/^[^{]*}/,/^[^[]*]/
   ]

   def RBeautify.rb_make_tab(tab)
      return (tab < 0)?"":TabStr * TabSize * tab
   end

   def RBeautify.rb_add_line(line,tab)
      line.strip!
      line = rb_make_tab(tab) + line if line.length > 0
      return line
   end

   def RBeautify.beautify_string(source,path = "")
      comment_block = false
      in_here_doc = false
      here_doc_term = ""
      program_end = false
      multiLine_array = []
      multiLine_str = ""
      tab = 0
      output = []
      source.each do |line|
         line.chomp!
         if(!program_end)
            # detect program end mark
            if(line =~ /^__END__$/)
               program_end = true
            else
               # combine continuing lines
               if(!(line =~ /^s*#/) && line =~ /[^]s*$/)
                  multiLine_array.push line
                  multiLine_str += line.sub(/^(.*)s*$/,"1")
                  next
               end

               # add final line
               if(multiLine_str.length > 0)
                  multiLine_array.push line
                  multiLine_str += line.sub(/^(.*)s*$/,"1")
               end

               tline = ((multiLine_str.length > 0)?multiLine_str:line).strip
               if(tline =~ /^=begin/)
                  comment_block = true
               end
               if(in_here_doc)
                  in_here_doc = false if tline =~ %r{s*#{here_doc_term}s*}
               else # not in here_doc
                  if tline =~ %r{=s*<<}
                     here_doc_term = tline.sub(%r{.*=s*<<-?s*([_|w]+).*},"1")
                     in_here_doc = here_doc_term.size > 0
                  end
               end
            end
         end
         if(comment_block || program_end || in_here_doc)
            # add the line unchanged
            output << line
         else
            comment_line = (tline =~ /^#/)
            if(!comment_line)
               # throw out sequences that will
               # only sow confusion
               while tline.gsub!(/{[^{]*?}/,"")
               end
               while tline.gsub!(/[[^[]*?]/,"")
               end
               while tline.gsub!(/'.*?'/,"")
               end
               while tline.gsub!(/".*?"/,"")
               end
               while tline.gsub!(/`.*?`/,"")
               end
               while tline.gsub!(/([^(]*?)/,"")
               end
               while tline.gsub!(//.*?//,"")
               end
               while tline.gsub!(/%r(.).*?1/,"")
               end
               # delete end-of-line comments
               tline.sub!(/#[^"]+$/,"")
               # convert quotes
               tline.gsub!(/"/,"'")
               OutdentExp.each do |re|
                  if(tline =~ re)
                     tab -= 1
                     break
                  end
               end
            end
            if (multiLine_array.length > 0)
               multiLine_array.each do |ml|
                  output << rb_add_line(ml,tab)
               end
               multiLine_array.clear
               multiLine_str = ""
            else
               output << rb_add_line(line,tab)
            end
            if(!comment_line)
               IndentExp.each do |re|
                  if(tline =~ re && !(tline =~ /s+ends*$/))
                     tab += 1
                     break
                  end
               end
            end
         end
         if(tline =~ /^=end/)
            comment_block = false
         end
      end
      error = (tab != 0)
      STDERR.puts "Error: indent/outdent mismatch: #{tab}." if error
      return output.join("n") + "n",error
   end # beautify_string

   def RBeautify.beautify_file(path)
      error = false
      if(path == '-') # stdin source
         source = STDIN.read
         dest,error = beautify_string(source,"stdin")
         print dest
      else # named file source
         source = File.read(path)
         dest,path)
         if(source != dest)
            # make a backup copy
            File.open(path + "~","w") { |f| f.write(source) }
            # overwrite the original
            File.open(path,"w") { |f| f.write(dest) }
         end
      end
      return error
   end # beautify_file

   def RBeautify.main
      error = false
      if(!ARGV[0])
         STDERR.puts "usage: Ruby filenames or "-" for stdin."
         exit 0
      end
      ARGV.each do |path|
         error = (beautify_file(path))?true:error
      end
      error = (error)?1:0
      exit error
   end # main
end # module RBeautify

# if launched as a standalone program,not loaded as a module
if __FILE__ == $0
   RBeautify.main
end

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读