亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3215 | 回復: 1
打印 上一主題 下一主題

利用JavaDoc制作windows的CHM文檔 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-03-12 21:17 |只看該作者 |倒序瀏覽

利用JavaDoc制作windows的CHM文檔









使用了開源的一個ruby腳本來利用JavaDoc制作windows的CHM文檔。

輸出文件編碼的時候一定記得選擇中文,例如file.puts "Language=0x804 Chinese"。



Ruby代碼
  1. 1.def createProjectFile(prjname, basedir)  
  2. 2.      
  3. 3.    packages = scanPackageTree(basedir)  
  4. 4.  
  5. 5.    createContentsFile(prjname+'.hhc', basedir, packages)  
  6. 6.    createIndexFile(prjname+'.hhk', basedir, packages)  
  7. 7.      
  8. 8.    assetsexplise = /^$/  
  9. 9.    title = getIndexTitle(basedir)  
  10. 10.      
  11. 11.    file = open(prjname+'.hhp', 'w')  
  12. 12.    file.puts "[OPTIONS]"  
  13. 13.    file.puts "Compatibility=1.1 or later"  
  14. 14.    file.puts "Compiled file=#{prjname}.chm"  
  15. 15.    file.puts "Contents file=#{prjname}.hhc"  
  16. 16.    file.puts "Default Window=default"  
  17. 17.    file.puts "Display compile progress=Yes"  
  18. 18.    file.puts "Default topic=#{basedir}/overview-summary.html"  
  19. 19.    file.puts "Full-text search=Yes"  
  20. 20.    file.puts "Index file=#{prjname}.hhk"  
  21. 21.    # file.puts "Language=0x411 Japanese"  
  22. 22.    file.puts "Language=0x409 English (U.S.)"  
  23. 23.    # file.puts "Language=0x804 Chinese"  
  24. 24.    file.puts "Title=#{title}"  
  25. 25.    file.puts ""  
  26. 26.    file.puts "[WINDOWS]"  
  27. 27.    file.puts "default=\"#{title}\",\"#{prjname}.hhc\",\"#{prjname}.hhk\",\"#{basedir}/overview-summary.html\",\"#{basedir}/overview-summary.html\",,,,,0x2520,,0x384e,,,,,,,,0"  
  28. 28.    file.puts ""  
  29. 29.    file.puts ""  
  30. 30.    file.puts "[FILES]"  
  31. 31.    collectAssets(basedir, assetsexplise).each() do |path|  
  32. 32.        file.puts(path)  
  33. 33.    end  
  34. 34.    file.puts ""  
  35. 35.    file.close()  
  36. 36.end  
  37. 37.  
  38. 38.def getIndexTitle(basedir)  
  39. 39.    title = ""  
  40. 40.    open(basedir + '/index.html', 'r') do |fh|  
  41. 41.        fh.read() =~ /\<title\>\n*(.+?)\n*\<\/title\>/i  
  42. 42.        title = $1  
  43. 43.    end  
  44. 44.    return title  
  45. 45.end  
  46. 46.  
  47. 47.def collectAssets(assetsdir, assetsexplise)  
  48. 48.    assets = []  
  49. 49.    Dir.foreach(assetsdir) do |asset|  
  50. 50.        assetpath = assetsdir + '/' + asset  
  51. 51.        if File.stat(assetpath).ftype == 'file' then  
  52. 52.            assets.push(assetpath) unless assetsexplise =~ assetpath  
  53. 53.        elsif File.stat(assetpath).ftype == 'directory' and asset[0,1] != '.' then  
  54. 54.            assets.concat(collectAssets(assetpath, assetsexplise))  
  55. 55.        end  
  56. 56.    end  
  57. 57.    return assets  
  58. 58.end  
  59. 59.  
  60. 60.HEADER = '<HTML><HEAD><meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1"><!-- Sitemap 1.0 --></HEAD><BODY><OBJECT type="text/site properties"></OBJECT>'  
  61. 61.FOOTER = '</BODY></HTML>'  
  62. 62.  
  63. 63.def createContentsFile(filename, basedir, packages)  
  64. 64.      
  65. 65.    file = open(filename, 'w')  
  66. 66.    file.puts HEADER  
  67. 67.      
  68. 68.    file.puts "[list]"  
  69. 69.    file.puts "\t" + '<LI> <OBJECT type="text/sitemap">'  
  70. 70.    file.puts "\t" * 2 + '<param name="Name" value="Overview">'  
  71. 71.    file.puts "\t" * 2 + '<param name="Local" value="' + basedir + '/overview-summary.html">'  
  72. 72.    file.puts "\t" * 2 + '<param name="ImageNumber" value="21">'  
  73. 73.    file.puts "\t" * 2 + '</OBJECT>'  
  74. 74.      
  75. 75.    packages.each() do |pkg|  
  76. 76.        file.puts "\t" + formatTopicItem(pkg['name'], basedir+'/'+pkg['file'])  
  77. 77.        file.puts "\t" * 1 + "[list]"  
  78. 78.        pkg['classes'].each() do |cls|  
  79. 79.            file.puts "\t" * 2 + formatTopicItem(cls['name'], basedir+'/'+cls['file'])  
  80. 80.            file.puts "\t" * 2 + "[list]"  
  81. 81.            cls['details'].each() do |det|  
  82. 82.                file.puts "\t" * 3 + formatTopicItem(det, basedir+'/'+cls['file']+'#'+det)  
  83. 83.            end  
  84. 84.            file.puts "\t" * 2 + "[/list]"  
  85. 85.        end  
  86. 86.        file.puts "\t" * 1 + "[/list]"  
  87. 87.    end  
  88. 88.    file.puts "[/list]"  
  89. 89.      
  90. 90.    file.puts FOOTER  
  91. 91.    file.close()  
  92. 92.end  
  93. 93.  
  94. 94.def createIndexFile(filename, basedir, packages)  
  95. 95.      
  96. 96.    file = open(filename, 'w')  
  97. 97.    file.puts HEADER  
  98. 98.      
  99. 99.    indexes = {}  
  100. 100.    packages.each() do |pkg|  
  101. 101.        addKeywordToIndex(indexes, pkg['name'], pkg['name'], basedir+'/'+pkg['file'])  
  102. 102.        pkg['classes'].each() do |cls|  
  103. 103.            addKeywordToIndex(indexes, cls['name'], pkg['name']+'.'+cls['name'], basedir+'/'+cls['file'])  
  104. 104.            cls['details'].each() do |det|  
  105. 105.                addKeywordToIndex(indexes, det, pkg['name']+'.'+cls['name']+'.'+det, basedir+'/'+cls['file']+'#'+det)  
  106. 106.            end  
  107. 107.        end  
  108. 108.    end  
  109. 109.      
  110. 110.    file.puts "[list]"  
  111. 111.    indexes.keys.sort.each() do |keyword|  
  112. 112.        file.puts "\t" + formatIndexItem(keyword, indexes[keyword])  
  113. 113.    end  
  114. 114.    file.puts "[/list]"  
  115. 115.      
  116. 116.    file.puts FOOTER  
  117. 117.    file.close()  
  118. 118.end  
  119. 119.  
  120. 120.def addKeywordToIndex(indexes, keyword, detail, file)  
  121. 121.    if indexes[keyword] == nil then indexes[keyword] = {} end  
  122. 122.    indexes[keyword][detail] = file  
  123. 123.end  
  124. 124.  
  125. 125.  
  126. 126.def scanPackageTree(basedir)  
  127. 127.    packagelist = []  
  128. 128.    rxpkg = /\<A\s+HREF\=\"([\w\d\-\/]+?)\/package\-frame\.html\"\s+target\=\"packageFrame\"\>([\w\d\.]+)\<\/A\>/i  
  129. 129.    rxcls = /\<A\s+HREF\=\"([^\.][\w\d\-\.]+?)\"(\s+title\=\".+\")?\s+target\=\"classFrame\"\>(\<I\>)?([\w\d\.]+)(\<\/I\>)?\<\/A\>/i  
  130. 130.      
  131. 131.    IO.foreach(basedir + "/overview-frame.html") do | line |  
  132. 132.        if (line =~ rxpkg) != nil then  
  133. 133.            pkgdir = $1  
  134. 134.            pkgname = $2  
  135. 135.            print "#{pkgname}\n"  
  136. 136.            classes = []  
  137. 137.            IO.foreach(basedir + '/' + pkgdir + '/package-frame.html') do | line |  
  138. 138.                if (line =~ rxcls) != nil then  
  139. 139.                    classfile = $1  
  140. 140.                    classname = $4  
  141. 141.                    print "#{pkgname}.#{classname}\n"  
  142. 142.                    details = scanClassDocument(basedir+'/'+pkgdir+'/'+classfile)  
  143. 143.                    classes.push({'name'=>classname, 'file'=>pkgdir+'/'+classfile, 'details'=>details})  
  144. 144.                end  
  145. 145.            end  
  146. 146.            pkgfile = pkgdir + '/package-summary.html'  
  147. 147.            packagelist.push({'name'=>pkgname, 'file'=>pkgfile, 'classes'=>classes})  
  148. 148.        end  
  149. 149.    end  
  150. 150.    return packagelist  
  151. 151.end  
  152. 152.  
  153. 153.def scanClassDocument(file)  
  154. 154.    scanstarts = false  
  155. 155.    anchors = []  
  156. 156.    IO.foreach(file) do |line|  
  157. 157.        if (line =~ /\<A\s+NAME\=\"([^\"]+)\"\>/i) != nil then  
  158. 158.            aname = $1  
  159. 159.            if (aname =~ /\w+_detail$/i) != nil then  
  160. 160.                scanstarts = true  
  161. 161.            elsif (aname =~ /^navbar_\w+/i) != nil then  
  162. 162.                scanstarts = false  
  163. 163.            else  
  164. 164.                if scanstarts then  
  165. 165.                    anchors.push(aname)  
  166. 166.                end  
  167. 167.            end  
  168. 168.        end  
  169. 169.    end  
  170. 170.    return anchors  
  171. 171.end  
  172. 172.  
  173. 173.def formatTopicItem(name, href)  
  174. 174.    out = '<LI><OBJECT type="text/sitemap">'  
  175. 175.    out += sprintf('<param name="Name" value="%s">', name)  
  176. 176.    if href != nil then  
  177. 177.        out += sprintf('<param name="Local" value="%s">', href)  
  178. 178.    end  
  179. 179.    out += "</OBJECT>"  
  180. 180.    return out  
  181. 181.end  
  182. 182.  
  183. 183.def formatIndexItem(name, details)  
  184. 184.    out = '<LI><OBJECT type="text/sitemap">'  
  185. 185.    out += sprintf('<param name="Name" value="%s">', name)  
  186. 186.    details.keys.each() do |det|  
  187. 187.        out += sprintf('<param name="Name" value="%s">', det)  
  188. 188.        out += sprintf('<param name="Local" value="%s">', details[det])  
  189. 189.    end  
  190. 190.    out += "</OBJECT>"  
  191. 191.    return out  
  192. 192.end  
  193. 193.  
  194. 194.createProjectFile(ARGV[0], ARGV[1])  
復制代碼
將JavaDoc的根目錄拷貝到ruby腳本所在的目錄下,這樣會避免相對路徑的問題,腳本里面處理得不好。安裝好ruby環(huán)境(因為兼容性的問題,推薦使用ruby1.8)之后,執(zhí)行命令ruby createhhp.rb <help-file-basename> <javadoc-dir>,會在當前目錄下生產hhc(目錄)、hhk(索引)、hhp(項目)這三個文件。

論壇徽章:
0
2 [報告]
發(fā)表于 2012-03-12 21:18 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP