[DRE-commits] [ruby-rouge] 01/03: Imported Upstream version 2.0.2

Youhei SASAKI uwabami-guest at moszumanska.debian.org
Sun Jul 3 10:15:11 UTC 2016


This is an automated email from the git hooks/post-receive script.

uwabami-guest pushed a commit to annotated tag debian/2.0.2-1
in repository ruby-rouge.

commit 4e39ef8485dbc6a327fbffdf5c81945fc1e5c85b
Author: Youhei SASAKI <uwabami at gfd-dennou.org>
Date:   Sun Jul 3 19:11:23 2016 +0900

    Imported Upstream version 2.0.2
---
 lib/rouge/demos/idlang         |   8 ++
 lib/rouge/formatters/html.rb   |   3 -
 lib/rouge/lexers/csharp.rb     |   2 +-
 lib/rouge/lexers/idlang.rb     | 316 +++++++++++++++++++++++++++++++++++++++++
 lib/rouge/lexers/java.rb       |  14 +-
 lib/rouge/lexers/javascript.rb |  23 +++
 lib/rouge/lexers/liquid.rb     |   2 +-
 lib/rouge/lexers/shell.rb      |  10 +-
 lib/rouge/lexers/twig.rb       |   2 +
 lib/rouge/theme.rb             |   8 ++
 lib/rouge/version.rb           |   2 +-
 11 files changed, 379 insertions(+), 11 deletions(-)

diff --git a/lib/rouge/demos/idlang b/lib/rouge/demos/idlang
new file mode 100644
index 0000000..49f16af
--- /dev/null
+++ b/lib/rouge/demos/idlang
@@ -0,0 +1,8 @@
+for i = 99L, 0, -1 do begin
+
+  print, i, format="(I0, 1X, 'bottles of beer on the wall,')"
+  print, i, format="(I0, 1X, 'bottles of beer.')"
+  print, 'Take one down, pass it around,'
+  print, i, format="(I0, 1X, 'bottles of beer on the wall.', /)"
+
+endfor
diff --git a/lib/rouge/formatters/html.rb b/lib/rouge/formatters/html.rb
index 88a66ac..dc06013 100644
--- a/lib/rouge/formatters/html.rb
+++ b/lib/rouge/formatters/html.rb
@@ -1,8 +1,5 @@
 # -*- coding: utf-8 -*- #
 
-# stdlib
-require 'cgi'
-
 module Rouge
   module Formatters
     # Transforms a token stream into HTML output.
diff --git a/lib/rouge/lexers/csharp.rb b/lib/rouge/lexers/csharp.rb
index 8cec04a..a8d12ce 100644
--- a/lib/rouge/lexers/csharp.rb
+++ b/lib/rouge/lexers/csharp.rb
@@ -43,7 +43,7 @@ module Rouge
 
       state :whitespace do
         rule /\s+/m, Text
-        rule %r(//.*?\n), Comment::Single
+        rule %r(//.*?$), Comment::Single
         rule %r(/[*].*?[*]/)m, Comment::Multiline
       end
 
diff --git a/lib/rouge/lexers/idlang.rb b/lib/rouge/lexers/idlang.rb
new file mode 100644
index 0000000..31b4ff8
--- /dev/null
+++ b/lib/rouge/lexers/idlang.rb
@@ -0,0 +1,316 @@
+# -*- coding: utf-8 -*- #
+# vim: set ts=2 sw=2 et:
+
+module Rouge
+  module Lexers
+    class IDLang < RegexLexer
+      title "IDL"
+      desc "Interactive Data Language"
+
+      tag 'idlang'
+      filenames '*.idl'
+
+      def self.analyze_text(text)
+        # Does there exist a statement that starts with 'pro' or
+        # 'function'?
+        return 0.4 if text =~ /^\s+(pro|function)\z/
+      end
+
+      name = /[_A-Z]\w*/i
+      kind_param = /(\d+|#{name})/
+      exponent = /[dDeE][+-]\d+/
+
+      def self.exec_unit
+        @exec_unit ||= Set.new %w(
+          PRO FUNCTION
+        )
+      end
+
+      def self.keywords
+        @keywords ||= Set.new %w(
+          STRUCT INHERITS
+          RETURN CONTINUE BEGIN END BREAK GOTO
+        )
+      end
+
+      def self.standalone_statements
+        # Must not have a comma afterwards
+        @standalone_statements ||= Set.new %w(
+          COMMON FORWARD_FUNCTION
+        )
+      end
+
+      def self.decorators
+        # Must not have a comma afterwards
+        @decorators ||= Set.new %w(
+          COMPILE_OPT
+        )
+      end
+
+      def self.operators
+        @operators ||= Set.new %w(
+          AND= EQ= GE= GT= LE= LT= MOD= NE= OR= XOR= NOT=
+        )
+      end
+
+      def self.conditionals
+        @conditionals ||= Set.new %w(
+          OF DO ENDIF ENDELSE ENDFOR ENDFOREACH ENDWHILE ENDREP ENDCASE ENDSWITCH
+          IF THEN ELSE FOR FOREACH WHILE REPEAT UNTIL CASE SWITCH
+          AND EQ GE GT LE LT MOD NE OR XOR NOT
+        )
+      end
+
+      def self.routines
+        @routines ||= Set.new %w(
+          A_CORRELATE ABS ACOS ADAPT_HIST_EQUAL ALOG ALOG10
+          AMOEBA ANNOTATE ARG_PRESENT ARRAY_EQUAL
+          ARRAY_INDICES ARROW ASCII_TEMPLATE ASIN ASSOC ATAN
+          AXIS BAR_PLOT BESELI BESELJ BESELK BESELY BETA
+          BILINEAR BIN_DATE BINARY_TEMPLATE BINDGEN BINOMIAL
+          BLAS_AXPY BLK_CON BOX_CURSOR BREAK BREAKPOINT
+          BROYDEN BYTARR BYTE BYTEORDER BYTSCL C_CORRELATE
+          CALDAT CALENDAR CALL_EXTERNAL CALL_FUNCTION
+          CALL_METHOD CALL_PROCEDURE CATCH CD CEIL CHEBYSHEV
+          CHECK_MATH CHISQR_CVF CHISQR_PDF CHOLDC CHOLSOL
+          CINDGEN CIR_3PNT CLOSE CLUST_WTS CLUSTER
+          COLOR_CONVERT COLOR_QUAN COLORMAP_APPLICABLE COMFIT
+          COMPLEX COMPLEXARR COMPLEXROUND
+          COMPUTE_MESH_NORMALS COND CONGRID CONJ
+          CONSTRAINED_MIN CONTOUR CONVERT_COORD CONVOL
+          COORD2TO3 CORRELATE COS COSH CRAMER CREATE_STRUCT
+          CREATE_VIEW CROSSP CRVLENGTH CT_LUMINANCE CTI_TEST
+          CURSOR CURVEFIT CV_COORD CVTTOBM CW_ANIMATE
+          CW_ANIMATE_GETP CW_ANIMATE_LOAD CW_ANIMATE_RUN
+          CW_ARCBALL CW_BGROUP CW_CLR_INDEX CW_COLORSEL
+          CW_DEFROI CW_FIELD CW_FILESEL CW_FORM CW_FSLIDER
+          CW_LIGHT_EDITOR CW_LIGHT_EDITOR_GET
+          CW_LIGHT_EDITOR_SET CW_ORIENT CW_PALETTE_EDITOR
+          CW_PALETTE_EDITOR_GET CW_PALETTE_EDITOR_SET
+          CW_PDMENU CW_RGBSLIDER CW_TMPL CW_ZOOM DBLARR
+          DCINDGEN DCOMPLEX DCOMPLEXARR DEFINE_KEY DEFROI
+          DEFSYSV DELETE_SYMBOL DELLOG DELVAR DERIV DERIVSIG
+          DETERM DEVICE DFPMIN DIALOG_MESSAGE
+          DIALOG_PICKFILE DIALOG_PRINTERSETUP
+          DIALOG_PRINTJOB DIALOG_READ_IMAGE
+          DIALOG_WRITE_IMAGE DICTIONARY DIGITAL_FILTER DILATE DINDGEN
+          DISSOLVE DIST DLM_LOAD DLM_REGISTER
+          DO_APPLE_SCRIPT DOC_LIBRARY DOUBLE DRAW_ROI EFONT
+          EIGENQL EIGENVEC ELMHES EMPTY ENABLE_SYSRTN EOF
+          ERASE ERODE ERRORF ERRPLOT EXECUTE EXIT EXP EXPAND
+          EXPAND_PATH EXPINT EXTRAC EXTRACT_SLICE F_CVF
+          F_PDF FACTORIAL FFT FILE_CHMOD FILE_DELETE
+          FILE_EXPAND_PATH FILE_MKDIR FILE_TEST FILE_WHICH
+          FILE_SEARCH PATH_SEP FILE_DIRNAME FILE_BASENAME
+          FILE_INFO FILE_MOVE FILE_COPY FILE_LINK FILE_POLL_INPUT
+          FILEPATH FINDFILE FINDGEN FINITE FIX FLICK FLOAT
+          FLOOR FLOW3 FLTARR FLUSH FORMAT_AXIS_VALUES
+          FORWARD_FUNCTION FREE_LUN FSTAT FULSTR FUNCT
+          FV_TEST FX_ROOT FZ_ROOTS GAMMA GAMMA_CT
+          GAUSS_CVF GAUSS_PDF GAUSS2DFIT GAUSSFIT GAUSSINT
+          GET_DRIVE_LIST GET_KBRD GET_LUN GET_SCREEN_SIZE
+          GET_SYMBOL GETENV GOTO GREG2JUL GRID_TPS GRID3 GS_ITER
+          H_EQ_CT H_EQ_INT HANNING HASH HEAP_GC HELP HILBERT
+          HIST_2D HIST_EQUAL HISTOGRAM HLS HOUGH HQR HSV
+          IBETA IDENTITY IDL_CONTAINER IDLANROI
+          IDLANROIGROUP IDLFFDICOM IDLFFDXF IDLFFLANGUAGECAT
+          IDLFFSHAPE IDLGRAXIS IDLGRBUFFER IDLGRCLIPBOARD
+          IDLGRCOLORBAR IDLGRCONTOUR IDLGRFONT IDLGRIMAGE
+          IDLGRLEGEND IDLGRLIGHT IDLGRMODEL IDLGRMPEG
+          IDLGRPALETTE IDLGRPATTERN IDLGRPLOT IDLGRPOLYGON
+          IDLGRPOLYLINE IDLGRPRINTER IDLGRROI IDLGRROIGROUP
+          IDLGRSCENE IDLGRSURFACE IDLGRSYMBOL
+          IDLGRTESSELLATOR IDLGRTEXT IDLGRVIEW
+          IDLGRVIEWGROUP IDLGRVOLUME IDLGRVRML IDLGRWINDOW
+          IGAMMA IMAGE_CONT IMAGE_STATISTICS IMAGINARY
+          INDGEN INT_2D INT_3D INT_TABULATED INTARR INTERPOL
+          INTERPOLATE INVERT IOCTL ISA ISHFT ISOCONTOUR
+          ISOSURFACE JOURNAL JUL2GREG JULDAY KEYWORD_SET KRIG2D
+          KURTOSIS KW_TEST L64INDGEN LABEL_DATE LABEL_REGION
+          LADFIT LAGUERRE LEEFILT LEGENDRE LINBCG LINDGEN
+          LINFIT LINKIMAGE LIST LIVE_CONTOUR LIVE_CONTROL
+          LIVE_DESTROY LIVE_EXPORT LIVE_IMAGE LIVE_INFO
+          LIVE_LINE LIVE_LOAD LIVE_OPLOT LIVE_PLOT
+          LIVE_PRINT LIVE_RECT LIVE_STYLE LIVE_SURFACE
+          LIVE_TEXT LJLCT LL_ARC_DISTANCE LMFIT LMGR LNGAMMA
+          LNP_TEST LOADCT LOCALE_GET LON64ARR LONARR LONG
+          LONG64 LSODE LU_COMPLEX LUDC LUMPROVE LUSOL
+          M_CORRELATE MACHAR MAKE_ARRAY MAKE_DLL MAP_2POINTS
+          MAP_CONTINENTS MAP_GRID MAP_IMAGE MAP_PATCH
+          MAP_PROJ_INFO MAP_SET MAX MATRIX_MULTIPLY MD_TEST MEAN
+          MEANABSDEV MEDIAN MEMORY MESH_CLIP MESH_DECIMATE
+          MESH_ISSOLID MESH_MERGE MESH_NUMTRIANGLES MESH_OBJ
+          MESH_SMOOTH MESH_SURFACEAREA MESH_VALIDATE
+          MESH_VOLUME MESSAGE MIN MIN_CURVE_SURF MK_HTML_HELP
+          MODIFYCT MOMENT MORPH_CLOSE MORPH_DISTANCE
+          MORPH_GRADIENT MORPH_HITORMISS MORPH_OPEN
+          MORPH_THIN MORPH_TOPHAT MPEG_CLOSE MPEG_OPEN
+          MPEG_PUT MPEG_SAVE MSG_CAT_CLOSE MSG_CAT_COMPILE
+          MSG_CAT_OPEN MULTI N_ELEMENTS N_PARAMS N_TAGS
+          NEWTON NORM OBJ_CLASS OBJ_DESTROY OBJ_ISA OBJ_NEW
+          OBJ_VALID OBJARR ON_ERROR ON_IOERROR ONLINE_HELP
+          OPEN OPENR OPENW OPENU OPLOT OPLOTERR ORDEREDHASH P_CORRELATE
+          PARTICLE_TRACE PCOMP PLOT PLOT_3DBOX PLOT_FIELD
+          PLOTERR PLOTS PNT_LINE POINT_LUN POLAR_CONTOUR
+          POLAR_SURFACE POLY POLY_2D POLY_AREA POLY_FIT
+          POLYFILL POLYFILLV POLYSHADE POLYWARP POPD POWELL
+          PRIMES PRINT PRINTF PRINTD PRODUCT PROFILE PROFILER
+          PROFILES PROJECT_VOL PS_SHOW_FONTS PSAFM PSEUDO
+          PTR_FREE PTR_NEW PTR_VALID PTRARR PUSHD QROMB
+          QROMO QSIMP QUERY_CSV R_CORRELATE R_TEST RADON RANDOMN
+          RANDOMU RANKS RDPIX READ READF READ_ASCII
+          READ_BINARY READ_BMP READ_CSV READ_DICOM READ_IMAGE
+          READ_INTERFILE READ_JPEG READ_PICT READ_PNG
+          READ_PPM READ_SPR READ_SRF READ_SYLK READ_TIFF
+          READ_WAV READ_WAVE READ_X11_BITMAP READ_XWD READS
+          READU REBIN RECALL_COMMANDS RECON3 REDUCE_COLORS
+          REFORM REGRESS REPLICATE REPLICATE_INPLACE
+          RESOLVE_ALL RESOLVE_ROUTINE RESTORE RETALL
+          REVERSE REWIND RK4 ROBERTS ROT ROTATE ROUND
+          ROUTINE_INFO RS_TEST S_TEST SAVE SAVGOL SCALE3
+          SCALE3D SCOPE_LEVEL SCOPE_TRACEBACK SCOPE_VARFETCH
+          SCOPE_VARNAME SEARCH2D SEARCH3D SET_PLOT SET_SHADING
+          SET_SYMBOL SETENV SETLOG SETUP_KEYS SFIT
+          SHADE_SURF SHADE_SURF_IRR SHADE_VOLUME SHIFT SHOW3
+          SHOWFONT SIGNUM SIN SINDGEN SINH SIZE SKEWNESS SKIPF
+          SLICER3 SLIDE_IMAGE SMOOTH SOBEL SOCKET SORT SPAWN
+          SPH_4PNT SPH_SCAT SPHER_HARM SPL_INIT SPL_INTERP
+          SPLINE SPLINE_P SPRSAB SPRSAX SPRSIN SPRSTP SQRT
+          STANDARDIZE STDDEV STOP STRARR STRCMP STRCOMPRESS
+          STREAMLINE STREGEX STRETCH STRING STRJOIN STRLEN
+          STRLOWCASE STRMATCH STRMESSAGE STRMID STRPOS
+          STRPUT STRSPLIT STRTRIM STRUCT_ASSIGN STRUCT_HIDE
+          STRUPCASE SURFACE SURFR SVDC SVDFIT SVSOL
+          SWAP_ENDIAN SWITCH SYSTIME T_CVF T_PDF T3D
+          TAG_NAMES TAN TANH TAPRD TAPWRT TEK_COLOR
+          TEMPORARY TETRA_CLIP TETRA_SURFACE TETRA_VOLUME
+          THIN THREED TIME_TEST2 TIMEGEN TM_TEST TOTAL TRACE
+          TRANSPOSE TRI_SURF TRIANGULATE TRIGRID TRIQL
+          TRIRED TRISOL TRNLOG TS_COEF TS_DIFF TS_FCAST
+          TS_SMOOTH TV TVCRS TVLCT TVRD TVSCL TYPENAME UINDGEN UINT
+          UINTARR UL64INDGEN ULINDGEN ULON64ARR ULONARR
+          ULONG ULONG64 UNIQ USERSYM VALUE_LOCATE VARIANCE
+          VAX_FLOAT VECTOR_FIELD VEL VELOVECT VERT_T3D VOIGT
+          VORONOI VOXEL_PROJ WAIT WARP_TRI WATERSHED WDELETE
+          WEOF WF_DRAW WHERE WIDGET_BASE WIDGET_BUTTON
+          WIDGET_CONTROL WIDGET_DRAW WIDGET_DROPLIST
+          WIDGET_EVENT WIDGET_INFO WIDGET_LABEL WIDGET_LIST
+          WIDGET_SLIDER WIDGET_TABLE WIDGET_TEXT WINDOW
+          WRITE_BMP WRITE_CSV WRITE_IMAGE WRITE_JPEG WRITE_NRIF
+          WRITE_PICT WRITE_PNG WRITE_PPM WRITE_SPR WRITE_SRF
+          WRITE_SYLK WRITE_TIFF WRITE_WAV WRITE_WAVE WRITEU
+          WSET WSHOW WTN WV_APPLET WV_CW_WAVELET WV_CWT
+          WV_DENOISE WV_DWT WV_FN_COIFLET WV_FN_DAUBECHIES
+          WV_FN_GAUSSIAN WV_FN_HAAR WV_FN_MORLET WV_FN_PAUL
+          WV_FN_SYMLET WV_IMPORT_DATA WV_IMPORT_WAVELET
+          WV_PLOT3D_WPS WV_PLOT_MULTIRES WV_PWT
+          WV_TOOL_DENOISE XBM_EDIT XDISPLAYFILE XDXF XFONT
+          XINTERANIMATE XLOADCT XMANAGER XMNG_TMPL XMTOOL
+          XOBJVIEW XPALETTE XPCOLOR XPLOT3D XREGISTERED XROI
+          XSQ_TEST XSURFACE XVAREDIT XVOLUME XVOLUME_ROTATE
+          XVOLUME_WRITE_IMAGE XYOUTS ZOOM ZOOM_24
+        )
+      end
+
+      state :root do
+        rule /[\s\n]+/, Text::Whitespace
+        # Normal comments
+        rule /;.*$/, Comment::Single
+        rule /\,\s*\,/, Error
+        rule /\!#{name}/, Name::Variable::Global
+
+        rule /[(),:\&\$]/, Punctuation
+
+        ## Format statements are quite a strange beast.
+        ## Better process them in their own state.
+        #rule /\b(FORMAT)(\s*)(\()/mi do |m|
+        #  token Keyword, m[1]
+        #  token Text::Whitespace, m[2]
+        #  token Punctuation, m[3]
+        #  push :format_spec
+        #end
+
+        rule %r(
+          [+-]? # sign
+          (
+            (\d+[.]\d*|[.]\d+)(#{exponent})?
+            | \d+#{exponent} # exponent is mandatory
+          )
+          (_#{kind_param})? # kind parameter
+        )xi, Num::Float
+
+        rule /\d+(B|S|U|US|LL|L|ULL|UL)?/i, Num::Integer
+        rule /"[0-7]+(B|O|U|ULL|UL|LL|L)?/i, Num::Oct
+        rule /'[0-9A-F]+'X(B|S|US|ULL|UL|U|LL|L)?/i, Num::Hex
+        rule /(#{kind_param}_)?'/, Str::Single, :string_single
+        rule /(#{kind_param}_)?"/, Str::Double, :string_double
+
+        rule %r{\#\#|\#|\&\&|\|\||/=|<=|>=|->|\@|\?|[-+*/<=~^{}]}, Operator
+        # Structures and the like
+        rule /(#{name})(\.)([^\s,]*)/i do |m|
+          groups Name, Operator, Name
+          #delegate IDLang, m[3]
+        end
+
+        rule /(function|pro)((?:\s|\$\s)+)/i do
+          groups Keyword, Text::Whitespace
+          push :funcname
+        end
+
+        rule /#{name}/m do |m|
+          match = m[0].upcase
+          if self.class.keywords.include? match
+            token Keyword
+          elsif self.class.conditionals.include? match
+            token Keyword
+          elsif self.class.decorators.include? match
+            token Name::Decorator
+          elsif self.class.standalone_statements.include? match
+            token Keyword::Reserved
+          elsif self.class.operators.include? match
+            token Operator::Word
+          elsif self.class.routines.include? match
+            token Name::Builtin
+          else
+            token Name
+          end
+        end
+
+      end
+
+      state :funcname do
+        rule /#{name}/, Name::Function
+
+        rule /\s+/, Text::Whitespace
+        rule /(:+|\$)/, Operator
+        rule /;.*/, Comment::Single
+
+        # Be done with this state if we hit EOL or comma
+        rule /$/, Text::Whitespace, :pop!
+        rule /,/, Operator, :pop!
+      end
+
+      state :string_single do
+        rule /[^']+/, Str::Single
+        rule /''/, Str::Escape
+        rule /'/, Str::Single, :pop!
+      end
+
+      state :string_double do
+        rule /[^"]+/, Str::Double
+        rule /"/, Str::Double, :pop!
+      end
+
+      state :format_spec do
+        rule /'/, Str::Single, :string_single
+        rule /"/, Str::Double, :string_double
+        rule /\(/, Punctuation, :format_spec
+        rule /\)/, Punctuation, :pop!
+        rule /,/, Punctuation
+        rule /[\s\n]+/, Text::Whitespace
+        # Edit descriptors could be seen as a kind of "format literal".
+        rule /[^\s'"(),]+/, Literal
+      end
+    end
+  end
+end
diff --git a/lib/rouge/lexers/java.rb b/lib/rouge/lexers/java.rb
index 8a142b2..2322dd9 100644
--- a/lib/rouge/lexers/java.rb
+++ b/lib/rouge/lexers/java.rb
@@ -56,12 +56,20 @@ module Rouge
         rule /(\.)(#{id})/ do
           groups Operator, Name::Attribute
         end
+
         rule /#{id}:/, Name::Label
         rule /\$?#{id}/, Name
         rule /[~^*!%&\[\](){}<>\|+=:;,.\/?-]/, Operator
-        rule /[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?/, Num::Float
-        rule /0x[0-9a-f]+/, Num::Hex
-        rule /[0-9]+L?/, Num::Integer
+
+        digit = /[0-9]_+[0-9]|[0-9]/
+        bin_digit = /[01]_+[01]|[01]/
+        oct_digit = /[0-7]_+[0-7]|[0-7]/
+        hex_digit = /[0-9a-f]_+[0-9a-f]|[0-9a-f]/i
+        rule /#{digit}+\.#{digit}+([eE]#{digit}+)?[fd]?/, Num::Float
+        rule /0b#{bin_digit}+/i, Num::Bin
+        rule /0x#{hex_digit}+/i, Num::Hex
+        rule /0#{oct_digit}+/, Num::Oct
+        rule /#{digit}+L?/, Num::Integer
         rule /\n/, Text
       end
 
diff --git a/lib/rouge/lexers/javascript.rb b/lib/rouge/lexers/javascript.rb
index 923a95c..1b3fdd6 100644
--- a/lib/rouge/lexers/javascript.rb
+++ b/lib/rouge/lexers/javascript.rb
@@ -139,6 +139,11 @@ module Rouge
         rule /;/, Punctuation, :statement
         rule /[)\].]/, Punctuation
 
+        rule /`/ do
+          token Str::Double
+          push :template_string
+        end
+
         rule /[?]/ do
           token Punctuation
           push :ternary
@@ -170,10 +175,16 @@ module Rouge
         rule /[0-9]+/, Num::Integer
         rule /"(\\\\|\\"|[^"])*"/, Str::Double
         rule /'(\\\\|\\'|[^'])*'/, Str::Single
+        rule /:/, Punctuation
       end
 
       # braced parts that aren't object literals
       state :statement do
+        rule /case\b/ do
+          token Keyword
+          goto :expr_start
+        end
+
         rule /(#{id})(\s*)(:)/ do
           groups Name::Label, Text, Punctuation
         end
@@ -215,6 +226,18 @@ module Rouge
 
         mixin :root
       end
+
+      # template strings
+      state :template_string do
+        rule /\${/, Punctuation, :template_string_expr
+        rule /`/, Str::Double, :pop!
+        rule /(\\\\|\\[\$`]|[^\$`]|\$[^{])*/, Str::Double
+      end
+
+      state :template_string_expr do
+        rule /}/, Punctuation, :pop!
+        mixin :root
+      end
     end
 
     class JSON < RegexLexer
diff --git a/lib/rouge/lexers/liquid.rb b/lib/rouge/lexers/liquid.rb
index 071181e..dad7e0d 100644
--- a/lib/rouge/lexers/liquid.rb
+++ b/lib/rouge/lexers/liquid.rb
@@ -210,7 +210,7 @@ module Rouge
 
       state :variable do
         rule /\.(?=\w)/, Punctuation
-        rule /[a-zA-Z_]\w*/, Name::Variable
+        rule /[a-zA-Z_]\w*\??/, Name::Variable
       end
 
       state :string do
diff --git a/lib/rouge/lexers/shell.rb b/lib/rouge/lexers/shell.rb
index 8b7134e..c40475e 100644
--- a/lib/rouge/lexers/shell.rb
+++ b/lib/rouge/lexers/shell.rb
@@ -47,7 +47,6 @@ module Rouge
 
         rule /[\[\]{}()=]/, Operator
         rule /&&|\|\|/, Operator
-        # rule /\|\|/, Operator
 
         rule /<<</, Operator # here-string
         rule /<<-?\s*(\'?)\\?(\w+)\1/ do |m|
@@ -70,6 +69,12 @@ module Rouge
         rule /[^"`\\$]+/, Str::Double
       end
 
+      state :ansi_string do
+        rule /\\./, Str::Escape
+        rule /[^\\']+/, Str::Single
+        mixin :single_quotes
+      end
+
       state :single_quotes do
         rule /'/, Str::Single, :pop!
         rule /[^']+/, Str::Single
@@ -79,13 +84,14 @@ module Rouge
         rule /\s+/, Text
         rule /\\./, Str::Escape
         rule /\$?"/, Str::Double, :double_quotes
+        rule /\$'/, Str::Single, :ansi_string
 
         # single quotes are much easier than double quotes - we can
         # literally just scan until the next single quote.
         # POSIX: Enclosing characters in single-quotes ( '' )
         # shall preserve the literal value of each character within the
         # single-quotes. A single-quote cannot occur within single-quotes.
-        rule /$?'/, Str::Single, :single_quotes
+        rule /'/, Str::Single, :single_quotes
 
         rule /\*/, Keyword
 
diff --git a/lib/rouge/lexers/twig.rb b/lib/rouge/lexers/twig.rb
index 5fcf069..7eb6198 100644
--- a/lib/rouge/lexers/twig.rb
+++ b/lib/rouge/lexers/twig.rb
@@ -10,6 +10,8 @@ module Rouge
 
       tag "twig"
 
+      filenames '*.twig'
+
       mimetypes 'application/x-twig', 'text/html+twig'
 
       def self.keywords
diff --git a/lib/rouge/theme.rb b/lib/rouge/theme.rb
index d6d2ddf..aa74d86 100644
--- a/lib/rouge/theme.rb
+++ b/lib/rouge/theme.rb
@@ -74,6 +74,14 @@ module Rouge
       new(opts).render(&b)
     end
 
+    def get_own_style(token)
+      self.class.get_own_style(token)
+    end
+
+    def get_style(token)
+      self.class.get_style(token)
+    end
+
     class << self
       def style(*tokens)
         style = tokens.last.is_a?(Hash) ? tokens.pop : {}
diff --git a/lib/rouge/version.rb b/lib/rouge/version.rb
index 053b168..7e33c17 100644
--- a/lib/rouge/version.rb
+++ b/lib/rouge/version.rb
@@ -2,6 +2,6 @@
 
 module Rouge
   def self.version
-    "2.0.1"
+    "2.0.2"
   end
 end

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/ruby-rouge.git



More information about the Pkg-ruby-extras-commits mailing list