Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasr committed Jul 17, 2016
2 parents f3d6cf0 + 17af583 commit 56e84d3
Show file tree
Hide file tree
Showing 26 changed files with 539 additions and 47 deletions.
1 change: 1 addition & 0 deletions src/Viasfora.Core/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public static class Constants {
public const String Python = "Python";
public const String R = "R";
public const String Sql = "Sql";
public const String USql = "U-SQL";
public const String TypeScript = "TypeScript";
public const String VB = "VB";
}
Expand Down
1 change: 1 addition & 0 deletions src/Viasfora.Core/Guids.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public static class Guids {
public const String VBOptions = "52787c4e-2f7f-47de-b645-82779f648a04";
public const String FSharpOptions = "4accae10-98db-4b60-9463-26a6ba9313da";
public const String SqlOptions = "ea0d3217-2fed-4fa6-a47a-f88951a799fc";
public const String USqlOptions = "ebacc073-f3ab-40c3-8ffa-869ac0e9b143";
public const String TypeScriptOptions = "a7776058-9af1-476e-884a-d2a13ab3eaea";
public const String PythonOptions = "e8fef725-07d8-469c-9e61-4c02a7de348e";
public const String ROptions = "07df20ff-c086-47c0-8a4a-f3db50d7d8d6";
Expand Down
3 changes: 0 additions & 3 deletions src/Viasfora.Languages/BraceScanners/SqlBraceScanner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ public String BraceList {
get { return "()[]"; }
}

public SqlBraceScanner() {
}

public void Reset(int state) {
this.status = stText;
}
Expand Down
98 changes: 98 additions & 0 deletions src/Viasfora.Languages/BraceScanners/USqlBraceScanner.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
using System;
using Winterdom.Viasfora.Rainbow;
using Winterdom.Viasfora.Util;

namespace Winterdom.Viasfora.Languages.BraceScanners {
public class USqlBraceScanner : IBraceScanner {
const int stText = 0;
const int stString = 1;
const int stMultiLineComment = 4;
private int status = stText;

public string BraceList {
get { return "()[]{}"; }
}

public void Reset(int state) {
status = stText;
}
public bool Extract(ITextChars tc, ref CharPos pos) {
pos = CharPos.Empty;
while ( !tc.EndOfLine ) {
switch ( status ) {
case stString: ParseString(tc); break;
case stMultiLineComment: ParseMultilineComment(tc); break;
default:
return ParseText(tc, ref pos);
}
}
return false;
}

private bool ParseText(ITextChars tc, ref CharPos pos) {
while ( !tc.EndOfLine ) {
if ( tc.Char() == '/' && tc.NChar() == '*' ) {
tc.Skip(2);
status = stMultiLineComment;
ParseMultilineComment(tc);
} else if ( tc.Char() == '/' && tc.NChar() == '/' ) {
tc.SkipRemainder();
} else if ( tc.Char() == '\'' ) {
status = stString;
tc.Next();
ParseCharLiteral(tc);
} else if ( tc.Char() == '"' ) {
status = stString;
tc.Next();
ParseString(tc);
} else if ( this.BraceList.IndexOf(tc.Char()) >= 0 ) {
pos = new CharPos(tc.Char(), tc.AbsolutePosition);
tc.Next();
return true;
} else {
tc.Next();
}
}
return false;
}

private void ParseCharLiteral(ITextChars tc) {
while ( !tc.EndOfLine ) {
if ( tc.Char() == '\\' ) {
// skip over escape sequences
tc.Skip(2);
} else if ( tc.Char() == '\'' ) {
tc.Next();
break;
} else {
tc.Next();
}
}
this.status = stText;
}

private void ParseMultilineComment(ITextChars tc) {
while ( !tc.EndOfLine ) {
if ( tc.Char() == '*' && tc.Char() == '/' ) {
tc.Skip(2);
status = stText;
break;
} else {
tc.Next();
}
}
}

private void ParseString(ITextChars tc) {
while ( !tc.EndOfLine ) {
if ( tc.Char() == '\"' ) {
tc.Next();
this.status = stText;
break;
} else {
tc.Next();
}
}
}
}
}
52 changes: 52 additions & 0 deletions src/Viasfora.Languages/USql.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using System;
using System.ComponentModel.Composition;
using Winterdom.Viasfora.Contracts;
using Winterdom.Viasfora.Languages.BraceScanners;
using Winterdom.Viasfora.Languages.Sequences;
using Winterdom.Viasfora.Rainbow;
using Winterdom.Viasfora.Util;

namespace Winterdom.Viasfora.Languages {
[Export(typeof(ILanguage))]
public class USql : LanguageInfo {

static readonly String[] QUERY = {
"select", "extract", "process", "reduce", "combine",
"produce", "using", "output", "from"
};
static readonly String[] VISIBILITY = {
"readonly"
};

public override String KeyName {
get { return Constants.USql; }
}

protected override String[] ControlFlowDefaults {
get { return EMPTY; }
}

protected override String[] LinqDefaults {
get { return QUERY; }
}

protected override string[] VisibilityDefaults {
get { return VISIBILITY; }
}

protected override String[] SupportedContentTypes {
get { return new String[] { "U-SQL" }; }
}

protected override IBraceScanner NewBraceScanner() {
return new USqlBraceScanner();
}
public override IStringScanner NewStringScanner(string text) {
return new CSharpStringScanner(text);
}

[ImportingConstructor]
public USql(IVsfSettings settings) : base(settings) {
}
}
}
2 changes: 2 additions & 0 deletions src/Viasfora.Languages/Viasfora.Languages.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
<Compile Include="BraceScanners\PythonBraceScanner.cs" />
<Compile Include="BraceScanners\RBraceScanner.cs" />
<Compile Include="BraceScanners\SqlBraceScanner.cs" />
<Compile Include="BraceScanners\USqlBraceScanner.cs" />
<Compile Include="BraceScanners\VbBraceScanner.cs" />
<Compile Include="CBasedLanguage.cs" />
<Compile Include="CommentParsers\GenericCommentParser.cs" />
Expand All @@ -85,6 +86,7 @@
<Compile Include="Sequences\RStringScanner.cs" />
<Compile Include="Sql.cs" />
<Compile Include="TypeScript.cs" />
<Compile Include="USql.cs" />
<Compile Include="VB.cs" />
<Compile Include="XLang.cs" />
</ItemGroup>
Expand Down
10 changes: 10 additions & 0 deletions src/Viasfora.Rainbow/IBraceStacker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using System;

namespace Winterdom.Viasfora.Rainbow {
public interface IBraceStacker {
int Count(char brace);
BracePos Push(CharPos brace);
BracePos Pop(char brace);
BracePos Peek(char brace);
}
}
1 change: 1 addition & 0 deletions src/Viasfora.Rainbow/IRainbowSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public interface IRainbowSettings : IUpdatableSettings {
long RainbowCtrlTimer { get; set; }
RainbowHighlightMode RainbowHighlightMode { get; set; }
bool RainbowToolTipsEnabled { get; set; }
RainbowColoringMode RainbowColoringMode { get; set; }
void Save();
}
}
36 changes: 36 additions & 0 deletions src/Viasfora.Rainbow/PerBraceStacker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;

namespace Winterdom.Viasfora.Rainbow {
public class PerBraceStacker : IBraceStacker {
private String braceList;
private Dictionary<char, Stack<BracePos>> stack;

public PerBraceStacker(String braceList) {
this.braceList = braceList;
this.stack = new Dictionary<char, Stack<BracePos>>();
for ( int i=0; i < braceList.Length; i += 2 ) {
var pairs = new Stack<BracePos>();
this.stack[braceList[i]] = pairs;
this.stack[braceList[i + 1]] = pairs;
}
}
public int Count(char brace) {
return stack[brace].Count;
}

public BracePos Pop(char brace) {
return stack[brace].Pop();
}
public BracePos Peek(char brace) {
return stack[brace].Peek();
}

public BracePos Push(CharPos brace) {
var pairs = stack[brace.Char];
var bp = brace.AsBrace(pairs.Count);
pairs.Push(bp);
return bp;
}
}
}
8 changes: 8 additions & 0 deletions src/Viasfora.Rainbow/RainbowColoringMode.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using System;

namespace Winterdom.Viasfora.Rainbow {
public enum RainbowColoringMode {
Unified = 0,
PerBrace = 1
}
}
5 changes: 4 additions & 1 deletion src/Viasfora.Rainbow/RainbowProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ public static bool TryMapToView(ITextView view, SnapshotPoint pos, out SnapshotP
}

private void SettingsChanged() {
// force recreating the TextBufferBraces instance
SetLanguage(this.TextBuffer.CurrentSnapshot);
this.UpdateBraceList(new SnapshotPoint(this.TextBuffer.CurrentSnapshot, 0));
}

Expand Down Expand Up @@ -169,7 +171,8 @@ private void FireTagsChanged() {
private void SetLanguage(ITextSnapshot snapshot) {
if ( TextBuffer != null ) {
var lang = LanguageFactory.TryCreateLanguage(snapshot);
this.BufferBraces = new TextBufferBraces(this.TextBuffer.CurrentSnapshot, lang);
var mode = Settings.RainbowColoringMode;
this.BufferBraces = new TextBufferBraces(this.TextBuffer.CurrentSnapshot, lang, mode);
}
}

Expand Down
14 changes: 10 additions & 4 deletions src/Viasfora.Rainbow/Settings/RainbowSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@ public class RainbowSettings : IRainbowSettings {

private IVsfSettings settings;

public event EventHandler SettingsChanged {
add { settings.SettingsChanged += value; }
remove { settings.SettingsChanged -= value; }
}
public event EventHandler SettingsChanged;

public int RainbowDepth {
get { return settings.GetInt32(nameof(RainbowDepth), 4); }
Expand All @@ -32,14 +29,23 @@ public bool RainbowToolTipsEnabled {
get { return settings.GetBoolean(nameof(RainbowToolTipsEnabled), true); }
set { settings.SetValue(nameof(RainbowToolTipsEnabled), value); }
}
public RainbowColoringMode RainbowColoringMode {
get { return settings.GetEnum(nameof(RainbowColoringMode), RainbowColoringMode.Unified); }
set { settings.SetValue(nameof(RainbowColoringMode), value); }
}

[ImportingConstructor]
public RainbowSettings(IVsfSettings settings) {
this.settings = settings;
this.settings.SettingsChanged += OnSettingsChanged;
}

public void Save() {
this.settings.Save();
}

private void OnSettingsChanged(object sender, EventArgs e) {
SettingsChanged?.Invoke(this, e);
}
}
}
Loading

0 comments on commit 56e84d3

Please sign in to comment.