vault backup: 2023-07-22 09:53:31
Affected files: .obsidian/community-plugins.json .obsidian/plugins/control-characters/data.json .obsidian/plugins/control-characters/styles.css .obsidian/plugins/obsidian-hider/data.json .obsidian/plugins/obsidian-rtl/data.json .obsidian/plugins/obsidian-rtl/main.js .obsidian/plugins/obsidian-rtl/manifest.json .obsidian/plugins/obsidian-rtl/styles.css .obsidian/workspace.json 1Co.11.23-32.md 1Co.12.3-13.md 1Co.15.1-11.md 1Co.6.1–6.md 1Ti.4.1–16.md Act.2.1-21.md Deu.34.1–12.md Deu.8.1–20.md Exo.23.1–3.md Gen.28.10-19.md Heb.6.9–12.md Isa.55.1–7.md Mat.6.25–34.md Pro.18.8.md Ps.17.md Ps.34.1–10.md Ps.81.md README.md Rom.8.12-25.md Rom.8.1–17 (A).md images/2020-09-20-Exo.23.1-3小抄.jpg images/2020-10-18-Isa.55.1-7.png images/2020-10-18-Isa.55.1–7小抄.jpg images/2020-11-08-Deu.8.1-20.png images/2020-12-06-1Ti.4.1-16.png images/2020-12-06-1Ti.4.1-16小抄.png images/2021-01-10-1Co.6.1-6.png images/2021-01-10-1Co.6.1-6小抄.jpg images/2021-02-14 Psa.34.1–10a.png images/2021-02-14 Psa.34.1–10小抄.jpg images/2021-04-11-Deu.34.1–12.png images/2021-04-11-Deu.34.1–12小抄.png images/2021-05-08-Rom.8.1–17小抄.jpg images/2021-05-09-Mat.6.25–34小抄.jpg images/2021-07-25-Psa.17小抄.jpg images/2021-12-15-Psa.81圖析.png images/2021-12-15-Psa.81小抄.jpg images/2022-02-13-Heb.6.9–12小抄a.jpg images/2022-02-13-Heb.6.9–12小抄b.jpg images/2023-04-30-Pro.18.8小抄a.jpg images/2023-04-30-Pro.18.8小抄b.jpg images/2023-05-10-1Co.15.1-11a.png images/2023-05-10-1Co.15.1-11b.png images/2023-05-10-1Co.15.1-11小抄.jpg images/2023-05-28-1Co.12.3-14.png images/2023-05-28-1Co.12.3.13小抄.jpg images/2023-05-28-Act.2.1-21.png images/2023-05-28-Act.2.1-21小抄.jpg images/2023-06-25-1Co.11.23-32.png images/2023-06-25-1Co.11.23-32小抄a.jpg images/2023-06-25-1Co.11.23-32小抄b.jpg images/2023-07-23.lectionary.png template/講道筆記範本.md
|
@ -5,5 +5,6 @@
|
|||
"obsidian-footnotes",
|
||||
"obsidian-tidy-footnotes",
|
||||
"cm-show-whitespace-obsidian",
|
||||
"control-characters"
|
||||
"control-characters",
|
||||
"obsidian-rtl"
|
||||
]
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"newLine": false,
|
||||
"newLine": true,
|
||||
"tab": true,
|
||||
"space": true,
|
||||
"enabled": true,
|
||||
|
|
|
@ -2,8 +2,7 @@
|
|||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||
if you want to view the source, please visit the github repository of this plugin
|
||||
https://github.com/joethei/obsidian-non-printing-chars
|
||||
*/body{--control-character-color:var(--interactive-accent);--control-character-space:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Crect width='20' height='20' x='2' y='2' fill='currentColor' rx='2'/%3E%3C/svg%3E");--control-character-tab:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cpath d='M12.29 8.12 15.17 11H2c-.55 0-1 .45-1 1s.45 1 1 1h13.17l-2.88 2.88a.996.996 0 1 0 1.41 1.41l4.59-4.59a.996.996 0 0 0 0-1.41L13.7 6.7a.996.996 0 0 0-1.41 0c-.38.39-.39 1.03 0 1.42zM20 7v10c0 .55.45 1 1 1s1-.45 1-1V7c0-.55-.45-1-1-1s-1 .45-1 1z'/%3E%3C/svg%3E");--control-character-newline:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.84em' height='1em' viewBox='0 0 1280 1536'%3E%3Cpath fill='currentColor' d='M1278 61v73q0 29-18.5 61t-42.5 32q-50 0-54 1-26 6-32 31-3 11-3 64v1152q0 25-18 43t-43 18H959q-25 0-43-18t-18-43V257H755v1218q0 25-17.5 43t-43.5 18H586q-26 0-43.5-18t-17.5-43V979q-147-12-245-59-126-58-192-179-64-117-64-259 0-166 88-286Q200 78 321 37 432 0 738 0h479q25 0 43 18t18 43z'/%3E%3C/svg%3E");--control-character-other:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Crect width='20' height='20' x='2' y='2' fill='currentColor' rx='2'/%3E%3C/svg%3E")}
|
||||
|
||||
*/body{--control-character-color:var(--interactive-accent);--control-character-space:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Crect width='20' height='20' x='2' y='2' fill='currentColor' rx='2'/%3E%3C/svg%3E");}
|
||||
/* @settings
|
||||
|
||||
name: Control Characters
|
||||
|
@ -40,4 +39,4 @@ settings:
|
|||
type: variable-text
|
||||
description: Icon SVG URI encoded
|
||||
default: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Crect width="20" height="20" x="2" y="2" fill="currentColor" rx="2"%2F%3E%3C%2Fsvg%3E')
|
||||
*/.control-character[type=newline]:after{content:" ";-webkit-mask-image:var(--control-character-newline);mask-image:var(--control-character-newline)}.control-character[type=newline]:after,.control-character[type=space]{background:var(--control-character-color);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.control-character[type=space]{-webkit-mask-image:var(--control-character-space);mask-image:var(--control-character-space)}.control-character[type=tab]{-webkit-mask-image:var(--control-character-tab);mask-image:var(--control-character-tab)}.control-character[type=other],.control-character[type=tab]{background:var(--control-character-color);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.control-character[type=other]{-webkit-mask-image:var(--control-character-other);mask-image:var(--control-character-other);-webkit-mask-size:unset;mask-size:unset}
|
||||
*/.control-character[type=space]{background:var(--control-character-color);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.control-character[type=space]{-webkit-mask-image:var(--control-character-space);mask-image:var(--control-character-space)}
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"hideRibbon": true,
|
||||
"hideRibbon": false,
|
||||
"hideStatus": false,
|
||||
"hideTabs": true,
|
||||
"hideScroll": false,
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"fileDirections": {
|
||||
"Gen.28.10-19.md": "rtl"
|
||||
},
|
||||
"defaultDirection": "ltr",
|
||||
"rememberPerFile": true,
|
||||
"setNoteTitleDirection": true,
|
||||
"setYamlDirection": false,
|
||||
"statusBar": true
|
||||
}
|
|
@ -0,0 +1,686 @@
|
|||
/*
|
||||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||
if you want to view the source, please visit the github repository of this plugin
|
||||
*/
|
||||
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// main.ts
|
||||
var main_exports = {};
|
||||
__export(main_exports, {
|
||||
default: () => RtlPlugin
|
||||
});
|
||||
module.exports = __toCommonJS(main_exports);
|
||||
var import_obsidian3 = require("obsidian");
|
||||
|
||||
// AutoDirPlugin.ts
|
||||
var import_view = require("@codemirror/view");
|
||||
var import_state = require("@codemirror/state");
|
||||
|
||||
// globals.ts
|
||||
var RTL_CLASS = "is-rtl";
|
||||
var AUTO_CLASS = "is-auto";
|
||||
var STRONG_DIR_REGEX = /(?:([\p{sc=Arabic}\p{sc=Hebrew}\p{sc=Syriac}\p{sc=Thaana}])|([\p{sc=Armenian}\p{sc=Bengali}\p{sc=Bopomofo}\p{sc=Braille}\p{sc=Buhid}\p{sc=Canadian_Aboriginal}\p{sc=Cherokee}\p{sc=Cyrillic}\p{sc=Devanagari}\p{sc=Ethiopic}\p{sc=Georgian}\p{sc=Greek}\p{sc=Gujarati}\p{sc=Gurmukhi}\p{sc=Han}\p{sc=Hangul}\p{sc=Hanunoo}\p{sc=Hiragana}\p{sc=Inherited}\p{sc=Kannada}\p{sc=Katakana}\p{sc=Khmer}\p{sc=Lao}\p{sc=Latin}\p{sc=Limbu}\p{sc=Malayalam}\p{sc=Mongolian}\p{sc=Myanmar}\p{sc=Ogham}\p{sc=Oriya}\p{sc=Runic}\p{sc=Sinhala}\p{sc=Tagalog}\p{sc=Tagbanwa}\p{sc=Tamil}\p{sc=Telugu}\p{sc=Thai}\p{sc=Tibetan}\p{sc=Yi}]))/u;
|
||||
var detectDirection = (s) => {
|
||||
const match = s.match(STRONG_DIR_REGEX);
|
||||
if (match && match[1]) {
|
||||
return "rtl";
|
||||
} else if (match && match[2]) {
|
||||
return "ltr";
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
// AutoDirPlugin.ts
|
||||
var import_obsidian = require("obsidian");
|
||||
function getAutoDirectionPlugin(rtlPlugin) {
|
||||
return import_view.ViewPlugin.fromClass(class {
|
||||
constructor(view) {
|
||||
this.decorationRegions = [];
|
||||
this.active = false;
|
||||
this.rtlDec = import_view.Decoration.line({
|
||||
attributes: { dir: "rtl" }
|
||||
});
|
||||
this.ltrDec = import_view.Decoration.line({
|
||||
attributes: { dir: "ltr" }
|
||||
});
|
||||
this.emptyDirDec = import_view.Decoration.line({
|
||||
attributes: { dir: "" }
|
||||
});
|
||||
this.autoDec = import_view.Decoration.line({
|
||||
attributes: { dir: "auto" }
|
||||
});
|
||||
this.decorations = this.buildDecorations();
|
||||
this.rtlPlugin = rtlPlugin;
|
||||
this.view = view;
|
||||
const editorInfo = this.view.state.field(import_obsidian.editorInfoField);
|
||||
if (editorInfo instanceof import_obsidian.MarkdownView) {
|
||||
this.rtlPlugin.adjustDirectionToView(editorInfo, this);
|
||||
}
|
||||
this.rtlPlugin.handleIframeEditor(this.view.dom, this.view, editorInfo.file, this);
|
||||
}
|
||||
update(vu) {
|
||||
if (vu.viewportChanged || vu.docChanged) {
|
||||
const regions = [];
|
||||
if (vu.docChanged) {
|
||||
vu.changes.iterChanges((fromA, toA, fromB, toB) => {
|
||||
const shift = toB - fromB - (toA - fromA);
|
||||
this.shiftDecorationRegions(shift < 0 ? toB : toA, shift);
|
||||
regions.push(...this.getLineRegions(vu.state.doc, fromB, toB));
|
||||
});
|
||||
}
|
||||
this.updateEx(vu.view, regions);
|
||||
}
|
||||
}
|
||||
destroy() {
|
||||
}
|
||||
setActive(active, view) {
|
||||
const forceUpdate = this.active !== active;
|
||||
this.active = active;
|
||||
this.decorations = this.buildDecorations();
|
||||
if (forceUpdate) {
|
||||
this.updateEx(view);
|
||||
}
|
||||
}
|
||||
updateEx(view, regions = []) {
|
||||
if (regions.length === 0) {
|
||||
const { from, to } = view.viewport;
|
||||
regions = this.getLineRegions(view.state.doc, from, to);
|
||||
}
|
||||
for (const { from, to } of regions) {
|
||||
for (let pos = from; pos <= to; ) {
|
||||
const line = view.state.doc.lineAt(pos);
|
||||
let dec = this.emptyDirDec;
|
||||
if (this.active) {
|
||||
const s = view.state.doc.sliceString(line.from, line.to);
|
||||
const d = this.detectDecoration(s);
|
||||
dec = d ? d : this.lineBeforeDecoration(line.from);
|
||||
}
|
||||
this.addDecorationRegion({ from: line.from, to: line.to, dec });
|
||||
pos = line.to + 1;
|
||||
}
|
||||
}
|
||||
this.decorations = this.buildDecorations();
|
||||
}
|
||||
buildDecorations() {
|
||||
const builder = new import_state.RangeSetBuilder();
|
||||
for (const dr of this.decorationRegions) {
|
||||
builder.add(dr.from, dr.from, dr.dec);
|
||||
}
|
||||
return builder.finish();
|
||||
}
|
||||
addDecorationRegion(dr) {
|
||||
for (let i = 0; i < this.decorationRegions.length; i++) {
|
||||
if (this.decorationRegions[i].from < dr.from) {
|
||||
continue;
|
||||
}
|
||||
if (this.decorationRegions[i].from === dr.from) {
|
||||
this.decorationRegions[i] = dr;
|
||||
} else if (this.decorationRegions[i].from > dr.from) {
|
||||
this.decorationRegions.splice(i, 0, dr);
|
||||
}
|
||||
return;
|
||||
}
|
||||
this.decorationRegions.push(dr);
|
||||
}
|
||||
shiftDecorationRegions(from, amount) {
|
||||
if (amount === 0) {
|
||||
return;
|
||||
}
|
||||
for (let i = 0; i < this.decorationRegions.length; i++) {
|
||||
if (this.decorationRegions[i].from < from) {
|
||||
continue;
|
||||
}
|
||||
this.decorationRegions[i].from += amount;
|
||||
this.decorationRegions[i].to += amount;
|
||||
if (this.decorationRegions[i].from <= from) {
|
||||
this.decorationRegions.splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
detectDecoration(s) {
|
||||
const direction = detectDirection(s.replace("- [x]", ""));
|
||||
switch (direction) {
|
||||
case "rtl":
|
||||
return this.rtlDec;
|
||||
case "ltr":
|
||||
return this.ltrDec;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
lineBeforeDecoration(from, def = this.ltrDec) {
|
||||
const l = this.decorationRegions.length;
|
||||
if (l !== 0 && from > this.decorationRegions[l - 1].from) {
|
||||
return this.decorationRegions[l - 1].dec;
|
||||
}
|
||||
for (let i = 0; i < l; i++) {
|
||||
if (i !== 0 && this.decorationRegions[i].from >= from) {
|
||||
return this.decorationRegions[i - 1].dec;
|
||||
}
|
||||
}
|
||||
return def;
|
||||
}
|
||||
getLineRegions(doc, from, to) {
|
||||
const regions = [];
|
||||
for (let i = from; i <= to; i++) {
|
||||
const l = doc.lineAt(i);
|
||||
i = l.to;
|
||||
regions.push({ from: l.from, to: l.to });
|
||||
}
|
||||
return regions;
|
||||
}
|
||||
}, { decorations: (v) => v.decorations });
|
||||
}
|
||||
|
||||
// AutoDirPostProcessor.ts
|
||||
var lastDetectedDir = "ltr";
|
||||
var specialNodes = ["A", "STRONG", "EM", "DEL", "CODE"];
|
||||
function breaksToDivs(el) {
|
||||
if (!el)
|
||||
return;
|
||||
if (el.tagName == "P") {
|
||||
const splitText = el.innerHTML.split("<br>");
|
||||
if (splitText.length > 1) {
|
||||
let newInnerHtml = "";
|
||||
splitText.map((line) => {
|
||||
newInnerHtml += `<div class="esm-split">${line}</div>
|
||||
`;
|
||||
});
|
||||
el.innerHTML = newInnerHtml;
|
||||
}
|
||||
}
|
||||
if (el.children && el.children.length > 0) {
|
||||
for (let i = 0; i < el.children.length; i++)
|
||||
breaksToDivs(el.children[i]);
|
||||
}
|
||||
}
|
||||
function detectCanvasElement(el, ctx, setPreviewDirection) {
|
||||
const container = ctx.containerEl;
|
||||
if (container && container.closest) {
|
||||
const possibleCanvas = container.closest(".canvas-node-content");
|
||||
if (possibleCanvas) {
|
||||
const markdownPreview = container.closest(".markdown-preview-view");
|
||||
if (markdownPreview && markdownPreview instanceof HTMLDivElement) {
|
||||
setPreviewDirection(ctx.sourcePath, markdownPreview);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var autoDirectionPostProcessor = (el, ctx, setPreviewDirection) => {
|
||||
let shouldAddDir = false, addedDir = false;
|
||||
const childNodes = [];
|
||||
detectCanvasElement(el, ctx, setPreviewDirection);
|
||||
breaksToDivs(el);
|
||||
for (let i = 0; i < el.childNodes.length; i++) {
|
||||
const n = el.childNodes[i];
|
||||
if (!addedDir && n.nodeName === "#text" && n.nodeValue && n.nodeValue !== "\n") {
|
||||
const dir = detectDirection(n.nodeValue);
|
||||
if (dir) {
|
||||
addedDir = true;
|
||||
lastDetectedDir = dir;
|
||||
if (specialNodes.contains(el.nodeName) && el.parentElement) {
|
||||
addDirClassIfNotAddedBefore(el.parentElement, dirClass(dir));
|
||||
} else {
|
||||
el.addClass(dirClass(dir));
|
||||
if (el.parentElement && el.parentElement.nodeName === "LI") {
|
||||
addDirClassIfNotAddedBefore(el.parentElement, dirClass(dir));
|
||||
}
|
||||
}
|
||||
}
|
||||
shouldAddDir = true;
|
||||
continue;
|
||||
}
|
||||
childNodes.push(n);
|
||||
if (i === el.childNodes.length - 1 && shouldAddDir && !addedDir) {
|
||||
el.addClass(dirClass(lastDetectedDir));
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < childNodes.length; i++) {
|
||||
autoDirectionPostProcessor(childNodes[i], ctx, setPreviewDirection);
|
||||
}
|
||||
if (el.nodeName === "UL") {
|
||||
const lis = el.querySelectorAll("li");
|
||||
if (lis.length > 0 && lis[0].hasClass("esm-rtl")) {
|
||||
el.addClass(dirClass("rtl"));
|
||||
}
|
||||
}
|
||||
};
|
||||
function dirClass(dir) {
|
||||
if (dir === "rtl") {
|
||||
return "esm-rtl";
|
||||
} else {
|
||||
return "esm-ltr";
|
||||
}
|
||||
}
|
||||
function addDirClassIfNotAddedBefore(el, cls) {
|
||||
if (el.hasClass("esm-rtl") || el.hasClass("esm-ltr")) {
|
||||
return;
|
||||
}
|
||||
el.addClass(cls);
|
||||
}
|
||||
|
||||
// main.ts
|
||||
var import_view2 = require("@codemirror/view");
|
||||
|
||||
// settingsTab.ts
|
||||
var import_obsidian2 = require("obsidian");
|
||||
var DEFAULT_SETTINGS = {
|
||||
fileDirections: {},
|
||||
defaultDirection: "ltr",
|
||||
rememberPerFile: true,
|
||||
setNoteTitleDirection: true,
|
||||
setYamlDirection: false,
|
||||
statusBar: true
|
||||
};
|
||||
var RtlSettingsTab = class extends import_obsidian2.PluginSettingTab {
|
||||
constructor(app, plugin) {
|
||||
super(app, plugin);
|
||||
this.plugin = plugin;
|
||||
this.settings = plugin.settings;
|
||||
}
|
||||
display() {
|
||||
let { containerEl } = this;
|
||||
containerEl.empty();
|
||||
containerEl.createEl("h2", { text: "RTL Settings" });
|
||||
this.plugin.syncDefaultDirection();
|
||||
new import_obsidian2.Setting(containerEl).setName("Remember text direction per file").setDesc("Store and remember the text direction used for each file individually.").addToggle((toggle) => toggle.setValue(this.settings.rememberPerFile).onChange((value) => {
|
||||
this.settings.rememberPerFile = value;
|
||||
this.plugin.saveSettings();
|
||||
this.plugin.adjustDirectionToActiveView();
|
||||
}));
|
||||
new import_obsidian2.Setting(containerEl).setName("Default text direction").setDesc("What should be the default text direction in Obsidian?").addDropdown((dropdown) => dropdown.addOption("ltr", "LTR").addOption("rtl", "RTL").addOption("auto", "Auto").setValue(this.settings.defaultDirection).onChange((value) => {
|
||||
this.settings.defaultDirection = value;
|
||||
this.app.vault.setConfig("rightToLeft", value == "rtl");
|
||||
this.plugin.saveSettings();
|
||||
this.plugin.adjustDirectionToActiveView();
|
||||
}));
|
||||
new import_obsidian2.Setting(containerEl).setName("Set note title direction").setDesc("In RTL notes, also set the direction of the note title.").addToggle((toggle) => toggle.setValue(this.settings.setNoteTitleDirection).onChange((value) => {
|
||||
this.settings.setNoteTitleDirection = value;
|
||||
this.plugin.saveSettings();
|
||||
this.plugin.adjustDirectionToActiveView();
|
||||
}));
|
||||
new import_obsidian2.Setting(containerEl).setName("Set YAML direction in Preview").setDesc("For RTL notes, preview YAML blocks as RTL. (When turning off, restart of Obsidian is required.)").addToggle((toggle) => {
|
||||
var _a;
|
||||
return toggle.setValue((_a = this.settings.setYamlDirection) != null ? _a : false).onChange((value) => {
|
||||
this.settings.setYamlDirection = value;
|
||||
this.plugin.saveSettings();
|
||||
this.plugin.adjustDirectionToActiveView();
|
||||
});
|
||||
});
|
||||
new import_obsidian2.Setting(containerEl).setName("Show status bar item").setDesc("Show a clickable status bar item showing the current direction.").addToggle((toggle) => {
|
||||
var _a;
|
||||
return toggle.setValue((_a = this.settings.statusBar) != null ? _a : true).onChange((value) => {
|
||||
this.settings.statusBar = value;
|
||||
this.plugin.saveSettings();
|
||||
this.plugin.adjustDirectionToActiveView();
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// main.ts
|
||||
var RtlPlugin = class extends import_obsidian3.Plugin {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.settings = null;
|
||||
this.statusBarItem = null;
|
||||
this.statusBarText = null;
|
||||
}
|
||||
async onload() {
|
||||
this.addCommand({
|
||||
id: "switch-text-direction",
|
||||
name: "Switch Text Direction (LTR->RTL->auto)",
|
||||
icon: "arrow-left-right",
|
||||
callback: () => {
|
||||
const view = this.app.workspace.getActiveViewOfType(import_obsidian3.MarkdownView);
|
||||
if (!view || !(view == null ? void 0 : view.editor))
|
||||
return;
|
||||
this.switchDocumentDirection(view.editor, view);
|
||||
}
|
||||
});
|
||||
this.autoDirectionPlugin = getAutoDirectionPlugin(this);
|
||||
this.registerEditorExtension(this.autoDirectionPlugin);
|
||||
this.registerEditorExtension(import_view2.EditorView.perLineTextDirection.of(true));
|
||||
this.registerMarkdownPostProcessor((el, ctx) => {
|
||||
autoDirectionPostProcessor(el, ctx, (path, markdownPreviewElement) => this.setCanvasPreviewDirection(path, markdownPreviewElement));
|
||||
});
|
||||
await this.convertLegacySettings();
|
||||
await this.loadSettings();
|
||||
this.addSettingTab(new RtlSettingsTab(this.app, this));
|
||||
this.app.workspace.on("active-leaf-change", async (leaf) => {
|
||||
this.adjustDirectionToActiveView();
|
||||
this.updateStatusBar();
|
||||
});
|
||||
this.app.workspace.on("file-open", async (file, ctx) => {
|
||||
this.adjustDirectionToActiveView();
|
||||
this.updateStatusBar();
|
||||
});
|
||||
this.registerEvent(this.app.vault.on("delete", (file) => {
|
||||
if (file && file.path && file.path in this.settings.fileDirections) {
|
||||
delete this.settings.fileDirections[file.path];
|
||||
this.saveSettings();
|
||||
}
|
||||
}));
|
||||
this.registerEvent(this.app.vault.on("rename", (file, oldPath) => {
|
||||
if (file && file.path && oldPath in this.settings.fileDirections) {
|
||||
this.settings.fileDirections[file.path] = this.settings.fileDirections[oldPath];
|
||||
delete this.settings.fileDirections[oldPath];
|
||||
this.saveSettings();
|
||||
}
|
||||
}));
|
||||
this.statusBarItem = this.addStatusBarItem();
|
||||
const languageIcon = (0, import_obsidian3.getIcon)("arrow-left-right");
|
||||
this.statusBarItem.appendChild(languageIcon);
|
||||
this.statusBarText = this.statusBarItem.createEl("span");
|
||||
this.statusBarText.style.marginLeft = "5px";
|
||||
this.statusBarItem.title = "Text direction";
|
||||
this.statusBarItem.addClass("mod-clickable");
|
||||
this.statusBarItem.addEventListener("click", (_ev) => {
|
||||
const view = this.app.workspace.getActiveViewOfType(import_obsidian3.MarkdownView);
|
||||
if (!view || !(view == null ? void 0 : view.editor))
|
||||
return;
|
||||
this.switchDocumentDirection(view.editor, view);
|
||||
});
|
||||
}
|
||||
onunload() {
|
||||
const view = this.app.workspace.getActiveViewOfType(import_obsidian3.MarkdownView);
|
||||
if (view && (view == null ? void 0 : view.editor)) {
|
||||
const editorView = view.editor.cm;
|
||||
this.adjustAutoDirection(editorView, "ltr");
|
||||
}
|
||||
console.log("unloading RTL plugin");
|
||||
}
|
||||
adjustDirectionToActiveView() {
|
||||
const view = this.app.workspace.getActiveViewOfType(import_obsidian3.MarkdownView);
|
||||
if (!view)
|
||||
return;
|
||||
this.adjustDirectionToView(view);
|
||||
}
|
||||
adjustDirectionToView(view, autoDirectionPlugin) {
|
||||
if (!view)
|
||||
return;
|
||||
this.syncDefaultDirection();
|
||||
const file = view == null ? void 0 : view.file;
|
||||
const editor = view == null ? void 0 : view.editor;
|
||||
const editorView = editor == null ? void 0 : editor.cm;
|
||||
if (file && file.path && editorView) {
|
||||
const [requiredDirection, _usedDefault] = this.getRequiredFileDirection(file);
|
||||
this.setMarkdownViewDirection(view, editor, editorView, requiredDirection, autoDirectionPlugin);
|
||||
}
|
||||
}
|
||||
getRequiredFileDirection(file) {
|
||||
if (!file) {
|
||||
return [this.settings.defaultDirection, true];
|
||||
}
|
||||
if (!(file instanceof import_obsidian3.TFile))
|
||||
return null;
|
||||
let requiredDirection = null;
|
||||
const frontMatterDirection = this.getFrontMatterDirection(file);
|
||||
let usedDefault = false;
|
||||
if (frontMatterDirection) {
|
||||
if (frontMatterDirection == "rtl" || frontMatterDirection == "ltr" || frontMatterDirection == "auto")
|
||||
requiredDirection = frontMatterDirection;
|
||||
else
|
||||
console.log("Front matter direction in file", file.path, "is unknown:", frontMatterDirection);
|
||||
} else if (this.settings.rememberPerFile && file.path in this.settings.fileDirections) {
|
||||
requiredDirection = this.settings.fileDirections[file.path];
|
||||
} else {
|
||||
requiredDirection = this.settings.defaultDirection;
|
||||
usedDefault = true;
|
||||
}
|
||||
return [requiredDirection, usedDefault];
|
||||
}
|
||||
async saveSettings() {
|
||||
await this.saveData(this.settings);
|
||||
}
|
||||
async loadSettings() {
|
||||
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
|
||||
}
|
||||
async convertLegacySettings() {
|
||||
const legacySettingsPath = ".obsidian/rtl.json";
|
||||
if (await this.app.vault.adapter.exists(legacySettingsPath)) {
|
||||
const legacyContent = await this.app.vault.adapter.read(legacySettingsPath);
|
||||
if (legacyContent) {
|
||||
this.settings = JSON.parse(legacyContent);
|
||||
}
|
||||
this.app.vault.adapter.remove(legacySettingsPath);
|
||||
new import_obsidian3.Notice("RTL Plugin: legacy settings were converted to the new format");
|
||||
this.saveSettings();
|
||||
}
|
||||
}
|
||||
updateStatusBar() {
|
||||
let hide = true;
|
||||
let usedDefault = false;
|
||||
const view = this.app.workspace.getActiveViewOfType(import_obsidian3.MarkdownView);
|
||||
if (view && (view == null ? void 0 : view.editor)) {
|
||||
const direction = this.getDocumentDirection(view.editor, view);
|
||||
if (view.file && view.file.path)
|
||||
[, usedDefault] = this.getRequiredFileDirection(view.file);
|
||||
if (this.settings.statusBar) {
|
||||
let directionString = direction === "auto" ? "auto" : direction === "ltr" ? "LTR" : "RTL";
|
||||
let statusString = "";
|
||||
if (usedDefault)
|
||||
statusString = `Default (${direction})`;
|
||||
else {
|
||||
if (direction === "auto")
|
||||
statusString = "Auto";
|
||||
else
|
||||
statusString = directionString;
|
||||
}
|
||||
this.statusBarText.textContent = statusString;
|
||||
this.statusBarItem.style.display = null;
|
||||
hide = false;
|
||||
}
|
||||
}
|
||||
if (hide)
|
||||
this.hideStatusBar();
|
||||
}
|
||||
hideStatusBar() {
|
||||
this.statusBarItem.style.display = "none";
|
||||
}
|
||||
handleIframeEditor(editorDiv, editorView, file, autoDirectionPlugin) {
|
||||
const isInIframe = editorDiv.closest(".mod-inside-iframe");
|
||||
if (isInIframe) {
|
||||
if (editorDiv instanceof HTMLDivElement) {
|
||||
const [requiredDirection, _] = this.getRequiredFileDirection(file);
|
||||
this.adjustAutoDirection(editorView, requiredDirection, autoDirectionPlugin);
|
||||
this.setDocumentDirectionForEditorDiv(editorDiv, requiredDirection);
|
||||
}
|
||||
}
|
||||
}
|
||||
setMarkdownViewDirection(view, editor, editorView, newDirection, autoDirectionPlugin) {
|
||||
if (!view || !editor) {
|
||||
this.hideStatusBar();
|
||||
return;
|
||||
}
|
||||
let title = editorView.dom.querySelector(".inline-title");
|
||||
if (!title) {
|
||||
title = view.previewMode.containerEl.querySelector(".inline-title");
|
||||
}
|
||||
title == null ? void 0 : title.setAttribute("dir", newDirection === "auto" ? "auto" : "");
|
||||
this.adjustAutoDirection(editorView, newDirection, autoDirectionPlugin);
|
||||
const editorDivs = view.contentEl.getElementsByClassName("cm-editor");
|
||||
for (const editorDiv of editorDivs) {
|
||||
if (editorDiv instanceof HTMLDivElement)
|
||||
this.setDocumentDirectionForEditorDiv(editorDiv, newDirection);
|
||||
}
|
||||
const markdownPreviews = view.contentEl.getElementsByClassName("markdown-preview-view");
|
||||
for (const preview of markdownPreviews) {
|
||||
if (preview instanceof HTMLDivElement)
|
||||
this.setDocumentDirectionForReadingDiv(preview, newDirection);
|
||||
}
|
||||
if (this.settings.setNoteTitleDirection) {
|
||||
const container = view.containerEl.parentElement;
|
||||
let header = container.getElementsByClassName("view-header-title-container");
|
||||
header[0].style.direction = newDirection;
|
||||
}
|
||||
editor.refresh();
|
||||
if (newDirection !== "auto") {
|
||||
this.setExportDirection(newDirection);
|
||||
}
|
||||
}
|
||||
adjustAutoDirection(editorView, newDirection, autoDirectionPlugin) {
|
||||
const autoDirection = autoDirectionPlugin != null ? autoDirectionPlugin : editorView.plugin(this.autoDirectionPlugin);
|
||||
if (autoDirection) {
|
||||
autoDirection.setActive(newDirection === "auto", editorView);
|
||||
if (!autoDirectionPlugin)
|
||||
editorView.dispatch();
|
||||
}
|
||||
}
|
||||
setDocumentDirectionForEditorDiv(editorDiv, newDirection) {
|
||||
editorDiv.style.direction = newDirection === "auto" ? "" : newDirection;
|
||||
this.addDirectionClassToEl(editorDiv.parentElement, newDirection);
|
||||
}
|
||||
setDocumentDirectionForReadingDiv(readingDiv, newDirection) {
|
||||
readingDiv.style.direction = newDirection === "auto" ? "" : newDirection;
|
||||
this.addDirectionClassToEl(readingDiv, newDirection);
|
||||
readingDiv.classList.remove("rtl-yaml");
|
||||
if (newDirection !== "auto" && this.settings.setYamlDirection)
|
||||
readingDiv.classList.add("rtl-yaml");
|
||||
}
|
||||
setCanvasPreviewDirection(path, markdownPreviewElement) {
|
||||
const file = this.app.vault.getAbstractFileByPath(path);
|
||||
const [requiredDirection, _] = this.getRequiredFileDirection(file);
|
||||
this.setDocumentDirectionForReadingDiv(markdownPreviewElement, requiredDirection);
|
||||
}
|
||||
addDirectionClassToEl(el, direction) {
|
||||
switch (direction) {
|
||||
case "rtl":
|
||||
el.classList.remove(AUTO_CLASS);
|
||||
el.classList.add(RTL_CLASS);
|
||||
break;
|
||||
case "auto":
|
||||
el.classList.remove(RTL_CLASS);
|
||||
el.classList.add(AUTO_CLASS);
|
||||
break;
|
||||
default:
|
||||
el.classList.remove(RTL_CLASS);
|
||||
el.classList.remove(AUTO_CLASS);
|
||||
}
|
||||
}
|
||||
setExportDirection(newDirection) {
|
||||
this.replacePageStyleByString("searched and replaced", `/* This is searched and replaced by the plugin */ @media print { body { direction: ${newDirection}; } }`, true);
|
||||
}
|
||||
replacePageStyleByString(searchString, newStyle, addIfNotFound) {
|
||||
let alreadyExists = false;
|
||||
let style = this.findPageStyle(searchString);
|
||||
if (style) {
|
||||
if (style.getText() === searchString)
|
||||
alreadyExists = true;
|
||||
else
|
||||
style.setText(newStyle);
|
||||
} else if (addIfNotFound) {
|
||||
let style2 = document.createElement("style");
|
||||
style2.textContent = newStyle;
|
||||
document.head.appendChild(style2);
|
||||
}
|
||||
return style && !alreadyExists;
|
||||
}
|
||||
findPageStyle(regex) {
|
||||
let styles = document.head.getElementsByTagName("style");
|
||||
for (let style of styles) {
|
||||
if (style.getText().match(regex))
|
||||
return style;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
switchDocumentDirection(editor, view) {
|
||||
let newDirection = this.getDocumentDirection(editor, view);
|
||||
if (newDirection === null) {
|
||||
new import_obsidian3.Notice("Obsidian RTL can't set the direction of this document");
|
||||
return;
|
||||
}
|
||||
let displayName = "";
|
||||
switch (newDirection) {
|
||||
case "ltr":
|
||||
newDirection = "rtl";
|
||||
displayName = "RTL";
|
||||
break;
|
||||
case "rtl":
|
||||
newDirection = "auto";
|
||||
displayName = "Auto";
|
||||
break;
|
||||
case "auto":
|
||||
newDirection = "ltr";
|
||||
displayName = "LTR";
|
||||
break;
|
||||
}
|
||||
if (view instanceof import_obsidian3.MarkdownView) {
|
||||
const editorView = view.editor.cm;
|
||||
this.setMarkdownViewDirection(view, editor, editorView, newDirection);
|
||||
if (this.settings.rememberPerFile && view.file && view.file.path) {
|
||||
this.settings.fileDirections[view.file.path] = newDirection;
|
||||
this.saveSettings();
|
||||
}
|
||||
new import_obsidian3.Notice(`Document direction set to ${displayName}`, 2e3);
|
||||
this.updateStatusBar();
|
||||
} else {
|
||||
const canvasView = this.getCanvasContext(view);
|
||||
if (canvasView) {
|
||||
if (view.file)
|
||||
new import_obsidian3.Notice("To change a canvas card direction, open the document separately and reload the canvas.");
|
||||
else
|
||||
new import_obsidian3.Notice("Can't change the direction of a card without a file.");
|
||||
}
|
||||
}
|
||||
}
|
||||
getCanvasContext(ctx) {
|
||||
if (ctx instanceof import_obsidian3.MarkdownView)
|
||||
return null;
|
||||
const possibleCanvasContainer = ctx == null ? void 0 : ctx.containerEl;
|
||||
if (possibleCanvasContainer && possibleCanvasContainer.hasClass("canvas-node-content"))
|
||||
return possibleCanvasContainer;
|
||||
}
|
||||
getDocumentDirection(_editor, ctx) {
|
||||
let refElement = null;
|
||||
if (ctx instanceof import_obsidian3.MarkdownView) {
|
||||
refElement = ctx.contentEl;
|
||||
} else {
|
||||
refElement = this.getCanvasContext(ctx);
|
||||
}
|
||||
if (refElement === null)
|
||||
return null;
|
||||
const rtlEditors = refElement.getElementsByClassName(RTL_CLASS), autoEditors = refElement.getElementsByClassName(AUTO_CLASS);
|
||||
if (rtlEditors.length > 0)
|
||||
return "rtl";
|
||||
else if (autoEditors.length > 0)
|
||||
return "auto";
|
||||
else
|
||||
return "ltr";
|
||||
}
|
||||
getFrontMatterDirection(file) {
|
||||
const fileCache = this.app.metadataCache.getFileCache(file);
|
||||
const frontMatter = fileCache == null ? void 0 : fileCache.frontmatter;
|
||||
if (frontMatter && (frontMatter == null ? void 0 : frontMatter.direction)) {
|
||||
try {
|
||||
const direction = frontMatter.direction;
|
||||
return direction;
|
||||
} catch (error) {
|
||||
}
|
||||
}
|
||||
}
|
||||
syncDefaultDirection() {
|
||||
const obsidianDirection = this.app.vault.getConfig("rightToLeft") ? "rtl" : "ltr";
|
||||
if (obsidianDirection != this.settings.defaultDirection && this.settings.defaultDirection !== "auto") {
|
||||
this.settings.defaultDirection = obsidianDirection;
|
||||
this.saveSettings();
|
||||
}
|
||||
}
|
||||
};
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"id": "obsidian-rtl",
|
||||
"name": "RTL Support",
|
||||
"version": "1.1.1",
|
||||
"minAppVersion": "0.15.3",
|
||||
"description": "Right to Left (RTL) text direction support for languages like Arabic, Hebrew and Persian (Farsi).",
|
||||
"author": "esm",
|
||||
"authorUrl": "",
|
||||
"isDesktopOnly": false
|
||||
}
|
|
@ -0,0 +1,202 @@
|
|||
@media print {
|
||||
span.cm-tab {
|
||||
width: 50px !important;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.is-auto .esm-ltr {
|
||||
direction: ltr;
|
||||
text-align-last: left;
|
||||
}
|
||||
|
||||
.is-auto .esm-rtl {
|
||||
direction: rtl;
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
||||
/* List indent fix */
|
||||
.is-mobile .is-rtl .HyperMD-list-line, .is-mobile .HyperMD-list-line[dir="rtl"] {
|
||||
text-indent: 0px !important;
|
||||
padding-left: 0 !important;
|
||||
}
|
||||
|
||||
.CodeMirror-rtl pre {
|
||||
text-indent: 0px !important;
|
||||
}
|
||||
|
||||
/* Embedded links always LTR */
|
||||
.embedded-backlinks {
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
/* Patch YAML RTL */
|
||||
/* In a preview that is strictly RTL (is-rtl) and the settings ask to right-aline YAML (rtl-yaml), set a YAML block to RTL. */
|
||||
.is-rtl.rtl-yaml code.language-yaml {
|
||||
text-align: right;
|
||||
}
|
||||
/* Then move the 'copy' button to the left */
|
||||
.is-rtl.rtl-yaml code.language-yaml + button.copy-code-button {
|
||||
right: unset;
|
||||
left: 0;
|
||||
}
|
||||
/* In a preview that is auto (is-auto), and the YAML was detected as RTL (esm-rtl), set the 'copy' button to the left */
|
||||
.is-auto .esm-rtl.language-yaml + button.copy-code-button {
|
||||
right: unset;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
/* In RTL, or in Auto with a first line that is RTL, set the flair (where it says e.g. 'yaml' in Edit mode) to the left */
|
||||
.is-rtl div:has(.HyperMD-codeblock-begin) .code-block-flair,
|
||||
.is-auto div:has(.HyperMD-codeblock-begin + .HyperMD-codeblock[dir="rtl"]) .code-block-flair {
|
||||
right: unset;
|
||||
left: 6px;
|
||||
}
|
||||
|
||||
/* RTL and Auto callout titles that are detected as RTL - set to the right */
|
||||
.is-rtl .callout-title:has(.esm-rtl),
|
||||
.is-auto .callout-title:has(.esm-rtl) {
|
||||
direction: rtl;
|
||||
}
|
||||
.is-auto .callout-content .esm-rtl {
|
||||
direction: rtl;
|
||||
}
|
||||
/* When an RTL callout title was set to the right, left-justify its edit block button */
|
||||
.is-rtl div.cm-callout:has(.callout-title .esm-rtl) .edit-block-button,
|
||||
.is-auto div.cm-callout:has(.callout-title .esm-rtl) .edit-block-button {
|
||||
right: unset;
|
||||
left: var(--size-2-2);
|
||||
}
|
||||
|
||||
.markdown-source-view .cm-line[dir="rtl"] .task-list-label {
|
||||
margin-left: 0;
|
||||
margin-right: -3px;
|
||||
}
|
||||
|
||||
/* Better spacing between bullet and text */
|
||||
.outliner-plugin-better-bullets .markdown-source-view.is-rtl .cm-formatting-list-ul,
|
||||
.outliner-plugin-better-bullets .markdown-source-view .cm-line[dir="rtl"] .cm-formatting-list-ul {
|
||||
margin-right: 0;
|
||||
margin-left: 0.3em;
|
||||
}
|
||||
|
||||
.markdown-source-view.is-rtl .is-collapsed .collapse-indicator svg.svg-icon,
|
||||
.markdown-source-view .cm-line[dir="rtl"] .is-collapsed .collapse-indicator svg.svg-icon {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
/* Styling for collapse indicator on the headings */
|
||||
.markdown-source-view.is-rtl .cm-line .cm-fold-indicator .collapse-indicator,
|
||||
.markdown-source-view .cm-line[dir="rtl"] .cm-fold-indicator .collapse-indicator {
|
||||
padding-right: 0;
|
||||
padding-left: 6px;
|
||||
right: -16px;
|
||||
}
|
||||
|
||||
/* Styling for collapse indicator on the lists */
|
||||
.markdown-source-view.is-rtl .cm-line:not(.cm-active):not(.HyperMD-header):not(.HyperMD-task-line) .cm-fold-indicator .collapse-indicator,
|
||||
.markdown-source-view .cm-line[dir="rtl"]:not(.cm-active):not(.HyperMD-header):not(.HyperMD-task-line) .cm-fold-indicator .collapse-indicator {
|
||||
padding-right: 0;
|
||||
padding-left: 18px;
|
||||
right: -16px;
|
||||
}
|
||||
|
||||
/* Styling for tags in RTL */
|
||||
.markdown-source-view.is-rtl .cm-line .cm-hashtag.cm-hashtag-begin,
|
||||
.markdown-source-view .cm-line[dir="rtl"] .cm-hashtag.cm-hashtag-begin {
|
||||
border-top-right-radius: var(--tag-radius);
|
||||
border-bottom-right-radius: var(--tag-radius);
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-left: none;
|
||||
border-right: var(--tag-border-width) solid var(--tag-border-color);
|
||||
padding-right: var(--tag-padding-x);
|
||||
padding-left: 0;
|
||||
}
|
||||
.markdown-source-view.is-rtl .cm-line .cm-hashtag.cm-hashtag-end,
|
||||
.markdown-source-view .cm-line[dir="rtl"] .cm-hashtag.cm-hashtag-end {
|
||||
border-top-left-radius: var(--tag-radius);
|
||||
border-bottom-left-radius: var(--tag-radius);
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
border-right: none;
|
||||
border-left: var(--tag-border-width) solid var(--tag-border-color);
|
||||
padding-left: var(--tag-padding-x);
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.markdown-preview-view.is-auto .esm-rtl,
|
||||
.kanban-plugin__board .esm-rtl,
|
||||
.kanban-plugin__drag-container .esm-rtl {
|
||||
direction: rtl;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* Moving bullets to right side of the page and adding enough space between the bullet and the text */
|
||||
.markdown-preview-view.is-auto .esm-rtl > .list-bullet,
|
||||
.markdown-preview-view.is-rtl .list-bullet {
|
||||
float: right;
|
||||
margin-right: -12px;
|
||||
}
|
||||
|
||||
/* Fixing indentation guides in nested lists */
|
||||
.markdown-preview-view.is-auto.show-indentation-guide li.esm-rtl > ul::before,
|
||||
.markdown-preview-view.is-auto.show-indentation-guide li.esm-rtl > ol::before {
|
||||
left: auto;
|
||||
right: -15px;
|
||||
}
|
||||
|
||||
/* Moving the collapse indicator to right side of the page */
|
||||
.markdown-preview-view.is-auto .esm-rtl > .collapse-indicator,
|
||||
.markdown-preview-view.is-rtl .collapse-indicator {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* Moving the collapse indicator icon on the right of the text with enough space between */
|
||||
.markdown-preview-view.is-auto .esm-rtl > .list-collapse-indicator,
|
||||
.markdown-preview-view.is-rtl .list-collapse-indicator {
|
||||
margin-right: -48px;
|
||||
padding-left: 18px;
|
||||
}
|
||||
|
||||
/* Moving the heading collapse indicator on the right of the text. Without
|
||||
This the collapse indicator will be over the heading text */
|
||||
.markdown-preview-view.is-auto .esm-rtl > .heading-collapse-indicator,
|
||||
.markdown-preview-view.is-rtl .heading-collapse-indicator {
|
||||
margin-right: -22px;
|
||||
}
|
||||
|
||||
/* Mirroring collapse icon for nested lists so it points to rtl text not outside of page */
|
||||
.markdown-preview-view.is-auto .esm-rtl > .collapse-icon .is-collapsed svg.svg-icon,
|
||||
.markdown-preview-view.is-auto .esm-rtl.is-collapsed > .collapse-icon svg.svg-icon,
|
||||
.markdown-preview-view.is-rtl .collapse-icon .is-collapsed svg.svg-icon {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
/* Mirroring collapse icon for headings so it points to rtl text not outside of page */
|
||||
.markdown-preview-view .is-collapsed .esm-rtl > .collapse-icon svg.svg-icon,
|
||||
.markdown-preview-view.is-rtl .collapse-icon svg.svg-icon {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
/* Reverting the margin so the text won't stick to the checkbox */
|
||||
.markdown-preview-view.is-auto .esm-rtl > .task-list-item-checkbox,
|
||||
.markdown-preview-view.is-rtl .task-list-item-checkbox {
|
||||
margin-left: 6px;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.markdown-preview-view.is-auto .esm-ltr {
|
||||
direction: ltr;
|
||||
text-align-last: left;
|
||||
}
|
||||
|
||||
/* Helper styles for debugging */
|
||||
/* .cm-line[dir="rtl"] { */
|
||||
/* border-right: dashed; */
|
||||
/* border-right-color: blue; */
|
||||
/* } */
|
||||
/* .cm-line[dir="ltr"] { */
|
||||
/* border-right: dashed; */
|
||||
/* border-right-color: red; */
|
||||
/* } */
|
|
@ -4,16 +4,16 @@
|
|||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "17d3dce187014234",
|
||||
"id": "1700c7fa331b8589",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "4c1665d710fe052f",
|
||||
"id": "91dc25e2b1472f34",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Rom.8.12-25.md",
|
||||
"file": "Gen.28.10-19.md",
|
||||
"mode": "source",
|
||||
"source": true
|
||||
}
|
||||
|
@ -22,16 +22,16 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"id": "f0b78b07d040b219",
|
||||
"id": "1678d456e2d0710d",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "f7b45bdaeaa5eb87",
|
||||
"id": "d281f72a4fc9e31f",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "Rom.8.12-25.md",
|
||||
"file": "Gen.28.10-19.md",
|
||||
"mode": "preview",
|
||||
"source": true
|
||||
}
|
||||
|
@ -91,11 +91,12 @@
|
|||
"state": {}
|
||||
}
|
||||
}
|
||||
]
|
||||
],
|
||||
"currentTab": 3
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 334.5,
|
||||
"width": 462.504695892334,
|
||||
"collapsed": true
|
||||
},
|
||||
"right": {
|
||||
|
@ -112,7 +113,7 @@
|
|||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "Rom.8.12-25.md"
|
||||
"file": "Gen.28.10-19.md"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -133,7 +134,7 @@
|
|||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "Rom.8.12-25.md",
|
||||
"file": "Gen.28.10-19.md",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
|
@ -150,7 +151,7 @@
|
|||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "Rom.8.12-25.md",
|
||||
"file": "Gen.28.10-19.md",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
}
|
||||
|
@ -173,28 +174,29 @@
|
|||
"workspaces:Manage workspace layouts": false
|
||||
}
|
||||
},
|
||||
"active": "f7b45bdaeaa5eb87",
|
||||
"active": "d281f72a4fc9e31f",
|
||||
"lastOpenFiles": [
|
||||
"images/2023-07-23-Rom.8.12-15.png",
|
||||
"Rom.8.12-25.md",
|
||||
"README.md",
|
||||
"Rom.8.12-25.md",
|
||||
"images/2023-07-23.lectionary.png",
|
||||
"Gen.28.10-19.md",
|
||||
"images/2023-02-19-lectionary.png",
|
||||
"template/講道筆記範本.md",
|
||||
"images/2023-07-23-Rom.8.12-15.png",
|
||||
"1Co.15.1-11.md",
|
||||
"1Co.11.23-32.md",
|
||||
"images/2023-02-19-出24.12-18.png",
|
||||
"images/2023-06-25-林前11.23-32小抄b.jpg",
|
||||
"images/2023-06-25-林前11.23-32小抄a.jpg",
|
||||
"images/2023-06-25-1Co.11.23-32小抄b.jpg",
|
||||
"images/2023-06-25-1Co.11.23-32小抄a.jpg",
|
||||
"images/Pasted image 20221214190537.png",
|
||||
"images/Pasted image 20221214191702.png",
|
||||
"images/2023-06-25-林前11.23-32.png.md",
|
||||
"images/2023-06-25-林前11.23-32.png",
|
||||
"template/講道筆記範本.md",
|
||||
"images/2023-06-25-1Co.11.23-32.png",
|
||||
"1Co.12.3-13.md",
|
||||
"Act.2.1-21.md",
|
||||
"Jos.9.7-15.md",
|
||||
"約書亞記 9.7-15.md",
|
||||
"images/2023-05-28-林前12.3.13小抄.jpg",
|
||||
"images/2023-05-28-徒2.1-21小抄.jpg",
|
||||
"images/2023-05-28-徒2.1-21.png",
|
||||
"images/2023-05-28-1Co.12.3.13小抄.jpg",
|
||||
"Pro.18.8.md",
|
||||
"Exo.24.12-18.md",
|
||||
"Mat.17.1-9.md",
|
||||
|
|
|
@ -113,7 +113,7 @@
|
|||
- κατακριθῶμεν (11:32 不至於與世人一同被定罪 κατακρίνω)—主的管教 (παιδεύω)
|
||||
- κρίμα (11:34 自己取罪)
|
||||
|
||||
![images/2023-06-25-林前11.23-32.png](images/2023-06-25-林前11.23-32.png)
|
||||
![images/2023-06-25-1Co.11.23-32.png](images/2023-06-25-1Co.11.23-32.png)
|
||||
|
||||
## 大綱 (Outline)
|
||||
- 💡😀😢❓❌⭕❗🎀🎗️
|
||||
|
@ -147,6 +147,6 @@
|
|||
## 小抄 (memo)
|
||||
|
||||
|
||||
![images/2023-06-25-林前11.23-32小抄a.jpg](images/2023-06-25-林前11.23-32小抄a.jpg)
|
||||
![images/2023-06-25-1Co.11.23-32小抄a.jpg](images/2023-06-25-1Co.11.23-32小抄a.jpg)
|
||||
|
||||
![images/2023-06-25-林前11.23-32小抄b.jpg](images/2023-06-25-林前11.23-32小抄b.jpg)
|
||||
![images/2023-06-25-1Co.11.23-32小抄b.jpg](images/2023-06-25-1Co.11.23-32小抄b.jpg)
|
|
@ -51,7 +51,7 @@
|
|||
|
||||
## 語意解經 (Exegesis)
|
||||
|
||||
![images/2023-05-28-林前12.3-14.png](images/2023-05-28-%E6%9E%97%E5%89%8D12.3-14.png)
|
||||
![images/2023-05-28-1Co.12.3-14.png](images/2023-05-28-1Co.12.3-14.png)
|
||||
|
||||
|
||||
## 講道大綱 (Outline)
|
||||
|
@ -89,7 +89,7 @@
|
|||
|
||||
## 小抄 (memo)
|
||||
|
||||
![images/2023-05-28-林前12.3.13小抄.jpg](images/2023-05-28-%E6%9E%97%E5%89%8D12.3.13%E5%B0%8F%E6%8A%84.jpg)
|
||||
![images/2023-05-28-1Co.12.3.13小抄.jpg](images/2023-05-28-1Co.12.3.13小抄.jpg)
|
||||
|
||||
---
|
||||
|
||||
|
|
|
@ -45,10 +45,10 @@
|
|||
|
||||
## 語意結構分析 (Semantic Structure Analysis)
|
||||
- 中文
|
||||
![images/2023-05-10-林前15.1-11a.png](images/2023-05-10-林前15.1-11a.png)
|
||||
![images/2023-05-10-1Co.15.1-11a.png](images/2023-05-10-1Co.15.1-11a.png)
|
||||
|
||||
- 原文
|
||||
![images/2023-05-10-林前15.1-11b.png](images/2023-05-10-林前15.1-11b.png)
|
||||
![images/2023-05-10-1Co.15.1-11b.png](images/2023-05-10-1Co.15.1-11b.png)
|
||||
|
||||
## 大綱 (Outline)
|
||||
|
||||
|
@ -81,7 +81,7 @@
|
|||
## 小抄 (memo)
|
||||
|
||||
|
||||
![images/2023-05-10-林前15.1-11小抄.jpg](images/2023-05-10-林前15.1-11小抄.jpg)
|
||||
![images/2023-05-10-1Co.15.1-11小抄.jpg](images/2023-05-10-1Co.15.1-11小抄.jpg)
|
||||
|
||||
---
|
||||
|
||||
|
|
|
@ -123,11 +123,11 @@ tags: #證道 #解經
|
|||
|
||||
|
||||
## 小抄 (memo)
|
||||
![|350x400](images/2021-01-10-%E6%9E%97%E5%89%8D6.1-6%E5%B0%8F%E6%8A%84.jpg)
|
||||
![|350x400](images/2021-01-10-1Co.6.1-6小抄.jpg)
|
||||
|
||||
## 手稿 (Manuscript)
|
||||
|
||||
![|600x900](images/2021-01-10-%E6%9E%97%E5%89%8D6.1-6.png)
|
||||
![|600x900](images/2021-01-10-1Co.6.1-6.png)
|
||||
|
||||
|
||||
---
|
||||
|
|
|
@ -130,7 +130,7 @@ tags: #證道 #解經
|
|||
## 小抄 (memo)
|
||||
|
||||
|
||||
![](images/2020-12-06-提前4.1-16小抄.png)
|
||||
![](images/2020-12-06-1Ti.4.1-16小抄.png)
|
||||
|
||||
|
||||
|
||||
|
@ -138,7 +138,7 @@ tags: #證道 #解經
|
|||
|
||||
## 手稿 (Manuscript)
|
||||
|
||||
- ![|600x900](images/2020-12-06-%E6%8F%90%E5%89%8D4.1-16.png)
|
||||
- ![|600x900](images/2020-12-06-1Ti.4.1-16.png)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
- 2:21c (<RUBY><ruby><ruby>ὃς<rt>ὅς</rt></ruby><rt>who</rt></ruby><rt>R-NSM</rt></RUBY> <RUBY><ruby><ruby>ἂν<rt>ἄν</rt></ruby><rt>if</rt></ruby><rt>PRT</rt></RUBY>)S (<RUBY><ruby><ruby><strong>ἐπικαλέσηται</strong><rt>ἐπικαλέω</rt></ruby><rt>they shall call upon</rt></ruby><rt>V-AMS-3S</rt></RUBY>)P (<RUBY><ruby><ruby>τὸ<rt>ὁ</rt></ruby><rt>the</rt></ruby><rt>T-ASN</rt></RUBY> <RUBY><ruby><ruby>ὄνομα<rt>ὄνομα</rt></ruby><rt>name</rt></ruby><rt>N-ASN</rt></RUBY> <RUBY><ruby><ruby>Κυρίου<rt>κύριος</rt></ruby><rt>of [the] Lord</rt></ruby><rt>N-GSM</rt></RUBY>)C
|
||||
## 語意解經 (Exegesis)
|
||||
|
||||
![images/2023-05-28-徒2.1-21.png](images/2023-05-28-%E5%BE%922.1-21.png)
|
||||
![images/2023-05-28-Act.2.1-21.png](images/2023-05-28-Act.2.1-21.png)
|
||||
|
||||
- 聖靈的江河流啊流⋯⋯⋯⋯⋯⋯⋯
|
||||
- *起源*:
|
||||
|
@ -145,7 +145,7 @@
|
|||
|
||||
## 小抄 (memo)
|
||||
|
||||
![images/2023-05-28-徒2.1-21小抄.jpg](images/2023-05-28-%E5%BE%922.1-21%E5%B0%8F%E6%8A%84.jpg)
|
||||
![images/2023-05-28-Act.2.1-21小抄.jpg](images/2023-05-28-Act.2.1-21小抄.jpg)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
tags: #證道 #解經
|
||||
|
||||
## 圖析 (Syntax Diagram)
|
||||
![images/2021-04-11-申34.1–12.png](images/2021-04-11-%E7%94%B334.1%E2%80%9312.png)
|
||||
![images/2021-04-11-Deu.34.1–12.png](images/2021-04-11-Deu.34.1–12.png)
|
||||
|
||||
## 大綱 (Outline)
|
||||
|
||||
|
@ -54,7 +54,7 @@ tags: #證道 #解經
|
|||
|
||||
## 小抄 (memo)
|
||||
|
||||
![](images/2021-04-11-申34.1–12小抄.png)
|
||||
![](images/2021-04-11-Deu.34.1–12小抄.png)
|
||||
|
||||
|
||||
---
|
||||
|
|
|
@ -39,7 +39,7 @@ tags: #證道 #解經
|
|||
|
||||
|
||||
## 圖析 (Syntax Diagram)
|
||||
![](images/2020-11-08-%E7%94%B38.1-20.png)
|
||||
![](images/2020-11-08-Deu.8.1-20.png)
|
||||
|
||||
|
||||
---
|
||||
|
|
|
@ -6,7 +6,7 @@ tags: #證道 #解經
|
|||
|
||||
|
||||
## 小抄 (memo)
|
||||
![](images/2020-09-20-出23.1-3小抄.jpg)
|
||||
![](images/2020-09-20-Exo.23.1-3小抄.jpg)
|
||||
|
||||
|
||||
---
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
經文:創世記28:10-19a
|
||||
題目:榮耀的盼望 (一)
|
||||
日期:2023-07-23
|
||||
教會:台北衛理堂
|
||||
|
||||
![images/2023-07-23.lectionary.png](images/2023-07-23.lectionary.png)
|
||||
|
||||
|
||||
## 句法 (Syntax)
|
||||
|
||||
|
||||
Gen 28:10 <RUBY><ruby><ruby>וַיֵּצֵ֥א<rt>יָצָא</rt></ruby><rt>and went out</rt></ruby><rt>C∙V-Qal-wayyqtl-3ms</rt></RUBY> <RUBY><ruby><ruby>יַעֲקֹ֖ב<rt>יַעֲקֹב</rt></ruby><rt>Jacob</rt></ruby><rt>N-proper-ms</rt></RUBY> <RUBY><ruby><ruby>מִבְּאֵ֣ר<rt>בְּאֵר שֶׁבַע</rt></ruby><rt>from</rt></ruby><rt>Prep</rt></RUBY> <RUBY><ruby><ruby>שָׁ֑בַע<rt>בְּאֵר שֶׁבַע</rt></ruby><rt>Beersheba,</rt></ruby><rt>Prep∙N-proper-fs</rt></RUBY> <RUBY><ruby><ruby>וַיֵּ֖לֶךְ<rt>הָלַךְ</rt></ruby><rt>and went</rt></ruby><rt>C∙V-Qal-wayyqtl-3ms</rt></RUBY> <RUBY><ruby><ruby>חָרָֽנָה׃<rt>חָרָן</rt></ruby><rt>toward Haran.</rt></ruby><rt>N-proper-fs∙3fs</rt></RUBY>
|
||||
|
||||
|
||||
## 解經 (Exegesis)
|
||||
💡😀😢❓❌⭕❗🎀🎗️✳️
|
||||
|
||||
|
||||
## 大綱 (Outline)
|
||||
💡😀😢❓❌⭕❗🎀🎗️✳️
|
||||
|
||||
## 小抄 (memo)
|
||||
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
[講道筆記↵](README.md)
|
||||
|
||||
|
|
@ -147,9 +147,7 @@ tags: #證道 #解經
|
|||
- 事奉 (操練) 需要付出,但不單單只有付出,還有得著;事奉 (操練) 需要犧牲,但不單單只有犧牲,還有收穫;事奉 (操練) 是人的行動,但不單單只是人的行動,更是參與在上帝永恆的計畫當中,與神同工,與基督同行——讓你我活出最有意義的人生!
|
||||
- 為祂名所顯的愛心 = 為主名所做的工 ⇒ 你們的勞苦在主裡面不是徒然的 (林前15:58) ——<strong><font color='red'>再小的服事,神最公平,神都紀念!不論什麼服事,我要殷勤,我要操練!</font></strong>
|
||||
|
||||
## 小抄 (memo)
|
||||
![images/2022-02-13-來6.9–12小抄b.jpg](images/2022-02-13-%E4%BE%866.9%E2%80%9312%E5%B0%8F%E6%8A%84b.jpg)]
|
||||
![images/2022-02-13-來6.9–12小抄a.jpg](images/2022-02-13-%E4%BE%866.9%E2%80%9312%E5%B0%8F%E6%8A%84a.jpg)]
|
||||
## 小抄 (memo)
![images/2022-02-13-Heb.6.9–12小抄b.jpg](images/2022-02-13-Heb.6.9–12小抄b.jpg))]
![images/2022-02-13-Heb.6.9–12小抄a.jpg](images/2022-02-13-Heb.6.9–12小抄a.jpg))]
|
||||
|
||||
|
||||
---
|
||||
|
|
|
@ -6,7 +6,7 @@ tags: #證道 #解經
|
|||
|
||||
---
|
||||
## 圖析
|
||||
![](images/2020-10-18-%E8%B3%BD55.1-7.png)
|
||||
![](images/2020-10-18-Isa.55.1-7.png)
|
||||
|
||||
|
||||
## 大綱
|
||||
|
@ -24,7 +24,7 @@ tags: #證道 #解經
|
|||
|
||||
---
|
||||
## 小抄
|
||||
![](images/2020-10-18-賽55.1–7小抄.jpg)
|
||||
![](images/2020-10-18-Isa.55.1–7小抄.jpg)
|
||||
|
||||
|
||||
---
|
||||
|
|
|
@ -159,7 +159,7 @@ tags: #證道 #解經 #靈命日糧
|
|||
## 小抄 (memo)
|
||||
|
||||
|
||||
![images/2021-05-09-太6.25–34小抄.jpg](images/2021-05-09-%E5%A4%AA6.25%E2%80%9334%E5%B0%8F%E6%8A%84.jpg)
|
||||
![images/2021-05-09-Mat.6.25–34小抄.jpg](images/2021-05-09-Mat.6.25–34小抄.jpg)
|
||||
|
||||
|
||||
---
|
||||
|
|
|
@ -73,8 +73,8 @@
|
|||
- (4) 除非:認識耶穌,唱:主,我願像你!
|
||||
|
||||
## 小抄 (memo)
|
||||
![images/2023-04-30-箴18.8小抄a.jpg](images/2023-04-30-箴18.8小抄a.jpg)
|
||||
![images/2023-04-30-箴18.8小抄b.jpg](images/2023-04-30-箴18.8小抄b.jpg)
|
||||
![images/2023-04-30-Pro.18.8小抄a.jpg](images/2023-04-30-Pro.18.8小抄a.jpg)
|
||||
![images/2023-04-30-Pro.18.8小抄b.jpg](images/2023-04-30-Pro.18.8小抄b.jpg)
|
||||
|
||||
---
|
||||
|
||||
|
|
2
Ps.17.md
|
@ -71,7 +71,7 @@ tags: #證道 #解經
|
|||
|
||||
|
||||
## 小抄 (memo)
|
||||
![images/2021-07-25-詩17小抄.jpg](images/2021-07-25-%E8%A9%A917%E5%B0%8F%E6%8A%84.jpg)
|
||||
![images/2021-07-25-Psa.17小抄.jpg](images/2021-07-25-Psa.17小抄.jpg)
|
||||
|
||||
|
||||
---
|
||||
|
|
|
@ -7,7 +7,7 @@ tags: #證道 #解經
|
|||
## 圖析 (Syntax Diagram)
|
||||
|
||||
|
||||
![](images/2021-02-14%20%E8%A9%A934.1%E2%80%9310a.png)
|
||||
![](images/2021-02-14%20Psa.34.1–10a.png)
|
||||
|
||||
|
||||
## 解經 (Exegesis)
|
||||
|
@ -82,7 +82,7 @@ tags: #證道 #解經
|
|||
-
|
||||
|
||||
## 小抄 (memo)
|
||||
![](images/2021-02-14%20詩34.1–10小抄.jpg)
|
||||
![](images/2021-02-14%20Psa.34.1–10小抄.jpg)
|
||||
|
||||
|
||||
---
|
||||
|
|
4
Ps.81.md
|
@ -6,7 +6,7 @@ tags: #證道 #解經
|
|||
|
||||
|
||||
## 句法圖析 (Syntax Diagram)
|
||||
![images/2021-12-15-詩81圖析.png](images/2021-12-15-詩81圖析.png)
|
||||
![images/2021-12-15-Psa.81圖析.png](images/2021-12-15-Psa.81圖析.png)
|
||||
|
||||
## 解經 (Exegesis) & 大綱 (Outline)
|
||||
#### 先講結論
|
||||
|
@ -95,7 +95,7 @@ tags: #證道 #解經
|
|||
|
||||
## 小抄 (memo)
|
||||
|
||||
![images/2021-12-15-詩81小抄.jpg](images/2021-12-15-詩81小抄.jpg)
|
||||
![images/2021-12-15-Psa.81小抄.jpg](images/2021-12-15-Psa.81小抄.jpg)
|
||||
|
||||
|
||||
---
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
2023-05-28 | 台北衛理堂 | 哥林多前書12:3b-13 | 聖靈的江河 (二) | [林前 12:3b-13](1Co.12.3-13.md)
|
||||
2023-06-25 | 石牌長老教會 | 哥林多前書11章23-28節 | 紀念主的犧牲 (一) |[林前 11:23-32](1Co.11.23-32.md)
|
||||
2023-06-25 | 石牌長老教會 | 哥林多前書11章23-28節 | 紀念主的犧牲 (二) |[林前 11:23-23](1Co.11.23-32.md)
|
||||
2023-07-23 | 台北衛理堂 | 馬太福音13:24-30, 36-43 | 榮耀的盼望 | [太 13:24-30, 36-43](Rom.8.12-25.md)
|
||||
2023-07-23 | 台北衛理堂 | 馬太福音13:24-30, 36-43 | 榮耀的盼望 | [太 13:24-30, 36-43](Rom.8.12-25.md)
|
||||
2023-07-23 | 台北衛理堂 | 創世記28:10-19a | 榮耀的盼望 (一) | [創 28:10-19a](Gen.28.10-19.md)
|
||||
2023-07-23 | 台北衛理堂 | 羅馬書 8:12-25 | 榮耀的盼望 (二) | [羅 8:12-25](Rom.8.12-25.md)
|
||||
|
||||
## 2022
|
||||
日期 | 教會 | 經文 | 題目 | 大綱
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
經文:馬太福音13:24-30, 36-43
|
||||
題目:榮樣的盼望
|
||||
經文:羅馬書8:12-25
|
||||
題目:榮耀的盼望 (二)
|
||||
日期:2023-07-23
|
||||
教會:台北衛理堂
|
||||
|
||||
經課一:創世記28:10-19a(舊約33頁)
|
||||
啟應文:詩篇139:1-12, 23-24(舊約760頁)
|
||||
經課二:羅馬書8:12-25(新約217頁)
|
||||
福音書:馬太福音13:24-30, 36-43 (新約18頁)
|
||||
![images/2023-07-23.lectionary.png](images/2023-07-23.lectionary.png)
|
||||
|
||||
## 句法 (Syntax)
|
||||
|
||||
|
@ -30,10 +27,10 @@
|
|||
- ———————————
|
||||
- 8:17a <RUBY><ruby><ruby>εἰ<rt>εἰ</rt></ruby><rt>If</rt></ruby><rt>CONJ</rt></RUBY> <RUBY><ruby><ruby>δὲ<rt>δέ</rt></ruby><rt>now</rt></ruby><rt>CONJ</rt></RUBY> (<RUBY><ruby><ruby>τέκνα,<rt>τέκνον</rt></ruby><rt>children</rt></ruby><rt>N-NPN</rt></RUBY>)C
|
||||
- 8:17b (<RUBY><ruby><ruby>καὶ<rt>καί</rt></ruby><rt>also</rt></ruby><rt>CONJ</rt></RUBY>)A (<RUBY><ruby><ruby>κληρονόμοι·<rt>κληρονόμος</rt></ruby><rt>heirs</rt></ruby><rt>N-NPM</rt></RUBY>)C
|
||||
- 8:17e (<RUBY><ruby><ruby>κληρονόμοι<rt>κληρονόμος</rt></ruby><rt>heirs</rt></ruby><rt>N-NPM</rt></RUBY>)⦇ <RUBY><ruby><ruby>μὲν<rt>μέν</rt></ruby><rt>indeed</rt></ruby><rt>PRT</rt></RUBY> ⦈(<RUBY><ruby><ruby>Θεοῦ,<rt>θεός</rt></ruby><rt>of God</rt></ruby><rt>N-GSM</rt></RUBY>)C
|
||||
- 8:17f (<RUBY><ruby><ruby>συνκληρονόμοι<rt>συγκληρονόμος</rt></ruby><rt>joint-heirs</rt></ruby><rt>A-NPM</rt></RUBY>)⦇ <RUBY><ruby><ruby>δὲ<rt>δέ</rt></ruby><rt>now</rt></ruby><rt>CONJ</rt></RUBY> (<RUBY><ruby><ruby>Χριστοῦ,<rt>Χριστός</rt></ruby><rt>of Christ</rt></ruby><rt>N-GSM-T</rt></RUBY>)C ...<mark>**ἐσμέν°²**</mark> ...
|
||||
- 8:17g { <RUBY><ruby><ruby>εἴπερ<rt>εἴπερ</rt></ruby><rt>if indeed</rt></ruby><rt>CONJ</rt></RUBY> (<RUBY><ruby><ruby><strong>συμπάσχομεν</strong><rt>συμπάσχω</rt></ruby><rt>we suffer with [Him]</rt></ruby><rt>V-PAI-1P</rt></RUBY>)P }A°²⮥
|
||||
- 8:18h {<RUBY><ruby><ruby>ἵνα<rt>ἵνα</rt></ruby><rt>so that</rt></ruby><rt>CONJ</rt></RUBY> (<RUBY><ruby><ruby>καὶ<rt>καί</rt></ruby><rt>also</rt></ruby><rt>CONJ</rt></RUBY>)A (<RUBY><ruby><ruby><strong><strong>συνδοξασθῶμεν.¶</strong></strong><rt>συνδοξάζω</rt></ruby><rt>we may be glorified together</rt></ruby><rt>V-APS-1P</rt></RUBY>)P }A°²⮥
|
||||
- 8:17c (<RUBY><ruby><ruby>κληρονόμοι<rt>κληρονόμος</rt></ruby><rt>heirs</rt></ruby><rt>N-NPM</rt></RUBY>)⦇ <RUBY><ruby><ruby>μὲν<rt>μέν</rt></ruby><rt>indeed</rt></ruby><rt>PRT</rt></RUBY> ⦈(<RUBY><ruby><ruby>Θεοῦ,<rt>θεός</rt></ruby><rt>of God</rt></ruby><rt>N-GSM</rt></RUBY>)C
|
||||
- 8:17d (<RUBY><ruby><ruby>συνκληρονόμοι<rt>συγκληρονόμος</rt></ruby><rt>joint-heirs</rt></ruby><rt>A-NPM</rt></RUBY>)⦇ <RUBY><ruby><ruby>δὲ<rt>δέ</rt></ruby><rt>now</rt></ruby><rt>CONJ</rt></RUBY> (<RUBY><ruby><ruby>Χριστοῦ,<rt>Χριστός</rt></ruby><rt>of Christ</rt></ruby><rt>N-GSM-T</rt></RUBY>)C ...<mark>**ἐσμέν°²**</mark> ...
|
||||
- 8:17e { <RUBY><ruby><ruby>εἴπερ<rt>εἴπερ</rt></ruby><rt>if indeed</rt></ruby><rt>CONJ</rt></RUBY> (<RUBY><ruby><ruby><strong>συμπάσχομεν</strong><rt>συμπάσχω</rt></ruby><rt>we suffer with [Him]</rt></ruby><rt>V-PAI-1P</rt></RUBY>)P }A°²⮥
|
||||
- 8:17f {<RUBY><ruby><ruby>ἵνα<rt>ἵνα</rt></ruby><rt>so that</rt></ruby><rt>CONJ</rt></RUBY> (<RUBY><ruby><ruby>καὶ<rt>καί</rt></ruby><rt>also</rt></ruby><rt>CONJ</rt></RUBY>)A (<RUBY><ruby><ruby><strong><strong>συνδοξασθῶμεν.¶</strong></strong><rt>συνδοξάζω</rt></ruby><rt>we may be glorified together</rt></ruby><rt>V-APS-1P</rt></RUBY>)P }A°²⮥
|
||||
- ═════════════
|
||||
- 8:18a (<RUBY><ruby><ruby><strong><strong>Λογίζομαι</strong></strong><rt>λογίζομαι</rt></ruby><rt>I reckon</rt></ruby><rt>V-PNI-1S</rt></RUBY>)P <RUBY><ruby><ruby>γὰρ<rt>γάρ</rt></ruby><rt>for</rt></ruby><rt>CONJ</rt></RUBY>
|
||||
- 8:18b <RUBY><ruby><ruby>ὅτι<rt>ὅτι</rt></ruby><rt>that</rt></ruby><rt>CONJ</rt></RUBY> <RUBY><ruby><ruby>οὐκ<rt>οὐ</rt></ruby><rt>not</rt></ruby><rt>PRT-N</rt></RUBY> (<RUBY><ruby><ruby>ἄξια<rt>ἄξιος</rt></ruby><rt>comparable</rt></ruby><rt>A-NPN</rt></RUBY>)C (<RUBY><ruby><ruby>τὰ<rt>ὁ</rt></ruby><rt>the</rt></ruby><rt>T-NPN</rt></RUBY> <RUBY><ruby><ruby>παθήματα<rt>πάθημα</rt></ruby><rt>sufferings</rt></ruby><rt>N-NPN</rt></RUBY> ‹<RUBY><ruby><ruby>τοῦ<rt>ὁ</rt></ruby><rt>of the</rt></ruby><rt>T-GSM</rt></RUBY> <RUBY><ruby><ruby>νῦν<rt>νῦν</rt></ruby><rt>present</rt></ruby><rt>ADV</rt></RUBY> <RUBY><ruby><ruby>καιροῦ<rt>καιρός</rt></ruby><rt>time [are]</rt></ruby><rt>N-GSM</rt></RUBY>›)S {<RUBY><ruby><ruby>πρὸς<rt>πρός</rt></ruby><rt>to</rt></ruby><rt>PREP</rt></RUBY> <RUBY><ruby><ruby>τὴν<rt>ὁ</rt></ruby><rt>the</rt></ruby><rt>T-ASF</rt></RUBY> <RUBY><ruby><ruby><em><em>μέλλουσαν</em></em><rt>μέλλω</rt></ruby><rt>coming</rt></ruby><rt>V-PAP-ASF</rt></RUBY> <RUBY><ruby><ruby>δόξαν<rt>δόξα</rt></ruby><rt>glory</rt></ruby><rt>N-ASF</rt></RUBY> (<RUBY><ruby><ruby><em>ἀποκαλυφθῆναι</em><rt>ἀποκαλύπτω</rt></ruby><rt>to be revealed</rt></ruby><rt>V-APN</rt></RUBY> <RUBY><ruby><ruby>εἰς<rt>εἰς</rt></ruby><rt>to</rt></ruby><rt>PREP</rt></RUBY> <RUBY><ruby><ruby>ἡμᾶς.<rt>ἐγώ</rt></ruby><rt>us</rt></ruby><rt>P-1AP</rt></RUBY>) }A
|
||||
|
@ -79,7 +76,7 @@
|
|||
- 越來越活 ⇒ 身分轉變:是神的兒女 (υἱοί Θεοῦ)!
|
||||
- 不是奴僕 (πνεῦμα δουλείας) ⇒ 害怕被主人責打 😢
|
||||
- 而是 (πνεῦμα υἱοθεσίας) = 羅馬法律上「被收養的兒子」(BAGD) ⇒ 不必害怕,即便達不到父親期待,也可以大聲呼喊『Ἀββᾶ ὁ Πατήρ』!
|
||||
- 💡孩子一聲『爸爸!』裡面包含了多少涵義!!
|
||||
- 💡<mark>孩子一聲『爸爸!』裡面包含了多少涵義!!</mark>
|
||||
- 何以知道自己身分轉變?⇐ 聖靈掛保證 (8:16)
|
||||
- 8:17-18
|
||||
- 越來越活 ⇒ 身分轉變 ⇒ 領受產業 (κληρονόμοι 繼承者) ⇒ 與基督一同承受產業 (συνκληρονόμοι)
|
||||
|
|
|
@ -150,7 +150,7 @@ tags: #證道 #解經 #靈命日糧
|
|||
|
||||
## 小抄 (memo)
|
||||
|
||||
![images/2021-05-08-羅8.1–17小抄.jpg](images/2021-05-08-%E7%BE%858.1%E2%80%9317%E5%B0%8F%E6%8A%84.jpg)
|
||||
![images/2021-05-08-Rom.8.1–17小抄.jpg](images/2021-05-08-Rom.8.1–17小抄.jpg)
|
||||
|
||||
|
||||
---
|
||||
|
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 997 KiB After Width: | Height: | Size: 997 KiB |
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.6 MiB |
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 3.8 MiB After Width: | Height: | Size: 3.8 MiB |
Before Width: | Height: | Size: 753 KiB After Width: | Height: | Size: 753 KiB |
Before Width: | Height: | Size: 332 KiB After Width: | Height: | Size: 332 KiB |
Before Width: | Height: | Size: 526 KiB After Width: | Height: | Size: 526 KiB |
Before Width: | Height: | Size: 882 KiB After Width: | Height: | Size: 882 KiB |
Before Width: | Height: | Size: 676 KiB After Width: | Height: | Size: 676 KiB |
Before Width: | Height: | Size: 6.2 MiB After Width: | Height: | Size: 6.2 MiB |
Before Width: | Height: | Size: 340 KiB After Width: | Height: | Size: 340 KiB |
Before Width: | Height: | Size: 392 KiB After Width: | Height: | Size: 392 KiB |
Before Width: | Height: | Size: 364 KiB After Width: | Height: | Size: 364 KiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 720 KiB After Width: | Height: | Size: 720 KiB |
Before Width: | Height: | Size: 416 KiB After Width: | Height: | Size: 416 KiB |
Before Width: | Height: | Size: 399 KiB After Width: | Height: | Size: 399 KiB |
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 198 KiB |
Before Width: | Height: | Size: 379 KiB After Width: | Height: | Size: 379 KiB |
Before Width: | Height: | Size: 432 KiB After Width: | Height: | Size: 432 KiB |
Before Width: | Height: | Size: 590 KiB After Width: | Height: | Size: 590 KiB |
Before Width: | Height: | Size: 347 KiB After Width: | Height: | Size: 347 KiB |
Before Width: | Height: | Size: 232 KiB After Width: | Height: | Size: 232 KiB |
Before Width: | Height: | Size: 292 KiB After Width: | Height: | Size: 292 KiB |
Before Width: | Height: | Size: 399 KiB After Width: | Height: | Size: 399 KiB |
Before Width: | Height: | Size: 388 KiB After Width: | Height: | Size: 388 KiB |
Before Width: | Height: | Size: 6.5 MiB After Width: | Height: | Size: 6.5 MiB |
Before Width: | Height: | Size: 292 KiB After Width: | Height: | Size: 292 KiB |
Before Width: | Height: | Size: 402 KiB After Width: | Height: | Size: 402 KiB |
After Width: | Height: | Size: 260 KiB |
|
@ -4,11 +4,13 @@
|
|||
教會:
|
||||
|
||||
|
||||
## 句法 (Syntax)
|
||||
## 句法圖析 (Syntax Diagram)
|
||||
|
||||
|
||||
## 解經 (Exegesis)
|
||||
💡😀😢❓❌⭕❗🎀🎗️✳️
|
||||
|
||||
## 語意結構圖析 (Semantic Stucture Diagram)
|
||||
|
||||
## 大綱 (Outline)
|
||||
💡😀😢❓❌⭕❗🎀🎗️✳️
|
||||
|
|