grefel / chaingrep Goto Github PK
View Code? Open in Web Editor NEWChain InDesign GREP Queries to new Scripts
License: GNU General Public License v3.0
Chain InDesign GREP Queries to new Scripts
License: GNU General Public License v3.0
Hi Gregor,
Here are my suggestions for localization in FR:
===================================
var uiStrings = {
versionError:{
en:"This script runs only in InDesign CS4 or higher",
de:"Für dieses Skript wird mindestens InDesign CS4 benötigt",
fr:"Ce script requiert InDesign CS4 ou supérieur",
ja_JP:"このスクリプトはinDesignCS4以上で動作します"
},
writeError:{
en:"Cannot write at [%1] Check permissions!",
de:"Keine Schreibberechtigung im Ordner [%1]!",
fr:"Impossible d'écrire dans [%1]. Vérifiez les permissions système !",
ja_JP:"以下のフォルダへ書き込みができませんでした\n\n[%1]\n\n上記フォルダへ書き込みが可能か確認してみてください"
},
couldNotRead:{
en:"Could not read Query-Files in Folder\n [%1]",
de:"Konnte die Abfragen-Datei nicht im Ordner [%1] finden",
fr:"Impossible de lire les fichiers de requêtes dans le dossier\n [%1]",
ja_JP:"以下のフォルダ内からクエリを読み込めませんでした\n\n[%1]\n\nクエリをまだ作成していない場合はクエリを作成後\n再度スクリプトを実行してみてください"
},
windowTitle:{
en:"Save GREP Queries",
de:"GREP Abfragen speichern",
fr:"Sauvegarde des requêtes GREP",
ja_JP:"GREPクエリを保存"
},
helpTip:{
en:"Usage: \n1. Remove all unnecessary queries from list.\n2. Create the order with the Up and Down Button! \n3. If your happy with your Find/Change List click on Save and a script with your queries is written!",
de:"Verwendung: \n1. Lösche alle Abfragen nicht benötigten Abfragen. \n2. Lege die Reihenfolge mit den Hoch und Runter Buttons fest. \n3. Wenn die Liste gut aussieht, wähle Speichern und ein neues Skript mit deinen Abfragen wird generiert!",
fr:"Utilisation: \n1. Supprimez de la liste les requêtes superflues.\n2. Ordonnez les requêtes avec les boutons Haut et Bas.\n3. Lorsque la liste est prête, cliquez sur Sauvegarder pour générer le script correspondant.",
ja_JP:"使用方法:\n1. リストから不要なクエリをすべて削除します。\n2. 上ボタンと下ボタンで実行する順番を決めます。\n3. スクリプトの名前を付け保存をクリックするとスクリプトが完成します!\n\n※ファイル名を入力後、テキストボックスからフォーカスを外すことで保存ボタンが押せるようになります。\n\n※スクリプトは「FindChangeScripts」フォルダに作成されます。一度InDesignのスクリプトパネルを消すか最小化することで作成したスクリプトが表示されます。"
},
panelQueryList:{
en:"Create an ordered list of queries",
de:"Sortiere die Abfragen in der Liste",
fr:"Création d'une liste ordonnée de requêtes",
ja_JP:"クエリを実行する順番を決めてください"
},
buttonUp:{
en:"Up",
de:"Nach oben",
fr:"Haut",
ja_JP:"上に移動"
},
buttonDown:{
en:"Down",
de:"Nach unten",
fr:"Bas",
ja_JP:"下に移動"
},
buttonRm:{
en:"Remove from List",
de:"Entfernen",
fr:"Supprimer de la liste",
ja_JP:"削除"
},
fcScope:{
en:"Scope of Find/Change",
de:"Bereich der Ersetzung",
fr:"Portée de Rechercher/Remplacer",
ja_JP:"検索置換の範囲"
},
document:{
en:"Document",
de:"Dokument",
fr:"Document",
ja_JP:"ドキュメント"
},
selection:{
en:"Selection",
de:"Auswahl",
fr:"Sélection",
ja_JP:"選択範囲"
},
story:{
en:"Story (of Selection)",
de:"Textabschnitt",
fr:"Article (contenant la sélection)",
ja_JP:"ストーリー"
},
userSelect:{
en:"User select",
de:"Benutzerauswahl",
fr:"Sélection de l'utilisateur",
ja_JP:"実行時に選択"
},
scriptName:{
en:"Script Name",
de:"Name des Skripts",
fr:"Nom du script",
ja_JP:"スクリプト名"
},
cancel:{
en:"Cancel",
de:"Abbrechen",
fr:"Annuler",
ja_JP:"キャンセル"
},
saveList:{
en:"Save List",
de:"Liste speichern",
fr:"Sauvegarder la liste",
ja_JP:"保存"
},
run:{
en:"Run",
de:"Starten",
fr:"Démarrer",
ja_JP:"実行"
},
overwrite:{
en:"File exists, overwrite?",
de:"Datei überschreiben?",
fr:"Le fichier existe déjà. Écraser ?",
ja_JP:"同名のファイルが存在します。上書きしますか?"
},
scriptFolder:{
en:"Script Folder",
de:"Skriptordner",
fr:"Dossier de script",
ja_JP:"スクリプトフォルダ"
},
missingFindCS:{
en:"Missing find characterstyle [%1] for query [%2]",
de:"Fehlendes Such-Zeichenformat [%1] bei Abfrage [%2]",
fr:"La requête [%2] invoque en recherche un style de caractère manquant : [%1]",
ja_JP:"クエリ[%2]の検索形式に設定された文字スタイル[%1]が見つかりませんでした"
},
missingFindPS:{
en:"Missing find pagraphstyle [%1] for query [%2]",
de:"Fehlendes Such-Absatzsformat [%1] bei Abfrage [%2]",
fr:"La requête [%2] invoque en recherche un style de paragraphe manquant : [%1]",
ja_JP:"クエリ[%2]の検索形式に設定された段落スタイル[%1]が見つかりませんでした"
},
missingChangeCS:{
en:"Missing change characterstyle [%1] for query [%2]",
de:"Fehlendes Ersetze-Zeichenformat [%1] bei Abfrage [%2]",
fr:"La requête [%2] invoque en remplacement un style de caractère manquant : [%1]",
ja_JP:"クエリ[%2]の置換形式に設定された文字スタイル[%1]が見つかりませんでした"
},
missingChangePS:{
en:"Missing change pagraphstyle [%1] for query [%2]",
de:"Fehlendes Ersetze-Absatzsformat [%1] bei Abfrage [%2]",
fr:"La requête [%2] invoque en remplacement un style de paragraphe manquant : [%1]",
ja_JP:"クエリ[%2]の置換形式に設定された段落スタイル[%1]が見つかりませんでした"
}
===================================
Best,
Marc
I have encountered the following problem:
Summary
Newly created GREP Find&Replace with 3 digit numbering at the beginning of the search query are not sorted in the correct order.
Priority
Issue | Tolerable problem that interferes with daily operations. In most cases, the issue can be worked around with little negative impact on daily operations.
Steps to Reproduce
Current result
Search query is sorted based on the first two sort digits (11[\d]) instead of considering the first or more sort digits ([\d\d\d]).
Desired result
Consider multi-digit sorting digits for sorting queries.
Environment/Requirements
Client environment: Windows 10.0.19043 build 19043 with Adobe InDesign 16.4.x
Here goes my contribution.
Brazilian Portuguese (pt_BR) strings.
var uiStrings = {
versionError: {
en: "This script runs only in InDesign CS4 or higher",
de: "Für dieses Skript wird mindestens InDesign CS4 benötigt",
fr: "Ce script requiert InDesign CS4 ou supérieur",
ja_JP: "このスクリプトはinDesignCS4以上で動作します",
nl: "Dit script werkt alleen met InDesign CS4 of hoger",
zh_CN: "此脚本只能运行于InDesign CS4或更高版本",
fa_IR: "\u200f\u200f" + "این اسکریپت از نسخه cs4 به بعد قابل اجراست",
tr: "Bu komut dosyası yalnızca InDesign CS4 ve sonraki sürümlerde çalışır",
es: "Este script requiere InDesign CS4 o superior",
pt_BR: "Este script requer o InDesign CS4 ou superior"
},
writeError: {
en: "Cannot write at [%1] Check permissions!",
de: "Keine Schreibberechtigung im Ordner [%1]!",
fr: "Impossible d'écrire dans [%1]. Vérifiez les permissions système !",
ja_JP: "以下のフォルダへ書き込みができませんでした\n\n[%1]\n\n上記フォルダへ書き込みが可能か確認してみてください",
nl: "Kan niet wegschrijven in [%1], check schrijvrechten",
zh_CN: "无法写入[%1],请检查路径权限",
fa_IR: "\u200f\u200f" + "نمی توان در پوشه نوشتن [1%]، مجوزهای نوشتن را بررسی کنید!",
tr: "[%1] klasörüne yazılamıyor. Klasör izinlerini kontrol edin",
es: "Imposible escribir en [%1]. Verifique los permisos del sistema",
pt_BR: "Não foi possível escrever em [%1]. Verifique as permissões do sistema!"
},
couldNotRead: {
en: "Could not read Query-Files in Folder\n [%1]",
de: "Konnte die Abfragen-Datei nicht im Ordner [%1] finden",
fr: "Impossible de lire les fichiers de requêtes dans le dossier\n [%1]",
ja_JP: "以下のフォルダ内からクエリを読み込めませんでした\n\n[%1]\n\nクエリをまだ作成していない場合はクエリを作成後\n再度スクリプトを実行してみてください",
nl: "Kan de zoekopdrachten in [%1] niet lezen",
zh_CN: "无法读取位于[%1]的查询文件",
fa_IR: "\u200f\u200f" + "امکان خواندن فایل کوئری در پوشه وجود ندارد\n [1%]",
tr: "[%1] klasöründe sorgu dosyaları bulunamadı",
es: "No se pueden leer los archivos de búsqueda en carpeta\s [%1]",
pt_BR: "Não foi possível ler os arquivos de busca na pasta\n [%1]"
},
windowTitle: {
en: "Save GREP Queries",
de: "GREP Abfragen speichern",
fr: "Sauvegarde des requêtes GREP",
ja_JP: "GREPクエリを保存",
nl: "Bewaar GREP zoekopdrachten",
zh_CN: "保存GREP查询",
fa_IR: "ذخیره گرپ",
tr: "GREP sorgularını kaydet",
es: "Guardar búsquedas GREP",
pt_BR: "Salvar buscas GREP"
},
helpTip: {
en: "Usage: \n1. Remove all unnecessary queries from list.\n2. Create the order with the Up and Down Button! \n3. If your happy with your Find/Change List click on Save and a script with your queries is written!",
de: "Verwendung: \n1. Lösche alle Abfragen nicht benötigten Abfragen. \n2. Lege die Reihenfolge mit den Hoch und Runter Buttons fest. \n3. Wenn die Liste gut aussieht, wähle Speichern und ein neues Skript mit deinen Abfragen wird generiert!",
fr: "Utilisation: \n1. Supprimez de la liste les requêtes superflues.\n2. Ordonnez les requêtes avec les boutons Haut et Bas.\n3. Lorsque la liste est prête, cliquez sur Sauvegarder pour générer le script correspondant.",
ja_JP: "使用方法:\n1. リストから不要なクエリをすべて削除します。\n2. 上ボタンと下ボタンで実行する順番を決めます。\n3. スクリプトの名前を付け保存をクリックするとスクリプトが完成します!\n\n※ファイル名を入力後、テキストボックスからフォーカスを外すことで保存ボタンが押せるようになります。\n\n※スクリプトは「FindChangeScripts」フォルダに作成されます。一度InDesignのスクリプトパネルを消すか最小化することで作成したスクリプトが表示されます。",
nl: "Werkwijze: \n1. Verwijder alle onnodige zoekopdrachten uit de lijst.\n2. Zet de zoekopdrachten in de juiste volgorde mbv de Up en Down-button! \n3. Ben je klaar, klik dan op Bewaar om het je script te bewaren!",
zh_CN: "使用方法:\n1. 从列表中移除不需要的查询。 \n2. 用上/下按钮排列顺序。 \n3. 确认列表无误后点击保存,查询脚本文件将自动写入。",
fa_IR: "\u200f\u200f" + "استفاده کنید: \n1. تمام پرس و جوهای غیر ضروری را از لیست حذف کنید.\n2. با دکمه بالا و پایین تربیت اجرای کوئری را مشخص کنید!\n3. اگر از لیست جست و جوی انجام شده راضی هستید، روی ذخیره کلیک کنید و تا اسکریپت مربوطه ایجاد شود!",
tr: "Kullanım: \n1. Tüm gereksiz sorguları listeden kaldırın.\n2. Sorguları Yukarı ve Aşağı düğmeleriyle sıralayın.\n3. Listenizi düzenledikten sonra, Kaydet’e tıklayarak sorgularınızı içeren bir komut dosyası yazabilirsiniz.",
es: "Modo de uso: \n1. Elimine de la lista las búsquedas innecesarias.\n2. Determine el orden con los botones Subir y Bajar.\n3. Una vez conforme con la nueva lista, pulse Guardar y se escribirá el script con sus búsquedas",
pt_BR: "Instruções de uso: \n1. Remove todas as buscas desnecessárias da lista.\n2. Organize a ordem com os botões 'Para cima' ou 'Para baixo'.\n3. Quando estiver com a lista pronta, pressione Salvar e um script com as suas buscas será criado"
},
panelQueryList: {
en: "Create an ordered list of queries",
de: "Sortiere die Abfragen in der Liste",
fr: "Création d'une liste ordonnée de requêtes",
ja_JP: "クエリを実行する順番を決めてください",
nl: "Maak een lijst van zoekopdrachten",
zh_CN: "创建有序的查询列表",
fa_IR: "ایجاد لیست مرتب شده از کوئریها",
tr: "Sıralı sorgu listesi oluştur",
es: "Crear una lista ordenada de búsquedas",
pt_BR: "Criar uma lista de buscas ordenada"
},
buttonUp: {
en: "Up",
de: "Nach oben",
fr: "Haut",
ja_JP: "上に移動",
nl: "Naar boven",
zh_CN: "上",
fa_IR: "بالا",
tr: "Yukarı",
es: "Subir",
pt_BR: "Para cima"
},
buttonDown: {
en: "Down",
de: "Nach unten",
fr: "Bas",
ja_JP: "下に移動",
nl: "Naar beneden",
zh_CN: "下",
fa_IR: "پایین",
tr: "Aşağı",
es: "Bajar",
pt_BR: "Para baixo"
},
buttonRm: {
en: "Remove from List",
de: "Entfernen",
fr: "Supprimer de la liste",
ja_JP: "削除",
nl: "Verwijder van de lijst",
zh_CN: "移除",
fa_IR: "حذف از لیست",
tr: "Listeden sil",
es: "Eliminar de la lista",
pt_BR: "Remover da lista"
},
fcScope: {
en: "Scope of Find/Change",
de: "Bereich der Ersetzung",
fr: "Portée de Rechercher/Remplacer",
ja_JP: "検索置換の範囲",
nl: "Zoeken in",
zh_CN: "查找替换范围",
fa_IR: "محدوده جست و جو/جایگزینی",
tr: "Bul/Değiştir alanı",
es: "Alcance de la búsqueda",
pt_BR: "Escopo da busca"
},
document: {
en: "Document",
de: "Dokument",
fr: "Document",
ja_JP: "ドキュメント",
nl: "Document",
zh_CN: "文档",
fa_IR: "سند",
tr: "Belge",
es: "Documento",
pt_BR: "Documento"
},
selection: {
en: "Selection",
de: "Auswahl",
fr: "Sélection",
ja_JP: "選択範囲",
nl: "Selectie",
zh_CN: "选区",
fa_IR: "انتخاب",
tr: "Seçim",
es: "Selección",
pt_BR: "Seleção"
},
story: {
en: "Story (of Selection)",
de: "Textabschnitt",
fr: "Article (contenant la sélection)",
ja_JP: "ストーリー",
nl: "Artikel (van selectie)",
zh_CN: "文章",
fa_IR: "استوری (بخشی انتخابی)",
tr: "Öykü (seçimi içeren)",
es: "Artículo",
pt_BR: "Matéria"
},
userSelect: {
en: "User select",
de: "Benutzerauswahl",
fr: "Sélection de l'utilisateur",
ja_JP: "実行時に選択",
nl: "Selectie van gebruiker",
zh_CN: "用户选择",
fa_IR: "انتخاب کاربر",
tr: "Kullanıcı seçimi",
es: "Elección del usuario",
pt_BR: "Seleção do usuário"
},
scriptName: {
en: "Script Name",
de: "Name des Skripts",
fr: "Nom du script",
ja_JP: "スクリプト名",
nl: "Scriptnaam",
zh_CN: "脚本名",
fa_IR: "نام اسکریپت",
tr: "Komut dosyasının adı",
es: "Nombre del guion",
pt_BR: "Nome do script"
},
cancel: {
en: "Cancel",
de: "Abbrechen",
fr: "Annuler",
ja_JP: "キャンセル",
nl: "Annuleren",
zh_CN: "取消",
fa_IR: "لغو",
tr: "İptal",
es: "Cancelar",
pt_BR: "Cancelar"
},
saveList: {
en: "Save List",
de: "Liste speichern",
fr: "Sauvegarder la liste",
ja_JP: "保存",
nl: "Bewaar lijst/script",
zh_CN: "保存",
fa_IR: "ذخیره لیست",
tr: "Listeyi kaydet",
es: "Guardar lista",
pt_BR: "Salvar lista"
},
run: {
en: "Run",
de: "Starten",
fr: "Démarrer",
ja_JP: "実行",
nl: "Start",
zh_CN: "运行",
fa_IR: "اجرا",
tr: "Başlat",
es: "Ejecutar",
pt_BR: "Executar"
},
overwrite: {
en: "File exists, overwrite?",
de: "Datei überschreiben?",
fr: "Le fichier existe déjà. Écraser ?",
ja_JP: "同名のファイルが存在します。上書きしますか?",
nl: "Bestand bestaat al, overschrijven?",
zh_CN: "文件已存在,是否覆盖?",
fa_IR: "\u200f\u200f" + "فایل وجود دارد، بازنویسی شود؟",
tr: "Bu dosya mevcut. Üzerine yazılsın mı?",
es: "El archivo ya existe. ¿Sobreescribir?",
pt_BR: "O arquivo já existe. Substituir?"
},
scriptFolder: {
en: "Script Folder",
de: "Skriptordner",
fr: "Dossier de script",
ja_JP: "スクリプトフォルダ",
nl: "Scriptmap",
zh_CN: "脚本文件夹",
fa_IR: "پوشه اسکریپت",
tr: "Komut dosyası klasörü",
es: "Carpeta del guion",
pt_BR: "Pasta do script"
},
missingFindCS: {
en: "Missing find characterstyle [%1] for query [%2]",
de: "Fehlendes Such-Zeichenformat [%1] bei Abfrage [%2]",
fr: "La requête [%2] invoque en recherche un style de caractère manquant : [%1]",
ja_JP: "クエリ[%2]の検索形式に設定された文字スタイル[%1]が見つかりませんでした",
nl: "Gezochte tekenstijl [%1] mist voor zoekopdracht [%2]",
zh_CN: "在查找[%2]时未找到字体样式“[%1]”",
fa_IR: "\u200f\u200f" + "جست و جوی شیوه کاراکتری [1%] برای کوئری [2%] وجود ندارد",
tr: "[%2] sorgusunda [%1] arama karakter stili bulunamadı",
es: "Falta el estilo de caracteres [% 1] para la búsqueda [% 2]",
pt_BR: "Estilo de caractere [%1] (localizar formato) [%2] não encontrado"
},
missingFindPS: {
en: "Missing find pagraphstyle [%1] for query [%2]",
de: "Fehlendes Such-Absatzsformat [%1] bei Abfrage [%2]",
fr: "La requête [%2] invoque en recherche un style de paragraphe manquant : [%1]",
ja_JP: "クエリ[%2]の検索形式に設定された段落スタイル[%1]が見つかりませんでした",
nl: "Gezochte alineastijl [%1] mist voor zoekopdracht [%2]",
zh_CN: "在查找[%2]时未找到段落样式“[%1]”",
fa_IR: "\u200f\u200f" + "جست و جوی شیوه پاراگرافی [1%] برای کوئری [2%] وجود ندارد",
tr: "[%2] sorgusunda [%1] arama paragraf stili bulunamadı",
es: "Falta el estilo de párrafo [% 1] para la búsqueda [% 2]",
pt_BR: "Estilo de parágrafo [%1] (localizar formato) [%2] não encontrado"
},
missingChangeCS: {
en: "Missing change characterstyle [%1] for query [%2]",
de: "Fehlendes Ersetze-Zeichenformat [%1] bei Abfrage [%2]",
fr: "La requête [%2] invoque en remplacement un style de caractère manquant : [%1]",
ja_JP: "クエリ[%2]の置換形式に設定された文字スタイル[%1]が見つかりませんでした",
nl: "Vervangende tekenstijl [%1] mist voor zoekopdracht [%2]",
zh_CN: "在替换[%2]时未找到字体样式“[%1]”",
fa_IR: "\u200f\u200f" + "تغییر شیوه کاراکتری [1%] برای کوئری [2%] وجود ندارد",
tr: "[%2] sorgusunda [%1] değiştirme karakter stili bulunamadı",
es: "Falta el cambio de estilo de caracteres [% 1] para la consulta [% 2]",
pt_BR: "Estilo de caractere [%1] (alterar formato) [%2] não encontrado"
},
missingChangePS: {
en: "Missing change pagraphstyle [%1] for query [%2]",
de: "Fehlendes Ersetze-Absatzsformat [%1] bei Abfrage [%2]",
fr: "La requête [%2] invoque en remplacement un style de paragraphe manquant : [%1]",
ja_JP: "クエリ[%2]の置換形式に設定された段落スタイル[%1]が見つかりませんでした",
nl: "Vervangende alineastijl [%1] mist voor zoekopdracht [%2]",
zh_CN: "在替换[%2]时未找到段落样式样式“[%1]”",
fa_IR: "\u200f\u200f" + "تغییر شیوه پاراگرافی [1%] برای کوئری [2%] وجود ندارد",
tr: "[%2] sorgusunda [%1] değiştirme paragraf stili bulunamadı",
es: "Falta el cambio de estilo de párrafo [% 1] para la consulta [% 2]",
pt_BR: "Estilo de parágrafo [%1] (alterar formato) [%2] não encontrado"
},
couldNotLoadQuery: {
en: "Could not load Query [%1] Error: ",
de: "Die Abfrage [%1] konnte nicht geladen werden. Fehler: ",
fr: "Could not load Query [%1] Error: ",
ja_JP: "Could not load Query [%1] Error: ",
nl: "Zoekopdracht [%1] kan niet worden geladen. Fout: ",
zh_CN: "加载查询[%1]失败,错误信息:",
fa_IR: "\u200f\u200f" + "بارگیری کوئری ممکن نیست [1%] خطا:",
tr: "[%1] sorgusu yüklenemedi. Hata: ",
es: "No se pudo cargar la consulta [% 1]. Error: ",
pt_BR: "Não foi possível carregar a busca [%1]. Erro: "
},
}
macOS bug, line 234:
fcFolder = File(app.scriptPreferences.scriptsFolder.parent.parent + "/Find-Change Queries/" + folderType);
It throws an error if scriptsFolder is a symlink, then .parent.parent looks in the parent directories where the symlink points to and no longer in the Library folder where the Scripts folder usually is.
Hallo, vielen Dank für das klasse Script.
Folgendes ist mir aufgefallen:
Wenn ich das Script für eine Benutzerauswahl ausführen will - geht es immer auf den kompletten Textabschnitt.
Bei der Abfrage stehen auch nur "Dokument" und "Textabschnitt" - "Benutzerauswahl fehlt!
WIN10 - IND 2021
Beste Grüße
Frank Zimmermann
Queries with € (non latin characters) are not found. € sign in Query name does not work.
Numbers should be sorted in order
How can I contribute with an Italian translation?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.