Current File : //usr/share/highlight/plugins/scala_ref_scala_lang_org.lua |
--[[
Sample plugin file for highlight 3.9
-- to be finished---
]]
Description="Add scala-lang.org reference links to HTML, LaTeX, RTF and ODT output of Scala code"
-- optional parameter: syntax description
function syntaxUpdate(desc)
if desc~="Scala" then
return
end
function Set (list)
local set = {}
for _, l in ipairs(list) do set[l] = true end
return set
end
scala_items = Set
{"Any","AnyRef","AnyVal","App","Application","Array","Boolean","Byte","Cell",
"Char","cloneable","Console","CountedIterator","DelayedInit","deprecated",
"deprecatedName","Double","Dynamic","Either","Enumeration","Equals",
"FallbackArrayBuilding","Float","Function","Function1","Function2","Immutable",
"inline","Int","Left","Long","LowPriorityImplicits","MatchError","Math",
"Mutable","native","noinline","None","NotDefinedError","Nothing","NotNull",
"Null","Option","PartialFunction","Predef","Product","Product1","Product2",
"Proxy","remote","Responder","Right","Serializable","SerialVersionUID","Short",
"Some","specialized","Symbol","throws","transient","Tuple1","Tuple2","unchecked"
,"UninitializedError","UninitializedFieldError","Unit","volatile" }
actor_items = Set
{"AbstractActor","Actor","CanReply","Channel","DaemonActor","Debug","Exit",
"Future","Futures","InputChannel","IScheduler","MessageQueue",
"MessageQueueElement","OutputChannel","Reaction","Reactor","ReplyReactor",
"Scheduler","SchedulerAdapter","TIMEOUT","UncaughtException"
}
remote_items = Set
{"ExitFun","FreshNameCreator","JavaSerializer","LinkToFun","LocalApply0",
"Locator","NamedSend","Node","RemoteActor","RemoteApply0","SendTo","Serializer",
"Service","TcpService","Terminate","UnlinkFromFun"}
actors_scheduler_items = Set
{"ActorGC","DaemonScheduler","ExecutorScheduler","ForkJoinScheduler",
"ResizableThreadPoolScheduler","SingleThreadedScheduler"}
annotation_items = Set
{"Annotation","ClassfileAnnotation","elidable","implicitNotFound","serializable"
,"StaticAnnotation","strictfp","switch","tailrec","TypeConstraint","varargs"}
annotation_target_items = Set
{"beanGetter","beanSetter","field","getter","param","setter"}
annotation_unchecked_items= Set
{ "uncheckedStable","uncheckedVariance"}
collection_items= Set{
"BitSet","BitSetLike","BufferedIterator","CustomParallelizable","DefaultMap",
"GenIterable","GenIterableLike","GenIterableView","GenIterableViewLike","GenMap"
,"GenMapLike","GenSeq","GenSeqLike","GenSeqView","GenSeqViewLike","GenSet",
"GenSetLike","GenTraversable","GenTraversableLike","GenTraversableOnce",
"GenTraversableView","GenTraversableViewLike","IndexedSeq","IndexedSeqLike",
"IndexedSeqOptimized","Iterable","IterableLike","IterableProxy",
"IterableProxyLike","IterableView","IterableViewLike","Iterator",
"JavaConversions","JavaConverters","LinearSeq","LinearSeqLike",
"LinearSeqOptimized","Map","MapLike","MapProxy","MapProxyLike","Parallel",
"Parallelizable","Seq","SeqLike","SeqProxy","SeqProxyLike","SeqView",
"SeqViewLike","Set","SetLike","SetProxy","SetProxyLike","SortedMap",
"SortedMapLike","SortedSet","SortedSetLike","Traversable","TraversableLike",
"TraversableOnce","TraversableProxy","TraversableProxyLike","TraversableView",
"TraversableViewLike","ViewMkString","focushide" }
collection_generic_items= Set
{
"Addable","AtomicIndexFlag","BitSetFactory","CanBuildFrom","CanCombineFrom",
"ClassManifestTraversableFactory","DefaultSignalling","DelegatedContext",
"DelegatedSignalling","FilterMonadic","GenericClassManifestCompanion",
"GenericClassManifestTraversableTemplate","GenericCompanion",
"GenericOrderedCompanion","GenericOrderedTraversableTemplate",
"GenericParCompanion","GenericParMapCompanion","GenericParMapTemplate",
"GenericParTemplate","GenericSeqCompanion","GenericSetTemplate",
"GenericTraversableTemplate","GenMapFactory","GenSeqFactory","GenSetFactory",
"GenTraversableFactory","Growable","HasNewBuilder","HasNewCombiner",
"IdleSignalling","ImmutableMapFactory","ImmutableSetFactory",
"ImmutableSortedMapFactory","ImmutableSortedSetFactory","IterableForwarder",
"MapFactory","MutableMapFactory","MutableSetFactory","OrderedTraversableFactory"
,"ParFactory","ParMapFactory","ParSetFactory","SeqFactory","SeqForwarder",
"SetFactory","Shrinkable","Signalling","Sizing","SliceInterval","Sorted",
"SortedMapFactory","SortedSetFactory","Subtractable","TaggedDelegatedContext",
"TraversableFactory","TraversableForwarder","VolatileAbort" }
collection_immutable_items= Set
{
"BitSet","DefaultMap","HashMap","HashSet","IndexedSeq","IntMap","Iterable",
"LinearSeq","List","ListMap","ListSet","LongMap","Map","MapLike","MapProxy",
"Nil","NumericRange","RangeUtils","PagedSeq","Queue","Range","RedBlack","Seq",
"Set","SetProxy","SortedMap","SortedSet","Stack","Stream","StreamIterator",
"StreamView","StreamViewLike","StringLike","StringOps","Traversable","TreeMap",
"TreeSet","Vector","VectorBuilder","VectorIterator","WrappedString" }
collection_interfaces_items= Set
{
"IterableMethods","MapMethods","SeqMethods","SetMethods","SubtractableMethods",
"TraversableMethods","TraversableOnceMethods" }
collection_mutable_items= Set
{
"AddingBuilder","ArrayBuffer","ArrayBuilder","ArrayLike","ArrayOps","ArraySeq",
"ArrayStack","BitSet","Buffer","BufferLike","BufferProxy","Builder","Cloneable",
"ConcurrentMap","DefaultEntry","DefaultMapModel","DoubleLinkedList",
"DoubleLinkedListLike","FlatHashTable","GrowingBuilder","HashEntry","HashMap",
"HashSet","HashTable","History","ImmutableMapAdaptor","ImmutableSetAdaptor",
"IndexedSeq","IndexedSeqLike","IndexedSeqOptimized","IndexedSeqView","Iterable",
"LazyBuilder","LinearSeq","LinkedEntry","LinkedHashMap","LinkedHashSet",
"LinkedList","LinkedListLike","ListBuffer","ListMap","Map","MapBuilder",
"MapLike","MapProxy","MultiMap","MutableList","ObservableBuffer","ObservableMap"
,"ObservableSet","OpenHashMap","PriorityQueue","PriorityQueueProxy","Publisher",
"Queue","QueueProxy","ResizableArray","RevertibleHistory","Seq","SeqLike","Set",
"SetBuilder","SetLike","SetProxy","Stack","StackProxy","StringBuilder",
"Subscriber","SynchronizedBuffer","SynchronizedMap","SynchronizedPriorityQueue",
"SynchronizedQueue","SynchronizedSet","SynchronizedStack","Traversable",
"Undoable","UnrolledBuffer","WeakHashMap","WrappedArray","WrappedArrayBuilder" }
collection_parallel_items= Set
{
"AdaptiveWorkStealingForkJoinTasks","AdaptiveWorkStealingTasks",
"AdaptiveWorkStealingThreadPoolTasks","Combiner","ForkJoinTasks",
"FutureThreadPoolTasks","HavingForkJoinPool","IterableSplitter",
"CompositeThrowable","FactoryOps","ThrowableOps","TraversableOps","ParIterable",
"ParIterableLike","ParIterableView","ParIterableViewLike","ParMap","ParMapLike",
"ParSeq","ParSeqLike","ParSeqView","ParSeqViewLike","ParSet","ParSetLike",
"PreciseSplitter","SeqSplitter","Splitter","Tasks","TaskSupport",
"ThreadPoolTasks" }
collection_parallel_immutable_items= Set
{
"Builder","HashSetCombiner","ParHashMap","ParHashSet","ParIterable","ParMap",
"ParRange","ParSeq","ParSet","ParVector" }
collection_parallel_mutable_items= Set
{
"LazyCombiner","ParArray","ParFlatHashTable","ParHashMap","ParHashSet",
"ParHashTable","ParIterable","ParMap","ParMapLike","ParSeq","ParSet",
"ParSetLike","ResizableParArrayCombiner","UnrolledParArrayCombiner" }
function getURL(token, cat)
url='http://www.scala-lang.org/api/current/scala/'..cat..'/'..token.. '.html'
if (HL_OUTPUT== HL_FORMAT_HTML or HL_OUTPUT == HL_FORMAT_XHTML) then
return '<a class="hl" target="new" href="' .. url .. '">'.. token .. '</a>'
elseif (HL_OUTPUT == HL_FORMAT_LATEX) then
return '\\href{'..url..'}{'..token..'}'
elseif (HL_OUTPUT == HL_FORMAT_RTF) then
return '{{\\field{\\*\\fldinst HYPERLINK "'..url..'" }{\\fldrslt\\ul\\ulc0 '..token..'}}}'
elseif (HL_OUTPUT == HL_FORMAT_ODT) then
return '<text:a xlink:type="simple" xlink:href="'..url..'">'..token..'</text:a>'
end
end
function Decorate(token, state)
if (state ~= HL_STANDARD and state ~= HL_KEYWORD) then
return
end
if scala_items[token] then
return getURL(token, '')
elseif actor_items[token] then
return getURL(token, 'actors')
elseif remote_items[token] then
return getURL(token, 'remote')
elseif actors_scheduler_items[token] then
return getURL(token, 'actors/scheduler')
elseif annotation_items[token] then
return getURL(token, 'annotation')
elseif annotation_target_items[token] then
return getURL(token, 'annotation/target')
elseif annotation_unchecked_items[token] then
return getURL(token, 'annotation/unchecked')
elseif collection_items[token] then
return getURL(token, 'collection')
elseif collection_generic_items[token] then
return getURL(token, 'collection/generic')
elseif collection_immutable_items[token] then
return getURL(token, 'collection/immutable')
elseif collection_interfaces_items[token] then
return getURL(token, 'collection/interfaces')
elseif collection_mutable_items[token] then
return getURL(token, 'collection/mutable')
elseif collection_parallel_items[token] then
return getURL(token, 'collection/parallel')
elseif collection_parallel_immutable_items[token] then
return getURL(token, 'collection/parallel/immutable')
elseif collection_parallel_mutable_items[token] then
return getURL(token, 'collection/parallel/mutable')
end
end
end
function themeUpdate(desc)
if (HL_OUTPUT == HL_FORMAT_HTML or HL_OUTPUT == HL_FORMAT_XHTML) then
Injections[#Injections+1]="a.hl, a.hl:visited {color:inherit;font-weight:inherit;}"
elseif (HL_OUTPUT==HL_FORMAT_LATEX) then
Injections[#Injections+1]="\\usepackage[colorlinks=false, pdfborderstyle={/S/U/W 1}]{hyperref}"
end
end
--The Plugins array assigns code chunks to themes or language definitions.
--The chunks are interpreted after the theme or lang file were parsed,
--so you can refer to elements of these files
Plugins={
{ Type="lang", Chunk=syntaxUpdate },
{ Type="theme", Chunk=themeUpdate },
}