Скрипт Google Doc, капитализировать предложения без удаления других атрибутов
Я хочу создать сценарий для заглавных букв предложений в документе Google, но без изменения существующих атрибутов в определенных словах. например, в документе Google было бы несколько параграфов, каждый из которых имеет несколько предложений. в таком google doc были бы гиперссылки, слова вполужирный, слова вкурсив, слова с подчеркиванием и т. д. Я хочу, чтобы все эти атрибуты остались без изменений; скрипт должен использовать только заглавные буквы предложений, не удаляя существующие атрибуты для этих слов.
я написал следующий скрипт Google Doc, который сделал работу с точки зрения заглавных букв предложений, но скрипт удалил все атрибуты в других словах (гиперссылки, полужирный шрифт, курсив, подчеркивание), как упомянуто выше.
function cap12() {
// define function "replacement" to change the matched pattern to uppercase
function replacement(match) { return match.toUpperCase(); }
// define regex "period, followed by zero or any number
// of blank spaces, followed by any lowercase character"
var regex1 = "(^|\.)(\s*)[a-z]";
var regex2 = /(^|\.)(\s*)[a-z]/;
// Logger.log(regex1, regex2);
// get text matching pattern "regex"
var body = DocumentApp.getActiveDocument().getBody();
var foundElement = body.findText(regex1);
// Logger.log(foundElement);
while (foundElement != null) {
// Get the text object from the element
var foundText = foundElement.getElement().asText();
// capitalize the character after the period
var str1 = foundText.getText();
var str2 = str1.replace(regex2, replacement);
foundText.setText(str2);
// Find the next match
foundElement = body.findText(regex1, foundElement);
}
}
Я ценю любую помощь, чтобы указать на мои ошибки. благодарю вас.
ПРИМЕЧАНИЕ: приведенный выше скрипт cap12 является продолжением моего проекта по разработке скрипта Google для заглавных букв предложений, как описано в посте.Скрипт Google Doc для заглавных предложений, окончательный сценарий cap7 в этом посте работал только локально над выделенным текстом (т.е. не над всем документом), но также удалял все атрибуты, такие как гиперссылки, полужирный шрифт, курсив, подчеркивание.
читая соответствующие посты, перечисленные в правом столбце, более или менее случайным образом, руководствуясь, возможно, инстинктом, я наткнулся на хороший сценарий, который, вероятно, был написан профессионалом, из которого новички (как я) могли бы многому научиться. поэтому я описал то, что я сделал ниже, на случай, если кому-то будет интересно.
из поста, относящегося к моему нынешнему посту, под названиемGoogle Apps Script / поиск по Javascript и замена на регулярные выражения не работаютя заметил еще один связанный постНайти и изменить неизвестные строки в верхний регистр в документе Google Apps Script с помощью JS, в котором был очень хороший код, опубликованныйMogsdad, сначала, читая обсуждение, я подумал, что должен попытаться понять этот код, опубликованный в ответеMogsdad.
Затем я заметил предложение «Следующий скрипт является частью дополнения документа, источник доступен вэтот смысл, вchangeCase.js
"(мне все еще нужно выяснить, что означает" gist "; что-то, связанное с GitHub. Хорошо," gist "объясняется в постеВ чем разница между github и gist? [закрыто].)
поэтому я посмотрел на ссылкуэтот смысли действительно я нашел сценарийchangeCase.js
это содержало ПОЧТИ то, что я пытался развить (то есть, «Дело о приговоре»; некоторые проблемы описаны ниже):
changeCase.js - Document add-in, provides case-change operations in the add-in Menu.
onOpen - installs "Change Case" menu
_changeCase - worker function to locate selected text and change text case. Case conversion is managed via callback to a function that accepts a string as a parameter and returns the converted string.
helper functions for five cases
UPPER CASE
lower case
Title Case
Sentence case
camelCase
Fountain-lite, screenplay formatting - see http://fountain.io/
это был потрясающий код; Мне потребовалось бы много времени, чтобы достичь этого уровня, чтобы разработать такой код.
я установил скриптchangeCase.js
в моем Google Doc, закрыли Google Doc, чтобы открыть его снова, чтобы активировать надстройкуchangeCase.js
, затем я проверил вариант «Приговор»; скрипт работал хорошо в том смысле, что я мог выбрать текст, в котором я хотел использовать заглавные буквы, избегая слов с особым форматированием, таких как жирный шрифт, курсив, подчеркивание и т. д.
но когда я выбрал текст, содержащий слова, выделенные жирным шрифтом (и / или курсивом, и / или подчеркиванием), атрибут boldface будет удален (точно такая же проблема, которую я хотел решить). так что сценарийchangeCase.js
не решил мою проблему, но предоставил обходной путь.
сценарийchangeCase.js
работал только локально на выделенном тексте, тогда как скриптcap7
в моем постеСкрипт Google Doc для заглавных предложений, который работал на весь абзац, хотя я выбрал только часть абзаца.
другими словами, я мог бы изменить свой сценарийcap7
работать как сценарий «Вариант предложения»changeCase.js
, Я считаю, что проблема заключалась в том, что я выполнял «глобальный» поиск и замену вместо «локального» поиска и замены в выделенном тексте.
проблема с опцией "Case Sentence Case"changeCase.js
было то, что он преобразовал в нижний регистр все символы в выделенном тексте, что было не тем, что я хочу, поскольку были символы, которые я хотел сохранить в верхнем регистре (например, имена людей и т. д.). я хотел использовать только заглавные буквы в выделенном тексте, не изменяя ничего в этих предложениях.
чтобы сделать то, что я описал выше, просто удалите метод "toLowerCase" в коде:
// https://stackoverflow.com/a/19089667/1677912
function _toSentenceCase (str) {
var rg = /(^\s*\w{1}|\.\s*\w{1})/gi;
return str.toLowerCase().replace(rg, function(toReplace) {
return toReplace.toUpperCase();
});
}
то есть используйте следующий модифицированный код:
function _toSentenceCase (str) {
var rg = /(^\s*\w{1}|\.\s*\w{1})/gi;
return str.replace(rg, function(toReplace) {
return toReplace.toUpperCase();
});
}
это сработало.
Еще одна проблема со скриптомchangeCase.js
было то, что он работал только по одному абзацу за раз, что не так эффективно.
Я хотел разработать сценарий, который будет работать со всем документом, без удаления существующих атрибутов (гиперссылки, полужирный шрифт, курсив, подчеркивание).
Я ценю, если кто-то может указать на ошибки / проблемы в моем сценарииcap12b
в постеGoogle Doc скрипт, атрибуты (жирный, курсив, подчеркивание) не отображаются в журнале.