26
26
*
27
27
* Copyright 2014, Tim Down
28
28
* Licensed under the MIT license.
29
- * Version: 1.3.0-alpha.20140822.2
30
- * Build date: 22 August 2014
29
+ * Version: 1.3.0-alpha.20140825
30
+ * Build date: 25 August 2014
31
31
*/
32
32
33
33
/**
182
182
includeBlockContentTrailingSpace : true ,
183
183
includeSpaceBeforeBr : true ,
184
184
includeSpaceBeforeBlock : true ,
185
- includePreLineTrailingSpace : true
185
+ includePreLineTrailingSpace : true ,
186
+ ignoreCharacters : ""
186
187
} ;
188
+
189
+ function normalizeIgnoredCharacters ( ignoredCharacters ) {
190
+ // Check if character is ignored
191
+ var ignoredChars = ignoredCharacters || "" ;
192
+
193
+ // Normalize ignored characters into a string consisting of characters in ascending order of character code
194
+ var ignoredCharsArray = ( typeof ignoredChars == "string" ) ? ignoredChars . split ( "" ) : ignoredChars ;
195
+ ignoredCharsArray . sort ( function ( char1 , char2 ) {
196
+ return char1 . charCodeAt ( 0 ) - char2 . charCodeAt ( 0 ) ;
197
+ } ) ;
198
+
199
+ /// Convert back to a string and remove duplicates
200
+ return ignoredCharsArray . join ( "" ) . replace ( / ( .) \1+ / g, "$1" ) ;
201
+ }
187
202
188
203
var defaultCaretCharacterOptions = {
189
204
includeBlockContentTrailingSpace : ! trailingSpaceBeforeLineBreakInPreLineCollapses ,
491
506
}
492
507
} ;
493
508
}
494
-
495
- /*
496
- api.report = function() {
497
- console.log("Cached: " + cachedCount + ", uncached: " + uncachedCount);
498
- };
499
- */
500
509
501
510
/*----------------------------------------------------------------------------------------------------------------*/
502
511
813
822
getCharacter : function ( characterOptions ) {
814
823
this . resolveLeadingAndTrailingSpaces ( ) ;
815
824
825
+ var thisChar = this . character , returnChar ;
826
+
827
+ // Check if character is ignored
828
+ var ignoredChars = normalizeIgnoredCharacters ( characterOptions . ignoreCharacters ) ;
829
+ var isIgnoredCharacter = ( thisChar !== "" && ignoredChars . indexOf ( thisChar ) > - 1 ) ;
830
+
816
831
// Check if this position's character is invariant (i.e. not dependent on character options) and return it
817
832
// if so
818
833
if ( this . isCharInvariant ) {
819
- return this . character ;
834
+ returnChar = isIgnoredCharacter ? "" : thisChar ;
835
+ return returnChar ;
820
836
}
821
837
822
- var cacheKey = [ "character" , characterOptions . includeSpaceBeforeBr , characterOptions . includeBlockContentTrailingSpace , characterOptions . includePreLineTrailingSpace ] . join ( "_" ) ;
838
+ var cacheKey = [ "character" , characterOptions . includeSpaceBeforeBr , characterOptions . includeBlockContentTrailingSpace , characterOptions . includePreLineTrailingSpace , ignoredChars ] . join ( "_" ) ;
823
839
var cachedChar = this . cache . get ( cacheKey ) ;
824
840
if ( cachedChar !== null ) {
825
841
return cachedChar ;
829
845
var character = "" ;
830
846
var collapsible = ( this . characterType == COLLAPSIBLE_SPACE ) ;
831
847
832
- var nextPos , previousPos /* = this.getPrecedingUncollapsedPosition(characterOptions)*/ ;
848
+ var nextPos , previousPos ;
833
849
var gotPreviousPos = false ;
834
850
var pos = this ;
835
851
844
860
// Disallow a collapsible space that is followed by a line break or is the last character
845
861
if ( collapsible ) {
846
862
// Disallow a collapsible space that follows a trailing space or line break, or is the first character
847
- if ( this . character == " " &&
863
+ if ( thisChar == " " &&
848
864
( ! getPreviousPos ( ) || previousPos . isTrailingSpace || previousPos . character == "\n" ) ) {
849
865
}
850
866
// Allow a leading line break unless it follows a line break
851
- else if ( this . character == "\n" && this . isLeadingSpace ) {
867
+ else if ( thisChar == "\n" && this . isLeadingSpace ) {
852
868
if ( getPreviousPos ( ) && previousPos . character != "\n" ) {
853
869
character = "\n" ;
854
870
} else {
864
880
this . type = TRAILING_SPACE_BEFORE_BLOCK ;
865
881
}
866
882
867
- if ( nextPos . character === "\n" ) {
883
+ if ( nextPos . character == "\n" ) {
868
884
if ( this . type == TRAILING_SPACE_BEFORE_BR && ! characterOptions . includeSpaceBeforeBr ) {
869
885
} else if ( this . type == TRAILING_SPACE_BEFORE_BLOCK && ! characterOptions . includeSpaceBeforeBlock ) {
870
886
} else if ( this . type == TRAILING_SPACE_IN_BLOCK && nextPos . isTrailingSpace && ! characterOptions . includeBlockContentTrailingSpace ) {
871
887
} else if ( this . type == PRE_LINE_TRAILING_SPACE_BEFORE_LINE_BREAK && nextPos . type == NON_SPACE && ! characterOptions . includePreLineTrailingSpace ) {
872
- } else if ( this . character = == "\n" ) {
888
+ } else if ( thisChar == "\n" ) {
873
889
if ( nextPos . isTrailingSpace ) {
874
890
if ( this . isTrailingSpace ) {
875
891
} else if ( this . isBr ) {
878
894
if ( getPreviousPos ( ) && previousPos . isLeadingSpace && previousPos . character == "\n" ) {
879
895
nextPos . character = "" ;
880
896
} else {
881
- //character = "\n";
882
- //nextPos
883
- /*
884
- nextPos.character = "";
885
- character = "\n";
886
- */
887
897
}
888
898
}
889
899
} else {
890
900
character = "\n" ;
891
901
}
892
- } else if ( this . character = == " " ) {
902
+ } else if ( thisChar == " " ) {
893
903
character = " " ;
894
904
} else {
895
905
}
896
906
} else {
897
- character = this . character ;
907
+ character = thisChar ;
898
908
}
899
909
} else {
900
910
}
901
911
}
902
912
}
903
913
904
914
// Collapse a br element that is followed by a trailing space
905
- else if ( this . character = == "\n" &&
915
+ else if ( thisChar == "\n" &&
906
916
( ! ( nextPos = this . nextUncollapsed ( ) ) || nextPos . isTrailingSpace ) ) {
907
917
}
908
918
919
+ if ( ignoredChars . indexOf ( character ) > - 1 ) {
920
+ character = "" ;
921
+ }
922
+
909
923
910
924
this . cache . set ( cacheKey , character ) ;
911
925
1917
1931
} ;
1918
1932
} ) ;
1919
1933
1920
- } , this ) ;
1934
+ } , /* Ridiculous nonsense to get the global object in any environment follows */ ( function ( f ) { return f ( 'return this;' ) ( ) ; } ) ( Function ) ) ;
0 commit comments