# Handle line endings automatically for files detected as text
# and leave all files detected as binary untouched.
* text=auto

#
# The above will handle all files NOT found below
#
# These files are text and should be normalized (Convert crlf => lf)
*.assistants                     text
*.classpath                      text
*.configuration                  text
*.creationmenumodel              text
*.css                            text
*.ctx                            text
*.df                             text
*.di                             text
*.ecore                          text
*.elementtypesconfigurations     text
*.expansionmodel                 text
*.exsd                           text
*.fml                            text
*.genmodel                       text
*.htm                            text
*.html                           text
*.ini                            text
*.java                           text
*.js                             text
*.json                           text
*.jsp                            text
*.jspf                           text
*.LICENSE                        text
*.md                             text
*.mediawiki                      text
*.MF                             text
*.mwe2                           text
*.nattableconfiguration          text
*.notation                       text
*.paletteconfiguration           text
*.prefs                          text
*.product                        text
*.project                        text
*.properties                     text
*.sh                             text
*.suite                          text
*.svg                            text
*.test                           text
*.tld                            text
*.tsv                            text
*.txt                            text
*.uml                            text
*.xmi                            text
*.xml                            text
*.xsd                            text
*.xtext                          text
*.xwt                            text

# These files are binary and should be left untouched
# (binary is a macro for -text -diff)
*.bmp           binary
*.class         binary
*.dll           binary
*.ear           binary
*.gif           binary
*.ico           binary
*.jar           binary
*.jpg           binary
*.jpeg          binary
*.pdf           binary
*.png           binary
*.so            binary
*.war           binary

