[gtksourceview] Add markdown language file.
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview] Add markdown language file.
- Date: Sun, 3 Jul 2011 19:28:33 +0000 (UTC)
commit f2bb0cfb6a14362046380ed82193662e50ab072f
Author: Jean-Philippe Fleury <contact jpfleury net>
Date: Sun Jul 3 21:27:29 2011 +0200
Add markdown language file.
https://bugzilla.gnome.org/show_bug.cgi?id=384446
data/language-specs/Makefile.am | 1 +
data/language-specs/markdown.lang | 402 +++++++++++++++++++++++++++++++++++++
po/POTFILES.in | 1 +
3 files changed, 404 insertions(+), 0 deletions(-)
---
diff --git a/data/language-specs/Makefile.am b/data/language-specs/Makefile.am
index 21333b7..7f1927b 100644
--- a/data/language-specs/Makefile.am
+++ b/data/language-specs/Makefile.am
@@ -53,6 +53,7 @@ LANGUAGES = \
m4.lang \
makefile.lang \
mallard.lang \
+ markdown.lang \
matlab.lang \
nemerle.lang \
nsis.lang \
diff --git a/data/language-specs/markdown.lang b/data/language-specs/markdown.lang
new file mode 100644
index 0000000..a23c2bc
--- /dev/null
+++ b/data/language-specs/markdown.lang
@@ -0,0 +1,402 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Author: Jean-Philippe Fleury
+ Copyright (C) 2011 Jean-Philippe Fleury <contact jpfleury net>
+
+ GtkSourceView is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ GtkSourceView is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+-->
+<!-- Note: this language definition file adds support for Markdown syntax,
+ described in the following websites:
+ * (fr) <http://michelf.com/projets/php-markdown/syntaxe/>
+ * (en) <http://daringfireball.net/projects/markdown/syntax> -->
+<language id="markdown" _name="Markdown" version="2.0" _section="Markup">
+ <metadata>
+ <property name="mimetypes">text/x-markdown</property>
+ <property name="globs">*.markdown;*.md;*.mkd</property>
+ <property name="block-comment-start"><!--</property>
+ <property name="block-comment-end">--></property>
+ </metadata>
+
+ <styles>
+ <style id="header" _name="Header" map-to="def:type"/>
+ <style id="horizontal-rule" _name="Horizontal Rule" map-to="def:type"/>
+ <style id="list-marker" _name="List Marker" map-to="def:statement"/>
+ <style id="code" _name="Code" map-to="def:identifier"/>
+ <style id="blockquote-marker" _name="Blockquote Marker" map-to="def:shebang"/>
+ <style id="url" _name="URL" map-to="def:underlined"/>
+ <style id="link-text" _name="Link Text" map-to="def:comment"/>
+ <style id="label" _name="Label" map-to="def:preprocessor"/>
+ <style id="attribute-value" _name="Attribute Value" map-to="def:constant"/>
+ <style id="image-marker" _name="Image Marker" map-to="def:shebang"/>
+ <style id="emphasis" _name="Emphasis" map-to="def:doc-comment-element"/>
+ <style id="strong-emphasis" _name="Strong Emphasis" map-to="def:statement"/>
+ <style id="backslash-escape" _name="Backslash Escape" map-to="def:special-char"/>
+ <style id="line-break" _name="Line Break" map-to="def:note"/>
+ </styles>
+
+ <definitions>
+ <!-- Examples:
+ # Header 1 #
+ ## Header 2
+ ###Header 3###
+ -->
+ <context id="atx-header" style-ref="header">
+ <match>^#+.+</match>
+ </context>
+
+ <!-- Examples:
+ Header 1
+ ========
+ Header 2
+ -
+ -->
+ <!-- Note: line break can't be used in regex, so only underline is matched. -->
+ <context id="setext-header" style-ref="header">
+ <match>^(-+|=+)[ \t]*$</match>
+ </context>
+
+ <!-- Examples:
+ - - -
+ ** ** ** ** **
+ _____
+ -->
+ <context id="horizontal-rule" style-ref="horizontal-rule">
+ <match extended="true">
+ ^[ ]{0,3} # Maximum 3 spaces at the beginning of the line.
+ (
+ (-[ ]{0,2}){3,} | # 3 or more hyphens, with 2 spaces maximum between each hyphen.
+ (_[ ]{0,2}){3,} | # Idem, but with underscores.
+ (\*[ ]{0,2}){3,} # Idem, but with asterisks.
+ )
+ [ \t]*$ # Optional trailing spaces or tabs.
+ </match>
+ </context>
+
+ <!-- Note about following list and code block contexts: according to the
+ Markdown syntax, to write several paragraphs in a list item, we have
+ to indent each paragraph. Example:
+
+ - Item A (paragraph 1).
+
+ Item A (paragraph 2).
+
+ Item A (paragraph 3).
+
+ - Item B.
+
+ So there is a conflict in terms of syntax highlighting between an
+ indented paragraph inside a list item (4 spaces or 1 tab) and an
+ indented line of code outside a list (also 4 spaces or 1 tab). In this
+ language file, since a full context analysis can't be done (because
+ line break can't be used in regex), the choice was made ââto highlight
+ code block only from 2 levels of indentation. -->
+
+ <!-- Example (unordered list):
+ * Item
+ + Item
+ - Item
+
+ Example (ordered list):
+ 1. Item
+ 2. Item
+ 3. Item
+ -->
+ <context id="list" style-ref="list-marker">
+ <match extended="true">
+ ^[ ]{0,3} # Maximum 3 spaces at the beginning of the line.
+ (
+ \*|\+|-| # Asterisk, plus or hyphen for unordered list.
+ [0-9]+\. # Number followed by period for ordered list.
+ )
+ [ \t]+ # Must be followed by at least 1 space or 1 tab.
+ </match>
+ </context>
+
+ <!-- Example:
+ <em>HTML code</em> displayed <strong>literally</strong>.
+ -->
+ <context id="code-block" class="no-spell-check">
+ <match>^( {8,}|\t{2,})([^ \t]+.*)</match>
+
+ <include>
+ <context sub-pattern="2" style-ref="code"/>
+ </include>
+ </context>
+
+ <!-- Note about following code span contexts: within a paragraph, text
+ wrapped with backticks indicates a code span. Markdown allows to use
+ one or more backticks to wrap text, provided that the number is identical
+ on both sides, and the same number of consecutive backticks is not
+ present within the text. The current language file supports code span
+ highlighting with up to 2 backticks surrounding text. -->
+
+ <!-- Examples:
+ Here's a literal HTML tag: `<p>`.
+ `Here's a code span containing ``backticks``.`
+ -->
+ <context id="1-backtick-code-span" class="no-spell-check" style-ref="code">
+ <match>(?<!`)`[^`]+(`{2,}[^`]+)*`(?!`)</match>
+ </context>
+
+ <!-- Examples:
+ Here's a literal HTML tag: ``<p>``.
+ ``The grave accent (`) is used in Markdown to indicate a code span.``
+ ``Here's another code span containing ```backticks```.``
+ -->
+ <context id="2-backticks-code-span" class="no-spell-check" style-ref="code">
+ <match>(?<!`)``[^`]+((`|`{3,})[^`]+)*``(?!`)</match>
+ </context>
+
+ <!-- Example:
+ > Quoted text.
+ > Quoted text with `code span`.
+ >> Blockquote **nested**.
+ -->
+ <!-- Note: blockquote can contain block-level and inline Markdown elements,
+ but the current language file only highlights inline ones (emphasis,
+ link, etc.). -->
+ <context id="blockquote" end-at-line-end="true">
+ <start>^( {0,3}>(?=.)( {0,4}>)*)</start>
+
+ <include>
+ <context sub-pattern="1" where="start" style-ref="blockquote-marker"/>
+ <context ref="1-backtick-code-span"/>
+ <context ref="2-backticks-code-span"/>
+ <context ref="automatic-link"/>
+ <context ref="inline-link"/>
+ <context ref="reference-link"/>
+ <context ref="inline-image"/>
+ <context ref="reference-image"/>
+ <context ref="underscores-emphasis"/>
+ <context ref="asterisks-emphasis"/>
+ <context ref="underscores-strong-emphasis"/>
+ <context ref="asterisks-strong-emphasis"/>
+ <context ref="backslash-escape"/>
+ <context ref="line-break"/>
+ </include>
+ </context>
+
+ <!-- Examples:
+ <user example com>
+ <http://www.example.com/>
+ -->
+ <!-- Note: regular expressions are based from function `_DoAutoLinks` from
+ Markdown.pl (see <http://daringfireball.net/projects/markdown/>). -->
+ <context id="automatic-link" class="no-spell-check">
+ <match case-sensitive="false" extended="true">
+ <
+ (((mailto:)?[a-z0-9 -]+\ [-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+) | # E-mail.
+ ((https?|ftp):[^'">\s]+)) # URL.
+ >
+ </match>
+
+ <include>
+ <context sub-pattern="1" style-ref="url"/>
+ </include>
+ </context>
+
+ <!-- Examples:
+ [link text](http://www.example.com/)
+ [link text](<http://www.example.com/>)
+ [link text]( /folder/page.html "Title" )
+ -->
+ <context id="inline-link">
+ <match extended="true">
+ \[(.*?)\] # Link text.
+ \( # Literal opening parenthesis.
+ [ \t]* # Optional spaces or tabs after the opening parenthesis.
+ (<(.*?)> | # URL with brackets.
+ (.*?)) # URL without brackets.
+ ([ \t]+(".*?"))? # Optional title.
+ [ \t]* # Optional spaces or tabs before the closing parenthesis.
+ \) # Literal closing parenthesis.
+ </match>
+
+ <include>
+ <context sub-pattern="1" style-ref="link-text"/>
+ <context sub-pattern="3" class="no-spell-check" style-ref="url"/>
+ <context sub-pattern="4" class="no-spell-check" style-ref="url"/>
+ <context sub-pattern="6" style-ref="attribute-value"/>
+ </include>
+ </context>
+
+ <!-- Examples:
+ [link text]
+ [link text][]
+ [link text][link label]
+ [link text] [link label]
+ -->
+ <!-- Note: some assertions are used to differentiate reference link from
+ link label. -->
+ <context id="reference-link">
+ <match>(?<!^ |^ |^ )\[(.*?)\]([ \t]?\[(.*?)\])?(?!:)</match>
+
+ <include>
+ <context sub-pattern="1" style-ref="link-text"/>
+ <context sub-pattern="3" class="no-spell-check" style-ref="label"/>
+ </include>
+ </context>
+
+ <!-- Examples:
+ [link label]: /folder/page.html
+ [link label]: <http://www.example.com/>
+ [link label]: http://www.example.com/ "Title"
+ -->
+ <context id="link-definition">
+ <match extended="true">
+ ^[ ]{0,3} # Maximum 3 spaces at the beginning of the line.
+ \[(.+?)\]: # Link label and colon.
+ [ \t]* # Optional spaces or tabs.
+ (<([^ \t]+?)> | # URL with brackets.
+ ([^ \t]+?)) # URL without brackets.
+ ([ \t]+(".*?"))? # Optional title.
+ [ \t]*$ # Optional trailing spaces or tabs.
+ </match>
+
+ <include>
+ <context sub-pattern="1" class="no-spell-check" style-ref="label"/>
+ <context sub-pattern="3" class="no-spell-check" style-ref="url"/>
+ <context sub-pattern="4" class="no-spell-check" style-ref="url"/>
+ <context sub-pattern="6" style-ref="attribute-value"/>
+ </include>
+ </context>
+
+ <!-- Examples:
+ 
+ 
+ ![alt text] (/path/to/image.jpg "Title")
+ -->
+ <context id="inline-image">
+ <match extended="true">
+ (!) # Leading ! sign.
+ \[(.*?)\][ ]? # Alternate text for the image (and optional space).
+ \( # Literal parenthesis.
+ [ \t]* # Optional spaces or tabs after the opening parenthesis.
+ (<([^ \t]*?)> | # Image path or URL with brackets.
+ ([^ \t]*?)) # Image path or URL without brackets.
+ ([ \t]+(".*?"))? # Optional title.
+ [ \t]* # Optional spaces or tabs before the closing parenthesis.
+ \) # Literal parenthesis.
+ </match>
+
+ <include>
+ <context sub-pattern="1" style-ref="image-marker"/>
+ <context sub-pattern="2" style-ref="attribute-value"/>
+ <context sub-pattern="4" class="no-spell-check" style-ref="url"/>
+ <context sub-pattern="5" class="no-spell-check" style-ref="url"/>
+ <context sub-pattern="6" style-ref="attribute-value"/>
+ </include>
+ </context>
+
+ <!-- Examples:
+ ![alt text][image label]
+ ![alt text] [image label]
+ -->
+ <context id="reference-image">
+ <match>(!)\[(.*?)\] ?\[(.*?)\]</match>
+
+ <include>
+ <context sub-pattern="1" style-ref="image-marker"/>
+ <context sub-pattern="2" style-ref="attribute-value"/>
+ <context sub-pattern="3" class="no-spell-check" style-ref="label"/>
+ </include>
+ </context>
+
+ <!-- Examples:
+ Lorem _ipsum dolor_ sit amet.
+ Here's an _emphasized text containing an underscore (\_)_.
+ -->
+ <context id="underscores-emphasis" style-ref="emphasis">
+ <match>(?<!_)_[^_ \t].*?(?<!\\|_| |\t)_(?!_)</match>
+ </context>
+
+ <!-- Examples:
+ Lorem *ipsum dolor* sit amet.
+ Here's an *emphasized text containing an asterisk (\*)*.
+ -->
+ <context id="asterisks-emphasis" style-ref="emphasis">
+ <match>(?<!\*)\*[^\* \t].*?(?<!\\|\*| |\t)\*(?!\*)</match>
+ </context>
+
+ <!-- Examples:
+ Lorem __ipsum dolor__ sit amet.
+ Here's a __strongly emphasized text containing an underscore (\_)__.
+ -->
+ <context id="underscores-strong-emphasis" style-ref="strong-emphasis">
+ <match>__[^_ \t].*?(?<!\\|_| |\t)__</match>
+ </context>
+
+ <!-- Examples:
+ Lorem **ipsum dolor** sit amet.
+ Here's a **strongly emphasized text containing an asterisk (\*).**
+ -->
+ <context id="asterisks-strong-emphasis" style-ref="strong-emphasis">
+ <match>\*\*[^\* \t].*?(?<!\\|\*| |\t)\*\*</match>
+ </context>
+
+ <context id="backslash-escape" style-ref="backslash-escape">
+ <match>\\[\\`*_{}\[\]()#+-.!]</match>
+ </context>
+
+ <!-- Note: a manual line break should be followed by a line containing text,
+ but since line break can't be used in regex, only trailing spaces or tabs
+ are matched. -->
+ <context id="line-break">
+ <match>(?<=[^ \t])([ \t]{2,})$</match>
+
+ <include>
+ <context sub-pattern="1" style-ref="line-break"/>
+ </include>
+ </context>
+
+ <context id="markdown-syntax">
+ <include>
+ <context ref="atx-header"/>
+ <context ref="setext-header"/>
+ <context ref="horizontal-rule"/>
+ <context ref="list"/>
+ <context ref="code-block"/>
+ <context ref="1-backtick-code-span"/>
+ <context ref="2-backticks-code-span"/>
+ <context ref="blockquote"/>
+ <context ref="automatic-link"/>
+ <context ref="inline-link"/>
+ <context ref="reference-link"/>
+ <context ref="link-definition"/>
+ <context ref="inline-image"/>
+ <context ref="reference-image"/>
+ <context ref="underscores-emphasis"/>
+ <context ref="asterisks-emphasis"/>
+ <context ref="underscores-strong-emphasis"/>
+ <context ref="asterisks-strong-emphasis"/>
+ <context ref="backslash-escape"/>
+ <context ref="line-break"/>
+ </include>
+ </context>
+
+ <replace id="html:embedded-lang-hook" ref="markdown-syntax"/>
+
+ <context id="markdown">
+ <include>
+ <context ref="markdown-syntax"/>
+ <!-- Note: even if it's highlighted, Markdown syntax within HTML blocks
+ (e.g., `<div>`) is not processed. -->
+ <context ref="html:html"/>
+ </include>
+ </context>
+ </definitions>
+</language>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 83cd7de..57ef9a3 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -51,6 +51,7 @@ data/language-specs/lua.lang
data/language-specs/m4.lang
data/language-specs/makefile.lang
data/language-specs/mallard.lang
+data/language-specs/markdown.lang
data/language-specs/matlab.lang
data/language-specs/nemerle.lang
data/language-specs/nsis.lang
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]