目前共有2篇帖子。 内容转换:不转换▼
 
点击 回复
433 1
【备份】12月6日Ruby导出脚本备份
一派护法 十九级
1楼 发表于:2015-12-6 14:20
class Object
  def getLiteral
    if (self.is_a?(String))
      str = self.clone
      str.removeBeginning("@")
      str.addQuotes
      return str
    end
  end
end
class String
  def addSlashes
    self.gsub!(/(["'\\])/) {"\\" + $&}
  end
  def addQuotes
    self.addSlashes
    self.insert(0, "\"")
    self.concat("\"")
  end
  def beginsWith(str)
    strlen = str.length
    if self.length < strlen
      return false
    end
    if self[0, strlen] == str
      return true
    else
      return false
    end
  end
  def removeBeginning(str)
    self[0, str.length] = '' if self.beginsWith(str)
  end
  def trim
    return if (self.empty?)
    while self[0, 1] == " " or self[0, 1] == "\t"
      self[0, 1] = ""
    end
    while self[-1, 1] == " "
      self[-1, 1] = ""
    end
  end
end

#==============================================================================
# ■ Exporter
#------------------------------------------------------------------------------
#  处理RMXP数据导出的类。
#==============================================================================

class Exporter
  #--------------------------------------------------------------------------
  # ● 常量
  #--------------------------------------------------------------------------
  AS_FOLDER = "FlashProject/RXData/"
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor :data
  attr_reader   :rxdataFile
  attr_reader   :as3File
  attr_reader   :clsName
  attr_reader   :file
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     rxdataFile : rxdata文件名
  #--------------------------------------------------------------------------
  def initialize(rxdataFileName)
    @clsName = rxdataFileName
    @clsName = "MapInfo" if (rxdataFileName == "MapInfos")
    
    @rxdataFile = "data/" + rxdataFileName + ".rxdata"
    @as3File = AS_FOLDER + @clsName + ".as"
    @data = load_data(@rxdataFile)
    @variables = []
  end
  #--------------------------------------------------------------------------
  # ● 导出到AS文件
  #--------------------------------------------------------------------------
  def export
    @file = File.open(@as3File, "w")
    @file.write("//这些代码是系统自动生成的,请不要修改这些代码\n")
    @file.write("package RXData {\n")
    @file.write("\tpublic dynamic class #{@clsName} {\n")
    
    @file.write("\t\tpublic function #{@clsName}() {\n")
    exportObj(@data, "\t\t\tthis")
    @file.write("\t\t}\n\t}\n}")
    @file.close()
  end
  #--------------------------------------------------------------------------
  # ● 导出数组或对象
  #--------------------------------------------------------------------------
  def exportObj(obj, scrStart)
    head = scrStart.clone
    head.trim
    if obj.is_a?(NilClass)
      return
    elsif obj.is_a?(Hash)
      @file.write("#{scrStart} = {};\n") if (head != "this")
      for keyName in obj.keys
        exportObj(obj[keyName], "#{scrStart}[#{keyName}]")
      end
    elsif obj.is_a?(Array)
      @file.write("#{scrStart} = [];\n") if (head != "this")
      i = 0
      for value in obj
        exportObj(value, "#{scrStart}[#{i}]")
        i += 1
      end
    elsif obj.is_a?(Numeric)
      value = obj.to_s
      @file.write("#{scrStart} = #{value};\n")
    elsif obj.is_a?(String)
      obj.addQuotes
      @file.write("#{scrStart} = #{obj};\n")
    elsif obj.is_a?(TrueClass) or obj.is_a?(FalseClass)
      value = obj.to_s
      @file.write("#{scrStart} = #{value};\n")
    else
      # 导出对象的全部属性
      type = obj.type
      @file.write("#{scrStart} = {}; // #{type}\n") if (head != "this")
      vars = obj.instance_variables
      for varName in vars
        propName = varName.clone
        propName.removeBeginning("@")
        exportObj(obj.instance_variable_get(varName), "#{scrStart}.#{propName}")
      end
    end
  end
end
#==============================================================================
# ** Main
#------------------------------------------------------------------------------
#  This script is written by Octopus.
#==============================================================================

#--------------------------------------------------------------------------
# ● 打开所有rxdata文件
#--------------------------------------------------------------------------
files = Dir.glob("Data/*.rxdata")
exporters = {}
for file in files
  file[/^Data\//] = '';
  file[/\.rxdata$/] = '';
  exporters[file] = Exporter.new(file)
end

#--------------------------------------------------------------------------
# ● 生成 ActionScript3 代码文件
#--------------------------------------------------------------------------
for exporter in exporters
  exporter[1].export()
end

exit
一派护法 十九级
2楼 发表于:2015-12-6 14:21
完整的Main脚本:
#==============================================================================
# ** Main
#------------------------------------------------------------------------------
#  This script is written by Octopus.
#==============================================================================

#--------------------------------------------------------------------------
# ● 打开所有rxdata文件
#--------------------------------------------------------------------------
files = Dir.glob("Data/*.rxdata")
exporters = {}
for file in files
  file[/^Data\//] = '';
  file[/\.rxdata$/] = '';
  exporters[file] = Exporter.new(file)
end

#--------------------------------------------------------------------------
# ● 对 MapInfos.rxdata 进行特殊处理
#--------------------------------------------------------------------------
data = exporters["MapInfos"].data
for keyName in data.keys
  # 删除地图名以#开头的地图
  data[keyName].name.trim
  if data[keyName].name.beginsWith("#")
    data.delete(keyName)
    next
  end
 
  # 如果地图*m,n存在的话,检查m,n是否存在(m,n都必须是整数)
  if data[keyName].name[/^\*\s*[\+\-]?\d+\s*,\s*[\+\-]?\d+$/] != nil
    renamedName = data[keyName].name.clone;
    renamedName.removeBeginning("*")
    exists = false
    for map in data
      if map[1].name == renamedName
        exists = true
        break
      end
    end
    if (exists)
      # 如果存在就删除*m,n
      data.delete(keyName)
    else
      # 如果不存在的话就把*m,n重命名为m,n
      data[keyName].name = renamedName
    end
  end
end

#--------------------------------------------------------------------------
# ● 生成 ActionScript3 代码文件
#--------------------------------------------------------------------------
for exporter in exporters
  exporter[1].export()
end

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:433 回复数:1
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2015-12-6 14:21
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。