FixCRLF

說明

調整文字檔以符合當地慣例。

可以使用 includesincludesfileexcludesexcludesfiledefaultexcludes 屬性來精選要調整的檔案組。透過 includesincludesfile 屬性提供的樣式會指定要包含的檔案。透過 excludeexcludesfile 屬性提供的樣式會指定要排除的檔案。此外,可以使用 defaultexcludes 屬性指定預設排除。有關檔案包含/排除樣式及其用法的詳細資訊,請參閱 基於目錄的任務 部分。

此任務會形成一個隱含的 FileSet,並支援 <fileset> 的大多數屬性(dir 會變成 srcdir),以及巢狀的 <include><exclude><patternset> 元素。

只有在輸出檔案是新檔案,或是與現有檔案不同時,才會寫入輸出檔案。這可以防止基於未變更且已由此任務重新產生的檔案進行虛假的重新建置。為了評估檔案是否已變更,此任務會在 暫存目錄 中建立原始檔的預處理版本。

自 Apache Ant 1.7 起,此任務可以在 filterchain 中使用。

參數

屬性 說明 必要
作為任務 作為篩選器
srcDir 要修正的檔案所在位置。 其中之一 不適用
file 要修正的單一檔案名稱。自 Ant 1.7 起
destDir 要放置已修正檔案的位置。 否;預設為 srcDir(取代原始檔案)
includes 必須包含的檔案樣式,以逗號或空格分隔。 否;預設為全部(**
includesfile 檔案名稱。此檔案的每一行都會視為包含樣式。
excludes 必須排除的檔案樣式,以逗號或空格分隔。 否;預設為預設排除,或在 defaultexcludesno 時為無
excludesfile 檔案名稱。此檔案的每一行都被視為排除模式。
defaultexcludes 表示是否應使用預設排除 (yes|no)。 否;預設為 yes
encoding 檔案的編碼。 否;預設為 JVM 預設字元編碼
outputencoding 寫入檔案時使用的編碼。自 Ant 1.7 起 否;若已設定,則預設為 encoding;否則預設為 JVM 預設字元編碼
preservelastmodified 是否保留原始檔案的最後修改日期。自 Ant 1.6.3 起 否;預設為 false
eol 指定如何處理行尾 (EOL) 字元。EOL 字元為 CR、LF 和 CRLF 組合。此屬性的有效值為
  • asis:保留 EOL 字元
  • cr:將所有 EOL 轉換為單一 CR
  • lf:將所有 EOL 轉換為單一 LF
  • crlf:將所有 EOL 轉換為 CRLF 組合
  • mac:將所有 EOL 轉換為單一 CR
  • unix:將所有 EOL 轉換為單一 LF
  • dos:將所有 EOL 轉換為 CRLF 組合

這是指定 EOL 的建議方法。cr 屬性(見下文)現已不建議使用。

注意:識別一個特殊情況。三個字元 CR-CR-LF 被視為單一 EOL。除非此屬性指定為 asis,否則此順序將轉換為指定的 EOL 類型。

否;預設為特定於平台:Unix 平台(包括 Mac OS X/macOS)為 lf,基於 DOS 的系統(包括 Windows)為 crlf,OS X 以外的 Mac 環境為 cr
cr 已不建議使用。指定如何處理行尾 (EOL) 的 CR 字元。此屬性的有效值為
  • asis:保留 EOL 字元。
  • add:在任何單一 LF 字元之前加入 CR。目的是將所有 EOL 轉換為 CRLF 組合。
  • remove:從檔案中移除所有 CR。目的是將所有 EOL 轉換為單一 LF。

注意:識別一個特殊情況。三個字元 CR-CR-LF 被視為單一 EOL。除非此屬性指定為 asis,否則此順序將轉換為指定的 EOL 類型。

否;預設為特定於平台:Unix 平台為 remove,基於 DOS 的系統(包括 Windows)為 add
javafiles 僅與 tab 屬性(見下文)搭配使用,此布林屬性表示檔案集是否為 Java 原始碼檔案集 (yes|no)。請參閱 tab 區段中的附註。 否;預設為 no
tab 指定如何處理 tab 字元。此屬性的有效值為
  • add:將跨距 tab 停駐點的空格序列轉換為 tab
  • asis:保留 tab 和空格字元
  • remove:將 tab 轉換為空格

注意:當屬性 javafiles(見上文)為 true 時,出現在 Java 字串或字元常數中的字面 TAB 字元絕不會被修改。此功能也需要辨識 Java 風格的註解。

注意:此版本與前一版本在處理行尾空白時存在不相容性。此版本不會移除行尾空白。

否;預設為 asis
tablength TAB 字元間隔。有效值介於 280(含)之間。 否;預設為 8
eof 指定如何處理 DOS 檔案結尾(控制碼 Z)字元。此屬性的有效值為
  • add:確保檔案結尾有一個 EOF 字元
  • asis:保留 EOF 字元
  • remove:移除在結尾找到的任何 EOF 字元
否;預設為特定於平台:Unix 平台為 remove,DOS 系統(包括 Windows)為 asis
fixlast 是否在已處理檔案的最後一行加上遺失的 EOL。
如果 eofasis,則忽略。
自 Ant 1.6.1 起
否;預設為 true

範例

將 shell 指令碼中的 EOL 取代為 LF 字元,並移除 EOF 字元。保留 tab 和空格。

<fixcrlf srcdir="${src}" includes="**/*.sh"
         eol="lf" eof="remove"/>

將批次檔中的所有 EOL 取代為 cr-lf 對。保留 tab 和空格。如果在 DOS 系統上執行,則保留 EOF 字元;如果在 Unix 系統上執行,則移除 EOF 字元。

<fixcrlf srcdir="${src}"
         includes="**/*.bat" eol="crlf"/>

根據本機作業系統慣例設定 EOL,並將空格和 tab 序列轉換為最少的空格和 tab 組合,以保留行內的間距。tab 設定為 8 個字元間隔。如果在 DOS 系統上執行,則保留 EOF 字元;如果在 Unix 系統上執行,則移除 EOF 字元。許多版本的 make 需要在命令前加上 tab。

<fixcrlf srcdir="${src}"
         includes="**/Makefile" tab="add"/>

將包含的 Java 原始檔中的所有 EOL 轉換為單一 LF。將字串或字元常數中的 tab 字元(假設 tab 寬度為 3)以外的所有 tab 字元替換為空格。如果在 Unix 系統上執行,則移除檔案結尾的任何 CTRL-Z EOF 字元。在 DOS/Windows 上,任何此類 EOF 字元都將保持不變。

<fixcrlf srcdir="${src}" includes="**/*.java"
         tab="remove" tablength="3"
         eol="lf" javafiles="yes"/>

根據本機作業系統慣例設定 EOL,並將所有 tab 轉換為空白,假設 tab 寬度為 8。如果在 DOS 系統上執行,EOF 字元會保留,如果在 Unix 系統上執行,則會移除。您永遠不知道使用者會使用哪個編輯器來瀏覽 README。

<fixcrlf srcdir="${src}"
         includes="**/README*" tab="remove"/>