Files
rappaurio-sae501_502/app/node_modules/cejs/_documents/JsDoc/symbols/src/D__USB_cgi-bin_lib_JS_IO_file.origin.js.html
2023-09-25 13:27:24 +02:00

342 lines
75 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"> <style>
.KEYW {color: #933;}
.COMM {color: #bbb; font-style: italic;}
.NUMB {color: #393;}
.STRN {color: #393;}
.REGX {color: #339;}
.line {border-right: 1px dotted #666; color: #666; font-style: normal;}
</style></head><body><pre><span class='line'> 1</span> <span class="TOKN"></span><span class="WHIT">
<span class='line'> 2</span>
<span class='line'> 3</span> </span><span class="COMM">/**
<span class='line'> 4</span> * @name CeL file function
<span class='line'> 5</span> * @fileoverview
<span class='line'> 6</span> * 本檔案包含了 file functions。
<span class='line'> 7</span> * @since
<span class='line'> 8</span> * @see
<span class='line'> 9</span> * &lt;a href="http://dev.w3.org/2006/webapi/FileAPI/" accessdate="2010/6/20 14:49">File API&lt;/a>
<span class='line'> 10</span> */</span><span class="WHIT">
<span class='line'> 11</span>
<span class='line'> 12</span>
<span class='line'> 13</span> </span><span class="COMM">/*
<span class='line'> 14</span>
<span class='line'> 15</span>
<span class='line'> 16</span> */</span><span class="WHIT">
<span class='line'> 17</span>
<span class='line'> 18</span> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">CeL</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'function'</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 19</span>
<span class='line'> 20</span> </span><span class="COMM">/**
<span class='line'> 21</span> * 本 module 之 name(id)&lt;span style="text-decoration:line-through;">不設定時會從呼叫時之 path 取得&lt;/span>。
<span class='line'> 22</span> * @type String
<span class='line'> 23</span> * @constant
<span class='line'> 24</span> * @inner
<span class='line'> 25</span> * @ignore
<span class='line'> 26</span> */</span><span class="WHIT">
<span class='line'> 27</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">module_name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">'IO.file'</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 28</span>
<span class='line'> 29</span> </span><span class="COMM">//===================================================</span><span class="WHIT">
<span class='line'> 30</span> </span><span class="COMM">/**
<span class='line'> 31</span> * 若欲 include 整個 module 時,需囊括之 code。
<span class='line'> 32</span> * @type Function
<span class='line'> 33</span> * @param {Function} library_namespace namespace of library
<span class='line'> 34</span> * @param load_arguments 呼叫時之 argument(s)
<span class='line'> 35</span> * @return
<span class='line'> 36</span> * @name CeL.IO.file
<span class='line'> 37</span> * @constant
<span class='line'> 38</span> * @inner
<span class='line'> 39</span> * @ignore
<span class='line'> 40</span> */</span><span class="WHIT">
<span class='line'> 41</span> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">code_for_including</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 42</span>
<span class='line'> 43</span> </span><span class="COMM">/**
<span class='line'> 44</span> * null module constructor
<span class='line'> 45</span> * @class 檔案操作相關之 function。
<span class='line'> 46</span> */</span><span class="WHIT">
<span class='line'> 47</span> </span><span class="NAME">CeL.IO.file</span><span class="WHIT">
<span class='line'> 48</span> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="KEYW">function</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 49</span> </span><span class="WHIT"> </span><span class="COMM">// null module constructor</span><span class="WHIT">
<span class='line'> 50</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 51</span>
<span class='line'> 52</span> </span><span class="COMM">/**
<span class='line'> 53</span> * for JSDT: 有 prototype 才會將之當作 Class
<span class='line'> 54</span> */</span><span class="WHIT">
<span class='line'> 55</span> </span><span class="NAME">CeL.IO.file</span><span class="WHIT">
<span class='line'> 56</span> </span><span class="PUNC">.</span><span class="NAME">prototype</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 57</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 58</span>
<span class='line'> 59</span>
<span class='line'> 60</span>
<span class='line'> 61</span>
<span class='line'> 62</span> </span><span class="COMM">// path處理 -------------------------------------------------------</span><span class="WHIT">
<span class='line'> 63</span>
<span class='line'> 64</span> </span><span class="COMM">// path,mode=1:去除檔名只餘目錄如輸入http://hostname/aaa/bbb/ccc得到http://hostname/aaa/bbb/ 尚未處理:: * ?</span><span class="WHIT">
<span class='line'> 65</span> </span><span class="COMM">//reducePath[generateCode.dLK]='dirSp,dirSpR';</span><span class="WHIT">
<span class='line'> 66</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">reducePath</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'> 67</span> </span><span class="WHIT"> </span><span class="COMM">//alert(typeof p+'\n'+p);</span><span class="WHIT">
<span class='line'> 68</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">=</span><span class="STRN">''</span><span class="PUNC">+</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 69</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 70</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">=</span><span class="NAME">p.match</span><span class="PUNC">(</span><span class="REGX">/^"([^"]*)/</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">t</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 71</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">=</span><span class="NAME">p.match</span><span class="PUNC">(</span><span class="REGX">/(.*)\|&lt;>/</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">t</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 72</span> </span><span class="WHIT"> </span><span class="COMM">//Windows environment variables在真實path前,尚未測試!</span><span class="WHIT">
<span class='line'> 73</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">WinEnvironment</span><span class="PUNC">==</span><span class="STRN">'object'</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">=</span><span class="NAME">p.match</span><span class="PUNC">(</span><span class="REGX">/%(.+)%/g</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">for</span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="KEYW">in</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'> 74</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">WinEnvironment</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="NAME">p.replace</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">,</span><span class="STRN">"ig"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">WinEnvironment</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 75</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.replace</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="NAME">dirSp</span><span class="PUNC">==</span><span class="STRN">'/'</span><span class="PUNC">?</span><span class="STRN">'\\\\'</span><span class="PUNC">:</span><span class="STRN">'/'</span><span class="PUNC">,</span><span class="STRN">"g"</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'> 76</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">m</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">t</span><span class="PUNC">=</span><span class="NAME">p.lastIndexOf</span><span class="PUNC">(</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">&&</span><span class="NAME">t</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">!=</span><span class="NAME">p.length</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.slice</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">t</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">//去除檔名假如輸入sss/ddd會把ddd除去需輸入sss/ddd/以標示ddd為目錄</span><span class="WHIT">
<span class='line'> 77</span> </span><span class="WHIT"> </span><span class="COMM">//p=p.replace(new RegExp(dirSp+dirSp,'g'),dirSp); // \\→\,未考慮到'\\pictures\scenic\canyon.bmp'的情況</span><span class="WHIT">
<span class='line'> 78</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p.replace</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="STRN">'^(\\.'</span><span class="PUNC">+</span><span class="NAME">dirSpR</span><span class="PUNC">+</span><span class="STRN">')+'</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="STRN">''</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="COMM">// .\→''</span><span class="WHIT">
<span class='line'> 79</span> </span><span class="WHIT"> </span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="NAME">dirSpR</span><span class="PUNC">+</span><span class="STRN">'(\\.'</span><span class="PUNC">+</span><span class="NAME">dirSpR</span><span class="PUNC">+</span><span class="STRN">')+'</span><span class="PUNC">,</span><span class="STRN">'g'</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="COMM">// \.\→\</span><span class="WHIT">
<span class='line'> 80</span> </span><span class="WHIT"> </span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="STRN">'[^.'</span><span class="PUNC">+</span><span class="NAME">dirSpR</span><span class="PUNC">+</span><span class="STRN">']+'</span><span class="PUNC">+</span><span class="NAME">dirSpR</span><span class="PUNC">+</span><span class="STRN">'\\.\\.'</span><span class="PUNC">+</span><span class="NAME">dirSpR</span><span class="PUNC">,</span><span class="STRN">'g'</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="STRN">''</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// xx\..\→''</span><span class="WHIT">
<span class='line'> 81</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'> 82</span> </span><span class="COMM">//alert(reducePath('http://hostname/../aaa/bbb/../ccc/../ddd',1));</span><span class="WHIT">
<span class='line'> 83</span>
<span class='line'> 84</span> </span><span class="COMM">// 去除hostname等如輸入http://hostname/aaa/bbb/ccc得到aaa/bbb/ccc/</span><span class="WHIT">
<span class='line'> 85</span> </span><span class="COMM">// 假如輸入的格式不正確,可能得出不預期的回應值!</span><span class="WHIT">
<span class='line'> 86</span> </span><span class="COMM">/* 對dirSp.length>1的情形嚴謹
<span class='line'> 87</span> function getPathOnly(p){
<span class='line'> 88</span> //discard hash & search
<span class='line'> 89</span> var i=p.lastIndexOf('?'),j=p.lastIndexOf('#'),dirSpL=dirSp.length;
<span class='line'> 90</span> if(i==-1)i=j;else if(j!=-1&&i>j)i=j;if(i!=-1)p=p.slice(0,i);
<span class='line'> 91</span> // 去除http://hostname/等
<span class='line'> 92</span> if(p.slice(0,5)=='file:///')p=p.substr('file:///'.length); // 對file:///特別處理!
<span class='line'> 93</span> else if((i=p.indexOf(':'+dirSp+dirSp))!=-1&&(i=p.indexOf(dirSp,i+(':'+dirSp+dirSp).length))!=-1))p=p.substr(i+dirSpL); // http://hostname/path→path
<span class='line'> 94</span> else if(p.slice(0,dirSpL)==dirSp)
<span class='line'> 95</span> // /usr/local/→usr/local/
<span class='line'> 96</span> if(p.substr(dirSpL,dirSpL)!=dirSp)p=p.substr(dirSpL);
<span class='line'> 97</span> // 去除\\hostname\
<span class='line'> 98</span> else if((i=p.indexOf(dirSp,dirSpL+dirSpL))>dirSpL+dirSpL)p=p.substr(i+dirSpL);
<span class='line'> 99</span> // \\\zzzz的情形不合法的路徑
<span class='line'>100</span> else if(i!=-1)throw new Error(1,'illegal path:'+p);
<span class='line'>101</span> return p;
<span class='line'>102</span> }
<span class='line'>103</span> */</span><span class="WHIT">
<span class='line'>104</span> </span><span class="COMM">// 對dirSp.length==1的情形簡化</span><span class="WHIT">
<span class='line'>105</span> </span><span class="COMM">//getPathOnly[generateCode.dLK]='dirSp';//,isFile</span><span class="WHIT">
<span class='line'>106</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">getPathOnly</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>107</span> </span><span class="WHIT"> </span><span class="COMM">//discard hash & search</span><span class="WHIT">
<span class='line'>108</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NAME">p.lastIndexOf</span><span class="PUNC">(</span><span class="STRN">'?'</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">j</span><span class="PUNC">=</span><span class="NAME">p.lastIndexOf</span><span class="PUNC">(</span><span class="STRN">'#'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>109</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">==</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="NAME">i</span><span class="PUNC">=</span><span class="NAME">j</span><span class="PUNC">;</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">j</span><span class="PUNC">!=</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">&&</span><span class="NAME">i</span><span class="PUNC">></span><span class="NAME">j</span><span class="PUNC">)</span><span class="NAME">i</span><span class="PUNC">=</span><span class="NAME">j</span><span class="PUNC">;</span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">!=</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.slice</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">i</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>110</span> </span><span class="WHIT"> </span><span class="COMM">// 去除http://hostname/等</span><span class="WHIT">
<span class='line'>111</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">p.slice</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="STRN">'file:///'</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.substr</span><span class="PUNC">(</span><span class="NUMB">8</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 對file:///應該是file:)特別處理!</span><span class="WHIT">
<span class='line'>112</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">=</span><span class="NAME">p.indexOf</span><span class="PUNC">(</span><span class="STRN">':'</span><span class="PUNC">+</span><span class="NAME">dirSp</span><span class="PUNC">+</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">&&</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">=</span><span class="NAME">p.indexOf</span><span class="PUNC">(</span><span class="NAME">dirSp</span><span class="PUNC">,</span><span class="NAME">i</span><span class="PUNC">+</span><span class="NUMB">3</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.substr</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// http://hostname/path→path</span><span class="WHIT">
<span class='line'>113</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">p.charAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>114</span> </span><span class="WHIT"> </span><span class="COMM">// /usr/local/→usr/local/</span><span class="WHIT">
<span class='line'>115</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">p.charAt</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.substr</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>116</span> </span><span class="WHIT"> </span><span class="COMM">// 去除\\hostname\ 不去除:.replace(/[^\\]+$/,'')</span><span class="WHIT">
<span class='line'>117</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">=</span><span class="NAME">p.indexOf</span><span class="PUNC">(</span><span class="NAME">dirSp</span><span class="PUNC">,</span><span class="NUMB">2</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">></span><span class="NUMB">2</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.substr</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>118</span> </span><span class="WHIT"> </span><span class="COMM">// \\\zzzz的情形不合法的路徑</span><span class="WHIT">
<span class='line'>119</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">!=</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="KEYW">throw</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">Error</span><span class="PUNC">(</span><span class="NUMB">1</span><span class="PUNC">,</span><span class="STRN">'illegal path:'</span><span class="PUNC">+</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>120</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">isFile</span><span class="PUNC">==</span><span class="STRN">'function'</span><span class="PUNC">&&</span><span class="NAME">isFile</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="COMM">// !isWeb()&&~</span><span class="WHIT">
<span class='line'>121</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.replace</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="NAME">dirSpR</span><span class="PUNC">+</span><span class="STRN">'[^'</span><span class="PUNC">+</span><span class="NAME">dirSpR</span><span class="PUNC">+</span><span class="STRN">']+$'</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>122</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>123</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>124</span>
<span class='line'>125</span>
<span class='line'>126</span>
<span class='line'>127</span>
<span class='line'>128</span> </span><span class="COMM">/* 2003/10/1 15:57
<span class='line'>129</span> pn(path now)相對於bp(base path)之path(增加../等)
<span class='line'>130</span> */</span><span class="WHIT">
<span class='line'>131</span> </span><span class="COMM">//relative_path[generateCode.dLK]='reducePath,is_absolute_path,same_length,dirSp,dirSpR';</span><span class="WHIT">
<span class='line'>132</span> </span><span class="COMM">//,WScript,WshShell</span><span class="WHIT">
<span class='line'>133</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">relative_path</span><span class="PUNC">(</span><span class="NAME">bp</span><span class="PUNC">,</span><span class="NAME">pn</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>134</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">pn</span><span class="PUNC">)</span><span class="NAME">pn</span><span class="PUNC">=</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">location</span><span class="PUNC">==</span><span class="STRN">'object'</span><span class="PUNC">?</span><span class="NAME">location.href</span><span class="PUNC">:</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">WScript</span><span class="PUNC">==</span><span class="STRN">'object'</span><span class="PUNC">?</span><span class="NAME">WScript.ScriptFullName</span><span class="PUNC">:</span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>135</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">bp</span><span class="PUNC">)</span><span class="NAME">bp</span><span class="PUNC">=</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">location</span><span class="PUNC">==</span><span class="STRN">'object'</span><span class="PUNC">?</span><span class="NAME">location.href</span><span class="PUNC">:</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">WshShell</span><span class="PUNC">==</span><span class="STRN">'object'</span><span class="PUNC">?</span><span class="NAME">WshShell.CurrentDirectory</span><span class="PUNC">:</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">WScript</span><span class="PUNC">==</span><span class="STRN">'object'</span><span class="PUNC">?</span><span class="NAME">WScript.ScriptFullName</span><span class="PUNC">:</span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>136</span> </span><span class="WHIT"> </span><span class="COMM">//alert('relative_path: parse 1\n'+bp+'\n'+pn);</span><span class="WHIT">
<span class='line'>137</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">reducePath</span><span class="PUNC">(</span><span class="NAME">pn</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>138</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">p</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>139</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">=</span><span class="NAME">reducePath</span><span class="PUNC">(</span><span class="NAME">bp</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>140</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">d</span><span class="PUNC">||</span><span class="PUNC">!</span><span class="NAME">is_absolute_path</span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// bp需要是絕對路徑</span><span class="WHIT">
<span class='line'>141</span>
<span class='line'>142</span> </span><span class="WHIT"> </span><span class="COMM">//alert('relative_path: parse 2\n'+d+'\n'+p);</span><span class="WHIT">
<span class='line'>143</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">is_absolute_path</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// p非絕對路徑時先處理成絕對路徑</span><span class="WHIT">
<span class='line'>144</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">=</span><span class="NAME">p.indexOf</span><span class="PUNC">(</span><span class="NAME">dirSp</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 預防第一字元為dirSp</span><span class="WHIT">
<span class='line'>145</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">q</span><span class="PUNC">==</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="NAME">q</span><span class="PUNC">=</span><span class="NAME">p</span><span class="PUNC">;</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">=</span><span class="NAME">p.slice</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">q</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 取得第一識別用目錄名</span><span class="WHIT">
<span class='line'>146</span> </span><span class="WHIT"> </span><span class="COMM">//alert('relative_path: parse 3\n'+d+'\n'+q);</span><span class="WHIT">
<span class='line'>147</span> </span><span class="WHIT"> </span><span class="NAME">q</span><span class="PUNC">=</span><span class="NAME">d.indexOf</span><span class="PUNC">(</span><span class="NAME">q</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>148</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">q</span><span class="PUNC">==</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>149</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">d.slice</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">q</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>150</span>
<span class='line'>151</span> </span><span class="COMM">/*
<span class='line'>152</span> var i=0,q=p.split(dirSp),s=new Array(q.length),a=-1,P,bigPC=0,bigP;
<span class='line'>153</span> // 找出最大連續相同路徑:尚未最佳化
<span class='line'>154</span> for(i=0;i&lt;q.length;i++){
<span class='line'>155</span> if(a==-1)P=q[i];else P+=dirSp+q[i];
<span class='line'>156</span> if(d.indexOf(P)==-1){if(a!=-1&&s[a]>bigPC)bigPC=s[a],bigP=P;a=-1;}
<span class='line'>157</span> else{if(a==-1)a=i;++s[a];}
<span class='line'>158</span> }
<span class='line'>159</span> d=d.indexOf(bigP);
<span class='line'>160</span> */</span><span class="WHIT">
<span class='line'>161</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>162</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">=</span><span class="NAME">same_length</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="NAME">d</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>163</span>
<span class='line'>164</span> </span><span class="WHIT"> </span><span class="COMM">//alert('dirSp: '+dirSp+'\npath now:\n '+p+'\nbase path:\n '+d+'\nsame: '+s);</span><span class="WHIT">
<span class='line'>165</span> </span><span class="WHIT"> </span><span class="COMM">//alert(p+'\n'+d+'\n'+s+'\n'+d.substr(s)+'\n'+d.substr(s).match(new RegExp(dirSp,'g')).length);</span><span class="WHIT">
<span class='line'>166</span> </span><span class="WHIT"> </span><span class="COMM">//pLog(d.charAt(s-1)+','+d.slice(0,s)+':'+s+','+d.slice(0,s).lastIndexOf(dirSp));</span><span class="WHIT">
<span class='line'>167</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">></span><span class="NUMB">0</span><span class="PUNC">&&</span><span class="NAME">d.charAt</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">!=</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="NAME">s</span><span class="PUNC">=</span><span class="NAME">d.slice</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">lastIndexOf</span><span class="PUNC">(</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>168</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">s</span><span class="PUNC">></span><span class="NUMB">0</span><span class="PUNC">?</span><span class="NAME">d.substr</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="STRN">'([^'</span><span class="PUNC">+</span><span class="NAME">dirSpR</span><span class="PUNC">+</span><span class="STRN">']+'</span><span class="PUNC">+</span><span class="NAME">dirSpR</span><span class="PUNC">+</span><span class="STRN">')'</span><span class="PUNC">,</span><span class="STRN">'g'</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="STRN">'..'</span><span class="PUNC">+</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="NAME">p.substr</span><span class="PUNC">(</span><span class="NAME">s</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>169</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>170</span> </span><span class="COMM">// 想要保持 Protocol但卻是不同機器時 http://nedbatchelder.com/blog/200710.html#e20071017T215538</span><span class="WHIT">
<span class='line'>171</span> </span><span class="COMM">//alert(relative_path('//lyrics.meicho.com.tw/game/game.pl?seg=diary21','cgi-bin/game/photo/'));WScript.Quit();</span><span class="WHIT">
<span class='line'>172</span>
<span class='line'>173</span>
<span class='line'>174</span>
<span class='line'>175</span> </span><span class="NAME">CeL.IO.file</span><span class="WHIT">
<span class='line'>176</span> </span><span class="PUNC">.</span><span class="WHIT">
<span class='line'>177</span> </span><span class="COMM">/**
<span class='line'>178</span> * determine base path.
<span class='line'>179</span> * 給定 base path 的結構後,藉由 path_now 推測 base path 的 full path.
<span class='line'>180</span> * cf.
<span class='line'>181</span> * @param {String} base_path_structure base path 的範本結構
<span class='line'>182</span> * @param {String} path_now
<span class='line'>183</span> * @return {String} 推測的 base path full path
<span class='line'>184</span> * @example
<span class='line'>185</span> * alert(determine_base_path('kanashimi/www/cgi-bin/game/'));
<span class='line'>186</span> * @requres reducePath,getPathOnly,dirSp,dirSpR
<span class='line'>187</span> * @memberOf CeL.IO.file
<span class='line'>188</span> */</span><span class="WHIT">
<span class='line'>189</span> </span><span class="NAME">determine_base_path</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">base_path_structure</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">path_now</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>190</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">path_now</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>191</span> </span><span class="WHIT"> </span><span class="NAME">path_now</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">library_namespace.get_base_path</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>192</span>
<span class='line'>193</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">p</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">reducePath</span><span class="PUNC">(</span><span class="NAME">path_now</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>194</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">p</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>195</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>196</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">base_path_structure</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>197</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>198</span>
<span class='line'>199</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>200</span> </span><span class="WHIT"> </span><span class="COMM">// or use .split()</span><span class="WHIT">
<span class='line'>201</span> </span><span class="WHIT"> </span><span class="NAME">d</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">getPathOnly</span><span class="PUNC">(</span><span class="NAME">reducePath</span><span class="PUNC">(</span><span class="NAME">base_path_structure</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>202</span> </span><span class="WHIT"> </span><span class="PUNC">.</span><span class="NAME">match</span><span class="PUNC">(</span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="STRN">'([^'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dirSpR</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">']+'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dirSpR</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">')'</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'g'</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>203</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">d</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>204</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>205</span>
<span class='line'>206</span> </span><span class="WHIT"> </span><span class="KEYW">for</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="WHIT"> </span><span class="PUNC">&lt;</span><span class="WHIT"> </span><span class="NAME">d.length</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>207</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">p.lastIndexOf</span><span class="PUNC">(</span><span class="NAME">dirSp</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>208</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">dirSp</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>209</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">k</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">p.lastIndexOf</span><span class="PUNC">(</span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>210</span> </span><span class="WHIT"> </span><span class="NAME">j</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">k</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>211</span> </span><span class="WHIT"> </span><span class="KEYW">while</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">]</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>212</span> </span><span class="WHIT"> </span><span class="NAME">t</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">d</span><span class="PUNC">[</span><span class="NAME">i</span><span class="PUNC">++</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>213</span> </span><span class="WHIT"> </span><span class="KEYW">break</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>214</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>215</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">t</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>216</span> </span><span class="WHIT"> </span><span class="COMM">//alert("Can't find base directory of this file!\n" + path_name + '\n\nTreat base directory as:\n' + p);</span><span class="WHIT">
<span class='line'>217</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>218</span>
<span class='line'>219</span> </span><span class="WHIT"> </span><span class="COMM">//alert('determine_base_path:\nbp='+bp+'\npn='+pn+'\n\n'+p.slice(0,j)+'\n'+t+'\n'+(t.replace(new RegExp('([^'+dirSpR+']+'+dirSpR+')','g'),' ').length-1));</span><span class="WHIT">
<span class='line'>220</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p.slice</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">j</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">t</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>221</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>222</span>
<span class='line'>223</span>
<span class='line'>224</span> </span><span class="NAME">CeL.IO.file</span><span class="WHIT">
<span class='line'>225</span> </span><span class="PUNC">.</span><span class="WHIT">
<span class='line'>226</span> </span><span class="COMM">/**
<span class='line'>227</span> * cf: getFN()
<span class='line'>228</span> * @param {String} path path name
<span class='line'>229</span> * @return
<span class='line'>230</span> * @memberOf CeL.IO.file
<span class='line'>231</span> */</span><span class="WHIT">
<span class='line'>232</span> </span><span class="NAME">parse_path</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>233</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="KEYW">typeof</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT"> </span><span class="PUNC">!==</span><span class="WHIT"> </span><span class="STRN">'string'</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="PUNC">!</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>234</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>235</span>
<span class='line'>236</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">path_data</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>237</span> </span><span class="WHIT"> </span><span class="NAME">oInput</span><span class="WHIT"> </span><span class="PUNC">:</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT">
<span class='line'>238</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>239</span>
<span class='line'>240</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path.match</span><span class="PUNC">(</span><span class="REGX">/^(([A-Za-z]):\\)(([^\\]+\\)*)([^\\]+)?$/</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>241</span> </span><span class="WHIT"> </span><span class="NAME">path_data.drive</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>242</span> </span><span class="WHIT"> </span><span class="NAME">path_data.path_name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">3</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>243</span> </span><span class="WHIT"> </span><span class="NAME">path_data.file_name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">5</span><span class="PUNC">]</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>244</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">m</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT">
<span class='line'>245</span> </span><span class="WHIT"> </span><span class="PUNC">.</span><span class="NAME">match</span><span class="PUNC">(</span><span class="REGX">/^file:\/\/\/([A-Za-z]):\/(([^\/]+\/)*)([^\/]+)?$/</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>246</span> </span><span class="WHIT"> </span><span class="NAME">path_data.drive</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">1</span><span class="PUNC">]</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>247</span> </span><span class="WHIT"> </span><span class="NAME">path_data.path_name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">2</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/\//g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'\\'</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="WHIT">
<span class='line'>248</span> </span><span class="WHIT"> </span><span class="NAME">path_data.file_name</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">m</span><span class="PUNC">[</span><span class="NUMB">4</span><span class="PUNC">]</span><span class="PUNC">.</span><span class="NAME">replace</span><span class="PUNC">(</span><span class="REGX">/\//g</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="STRN">'\\'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>249</span>
<span class='line'>250</span> </span><span class="WHIT"> </span><span class="NAME">path_data.path</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path_data.path_name</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path_data.file_name</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>251</span> </span><span class="WHIT"> </span><span class="NAME">path_data.location</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path_data.drive</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">':\\'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path_data.path</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>252</span> </span><span class="WHIT"> </span><span class="NAME">path_data.directory</span><span class="WHIT"> </span><span class="PUNC">=</span><span class="WHIT"> </span><span class="NAME">path_data.drive</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="STRN">':\\'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">path_data.path_name</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>253</span>
<span class='line'>254</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path_data</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>255</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>256</span>
<span class='line'>257</span>
<span class='line'>258</span> </span><span class="NAME">CeL.IO.file</span><span class="WHIT">
<span class='line'>259</span> </span><span class="PUNC">.</span><span class="WHIT">
<span class='line'>260</span> </span><span class="COMM">/**
<span class='line'>261</span> * is absolute or relative path, not very good solution
<span class='line'>262</span> * @param {String} path
<span class='line'>263</span> * @return
<span class='line'>264</span> * @requires dirSp,dirSpR
<span class='line'>265</span> * @memberOf CeL.IO.file
<span class='line'>266</span> */</span><span class="WHIT">
<span class='line'>267</span> </span><span class="NAME">is_absolute_path</span><span class="PUNC">=</span><span class="KEYW">function</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>268</span> </span><span class="WHIT"> </span><span class="COMM">//alert(typeof path + '\n' + path);</span><span class="WHIT">
<span class='line'>269</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">path</span><span class="WHIT">
<span class='line'>270</span> </span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="NAME">dirSp</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="STRN">'/'</span><span class="WHIT"> </span><span class="PUNC">&&</span><span class="WHIT"> </span><span class="NAME">path.charAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="WHIT"> </span><span class="PUNC">===</span><span class="WHIT"> </span><span class="NAME">dirSp</span><span class="WHIT"> </span><span class="PUNC">||</span><span class="WHIT"> </span><span class="KEYW">new</span><span class="WHIT"> </span><span class="NAME">RegExp</span><span class="PUNC">(</span><span class="WHIT">
<span class='line'>271</span> </span><span class="WHIT"> </span><span class="STRN">'^(\\\\|[A-Za-z]+:)'</span><span class="WHIT"> </span><span class="PUNC">+</span><span class="WHIT"> </span><span class="NAME">dirSpR</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">test</span><span class="PUNC">(</span><span class="NAME">path</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="WHIT">
<span class='line'>272</span> </span><span class="WHIT"> </span><span class="COMM">// ?true:false</span><span class="WHIT">
<span class='line'>273</span> </span><span class="WHIT"> </span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>274</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>275</span>
<span class='line'>276</span>
<span class='line'>277</span> </span><span class="COMM">// 轉成path加'\'</span><span class="WHIT">
<span class='line'>278</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">turnToPath</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">?</span><span class="NAME">p</span><span class="PUNC">+</span><span class="PUNC">(</span><span class="NAME">p.slice</span><span class="PUNC">(</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="STRN">'\\'</span><span class="PUNC">?</span><span class="STRN">''</span><span class="PUNC">:</span><span class="STRN">'\\'</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="STRN">''</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>279</span> </span><span class="COMM">// 僅取得path部分(包括 dirSp),不包括檔名。</span><span class="WHIT">
<span class='line'>280</span> </span><span class="COMM">//getFilePath[generateCode.dLK]='dirSp';</span><span class="WHIT">
<span class='line'>281</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">getFilePath</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>282</span> </span><span class="WHIT"> </span><span class="KEYW">var</span><span class="WHIT"> </span><span class="NAME">i</span><span class="PUNC">=</span><span class="NAME">p.lastIndexOf</span><span class="PUNC">(</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>283</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">==</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">+</span><span class="PUNC">=</span><span class="NAME">dirSp</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 相對路徑?</span><span class="WHIT">
<span class='line'>284</span> </span><span class="WHIT"> </span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">i</span><span class="PUNC">&lt;</span><span class="NAME">p.length</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.slice</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">i</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 取得path部分</span><span class="WHIT">
<span class='line'>285</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>286</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>287</span> </span><span class="COMM">/* 傳回包括檔名之絕對/相對路徑,假如是資料夾,也會回傳資料夾路徑。可包含'.','..'等 the return value include ? #
<span class='line'>288</span> 在Win/DOS下輸入'\'..會加上base driver
<span class='line'>289</span> 若只要相對路徑可用reducePath()。取得如'..\out'的絕對路徑可用getFP('../out',1)
<span class='line'>290</span> */</span><span class="WHIT">
<span class='line'>291</span> </span><span class="COMM">//getFP[generateCode.dLK]='determine_base_path,reducePath,is_absolute_path,getPathOnly,relative_path';</span><span class="WHIT">
<span class='line'>292</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">getFP</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="NAME">m</span><span class="PUNC">,</span><span class="NAME">bp</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// path,mode=0:傳回auto(維持原狀),1:傳回絕對路徑,2:傳回相對路徑,base path</span><span class="WHIT">
<span class='line'>293</span> </span><span class="WHIT"> </span><span class="COMM">//old: return (p.lastIndexOf('\\')==-1&&p.lastIndexOf('/')==-1?getFolder(getScriptFullName()):'')+p;//getF</span><span class="WHIT">
<span class='line'>294</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">p</span><span class="PUNC">)</span><span class="KEYW">return</span><span class="STRN">''</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>295</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">p.charAt</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="STRN">'\\'</span><span class="PUNC">&&</span><span class="NAME">determine_base_path</span><span class="PUNC">(</span><span class="NAME">bp</span><span class="PUNC">)</span><span class="PUNC">.</span><span class="NAME">match</span><span class="PUNC">(</span><span class="REGX">/^(\\\\|[A-Za-z]+:)/</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">RegExp.$1</span><span class="PUNC">+</span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>296</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">reducePath</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>297</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">m</span><span class="PUNC">==</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>298</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="PUNC">!</span><span class="NAME">is_absolute_path</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">reducePath</span><span class="PUNC">(</span><span class="PUNC">(</span><span class="NAME">bp</span><span class="PUNC">?</span><span class="NAME">getPathOnly</span><span class="PUNC">(</span><span class="NAME">bp</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">determine_base_path</span><span class="PUNC">(</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 當為相對路徑時前置base path</span><span class="WHIT">
<span class='line'>299</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="KEYW">else</span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">m</span><span class="PUNC">==</span><span class="NUMB">2</span><span class="PUNC">&&</span><span class="NAME">is_absolute_path</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">relative_path</span><span class="PUNC">(</span><span class="NAME">determine_base_path</span><span class="PUNC">(</span><span class="NAME">bp</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>300</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>301</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>302</span> </span><span class="COMM">// 傳回檔名部分the return value include ? #</span><span class="WHIT">
<span class='line'>303</span> </span><span class="COMM">//getFN[generateCode.dLK]='getFP,dirSp';</span><span class="WHIT">
<span class='line'>304</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">getFN</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="NAME">bp</span><span class="PUNC">,</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// path,base path,mode=0:檔名,1:(當輸入為不可信賴的字串時)去除檔名中不允許的字元,割掉? #等</span><span class="WHIT">
<span class='line'>305</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">getFP</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">bp</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>306</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.slice</span><span class="PUNC">(</span><span class="NAME">p.lastIndexOf</span><span class="PUNC">(</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT"> </span><span class="COMM">// 不能用.substr(p.lastIndexOf(dirSp))+dirSp,因為p.lastIndexOf(dirSp)可能==-1 // 比起(m=p.lastIndexOf(dirSp))==-1?p:p.substr(m+1);此法比較直接,不過感覺多一道手續…</span><span class="WHIT">
<span class='line'>307</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">m</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT">
<span class='line'>308</span> </span><span class="WHIT"> </span><span class="KEYW">if</span><span class="PUNC">(</span><span class="NAME">p.match</span><span class="PUNC">(</span><span class="REGX">/[#?]/</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.substr</span><span class="PUNC">(</span><span class="NUMB">0</span><span class="PUNC">,</span><span class="NAME">RegExp.lastIndex</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>309</span> </span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">p.replace</span><span class="PUNC">(</span><span class="REGX">/[\\\/:*?"&lt;>|]/g</span><span class="PUNC">,</span><span class="STRN">'_'</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="COMM">//[ \.] // 去除檔名中不允許的字元</span><span class="WHIT">
<span class='line'>310</span> </span><span class="WHIT"> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>311</span> </span><span class="WHIT"> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>312</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>313</span> </span><span class="COMM">// 傳回檔案/資料夾物件 FileSystemObjectのバグ(制限)で、環境によっては2G以上の領域を認識できません。WSH5.6ではこのバグが修正されています。</span><span class="WHIT">
<span class='line'>314</span> </span><span class="COMM">//getF[generateCode.dLK]='isFile,dealShortcut,getFP,dirSp,getFolder,initWScriptObj';</span><span class="WHIT">
<span class='line'>315</span> </span><span class="KEYW">function</span><span class="WHIT"> </span><span class="NAME">getF</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="NAME">m</span><span class="PUNC">,</span><span class="NAME">bp</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="WHIT"> </span><span class="COMM">// path,mode=0:auto(維持原狀),1:絕對路徑,2:相對路徑,base path</span><span class="WHIT">
<span class='line'>316</span> </span><span class="WHIT"> </span><span class="KEYW">try</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">isFile</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">=</span><span class="NAME">dealShortcut</span><span class="PUNC">(</span><span class="NAME">getFP</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">,</span><span class="NAME">m</span><span class="PUNC">,</span><span class="NAME">bp</span><span class="PUNC">)</span><span class="PUNC">,</span><span class="NUMB">1</span><span class="PUNC">)</span><span class="PUNC">)</span><span class="PUNC">?</span><span class="NAME">fso.GetFile</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="NAME">fso.GetFolder</span><span class="PUNC">(</span><span class="NAME">p</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>317</span> </span><span class="WHIT"> </span><span class="KEYW">catch</span><span class="PUNC">(</span><span class="NAME">e</span><span class="PUNC">)</span><span class="PUNC">{</span><span class="KEYW">return</span><span class="WHIT"> </span><span class="NAME">p.indexOf</span><span class="PUNC">(</span><span class="NAME">dirSp</span><span class="PUNC">)</span><span class="PUNC">==</span><span class="PUNC">-</span><span class="NUMB">1</span><span class="PUNC">?</span><span class="NAME">getF</span><span class="PUNC">(</span><span class="NAME">getFolder</span><span class="PUNC">(</span><span class="NAME">WScript.ScriptFullName</span><span class="PUNC">)</span><span class="PUNC">+</span><span class="NAME">p</span><span class="PUNC">,</span><span class="NAME">m</span><span class="PUNC">,</span><span class="NAME">bp</span><span class="PUNC">)</span><span class="PUNC">:</span><span class="KEYW">null</span><span class="PUNC">;</span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>318</span> </span><span class="PUNC">}</span><span class="WHIT">
<span class='line'>319</span> </span><span class="COMM">//alert(getFP('\program files\\xxx\\xxx.exe',2));</span><span class="WHIT">
<span class='line'>320</span>
<span class='line'>321</span>
<span class='line'>322</span>
<span class='line'>323</span>
<span class='line'>324</span>
<span class='line'>325</span> </span><span class="KEYW">return</span><span class="WHIT"> </span><span class="PUNC">(</span><span class="WHIT">
<span class='line'>326</span> </span><span class="WHIT"> </span><span class="NAME">CeL.IO.file</span><span class="WHIT">
<span class='line'>327</span> </span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>328</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>329</span>
<span class='line'>330</span> </span><span class="COMM">//===================================================</span><span class="WHIT">
<span class='line'>331</span>
<span class='line'>332</span> </span><span class="NAME">CeL.setup_module</span><span class="PUNC">(</span><span class="NAME">module_name</span><span class="PUNC">,</span><span class="WHIT"> </span><span class="NAME">code_for_including</span><span class="PUNC">)</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>333</span>
<span class='line'>334</span> </span><span class="PUNC">}</span><span class="PUNC">;</span><span class="WHIT">
<span class='line'>335</span> </span></pre></body></html>