From 2aeb2eeb7a6cb90779ff6bd840eae8cdb80ef194 Mon Sep 17 00:00:00 2001 From: Geoff McLane Date: Fri, 3 Nov 2017 19:16:17 +0100 Subject: [PATCH] Issue #403 - New 'keep-tabs' option to address this. --- include/tidyenum.h | 1 + src/config.c | 1 + src/language_en.h | 11 +++++++++++ src/streamio.c | 13 ++++++++----- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/include/tidyenum.h b/include/tidyenum.h index 90d7352..ae523a6 100644 --- a/include/tidyenum.h +++ b/include/tidyenum.h @@ -604,6 +604,7 @@ typedef enum TidyJoinClasses, /**< Join multiple class attributes */ TidyJoinStyles, /**< Join multiple style attributes */ TidyKeepFileTimes, /**< If yes last modied time is preserved */ + TidyKeepTabs, /**< If yes keep input source tabs */ TidyLiteralAttribs, /**< If true attributes may use newlines */ TidyLogicalEmphasis, /**< Replace i by em and b by strong */ TidyLowerLiterals, /**< Folds known attribute values to lower case */ diff --git a/src/config.c b/src/config.c index 2fd89d7..7b7bd2e 100644 --- a/src/config.c +++ b/src/config.c @@ -214,6 +214,7 @@ static const TidyOptionImpl option_defs[] = { TidyJoinClasses, MX, "join-classes", BL, no, ParsePickList, &boolPicks }, { TidyJoinStyles, MX, "join-styles", BL, yes, ParsePickList, &boolPicks }, { TidyKeepFileTimes, IO, "keep-time", BL, no, ParsePickList, &boolPicks }, + { TidyKeepTabs, PP, "keep-tabs", BL, no, ParsePickList, &boolPicks }, /* 20171103 - Issue #403 */ { TidyLiteralAttribs, MR, "literal-attributes", BL, no, ParsePickList, &boolPicks }, { TidyLogicalEmphasis, MC, "logical-emphasis", BL, no, ParsePickList, &boolPicks }, { TidyLowerLiterals, MR, "lower-literals", BL, yes, ParsePickList, &boolPicks }, diff --git a/src/language_en.h b/src/language_en.h index f56f1ec..9f5b93e 100644 --- a/src/language_en.h +++ b/src/language_en.h @@ -699,6 +699,17 @@ static languageDefinition language_en = { whichPluralForm_en, { "
" "Note this feature is not supported on some platforms. " }, + {/* Important notes for translators: + - Use only , , , , and +
. + - Entities, tags, attributes, etc., should be enclosed in . + - Option values should be enclosed in . + - It's very important that
be self-closing! + - The strings "Tidy" and "HTML Tidy" are the program name and must not + be translated. */ + TidyKeepTabs, 0, + "This option specifies if Tidy should keep tabs found in the source. " + }, {/* Important notes for translators: - Use only , , , , and
. diff --git a/src/streamio.c b/src/streamio.c index cd36efe..bf75a1a 100644 --- a/src/streamio.c +++ b/src/streamio.c @@ -239,7 +239,6 @@ static void RestoreLastPos( StreamIn *in ) uint TY_(ReadChar)( StreamIn *in ) { uint c = EndOfStream; - uint tabsize = cfg( in->doc, TidyTabSize ); if ( in->pushed ) return PopChar( in ); @@ -269,11 +268,15 @@ uint TY_(ReadChar)( StreamIn *in ) if (c == '\t') { - in->tabs = tabsize > 0 ? - tabsize - ((in->curcol - 1) % tabsize) - 1 - : 0; + Bool keeptabs = cfg( in->doc, TidyKeepTabs ); in->curcol++; - c = ' '; + if (!keeptabs) { + uint tabsize = cfg(in->doc, TidyTabSize); + in->tabs = tabsize > 0 ? + tabsize - ((in->curcol - 1) % tabsize) - 1 + : 0; + c = ' '; + } break; }