mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
improve .ms disambiguation (Unix Assembly / MAXScript) (#3707)
A few MAXScript files were misclassified as Unix Assembly. Some of them can be found at github.com/davestewart/maxscript * This commit changes the heuristic which looked for labels such as ".LG7E0:" to actually match the full label including the colon. This reduced the number of MAXScript files misclassified as Unix Assembly, without any new Unix Assembly misclassified so far. * add MAXScript sample rolloutCreator.ms, extrated from MIT repo: https://github.com/davestewart/maxscript/blob/master/3D/3ds2ae/02_resources/max%20scripts/3ds%20ax%20scripts/rolloutCreator.ms
This commit is contained in:
committed by
Colin Seymour
parent
1a6df12902
commit
37979b26b0
@@ -297,7 +297,7 @@ module Linguist
|
|||||||
disambiguate ".ms" do |data|
|
disambiguate ".ms" do |data|
|
||||||
if /^[.'][a-z][a-z](\s|$)/i.match(data)
|
if /^[.'][a-z][a-z](\s|$)/i.match(data)
|
||||||
Language["Roff"]
|
Language["Roff"]
|
||||||
elsif /(?<!\S)\.(include|globa?l)\s/.match(data) || /(?<!\/\*)(\A|\n)\s*\.[A-Za-z]/.match(data.gsub(/"([^\\"]|\\.)*"|'([^\\']|\\.)*'|\\\s*(?:--.*)?\n/, ""))
|
elsif /(?<!\S)\.(include|globa?l)\s/.match(data) || /(?<!\/\*)(\A|\n)\s*\.[A-Za-z][_A-Za-z0-9]*:/.match(data.gsub(/"([^\\"]|\\.)*"|'([^\\']|\\.)*'|\\\s*(?:--.*)?\n/, ""))
|
||||||
Language["Unix Assembly"]
|
Language["Unix Assembly"]
|
||||||
else
|
else
|
||||||
Language["MAXScript"]
|
Language["MAXScript"]
|
||||||
|
|||||||
176
samples/MAXScript/rolloutCreator.ms
Normal file
176
samples/MAXScript/rolloutCreator.ms
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
-------------------------------------------------------------------------------
|
||||||
|
--
|
||||||
|
-- File: rolloutCreator.ms
|
||||||
|
-- Description: Localization friendly helper struct for dynamically creating rollouts
|
||||||
|
-- By: Ravi Karra [Discreet] ravi.karra@discreet.com
|
||||||
|
--
|
||||||
|
-- Version: 1.01
|
||||||
|
-- Version: 1.02 - Larry Minton [Discreet]
|
||||||
|
-- changed <string1> += <string2> to append string1 string2
|
||||||
|
-- added addText method
|
||||||
|
-- Declarations:
|
||||||
|
/*
|
||||||
|
rolloutCreator <rollout_name> <rollout_caption> [width:] [height:]
|
||||||
|
creates an instance of rolloutCreator, assign it to a variable
|
||||||
|
width - width of the rollout/dialog to be created
|
||||||
|
height - of the rollout/dialog to be created
|
||||||
|
|
||||||
|
eg:
|
||||||
|
rci = rolloutCreator "myRollout" "My Rollout"
|
||||||
|
|
||||||
|
|
||||||
|
.begin()
|
||||||
|
this function needs to be called immediately after the instance is created, this does the initialization
|
||||||
|
|
||||||
|
.addLocal <local_name> [init:]
|
||||||
|
<local_name>
|
||||||
|
name of the local
|
||||||
|
|
||||||
|
[init:]
|
||||||
|
what the local should be initialized to
|
||||||
|
|
||||||
|
.addControl <control_type> <control_name> <control_caption> [paramStr:<string>] =
|
||||||
|
adds a control to the rollout
|
||||||
|
|
||||||
|
<control_type>
|
||||||
|
can be any of named rolloutControls eg: #button, #spinner, #activeXControl etc
|
||||||
|
|
||||||
|
<control_name>
|
||||||
|
variable name of the control by which it is referred eg: #btnButton
|
||||||
|
|
||||||
|
<control_caption>
|
||||||
|
caption of the control "My Button"
|
||||||
|
|
||||||
|
[paramStr:]
|
||||||
|
an optional string representation of all the keyword parameters that needs to be passed to the control
|
||||||
|
eg: "width:100 height:20 align:#right"
|
||||||
|
|
||||||
|
eg:
|
||||||
|
rci.addControl #button #myButton "My Button"
|
||||||
|
|
||||||
|
.addHandler <control_name> <event_type> [paramStr:<string>] [codeStr:<string>] [filter:<boolean>]
|
||||||
|
adds an event handler for the controls previously added
|
||||||
|
|
||||||
|
<control_name>
|
||||||
|
the variable passed during the control creation
|
||||||
|
|
||||||
|
<event_type>
|
||||||
|
any of the events supported by the control, eg: #changed, #pressed, #selected
|
||||||
|
|
||||||
|
[paramStr:<string>]
|
||||||
|
an optional string representation of all the positional and keyword parameters that are passed to the event
|
||||||
|
|
||||||
|
[codeStr:<string>]
|
||||||
|
a string representation of the event handler code, if the string contains sub-strings, enclose them in two character '@'
|
||||||
|
and pass on\true for the filter: parameter
|
||||||
|
|
||||||
|
[filter:<boolean>]
|
||||||
|
if true, converts '@' to quote in codeStr
|
||||||
|
|
||||||
|
eg:
|
||||||
|
rci.addHandler #myButton #pressed codeStr:"MessageBox @Hey@" filter:on
|
||||||
|
will add an event handler for button named "myButton". When the button is clicked, messagebox pops up with text "hey" in it.
|
||||||
|
|
||||||
|
.addText <string> [filter:<boolean>]
|
||||||
|
adds string to rollout definition. Typically used for function definitions.
|
||||||
|
|
||||||
|
[filter:<boolean>]
|
||||||
|
if true, converts '@' to quote in string
|
||||||
|
|
||||||
|
.end()
|
||||||
|
this function has to be called whenever all the required control and their event handler's are called. This function forms
|
||||||
|
the rollout string, evaluates it and returns the definition which can passed to createDialog and addRollout functions.
|
||||||
|
|
||||||
|
Complete Example:
|
||||||
|
rci = rolloutCreator "myRollout" "My Rollout"
|
||||||
|
rci.begin()
|
||||||
|
rci.addControl #button #myButton "My Button"
|
||||||
|
rci.addHandler #myButton #pressed filter:on codeStr:"MessageBox @Isn't this cool@ title:@Wow@"
|
||||||
|
createDialog (rci.end())
|
||||||
|
*/
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
if __rcCounter == undefined then global __rcCounter = 0
|
||||||
|
struct rolloutCreator
|
||||||
|
(
|
||||||
|
-- variables
|
||||||
|
name, caption, str, def, width, height, quote="\"",
|
||||||
|
|
||||||
|
-- functions
|
||||||
|
fn begin =
|
||||||
|
(
|
||||||
|
if name == undefined then
|
||||||
|
(
|
||||||
|
__rcCounter += 1
|
||||||
|
name = "rolloutCreator" + __rcCounter as string
|
||||||
|
)
|
||||||
|
if caption == undefined then caption = ""
|
||||||
|
str = ""
|
||||||
|
),
|
||||||
|
|
||||||
|
fn addLocal name init: =
|
||||||
|
(
|
||||||
|
local dStr = "\tlocal " + name as string
|
||||||
|
if init != unsupplied then append dStr (" = " + init as string)
|
||||||
|
append dStr "\n"
|
||||||
|
append str dStr
|
||||||
|
),
|
||||||
|
|
||||||
|
fn addControl type name caption paramStr:"" =
|
||||||
|
(
|
||||||
|
append str ("\t" + type as string + " " + name as string + " " + quote + caption + quote + paramStr + "\n")
|
||||||
|
),
|
||||||
|
|
||||||
|
fn strFilter codeStr =
|
||||||
|
(
|
||||||
|
local last_is_at = codeStr[codeStr.count] == "@"
|
||||||
|
local fltStr = filterString codeStr "@"
|
||||||
|
local rep = "\""
|
||||||
|
codeStr = (if (codeStr[1] == "@") then rep else "") + fltStr[1]
|
||||||
|
for i=2 to fltStr.count do
|
||||||
|
(
|
||||||
|
append codeStr (rep + fltStr[i])
|
||||||
|
)
|
||||||
|
if last_is_at then append codeStr rep
|
||||||
|
codeStr
|
||||||
|
),
|
||||||
|
|
||||||
|
fn addHandler ctrl event paramStr:"" filter:on codeStr:"" =
|
||||||
|
(
|
||||||
|
if filter do codeStr = (strFilter codeStr)
|
||||||
|
append str ("\non " + ctrl as string + " " + event as string + " " + paramStr as string + " do \n(\n" + codeStr + ";ok\n)\n")
|
||||||
|
),
|
||||||
|
|
||||||
|
fn addText txt filter:on =
|
||||||
|
(
|
||||||
|
if filter do txt = (strFilter txt )
|
||||||
|
append str ("\t " + txt + "\n")
|
||||||
|
),
|
||||||
|
|
||||||
|
fn end =
|
||||||
|
(
|
||||||
|
local dStr = "rollout " + name + " " + quote + caption + quote
|
||||||
|
if width != undefined then
|
||||||
|
append dStr (" width:" + width as string)
|
||||||
|
if height != undefined then
|
||||||
|
append dStr (" height:" + height as string)
|
||||||
|
append dStr "\n(\n"
|
||||||
|
append dStr str
|
||||||
|
append dStr "\n)\n"
|
||||||
|
str = dStr
|
||||||
|
def = execute str
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
/*-- Usage
|
||||||
|
-- Create an instance of the rolloutCreator passing the name and the caption
|
||||||
|
rfTest = rolloutCreator "rfTestN" "rfTestC" --width:300 height:100
|
||||||
|
-- Start creating the rollout
|
||||||
|
rfTest.begin()
|
||||||
|
rfTest.addControl #button #myButton "My Button" -- add a button
|
||||||
|
-- rfTest.addHandler #myButton #pressed filter:on codeStr:"MessageBox @Hey@"
|
||||||
|
rfTest.addHandler #myButton #pressed filter:on codeStr:"MessageBox @Look to the \@Light\@ thing@"
|
||||||
|
rfTest.end()
|
||||||
|
createDialog rfTest.def
|
||||||
|
*/
|
||||||
Reference in New Issue
Block a user